class Pluct::Resource

Attributes

data[R]
response[R]
schema[R]
uri[R]

Public Class Methods

new(uri, response = nil) click to toggle source
# File lib/pluct/resource.rb, line 7
def initialize(uri, response = nil)
  @uri = uri
  @response = response || get(@uri)
  @data ||= (JSON.is_json?(@response.body) ? JSON.parse(@response.body, {symbolize_names: true}) : {})

  @schema = Schema.from_header(@response.headers)
  Resource.create_methods(@schema.links) if @schema
end

Private Class Methods

create_methods(links=[]) click to toggle source
# File lib/pluct/resource.rb, line 22
def self.create_methods(links=[])
  links.each do |link|
    ldo = Pluct::LinkDescriptionObject.new(link)

    define_method "rel_#{link["rel"]}" do |*args|
      params, *options = *args
      params ||= {}

      method = link["method"] || "GET"

      mapping = params.dup
      mapping.merge!(@data)

      uri = ldo.expand_href(mapping)
      payload = ldo.unused_mapping(params)

      options.unshift(payload)

      response = send(method.downcase, uri, *options)
      Resource.new(uri, response)
    end
  end
end

Public Instance Methods

method_missing(method, *args) click to toggle source
Calls superclass method
# File lib/pluct/resource.rb, line 16
def method_missing(method, *args)
  @data[method] || super
end