class LivePaper::BaseObject
Constants
- AUTH_URL
- AUTH_VALIDATION_URL
- LP_API_HOST
Attributes
date_created[RW]
date_modified[RW]
id[RW]
link[RW]
name[RW]
Public Class Methods
api_url()
click to toggle source
# File lib/live_paper/base_object.rb, line 179 def self.api_url raise NotImplementedError end
create(data)
click to toggle source
# File lib/live_paper/base_object.rb, line 26 def self.create(data) self.new(data).save end
get(id)
click to toggle source
# File lib/live_paper/base_object.rb, line 39 def self.get(id) response = rest_request( "#{api_url}/#{id}", :get ) case response.code when 200 parse response.body else #when 404 nil end end
item_key()
click to toggle source
# File lib/live_paper/base_object.rb, line 187 def self.item_key raise NotImplementedError end
list()
click to toggle source
# File lib/live_paper/base_object.rb, line 49 def self.list objects=[] # $lpp_access_token = 'force retry' response = rest_request( api_url, :get ) JSON.parse(response.body, symbolize_names: true)[list_key].each do |linkdata| objects << self.parse({item_key => linkdata}.to_json) end objects end
list_key()
click to toggle source
# File lib/live_paper/base_object.rb, line 183 def self.list_key raise NotImplementedError end
new(data={})
click to toggle source
# File lib/live_paper/base_object.rb, line 22 def initialize(data={}) assign_attributes data end
parse(data)
click to toggle source
# File lib/live_paper/base_object.rb, line 171 def self.parse(data) self.new().parse(data) end
request_access_token()
click to toggle source
# File lib/live_paper/base_object.rb, line 132 def self.request_access_token h = { method: :post, url: AUTH_URL, headers: { authorization: "Basic #{$lpp_basic_auth}", content_type: 'application/x-www-form-urlencoded', accept: 'application/json' }, payload: 'grant_type=client_credentials&scope=all' } response = RestClient::Request.execute(h) { |response, request, result| response } parsed = JSON.parse(response.body) @access_token = parsed['accessToken'] $lpp_access_token = @access_token end
request_project_id()
click to toggle source
# File lib/live_paper/base_object.rb, line 148 def self.request_project_id project = nil RestClient.proxy = ENV['HTTP_PROXY'] || ENV['http_proxy'] request = {}.to_json res = RestClient.post AUTH_VALIDATION_URL, request, { :Authorization => "Bearer #{$lpp_access_token}", :Accept => 'application/json'} @project = res.headers[:project_id] if @project.nil? raise "Project id not in response header" end $project_id = @project end
rest_request(url, method, options={})
click to toggle source
# File lib/live_paper/base_object.rb, line 99 def self.rest_request(url, method, options={}) tries = 0 verb = (method||"get").downcase.to_sym raise "Method '#{verb}' not supported." unless [:get, :post, :put, :delete].include?(verb) request_access_token unless $lpp_access_token request_project_id unless $project_id headers = {} headers[:authorization] = "Bearer #{$lpp_access_token}" headers[:accept] = options[:accept] || "application/json" headers[:"X-user-info"] = 'app=rubygem' headers[:content_type] = 'application/json' unless options[:body].nil? h = {:method => verb, :url => url.to_s, :headers => headers} h.merge!({:payload => options[:body]}) unless options[:body].nil? begin response = RestClient::Request.execute(h) { |response, request, result| response } raise NotAuthenticatedError if response.code == 401 rescue NotAuthenticatedError => e tries += 1 if tries < 3 request_access_token request_project_id headers[:authorization] = "Bearer #{$lpp_access_token}" retry else raise e end end response end
Public Instance Methods
assign_attributes(data)
click to toggle source
# File lib/live_paper/base_object.rb, line 15 def assign_attributes(data) data.each do |key, value| method = "#{underscore key.to_s}=" public_send(method, value) if respond_to?(method) end unless data.empty? end
delete()
click to toggle source
# File lib/live_paper/base_object.rb, line 81 def delete if self.id response = BaseObject.rest_request( "#{self.class.api_url}/#{id}", :delete ) response_code = case response.code when 200 '200 OK' when 409 @errors=response.body 'Conflict' else 'unknown' end else response_code = "Object Invalid" end response_code end
errors()
click to toggle source
# File lib/live_paper/base_object.rb, line 163 def errors begin JSON.parse(@errors) rescue @errors end end
parse(data)
click to toggle source
# File lib/live_paper/base_object.rb, line 175 def parse(data) raise NotImplementedError end
rel(key)
click to toggle source
# File lib/live_paper/base_object.rb, line 191 def rel(key) link.find { |obj| obj[:rel] == key }[:href] rescue nil end
save()
click to toggle source
# File lib/live_paper/base_object.rb, line 30 def save validate_attributes! unless present? @id response = BaseObject.rest_request( self.class.api_url, :post, body: create_body.to_json ) parse(response.body) end self end
update()
click to toggle source
# File lib/live_paper/base_object.rb, line 60 def update response_code = 'Object Invalid' if self.id response = BaseObject.rest_request( "#{self.class.api_url}/#{id}", :put, body: update_body.to_json ) response_code = case response.code when 200 parse(response.body) '200 OK' when 400 @errors=response.body 'Bad Request' when 409 @errors=response.body 'Conflict' else 'Object Invalid' end end response_code end
Protected Instance Methods
all_keys_present?(hash, keys)
click to toggle source
# File lib/live_paper/base_object.rb, line 200 def all_keys_present?(hash, keys) keys.all? { |e| present? hash[e] } rescue false end
all_present?(array)
click to toggle source
# File lib/live_paper/base_object.rb, line 196 def all_present?(array) array.all? { |e| present? e } rescue false end
present?(obj)
click to toggle source
# File lib/live_paper/base_object.rb, line 204 def present?(obj) !(obj.respond_to?(:empty?) ? obj.empty? : !obj) end
underscore(camel_cased_word)
click to toggle source
# File lib/live_paper/base_object.rb, line 208 def underscore(camel_cased_word) camel_cased_word.gsub(/::/, '/'). gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2'). gsub(/([a-z\d])([A-Z])/, '\1_\2'). tr("-", "_"). downcase end
Private Instance Methods
create_body()
click to toggle source
# File lib/live_paper/base_object.rb, line 221 def create_body raise NotImplementedError end
update_body()
click to toggle source
# File lib/live_paper/base_object.rb, line 225 def update_body raise NotImplementedError end
validate_attributes!()
click to toggle source
# File lib/live_paper/base_object.rb, line 217 def validate_attributes! raise NotImplementedError end