Sha256: b69bef62aceea30d2ded59766741990341705749c7b3e58df8d012ea9be3d673

Contents?: true

Size: 1.54 KB

Versions: 14

Compression:

Stored size: 1.54 KB

Contents

#frozen_string_literal: false
begin
  require 'ostruct'
rescue LoadError
  warn "JSON::GenericObject requires 'ostruct'. Please install it with `gem install ostruct`."
end

module JSON
  class GenericObject < OpenStruct
    class << self
      alias [] new

      def json_creatable?
        @json_creatable
      end

      attr_writer :json_creatable

      def json_create(data)
        data = data.dup
        data.delete JSON.create_id
        self[data]
      end

      def from_hash(object)
        case
        when object.respond_to?(:to_hash)
          result = new
          object.to_hash.each do |key, value|
            result[key] = from_hash(value)
          end
          result
        when object.respond_to?(:to_ary)
          object.to_ary.map { |a| from_hash(a) }
        else
          object
        end
      end

      def load(source, proc = nil, opts = {})
        result = ::JSON.load(source, proc, opts.merge(:object_class => self))
        result.nil? ? new : result
      end

      def dump(obj, *args)
        ::JSON.dump(obj, *args)
      end
    end
    self.json_creatable = false

    def to_hash
      table
    end

    def [](name)
      __send__(name)
    end unless method_defined?(:[])

    def []=(name, value)
      __send__("#{name}=", value)
    end unless method_defined?(:[]=)

    def |(other)
      self.class[other.to_hash.merge(to_hash)]
    end

    def as_json(*)
      { JSON.create_id => self.class.name }.merge to_hash
    end

    def to_json(*a)
      as_json.to_json(*a)
    end
  end if defined?(::OpenStruct)
end

Version data entries

14 entries across 14 versions & 9 rubygems

Version Path
cloudsmith-api-2.0.15 vendor/bundle/ruby/2.6.0/gems/json-2.7.2/lib/json/generic_object.rb
cloudsmith-api-2.0.14 vendor/bundle/ruby/2.6.0/gems/json-2.7.2/lib/json/generic_object.rb
fluent-plugin-nuopenlineage-light-0.1.0 vendor/bundle/ruby/3.3.0/gems/json-2.7.2/lib/json/generic_object.rb
fluent-plugin-openlineage-light-0.1.4 vendor/bundle/ruby/3.3.0/gems/json-2.7.2/lib/json/generic_object.rb
fluent-plugin-openlineage-light-0.1.3 vendor/bundle/ruby/3.3.0/gems/json-2.7.2/lib/json/generic_object.rb
fluent-plugin-openlineage-0.1.0 vendor/bundle/ruby/3.3.0/gems/json-2.7.2/lib/json/generic_object.rb
blacklight-spotlight-3.6.0.beta8 vendor/bundle/ruby/3.2.0/gems/json-2.7.2/lib/json/generic_object.rb
katalyst-govuk-formbuilder-1.9.2 vendor/bundle/ruby/3.3.0/gems/json-2.7.2/lib/json/generic_object.rb
cloudsmith-api-2.0.13 vendor/bundle/ruby/2.6.0/gems/json-2.7.2/lib/json/generic_object.rb
bison-0.1.0 vendor/bundle/ruby/3.2.0/gems/json-2.7.2/lib/json/generic_object.rb
cloudsmith-api-2.0.12 vendor/bundle/ruby/2.6.0/gems/json-2.7.2/lib/json/generic_object.rb
json_pure-2.7.2 lib/json/generic_object.rb
json-2.7.2-java lib/json/generic_object.rb
json-2.7.2 lib/json/generic_object.rb