lib/memory_model/base/fields.rb
require 'active_support/concern'
require 'active_support/dependencies/autoload'
require 'securerandom'
module MemoryModel
class Base
module Fields
extend ConcernedInheritance
extend ActiveSupport::Concern
extend ActiveSupport::Autoload
include ActiveModel::AttributeMethods
autoload :FieldSet
autoload :Field
inherited do
instance_variable_set :@fields, baseclass.fields
end
module ClassMethods
def field(attr, options={})
define_attribute_method attr unless instance_method_already_implemented? attr
fields.add(attr.to_sym, options)
class_eval <<-RUBY, __FILE__, __LINE__ + 1
def #{attr}
read_attribute :#{attr}
end
def #{attr}=(value)
write_attribute :#{attr}, value
end
RUBY
end
def fields
return nil if self == MemoryModel::Base
@fields ||= FieldSet.new
end
end
def fields
self.class.fields
end
end
end
end