Sha256: 33e44b1eee86f379c20edf2b7f843cbb0f4f60ae9bc2b4c911559320555dec23

Contents?: true

Size: 1.4 KB

Versions: 2

Compression:

Stored size: 1.4 KB

Contents

module TestModel
  extend  ActiveSupport::Concern

  included do
    extend  ActiveModel::Translation
    include ActiveModel::Validations
    include ActiveModel::AttributeMethods
    include DynamicMethods

    attribute_method_suffix ""
    attribute_method_suffix "="
    cattr_accessor :model_attributes
  end

  module ClassMethods
    def define_method_attribute=(attr_name)
      generated_attribute_methods.module_eval("def #{attr_name}=(new_value); @attributes['#{attr_name}']=new_value ; end", __FILE__, __LINE__)
    end

    def define_method_attribute(attr_name)
      generated_attribute_methods.module_eval("def #{attr_name}; @attributes['#{attr_name}']; end", __FILE__, __LINE__)
    end
  end

  module DynamicMethods
    def method_missing(method_id, *args, &block)
      if !self.class.attribute_methods_generated?
        self.class.define_attribute_methods self.class.model_attributes.map(&:to_s)
        method_name = method_id.to_s
        send(method_id, *args, &block)
      else
        super
      end
    end
  end

  def initialize(attributes = nil)
    @attributes = self.class.model_attributes.inject({}) do |hash, column|
      hash[column.to_s] = nil
      hash
    end
    self.attributes = attributes unless attributes.nil?
  end

  def attributes
    @attributes.keys
  end

  def attributes=(new_attributes={})
    new_attributes.each do |key, value|
      send "#{key}=", value
    end
  end

end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
validates_timeliness-3.0.0.beta.2 spec/test_model.rb
validates_timeliness-3.0.0.beta spec/test_model.rb