Class: ThemeModifierSet

Inherits:
ActiveRecord::Base
  • Object
show all
Defined in:
app/models/theme_modifier_set.rb

Defined Under Namespace

Classes: ThemeModifierSetError

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.modifiersObject



8
9
10
# File 'app/models/theme_modifier_set.rb', line 8

def self.modifiers
  @modifiers ||= self.load_modifiers
end

.resolve_modifier_for_themes(theme_ids, modifier_name) ⇒ Object

Given the ids of multiple active themes / theme components, this function will combine them into a ‘resolved’ behavior



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'app/models/theme_modifier_set.rb', line 36

def self.resolve_modifier_for_themes(theme_ids, modifier_name)
  return nil if !(config = self.modifiers[modifier_name])

  all_values =
    self
      .where(theme_id: theme_ids)
      .where.not(modifier_name => nil)
      .map { |s| s.public_send(modifier_name) }
  case config[:type]
  when :boolean
    all_values.any?
  when :string_array
    all_values.flatten(1)
  else
    raise ThemeModifierSetError "Invalid theme modifier combine_mode"
  end
end

Instance Method Details

#topic_thumbnail_sizesObject



54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'app/models/theme_modifier_set.rb', line 54

def topic_thumbnail_sizes
  array = read_attribute(:topic_thumbnail_sizes)

  return if array.nil?

  array
    .map do |dimension|
      parts = dimension.split("x")
      next if parts.length != 2
      [parts[0].to_i, parts[1].to_i]
    end
    .filter(&:present?)
end

#topic_thumbnail_sizes=(val) ⇒ Object



68
69
70
71
72
73
74
75
76
# File 'app/models/theme_modifier_set.rb', line 68

def topic_thumbnail_sizes=(val)
  return write_attribute(:topic_thumbnail_sizes, val) if val.nil?
  return write_attribute(:topic_thumbnail_sizes, val) if !val.is_a?(Array)
  if !val.all? { |v| v.is_a?(Array) && v.length == 2 }
    return write_attribute(:topic_thumbnail_sizes, val)
  end

  super(val.map { |dim| "#{dim[0]}x#{dim[1]}" })
end

#type_validatorObject



14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'app/models/theme_modifier_set.rb', line 14

def type_validator
  ThemeModifierSet.modifiers.each do |k, config|
    value = read_attribute(k)
    next if value.nil?

    case config[:type]
    when :boolean
      next if [true, false].include?(value)
    when :string_array
      next if value.is_a?(Array) && value.all? { |v| v.is_a?(String) }
    end
    errors.add(k, :invalid)
  end
end