16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
# File 'lib/symbolic_attribute/concern.rb', line 16
def symbolic_attribute(attr, opts = {})
define_method attr do
val = read_attribute(attr)
val.to_sym unless val.blank?
end
if opts.symbolize_keys!.key?(:values)
class_attr_name = attr.to_s.pluralize
class_attribute class_attr_name, :instance_reader => false, :instance_writer => false
send "#{class_attr_name}=", opts.delete(:values).map(&:to_sym)
validates attr, opts.merge(:inclusion => { :in => proc{|instance| instance.class.send(class_attr_name)} })
define_singleton_method "human_#{attr}" do |val, options={}|
options = { :count => 1 }.merge!(options)
defaults = lookup_ancestors.map do |klass|
:"#{self.i18n_scope}.symbolic_attributes.#{klass.model_name.i18n_key}.#{attr}.#{val}"
end
defaults << options.delete(:default) if options[:default]
defaults << val.to_s.humanize
options[:default] = defaults
I18n.translate(defaults.shift, options)
end
define_method "human_#{attr}" do |options = {}|
self.class.send "human_#{attr}", send(attr), options
end
end
end
|