Sha256: 6e3423194d4b172c5657abb4a7e67c1d8286ef8b5247ce477d29fec3d5a021cd

Contents?: true

Size: 959 Bytes

Versions: 14

Compression:

Stored size: 959 Bytes

Contents

module Jess
  # Wraps a JSON object that is returned from the JSS API. The underlying raw
  # JSON is available via `_json`. Properties of the JSON can be accessed via
  # `method_missing`, so that a Resource behaves like a typical Ruby object.
  # Accessing a non-existent JSON property will raise `NoMethodError`.
  #
  class Resource
    attr_reader :_json

    def initialize(json)
      @_json = json.freeze
    end

    def to_hash
      _json
    end

    private

    def method_missing(symbol, *args)
      if _json.key?(symbol.to_s)
        _as_resource(_json.public_send(:[], symbol.to_s, *args))
      else
        super
      end
    end

    def respond_to_missing?(symbol, include_all)
      super || _json.key?(symbol.to_s)
    end

    def _as_resource(json)
      case json
      when Hash
        Resource.new(json)
      when Array
        json.map(&method(:_as_resource)).freeze
      else
        json.freeze
      end
    end
  end
end

Version data entries

14 entries across 14 versions & 1 rubygems

Version Path
jess-1.1.2 lib/jess/resource.rb
jess-1.1.1 lib/jess/resource.rb
jess-1.1.0 lib/jess/resource.rb
jess-1.0.0 lib/jess/resource.rb
jess-0.10.1 lib/jess/resource.rb
jess-0.10.0 lib/jess/resource.rb
jess-0.9.0 lib/jess/resource.rb
jess-0.8.0 lib/jess/resource.rb
jess-0.7.0 lib/jess/resource.rb
jess-0.6.0 lib/jess/resource.rb
jess-0.5.0 lib/jess/resource.rb
jess-0.4.0 lib/jess/resource.rb
jess-0.3.0 lib/jess/resource.rb
jess-0.2.0 lib/jess/resource.rb