Sha256: 4ed566fb14233046a3b16ca415405a7ad26fa8b4665747b1b57538506c53924f
Contents?: true
Size: 1.71 KB
Versions: 2
Compression:
Stored size: 1.71 KB
Contents
require 'set' require 'son_jay/object_model/properties' require 'son_jay/object_model/property_definition' require 'son_jay/object_model/properties_definer' module SonJay class ObjectModel include ActsAsModel class << self def properties(&property_initializations) @property_initializations = property_initializations end def property_definitions @property_definitions ||= nil return @property_definitions if @property_definitions definitions = [] definer = PropertiesDefiner.new(definitions) definer.instance_eval &@property_initializations @property_definitions = definitions validate_model_dependencies! definitions.each do |d| name = d.name class_eval <<-CODE def #{name} ; sonj_content[#{name.inspect}] ; end def #{name}=(value) ; sonj_content[#{name.inspect}] = value ; end CODE end @property_definitions end private def validate_model_dependencies!(dependants=Set.new) raise InfiniteRegressError if dependants.include?(self) dependants << self hard_model_dependencies.each do |d| next unless d.respond_to?(:validate_model_dependencies!, true) d.send :validate_model_dependencies!, dependants end end def hard_model_dependencies property_definitions.map(&:model_class).compact.uniq end end attr_reader :sonj_content def initialize definitions = self.class.property_definitions @sonj_content = ObjectModel::Properties.new( definitions ) end def to_json(*args) sonj_content.to_json(*args) end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
son_jay-0.2.0.alpha | lib/son_jay/object_model.rb |
son_jay-0.1.1.alpha | lib/son_jay/object_model.rb |