class LivePaper::BaseObject

Constants

AUTH_URL
AUTH_VALIDATION_URL
LP_API_HOST

Attributes

date_created[RW]
date_modified[RW]
id[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