class Jsonism::Definer
Public Class Methods
call(*args)
click to toggle source
Utility wrapper
# File lib/jsonism/definer.rb, line 4 def self.call(*args) new(*args).call end
extract_links(schema)
click to toggle source
Recursively extracts all links from given JSON schema @param schema [JsonSchema::Schema] @return [Array<JsonSchema::Schema::Link>]
# File lib/jsonism/definer.rb, line 11 def self.extract_links(schema) links = schema.links.select {|link| link.method && link.href } links + schema.properties.map {|key, schema| extract_links(schema) }.flatten end
new(client: nil, schema: nil)
click to toggle source
@param client [Jsonism::Client] @param schema [JsonSchema::Schema] JSON Schema
# File lib/jsonism/definer.rb, line 18 def initialize(client: nil, schema: nil) @client = client @schema = schema end
Public Instance Methods
call()
click to toggle source
Defines methods to call HTTP request from its JSON schema
# File lib/jsonism/definer.rb, line 24 def call define_methods_into(@client) define_classes end
Private Instance Methods
define_classes()
click to toggle source
# File lib/jsonism/definer.rb, line 38 def define_classes @schema.properties.each do |name, schema| unless Resources.const_defined?(name.camelize) Resources.const_set( name.camelize, Class.new(Resources::Base) do schema.properties.each do |name, schema| define_method(name) do @properties[name] end if schema.read_only read_only_property name else define_method("#{name}=") do |value| change(name, value) if @properties[name] != value end end end schema.links.each do |link| if link.rel == "delete" include Resources::Deletable self.link_for_deletion = Link.new(link: link) end if link.rel == "update" include Resources::Updatable self.link_for_update = Link.new(link: link) end end end ) end end end
define_methods_into(client)
click to toggle source
Defines methods into client @example
client.list_app client.info_app(id: 1)
# File lib/jsonism/definer.rb, line 79 def define_methods_into(client) links.each do |link| @client.define_singleton_method(link.method_signature) do |params = {}, headers = {}| Request.call(client: client, headers: headers, link: link, params: params) end end end
links()
click to toggle source
@return [Array<JsonSchema::Schema::Link>] Links defined in its JSON schema
# File lib/jsonism/definer.rb, line 32 def links @links ||= self.class.extract_links(@schema).map do |link| Link.new(link: link) end end