Module: Minenum::Model::AccessorAdder

Defined in:
lib/minenum/model.rb

Overview

:nodoc:

Class Method Summary collapse

Class Method Details

.add(model_class, methods_module, reflections, reflection) ⇒ Object



37
38
39
40
41
42
43
44
45
# File 'lib/minenum/model.rb', line 37

def add(model_class, methods_module, reflections, reflection)
  add_singleton_method(model_class, reflection, reflection.name)
  add_enum_method(methods_module, reflections) unless methods_module.method_defined?(:_minenum_enum)

  add_getter(methods_module, reflection.name)
  add_setter(methods_module, reflection.name)

  reflections[reflection.name] = reflection
end

.add_enum_method(methods_module, reflections) ⇒ Object



54
55
56
57
58
59
60
61
62
# File 'lib/minenum/model.rb', line 54

def add_enum_method(methods_module, reflections)
  methods_module.module_eval do
    define_method(:_minenum_enum) do |name|
      @_minenum_enum ||= {}
      @_minenum_enum[name.to_sym] ||= reflections[name.to_sym].build_enum(self)
    end
    private :_minenum_enum
  end
end

.add_getter(methods_module, name) ⇒ Object



65
66
67
68
69
70
71
# File 'lib/minenum/model.rb', line 65

def add_getter(methods_module, name)
  methods_module.module_eval <<~RUBY, __FILE__, __LINE__ + 1
    def #{name}                 # def size
      _minenum_enum(:'#{name}') #   _minenum_enum(:'size')
    end                         # end
  RUBY
end

.add_setter(methods_module, name) ⇒ Object



73
74
75
76
77
78
79
# File 'lib/minenum/model.rb', line 73

def add_setter(methods_module, name)
  methods_module.module_eval <<~RUBY, __FILE__, __LINE__ + 1
    def #{name}=(value)                       # def size=(value)
      _minenum_enum(:'#{name}').value = value #   _minenum_enum(:'size').value = value
    end                                       # end
  RUBY
end

.add_singleton_method(model_class, reflection, name) ⇒ Object



48
49
50
51
52
# File 'lib/minenum/model.rb', line 48

def add_singleton_method(model_class, reflection, name)
  model_class.singleton_class.define_method(name) do
    reflection.enum_class
  end
end