Class: ActiveAdmin::Mongoid::Localize::Field

Inherits:
Object
  • Object
show all
Extended by:
ActiveModel::Naming
Defined in:
lib/activeadmin-mongoid-localize/field.rb

Constant Summary collapse

@@validators =
{}
@@model =
nil

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(obj, name) ⇒ Field

Returns a new instance of Field.



15
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
# File 'lib/activeadmin-mongoid-localize/field.rb', line 15

def initialize(obj, name)
  @obj = obj
  @@model = obj.class
  @field = name
  @@validators[@field] = @obj.class.validators_on(name.to_sym)
  @required = @@validators[@field].map(&:class).map(&:name).include? 'Mongoid::Validations::PresenceValidator'
  @errors = ActiveModel::Errors.new(self)
  hash = @obj.send("#{name}_translations")

  ::ActiveAdmin::Mongoid::Localize.locales.each do |k|
    inst_var_name = clean_locale(k) 
    ## create the getter that returns the instance variable
    self.class.send(:define_method, k, proc{self.instance_variable_get("@#{inst_var_name}")})

    ## create the setter that sets the instance variable
    self.class.send(:define_method, "#{k}=", proc{|v| self.instance_variable_set("@#{inst_var_name}", v)})

    ## create and initialize an instance variable for this key/value pair
    self.instance_variable_set("@#{inst_var_name}", '')
  end

  hash.each do |k,v|
    ## create and initialize an instance variable for this key/value pair
    inst_var_name = k.to_s.gsub('-','_')
    self.instance_variable_set("@#{inst_var_name}", v)
  end

  def @obj.before_validation
    validate!
  end
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(*args) ⇒ Object



69
70
71
# File 'lib/activeadmin-mongoid-localize/field.rb', line 69

def method_missing(*args)
  @obj.send(*args)
end

Class Method Details

.before_validationObject



42
43
44
# File 'lib/activeadmin-mongoid-localize/field.rb', line 42

def @obj.before_validation
  validate!
end

.human_attribute_name(*args) ⇒ Object



81
82
83
# File 'lib/activeadmin-mongoid-localize/field.rb', line 81

def self.human_attribute_name(*args)
  @@model.send(:human_attribute_name, *args)
end

.validators_on(attributized_method_name) ⇒ Object



77
78
79
# File 'lib/activeadmin-mongoid-localize/field.rb', line 77

def self.validators_on(attributized_method_name)
  @@validators[attributized_method_name].nil? ? [] : @@validators[attributized_method_name]
end

Instance Method Details

#clean_locale(locale) ⇒ Object



11
12
13
# File 'lib/activeadmin-mongoid-localize/field.rb', line 11

def clean_locale(locale)
  locale.to_s.gsub('-','_')
end

#column_for_attribute(name) ⇒ Object



64
65
66
67
# File 'lib/activeadmin-mongoid-localize/field.rb', line 64

def column_for_attribute(name)
  # we only have one column for all locales
  @obj.fields[@field]
end

#errorsObject



51
52
53
54
# File 'lib/activeadmin-mongoid-localize/field.rb', line 51

def errors
  validate! if @obj.errors.any?
  @errors
end

#required?Boolean

Returns:

  • (Boolean)


47
48
49
# File 'lib/activeadmin-mongoid-localize/field.rb', line 47

def required?
  @required
end

#respond_to?(method_name, include_private = false) ⇒ Boolean

Returns:

  • (Boolean)


73
74
75
# File 'lib/activeadmin-mongoid-localize/field.rb', line 73

def respond_to?(method_name, include_private = false)
  @obj.respond_to?(method_name, include_private)
end

#validate!Object



56
57
58
59
60
61
62
# File 'lib/activeadmin-mongoid-localize/field.rb', line 56

def validate!
  ::ActiveAdmin::Mongoid::Localize.locales.each do |k|
    if @required && send(k).blank?
      @errors.add(k, I18n.t('errors.messages.blank'))
    end
  end
end