Class: Pipedrive::Base
- Inherits:
-
OpenStruct
- Object
- OpenStruct
- Pipedrive::Base
- Extended by:
- Forwardable
- Includes:
- HTTParty
- Defined in:
- lib/pipedrive/base.rb
Overview
Base class for setting HTTParty configurations globally
Direct Known Subclasses
Activity, ActivityType, Authorization, Currency, Deal, DealField, File, Filter, Goal, Note, Organization, OrganizationField, PermissionSet, Person, PersonField, Pipeline, Product, ProductField, PushNotification, Role, SearchResult, Stage, User, UserConnection, UserSetting
Instance Attribute Summary collapse
-
#data ⇒ Object
readonly
Returns the value of attribute data.
Class Method Summary collapse
- .all(response = nil, options = {}, get_absolutely_all = false) ⇒ Object
-
.authenticate(token) ⇒ Hash
Sets the authentication credentials in a class variable.
-
.bad_response(response, params = {}) ⇒ Object
Examines a bad response and raises an appropriate exception.
- .create(opts = {}) ⇒ Object
- .find(id) ⇒ Object
- .find_by_name(name, opts = {}) ⇒ Object
- .has_pagination?(res) ⇒ Boolean
- .new_list(attrs) ⇒ Object
- .resource_path ⇒ Object
Instance Method Summary collapse
-
#initialize(attrs = {}) ⇒ Pipedrive::Base
constructor
Create a new Pipedrive::Base object.
-
#update(opts = {}) ⇒ Boolean
Updates the object.
Constructor Details
#initialize(attrs = {}) ⇒ Pipedrive::Base
Create a new Pipedrive::Base object.
Only used internally
34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/pipedrive/base.rb', line 34 def initialize(attrs = {}) if attrs['data'] struct_attrs = attrs['data'] if attrs['additional_data'] struct_attrs.merge!(attrs['additional_data']) end else struct_attrs = attrs end super(struct_attrs) end |
Instance Attribute Details
#data ⇒ Object (readonly)
Returns the value of attribute data.
26 27 28 |
# File 'lib/pipedrive/base.rb', line 26 def data @data end |
Class Method Details
.all(response = nil, options = {}, get_absolutely_all = false) ⇒ Object
86 87 88 89 90 91 92 93 94 95 96 97 98 |
# File 'lib/pipedrive/base.rb', line 86 def all(response = nil, = {}, get_absolutely_all = false) res = response || get(resource_path, ) if res.ok? data = res['data'].nil? ? [] : res['data'].map{|obj| new(obj)} if get_absolutely_all && has_pagination?(res) [:query] = [:query].merge({:start => res['additional_data']['pagination']['next_start']}) data += self.all(nil,,true) end data else bad_response(res, ) end end |
.authenticate(token) ⇒ Hash
Sets the authentication credentials in a class variable.
68 69 70 |
# File 'lib/pipedrive/base.rb', line 68 def authenticate(token) default_params :api_token => token end |
.bad_response(response, params = {}) ⇒ Object
Examines a bad response and raises an appropriate exception
75 76 77 78 79 80 |
# File 'lib/pipedrive/base.rb', line 75 def bad_response(response, params={}) if response.class == HTTParty::Response raise HTTParty::ResponseError, response end raise StandardError, 'Unknown error' end |
.create(opts = {}) ⇒ Object
104 105 106 107 108 109 110 111 112 |
# File 'lib/pipedrive/base.rb', line 104 def create( opts = {} ) res = post resource_path, :body => opts if res.success? res['data'] = opts.merge res['data'] new(res) else bad_response(res,opts) end end |
.find(id) ⇒ Object
114 115 116 117 |
# File 'lib/pipedrive/base.rb', line 114 def find(id) res = get "#{resource_path}/#{id}" res.ok? ? new(res) : bad_response(res,id) end |
.find_by_name(name, opts = {}) ⇒ Object
119 120 121 122 |
# File 'lib/pipedrive/base.rb', line 119 def find_by_name(name, opts={}) res = get "#{resource_path}/find", :query => { :term => name }.merge(opts) res.ok? ? new_list(res) : bad_response(res,{:name => name}.merge(opts)) end |
.has_pagination?(res) ⇒ Boolean
100 101 102 |
# File 'lib/pipedrive/base.rb', line 100 def has_pagination?(res) res['additional_data'] && res['additional_data']['pagination'] && res['additional_data']['pagination']['more_items_in_collection'] end |
.new_list(attrs) ⇒ Object
82 83 84 |
# File 'lib/pipedrive/base.rb', line 82 def new_list( attrs ) attrs['data'].is_a?(Array) ? attrs['data'].map {|data| self.new( 'data' => data ) } : [] end |
.resource_path ⇒ Object
124 125 126 127 128 129 130 |
# File 'lib/pipedrive/base.rb', line 124 def resource_path # The resource path should match the camelCased class name with the # first letter downcased. Pipedrive API is sensitive to capitalisation klass = name.split('::').last klass[0] = klass[0].chr.downcase klass.end_with?('y') ? "/#{klass.chop}ies" : "/#{klass}s" end |
Instance Method Details
#update(opts = {}) ⇒ Boolean
Updates the object.
52 53 54 55 56 57 58 59 60 |
# File 'lib/pipedrive/base.rb', line 52 def update(opts = {}) res = put "#{resource_path}/#{id}", :body => opts if res.success? res['data'] = Hash[res['data'].map {|k, v| [k.to_sym, v] }] @table.merge!(res['data']) else false end end |