Sha256: 9ffd5a101487b77e309391804035b57b3c927389a230cb4c248f45738ec0fb4e

Contents?: true

Size: 1.54 KB

Versions: 30

Compression:

Stored size: 1.54 KB

Contents

# frozen_string_literal: true
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

30 entries across 30 versions & 5 rubygems

Version Path
es_cli-0.1.0 vendor/bundle/ruby/3.1.0/gems/json-2.9.1/lib/json/generic_object.rb
talon_one-7.0.0 .github/.example/vendor/bundle/ruby/3.3.0/gems/json-2.8.2/lib/json/generic_object.rb
json-2.9.1 lib/json/generic_object.rb
json-2.9.1-java lib/json/generic_object.rb
json-2.9.0 lib/json/generic_object.rb
json-2.9.0-java lib/json/generic_object.rb
cloudsmith-api-2.0.16 vendor/bundle/ruby/2.6.0/gems/json-2.7.6/lib/json/generic_object.rb
json-2.8.2-java lib/json/generic_object.rb
json-2.8.2 lib/json/generic_object.rb
json-2.8.1 lib/json/generic_object.rb
json-2.8.1-java lib/json/generic_object.rb
json-2.8.0 lib/json/generic_object.rb
json-2.8.0-java lib/json/generic_object.rb
json-2.8.0.alpha1 lib/json/generic_object.rb
json-2.7.6-java lib/json/generic_object.rb
json_pure-2.7.6 lib/json/generic_object.rb
json-2.7.6 lib/json/generic_object.rb
json_pure-2.7.5 lib/json/generic_object.rb
json-2.7.5 lib/json/generic_object.rb
json-2.7.5-java lib/json/generic_object.rb