Sha256: b80b32296ad97b43ae0191de5944a2dc998cc15045269072bb765843ac9a7404

Contents?: true

Size: 1.52 KB

Versions: 3

Compression:

Stored size: 1.52 KB

Contents

require 'forwardable'

module SonJay
  class ObjectModel
    class Properties
      class NameError < KeyError
        def initialize(name)
          super "No such property name as %s" % name.inspect
        end
      end

      extend Forwardable

      def initialize(property_definitions)
        @data = {}
        @model_properties = Set.new
        property_definitions.each do |d|
          is_model_property = !! d.model_class
          @data[d.name] = is_model_property ? d.model_class.new : nil
          @model_properties << d.name if is_model_property
        end
      end

      def_delegators :@data, *[
        :length ,
        :values ,
      ]

      def_delegator :@data, :has_key?, :has_name?

      def [](name)
        name = "#{name}"
        @data.fetch(name)
      rescue KeyError
        raise NameError.new(name)
      end

      def []=(name, value)
        name = "#{name}"
        raise NameError.new(name) unless @data.has_key?(name)
        @data[name] = value
      end

      def load_data(data)
        data.each_pair do |name, value|
          load_property name, value
        end
      end

      def load_property(name, value)
        name = "#{name}"
        return unless @data.has_key?(name)
        if @model_properties.include?(name)
          @data[name].sonj_content.load_data value
        else
          @data[name] = value
        end
      end

      def has_name?(name)
        @data.has_key?( "#{name}" )
      end

      def to_json(*args)
        @data.to_json(*args)
      end

    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
son_jay-0.2.0.alpha lib/son_jay/object_model/properties.rb
son_jay-0.1.1.alpha lib/son_jay/object_model/properties.rb
son_jay-0.1.0.alpha lib/son_jay/object_model/properties.rb