Sha256: dcd9fb75cdddbf3828871ecee1917360394beca9bf3521e84e6780ef6aab4c38

Contents?: true

Size: 1.22 KB

Versions: 3

Compression:

Stored size: 1.22 KB

Contents

module SonJay
  class ObjectModel
    module Content

      class ContentWithExtra < Abstract

        def extra
          @extra ||= ObjectModel::ContentData.new
        end

        def each
          @data.each do |(name, value)|
            yield name, value
          end
          @extra.each do |(name, value)|
            yield name, value
          end
        end

        def freeze
          super
          @extra.freeze
          self
        end

        def dup
          new_copy = super
          new_copy.instance_variable_set :@extra, @extra.dup if defined? @extra
          new_copy
        end

        def clone
          new_copy = super
          if (defined? @extra) && (! new_copy.frozen?)
            p new_copy.frozen?
            new_copy.instance_variable_set :@extra, @extra.clone
          end
          new_copy
        end

        def to_h
          extra.empty? ?
            @data.dup :
            extra.hash_merge( @data )
        end

        private

        def load_extra_property(name_string, value)
          extra[ name_string ] = value
        end

        def hash_for_json
          extra.empty? ?
            @data :
            extra.hash_merge( @data )
        end

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