Sha256: 74244c827f6c26ac278dbfcd819fb0bde8572650a525de9b390ff5f672feb0f2

Contents?: true

Size: 1.39 KB

Versions: 301

Compression:

Stored size: 1.39 KB

Contents

#frozen_string_literal: false
require 'ostruct'

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
end

Version data entries

301 entries across 287 versions & 33 rubygems

Version Path
direct7-0.0.18 vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/generic_object.rb
direct7-0.0.17 vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/generic_object.rb
direct7-0.0.16 vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/generic_object.rb
cm-admin-1.5.22 vendor/bundle/ruby/3.3.0/gems/json-2.6.2/lib/json/generic_object.rb
cm-admin-1.5.21 vendor/bundle/ruby/3.3.0/gems/json-2.6.2/lib/json/generic_object.rb
cm-admin-1.5.20 vendor/bundle/ruby/3.3.0/gems/json-2.6.2/lib/json/generic_object.rb
harbr-2.8.1 vendor/bundle/ruby/3.2.0/gems/json-2.7.0/lib/json/generic_object.rb
direct7-0.0.13 vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/generic_object.rb
cloudsmith-api-2.0.11 vendor/bundle/ruby/2.6.0/gems/json-2.7.1/lib/json/generic_object.rb
cloudsmith-api-2.0.10 vendor/bundle/ruby/2.6.0/gems/json-2.7.1/lib/json/generic_object.rb
cloudsmith-api-2.0.9 vendor/bundle/ruby/2.6.0/gems/json-2.7.1/lib/json/generic_object.rb
cloudsmith-api-2.0.8 vendor/bundle/ruby/2.6.0/gems/json-2.7.1/lib/json/generic_object.rb
direct7-0.0.12 vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/generic_object.rb
mlh-rubocop-config-1.0.3 vendor/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/generic_object.rb
wallee-ruby-sdk-4.4.0 vendor/bundle/ruby/3.1.0/gems/json-2.7.1/lib/json/generic_object.rb
postfinancecheckout-ruby-sdk-4.4.0 vendor/bundle/ruby/3.1.0/gems/json-2.7.1/lib/json/generic_object.rb
postfinancecheckout-ruby-sdk-4.2.0 vendor/bundle/ruby/3.0.0/gems/json-2.7.1/lib/json/generic_object.rb
wallee-ruby-sdk-4.2.0 vendor/bundle/ruby/3.0.0/gems/json-2.7.1/lib/json/generic_object.rb
study_line-0.2.7 vendor/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/generic_object.rb
study_line-0.2.6 vendor/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/generic_object.rb