class Rnow::Resource

Attributes

connection[RW]
href[RW]

Public Class Methods

_return_fields() click to toggle source
# File lib/rnow/resource.rb, line 72
def self._return_fields
  (self.remote_attrs + self.remote_read_only_attrs).join(",")
end
all(connection, params = {}) click to toggle source

Return an array of all records for this resource. There is a limit to about 1000 records that are returned here, so if your resource has more you will need to use paging or search to retreive what you need. See self.paginate() for paganition, see self.find() for search support.

# File lib/rnow/resource.rb, line 87
def self.all(connection, params = {})
  JSON.parse(connection.get(resource_uri, params).body)["items"].map do |item|
    href = item.delete("links").first["href"]
    new(item.merge({href: href, connection: connection}))
  end
end
default_params() click to toggle source
# File lib/rnow/resource.rb, line 76
def self.default_params
  {:_return_fields => self._return_fields}
end
filter(connection, params = {key: nil, value: nil}) click to toggle source

Filter resources with query by key value pair Typical query patter is: uri = “services/rest/connect/latest/contacts?q=lookupName like ‘%Soheil%’”

Example: Rnow::Contact.filter(connection, “lookupName”, “Soheil Eizadi”)

# File lib/rnow/resource.rb, line 161
def self.filter(connection, params = {key: nil, value: nil})
  key = params.delete(:key)
  value = params.delete(:value)
  JSON.parse(connection.get(resource_uri, {q: "#{key} like '%#{value}%'"}).body)["items"].map do |item|
    href = item.fetch("links").first["href"]
    new(item.merge({href: href, connection: connection}))
  end
end
find(connection, params = {key: nil, value: nil}) click to toggle source

Find resources with query by key value pair Typical query patter is: uri = services/rest/connect/latest/contacts?q=lookupName=‘Soheil Eizadi’

Example: Rnow::Contact.find(connection, “lookupName”, “Soheil Eizadi”)

# File lib/rnow/resource.rb, line 122
def self.find(connection, params = {key: nil, value: nil})
  key = params.delete(:key)
  value = params.delete(:value)
  search = (value.is_a? Integer) ? value : "'#{value}'"
  JSON.parse(connection.get(resource_uri, {q: "#{key}=#{search}"}).body)["items"].map do |item|
    href = item.delete("links").first["href"]
    new(item.merge({href: href, connection: connection}))
  end
end
find_where(connection, params = {key: nil, value: nil, count: 10}) click to toggle source

Find resoures with ROQL using where clause

# File lib/rnow/resource.rb, line 135
def self.find_where(connection, params = {key: nil, value: nil, count: 10})
  key = params.delete(:key)
  value = params.delete(:value)
  page = params.delete(:page)
  count = params.delete(:count)
  uri = Rnow.base_path + 'queryResults';
  search = (value.is_a? Integer) ? value : "'#{value}'"
  params = {query: URI.escape("select * from #{self.rnow_object} where #{key}=#{search}")}
  response = JSON.parse(connection.get(uri, params).body)
  keys = response["items"].first["columnNames"]
  rows = response["items"].first["rows"]
  resources=[]
  rows.each do |row|
    hash = Hash[keys.zip row]
    resources << new(hash.merge({href: resource_uri + '/' + hash["id"], connection: connection}))
  end
  resources
end
new(attrs={}) click to toggle source
# File lib/rnow/resource.rb, line 182
def initialize(attrs={})
  load_attributes(attrs)
end
paginate(connection, params = {page: 0, count: 10}) click to toggle source

Return an array of paged records for this resource. The page number from 0-N can be specified The count is the number of entries returned per page

# File lib/rnow/resource.rb, line 99
def self.paginate(connection, params = {page: 0, count: 10})
  page = params.delete(:page)
  count = params.delete(:count)
  uri = Rnow.base_path + 'queryResults';
  params = {query: URI.escape("select * from #{self.rnow_object} limit #{count} offset #{page}")}
  response = JSON.parse(connection.get(uri, params).body)
  keys = response["items"].first["columnNames"]
  rows = response["items"].first["rows"]
  resources=[]
  rows.each do |row|
    hash = Hash[keys.zip row]
    resources << new(hash.merge({href: resource_uri + '/' + hash["id"], connection: connection}))
  end
  resources
end
remote_attr_accessor(*args) click to toggle source

Define a writeable remote attribute, i.e. one that should show up in post / put operations.

