Method: Sequel::Plugins::Composition::ClassMethods#define_composition_accessor

Defined in:
lib/sequel/plugins/composition.rb

#define_composition_accessor(name, opts = OPTS) ⇒ Object

Define getter and setter methods for the composition object.



132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
# File 'lib/sequel/plugins/composition.rb', line 132

def define_composition_accessor(name, opts=OPTS)
  composer_meth = opts[:composer_method] = Plugins.def_sequel_method(@composition_module, "#{name}_composer", 0, &opts[:composer])
  opts[:decomposer_method] = Plugins.def_sequel_method(@composition_module, "#{name}_decomposer", 0, &opts[:decomposer])
  @composition_module.class_eval do
    define_method(name) do 
      if compositions.has_key?(name)
        compositions[name]
      elsif frozen?
        # composer_meth is private
        send(composer_meth)
      else
        compositions[name] = send(composer_meth)
      end
    end
    alias_method(name, name)

    meth = :"#{name}="
    define_method(meth) do |v|
      modified!
      compositions[name] = v
    end
    alias_method(meth, meth)
  end
end