discourse/app/models/color_scheme.rb

64 lines
1.5 KiB
Ruby

class ColorScheme < ActiveRecord::Base
has_many :color_scheme_colors, -> { order('id ASC') }, dependent: :destroy
alias_method :colors, :color_scheme_colors
scope :current_version, ->{ where(versioned_id: nil) }
after_destroy :destroy_versions
def self.enabled
current_version.find_by(enabled: true) || find(1)
end
def can_edit?
self.id != 1 # base theme shouldn't be edited, except by seed data
end
def colors=(arr)
@colors_by_name = nil
arr.each do |c|
self.color_scheme_colors << ColorSchemeColor.new(
name: c[:name],
hex: c[:hex],
opacity: c[:opacity].to_i
)
end
end
def colors_by_name
@colors_by_name ||= self.colors.inject({}) { |sum,c| sum[c.name] = c; sum; }
end
def clear_colors_cache
@colors_by_name = nil
end
def colors_hashes
color_scheme_colors.map do |c|
{name: c.name, hex: c.hex, opacity: c.opacity}
end
end
def previous_version
ColorScheme.where(versioned_id: self.id).where('version < ?', self.version).order('version DESC').first
end
def destroy_versions
ColorScheme.where(versioned_id: self.id).destroy_all
end
end
# == Schema Information
#
# Table name: color_schemes
#
# id :integer not null, primary key
# name :string(255) not null
# enabled :boolean default(FALSE), not null
# versioned_id :integer
# version :integer default(1), not null
# created_at :datetime
# updated_at :datetime
#