Class: PMP::CollectionDocument
- Inherits:
-
OpenStruct
- Object
- OpenStruct
- PMP::CollectionDocument
- Includes:
- Configuration, Connection, Parser
- Defined in:
- lib/pmp/collection_document.rb
Overview
Using OpenStruct for now - perhaps use ActiveModel? hmm…
Constant Summary
Constants included from Connection
PMP::Connection::ALLOWED_CONNECTION_OPTIONS
Constants included from Configuration
PMP::Configuration::DEFAULT_ADAPTER, PMP::Configuration::DEFAULT_CLIENT_ID, PMP::Configuration::DEFAULT_CLIENT_SECRET, PMP::Configuration::DEFAULT_ENDPOINT, PMP::Configuration::DEFAULT_USER_AGENT, PMP::Configuration::VALID_OPTIONS_KEYS
Instance Attribute Summary collapse
-
#href ⇒ Object
the href/url string to retrieve info for this resource.
-
#items ⇒ Object
this is a tricky, read-only list of items, same as if loaded from link->item links do not put into json form of this doc.
-
#links ⇒ Object
private var to save links obj, to handle link additions.
-
#loaded ⇒ Object
has this resource actually been loaded from remote url or json document?.
-
#original ⇒ Object
keep a ref to original doc from which this obj was created should this be private?.
-
#response ⇒ Object
keep a ref to response obj if this resulted from one should this be private?.
-
#version ⇒ Object
all collection docs have a version default is ‘1.0’.
Instance Method Summary collapse
- #attributes ⇒ Object
- #delete ⇒ Object
-
#initialize(options = {}) {|_self| ... } ⇒ CollectionDocument
constructor
document is the original json derived doc used to create this resource assumption is that doc is a parsed json doc confirming to collection.doc+json TODO: check if this is a json string or hash, for now assume it has been mashified.
- #load ⇒ Object (also: #get)
- #loaded? ⇒ Boolean
- #method_missing(method, *args) ⇒ Object
-
#request(method, url, body = nil) ⇒ Object
url includes any params - full url.
- #save ⇒ Object
- #set_guid_if_blank ⇒ Object
Methods included from Parser
#as_json, #extract_attributes, #extract_links, #parse, #parse_attributes, #parse_items, #parse_link, #parse_links, #parse_links_list, #parse_version
Methods included from Utils
#to_json_key_name, #to_ruby_safe_name
Methods included from Connection
Methods included from Configuration
#apply_configuration, #configure, #options, #reset!
Constructor Details
#initialize(options = {}) {|_self| ... } ⇒ CollectionDocument
document is the original json derived doc used to create this resource assumption is that doc is a parsed json doc confirming to collection.doc+json TODO: check if this is a json string or hash, for now assume it has been mashified
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/pmp/collection_document.rb', line 40 def initialize(={}, &block) super() self.links = PMP::Links.new(self) self.href = .delete(:href) # if there is a doc to be had, pull it out self.response = .delete(:response) self.original = .delete(:document) apply_configuration() if !loaded? && !href self.href = endpoint end yield(self) if block_given? end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method, *args) ⇒ Object
124 125 126 127 |
# File 'lib/pmp/collection_document.rb', line 124 def method_missing(method, *args) load if (method.to_s.last != '=') && !loaded? super end |
Instance Attribute Details
#href ⇒ Object
the href/url string to retrieve info for this resource
13 14 15 |
# File 'lib/pmp/collection_document.rb', line 13 def href @href end |
#items ⇒ Object
this is a tricky, read-only list of items, same as if loaded from link->item links do not put into json form of this doc
35 36 37 |
# File 'lib/pmp/collection_document.rb', line 35 def items @items end |
#links ⇒ Object
private var to save links obj, to handle link additions
31 32 33 |
# File 'lib/pmp/collection_document.rb', line 31 def links @links end |
#loaded ⇒ Object
has this resource actually been loaded from remote url or json document?
28 29 30 |
# File 'lib/pmp/collection_document.rb', line 28 def loaded @loaded end |
#original ⇒ Object
keep a ref to original doc from which this obj was created should this be private?
21 22 23 |
# File 'lib/pmp/collection_document.rb', line 21 def original @original end |
#response ⇒ Object
keep a ref to response obj if this resulted from one should this be private?
17 18 19 |
# File 'lib/pmp/collection_document.rb', line 17 def response @response end |
#version ⇒ Object
all collection docs have a version default is ‘1.0’
25 26 27 |
# File 'lib/pmp/collection_document.rb', line 25 def version @version end |
Instance Method Details
#attributes ⇒ Object
60 61 62 |
# File 'lib/pmp/collection_document.rb', line 60 def attributes HashWithIndifferentAccess.new(marshal_dump.delete_if{|k,v| links.keys.include?(k.to_s)}) end |
#delete ⇒ Object
95 96 97 98 99 100 101 102 |
# File 'lib/pmp/collection_document.rb', line 95 def delete delete_link = self.edit raise 'Edit link does not specify deleting' unless (delete_link && delete_link.hints.allow.include?('DELETE')) raise 'No guid specified to delete' if self.guid.blank? url = delete_link.where(guid: self.guid).url request(:put, url, self) end |
#load ⇒ Object Also known as: get
79 80 81 82 83 84 |
# File 'lib/pmp/collection_document.rb', line 79 def load if !loaded? self.response = request(:get, self.href || self.self.url) self.loaded = true end end |
#loaded? ⇒ Boolean
104 105 106 |
# File 'lib/pmp/collection_document.rb', line 104 def loaded? !!self.loaded end |
#request(method, url, body = nil) ⇒ Object
url includes any params - full url
109 110 111 112 113 114 115 116 117 118 |
# File 'lib/pmp/collection_document.rb', line 109 def request(method, url, body=nil) # :nodoc: raw = connection(.merge({url: url})).send(method) do |request| if [:post, :put].include?(method.to_sym) && !body.blank? request.body = body.is_a?(String) ? body : body.to_json end end # may not need this, but remember how we made this response PMP::Response.new(raw, {method: method, url: url, body: body}) end |
#save ⇒ Object
87 88 89 90 91 92 93 |
# File 'lib/pmp/collection_document.rb', line 87 def save save_link = self.edit raise 'Edit link does not specify saving via put' unless (save_link && save_link.hints.allow.include?('PUT')) set_guid_if_blank url = save_link.where(guid: self.guid).url request(:put, url, self) end |
#set_guid_if_blank ⇒ Object
120 121 122 |
# File 'lib/pmp/collection_document.rb', line 120 def set_guid_if_blank self.guid = SecureRandom.uuid if guid.blank? end |