Sha256: b32a6cf2ae9e8294888bf7b052a7df1d6aa5bb7c56f475176684cd056645ab61

Contents?: true

Size: 1.42 KB

Versions: 3

Compression:

Stored size: 1.42 KB

Contents

require 'forwardable'

module SonJay
  class ObjectModel

    class ContentData
      extend Forwardable
      include Enumerable

      def initialize(data = {})
        @data = data.to_hash
      end

      def []=(name, value)
        name = "#{name}" unless String === name
        @data[name] = value
      end

      def fetch(name, *args)
        name = "#{name}" unless String === name
        block_given? ?
          @data.fetch(name, *args) { |*args| yield *args } :
          @data.fetch(name, *args)
      end

      def [](name)
        name = "#{name}" unless String === name
        @data[name]
      end

      def hash_merge(other)
        @data.dup.tap { |result|
          other.each do |name, value|
            name = "#{name}" unless String === name
            result[name] = value
          end
        }
      end

      def hash_merge(other)
        @data.dup.tap { |result|
          other.each do |name, value|
            result[name] = value
          end
        }
      end

      def freeze
        @data.freeze
        super
      end

      def to_h
        @data.dup
      end

      def dup
        self.class.new( @data.dup )
      end

      def clone
        new_copy = super
        unless new_copy.frozen?
          new_copy.instance_variable_set :@data, @data.clone
        end
        new_copy
      end

      def_delegators :@data, :each, :length, :keys, :has_key?, :empty?, :to_json

    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/content_data.rb
son_jay-0.5.1 lib/son_jay/object_model/content_data.rb
son_jay-0.5.0 lib/son_jay/object_model/content_data.rb