Sha256: e5e54e47b41e5d340f88022b002b11466d0bac5b747e238e2ef090ce5c835a9a

Contents?: true

Size: 1.44 KB

Versions: 3

Compression:

Stored size: 1.44 KB

Contents

require 'set'

module SonJay
  class ObjectModel

    class PropertyDefinitions
      extend Forwardable
      include Enumerable

      def self.from_initializations(property_initializations)
        new.tap do |instance|
          definer = PropertiesDefiner.new( instance )
          property_initializations.each do |pi|
            definer.instance_eval &pi
          end
        end
      end

      def initialize
        @definitions = []
        @names = Set.new
        @name_symbol_to_string_map = {}
      end

      def +(other)
        sum = self.class.new
        each do |property_definition|
          sum << property_definition
        end
        other.each do |property_definition|
          sum << property_definition
        end
        sum
      end

      def <<(definition)
        @definitions << definition
        name = definition.name
        @names << name
        @name_symbol_to_string_map[name.to_sym] = name
        self
      end

      def_delegators :@definitions, :each

      def name_from(name)
        case name
        when String then name
        when Symbol then @name_symbol_to_string_map.fetch(name, name)
        else            "#{name}"
        end
      end

      def include_name?(name)
        name = name_from( name )
        names.include?( name )
      end

      def hard_model_dependencies
        map( &:model_class ).compact.uniq
      end

      def names
        @names.freeze
      end
    end

  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
son_jay-0.5.2 lib/son_jay/object_model/property_definitions.rb
son_jay-0.5.1 lib/son_jay/object_model/property_definitions.rb
son_jay-0.5.0 lib/son_jay/object_model/property_definitions.rb