Sha256: 68c9986fa6727a7e98ca79dbb2f3e584ad8d675f3260069bfae9a9ede93cd55d

Contents?: true

Size: 1.08 KB

Versions: 28

Compression:

Stored size: 1.08 KB

Contents

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
    end
    self.json_creatable = false

    def to_hash
      table
    end

    def [](name)
      table[name.to_sym]
    end

    def []=(name, value)
      __send__ "#{name}=", value
    end

    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

28 entries across 26 versions & 10 rubygems

Version Path
active_mailer-0.0.10 test/fixtures/dummyapp_rails_3.2/vendor/bundle/ruby/1.9.1/gems/json-1.7.7/lib/json/generic_object.rb
judge-2.0.5 vendor/bundle/ruby/2.1.0/gems/json-1.7.7/lib/json/generic_object.rb
vagrant-shell-0.2.9 demo/templates/vendor/bundle/ruby/1.9.1/gems/json-1.7.7/lib/json/generic_object.rb
vagrant-shell-0.2.8 demo/templates/vendor/bundle/ruby/1.9.1/gems/json-1.7.7/lib/json/generic_object.rb
swipe-rails-0.0.5 vendor/bundle/gems/json-1.7.7/lib/json/generic_object.rb
active_mailer-0.0.9 test/fixtures/dummyapp_rails_3.2/vendor/bundle/ruby/1.9.1/gems/json-1.7.7/lib/json/generic_object.rb
active_mailer-0.0.8 test/fixtures/dummyapp_rails_3.2/vendor/bundle/ruby/1.9.1/gems/json-1.7.7/lib/json/generic_object.rb
active_mailer-0.0.7 test/fixtures/dummyapp_rails_3.2/vendor/bundle/ruby/1.9.1/gems/json-1.7.7/lib/json/generic_object.rb
active_mailer-0.0.6 test/fixtures/dummyapp_rails_3.2/vendor/bundle/ruby/1.9.1/gems/json-1.7.7/lib/json/generic_object.rb
font-awesome-rails-3.1.1.2 vendor/ruby/1.9.1/gems/json-1.7.7/lib/json/generic_object.rb
vagrant-shell-0.2.6 vendor/bundle/gems/json-1.7.7/lib/json/generic_object.rb
font-awesome-rails-3.1.1.1 vendor/ruby/1.9.1/gems/json-1.7.7/lib/json/generic_object.rb
vagrant-shell-0.2.5 vendor/bundle/gems/json-1.7.7/lib/json/generic_object.rb
librarian-puppet-0.9.9 vendor/gems/ruby/1.9.1/gems/json-1.7.7/lib/json/generic_object.rb
librarian-puppet-0.9.9 vendor/gems/ruby/1.9.1/gems/json_pure-1.7.7/lib/json/generic_object.rb
fc-webicons-0.0.4 vendor/bundle/ruby/1.9.1/gems/json-1.7.7/lib/json/generic_object.rb
fc-webicons-0.0.3 vendor/bundle/ruby/1.9.1/gems/json-1.7.7/lib/json/generic_object.rb
fc-webicons-0.0.2 vendor/bundle/ruby/1.9.1/gems/json-1.7.7/lib/json/generic_object.rb
fc-webicons-0.0.1 vendor/bundle/ruby/1.9.1/gems/json-1.7.7/lib/json/generic_object.rb
vagrant-actionio-0.0.9 vendor/bundle/gems/json-1.7.7/lib/json/generic_object.rb