module AttrValueObject

Constants

VERSION

Public Instance Methods

attr_value_object(name, options = {}) click to toggle source
# File lib/attr_value_object.rb, line 5
def attr_value_object(name, options = {})
      klass = Object.const_get(options.fetch(:class_name, name.to_s.camelize))

      define_method(name) do
                      mappings = methods.map { |m| m.match(/\A#{name}_([0-9a-z_]+)\z/).try { |match| [m, match[1]] } }.compact
                      params = {}
                      mappings.each do |source, target|
                              params[target.to_sym] = send(source.to_sym)
                      end
                      klass.new(params)
      end

      define_method("#{name}=") do |obj|
    mappings = methods.map { |m| m.match(/\A#{name}_([0-9a-z_]+)=\z/).try { |match| [m, match[1]] } }.compact
    mappings.each do |source, target|
      send(source, obj.send(target))
    end
    obj
      end
end