# File lib/rnow/resource.rb, line 18
def self.remote_attr_accessor(*args)
  args.each do |a|
    attr_accessor a
    remote_attrs << a
  end
end
remote_attr_reader(*args) click to toggle source

Define a read-only attribute

# File lib/rnow/resource.rb, line 49
def self.remote_attr_reader(*args)
  args.each do |a|
    attr_reader a
    remote_read_only_attrs << a
  end
end
remote_attr_writer(*args) click to toggle source

Define a remote attribute that is write-only

# File lib/rnow/resource.rb, line 39
def self.remote_attr_writer(*args)
  args.each do |a|
    attr_accessor a
    remote_write_only_attrs << a
  end
end
remote_attrs() click to toggle source
# File lib/rnow/resource.rb, line 56
def self.remote_attrs
  @remote_attrs ||= []
end
remote_post_accessor(*args) click to toggle source

Define a remote attribute that can only be sent during a POST operation.

# File lib/rnow/resource.rb, line 29
def self.remote_post_accessor(*args)
  args.each do |a|
    attr_accessor a
    remote_post_attrs << a
  end
end
remote_post_attrs() click to toggle source
# File lib/rnow/resource.rb, line 68
def self.remote_post_attrs
  @remote_post_attrs ||= []
end
remote_read_only_attrs() click to toggle source
# File lib/rnow/resource.rb, line 64
def self.remote_read_only_attrs
  @remote_read_only_attrs ||= []
end
remote_write_only_attrs() click to toggle source
# File lib/rnow/resource.rb, line 60
def self.remote_write_only_attrs
  @remote_write_only_attrs ||= []
end
resource_map() click to toggle source

A hash that maps Rnow WAPI object identifiers to subclasses of Resource. Used by the Search resource for mapping response objects.

# File lib/rnow/resource.rb, line 178
def self.resource_map
  @@resource_map ||= {}
end
resource_uri() click to toggle source
# File lib/rnow/resource.rb, line 170
def self.resource_uri
  Rnow.base_path + self.rnow_object
end
rnow_object(obj=nil) click to toggle source
# File lib/rnow/resource.rb, line 5
def self.rnow_object(obj=nil)
  if obj.nil? 
    @rnow_object
  else
    self.resource_map[obj] = self
    @rnow_object = obj
  end
end

Public Instance Methods

create()
Alias for: post
delete() click to toggle source
# File lib/rnow/resource.rb, line 193
def delete
  connection.delete(resource_uri).status == 200
end
get(params=self.class.default_params) click to toggle source
# File lib/rnow/resource.rb, line 197
def get(params=self.class.default_params)
  response = connection.get(resource_uri, params).body
  load_attributes(JSON.parse(response))
  self
end
post() click to toggle source
# File lib/rnow/resource.rb, line 186
def post
  resource = JSON.parse(connection.post(resource_uri, remote_attribute_hash(write = true, post = true)).body)
  self.href = resource.fetch("links").first["href"]
  true
end
Also aliased as: create
put() click to toggle source
# File lib/rnow/resource.rb, line 203
def put
  resource = JSON.parse(connection.put(resource_uri, remote_attribute_hash(write = true)).body)
  self.href = resource.fetch("links").first["href"]
  true
end
remote_attribute_hash(write=false, post=false) click to toggle source
# File lib/rnow/resource.rb, line 213
def remote_attribute_hash(write=false, post=false)
  {}.tap do |hsh|
    self.class.remote_attrs.each do |k|
      hsh[k] = self.send(k) unless self.send(k).nil?
    end
    self.class.remote_write_only_attrs.each do |k|
      hsh[k] = self.send(k) unless self.send(k).nil?
    end if write
    self.class.remote_post_attrs.each do |k|
      hsh[k] = self.send(k) unless self.send(k).nil?
    end if post
  end
end
resource_uri() click to toggle source
# File lib/rnow/resource.rb, line 209
def resource_uri
  self.href.nil? ? self.class.resource_uri : (Rnow.base_path + self.href)
end

Private Instance Methods

load_attributes(attrs) click to toggle source
# File lib/rnow/resource.rb, line 229
def load_attributes(attrs)
  attrs.each do |k,v|
    # Some things have specialized writers
    if respond_to?("#{k}=")
      send("#{k}=", v)
    
    # Some things don't have writers (i.e. remote_attr_reader fields)
    else
      instance_variable_set("@#{k}", v)
    end
  end
end