Module: Labelizer::ClassMethods

Defined in:
lib/labelizer.rb

Instance Method Summary collapse

Instance Method Details

#labelize(attr, labels, converter: {}) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/labelizer.rb', line 11

def labelize(attr, labels, converter: {})
  @labelizer_converters ||= {}
  @labelizer_converters[attr.to_sym] = converter

  define_method :"#{attr}_labelized" do
    self.class.labelized[attr][__send__(attr)]
  end

  labels.each do |label|
    define_method :"#{attr}_#{label}" do
      self.class.labelized[attr][__send__(attr)][label]
    end
  end
end

#labelizedObject



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/labelizer.rb', line 25

def labelized
  model = model_name.i18n_key
  @labelized ||= Hash.new{|h,attr|
    converters = @labelizer_converters && @labelizer_converters[attr.to_sym]
    h[attr] = Hash.new{|h,value|
      h[value] = Hash.new{|h,label|
        result = ::I18n.translate(
          "labelizer.#{model}.#{attr}.#{value}.#{label}",
          default: [
            :"labelizer.#{model}.#{attr}.#{label}",
            :"labelizer.#{model}.#{label}",
            :"labelizer.#{label}",
            value,
          ],
          raise: true,
        ) rescue value
        if converter = converters && converters[label.to_sym]
          result = converter[result]
        end
        h[value] = result
      }
    }
  }
end