Sha256: 52f2d7f1f5a1a00b27c1161b57c8b88174b05ea1895388c752b7034d4bc6fa7c

Contents?: true

Size: 1.18 KB

Versions: 1

Compression:

Stored size: 1.18 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 <<(definition)
        @definitions << definition
        name = definition.name
        @names << name
        @name_symbol_to_string_map[name.to_sym] = name
      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

1 entries across 1 versions & 1 rubygems

Version Path
son_jay-0.4.1 lib/son_jay/object_model/property_definitions.rb