pipedrive-ruby 0.2.4 → 0.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/lib/pipedrive-ruby.rb +1 -0
- data/lib/pipedrive/base.rb +87 -29
- data/lib/pipedrive/deal.rb +3 -19
- data/lib/pipedrive/organization.rb +7 -28
- data/lib/pipedrive/person.rb +3 -30
- data/lib/pipedrive/product.rb +6 -0
- data/pipedrive-ruby.gemspec +4 -3
- metadata +5 -5
data/Rakefile
CHANGED
@@ -20,7 +20,7 @@ Jeweler::Tasks.new do |gem|
|
|
20
20
|
gem.summary = %Q{Ruby wrapper for the Pipedrive API}
|
21
21
|
gem.description = %Q{Ruby wrapper for the Pipedrive API}
|
22
22
|
gem.email = "jan@general-scripting.com"
|
23
|
-
gem.authors = ["
|
23
|
+
gem.authors = ["Jan Schwenzien", "Waldemar Kusnezow"]
|
24
24
|
# dependencies defined in Gemfile
|
25
25
|
end
|
26
26
|
Jeweler::RubygemsDotOrgTasks.new
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.5
|
data/lib/pipedrive-ruby.rb
CHANGED
data/lib/pipedrive/base.rb
CHANGED
@@ -1,45 +1,26 @@
|
|
1
1
|
require 'httparty'
|
2
2
|
require 'ostruct'
|
3
|
+
require 'forwardable'
|
3
4
|
|
4
5
|
module Pipedrive
|
5
|
-
|
6
|
+
|
6
7
|
# Globally set request headers
|
7
8
|
HEADERS = {
|
8
9
|
"User-Agent" => "Ruby.Pipedrive.Api",
|
9
10
|
"Accept" => "application/json",
|
10
11
|
"Content-Type" => "application/x-www-form-urlencoded"
|
11
12
|
}
|
12
|
-
|
13
|
+
|
13
14
|
# Base class for setting HTTParty configurations globally
|
14
15
|
class Base < OpenStruct
|
15
|
-
|
16
|
+
|
16
17
|
include HTTParty
|
17
18
|
base_uri 'api.pipedrive.com/v1'
|
18
19
|
headers HEADERS
|
19
20
|
format :json
|
20
|
-
|
21
|
-
# Sets the authentication credentials in a class variable.
|
22
|
-
#
|
23
|
-
# @param [String] email cl.ly email
|
24
|
-
# @param [String] password cl.ly password
|
25
|
-
# @return [Hash] authentication credentials
|
26
|
-
def self.authenticate(token)
|
27
|
-
self.default_params :api_token => token
|
28
|
-
end
|
29
|
-
|
30
|
-
# Examines a bad response and raises an approriate exception
|
31
|
-
#
|
32
|
-
# @param [HTTParty::Response] response
|
33
|
-
def self.bad_response(response)
|
34
|
-
if response.class == HTTParty::Response
|
35
|
-
raise ResponseError, response
|
36
|
-
end
|
37
|
-
raise StandardError, "Unkown error"
|
38
|
-
end
|
39
21
|
|
40
|
-
|
41
|
-
|
42
|
-
end
|
22
|
+
extend Forwardable
|
23
|
+
def_delegators 'self.class', :get, :post, :put, :resource_path, :bad_response
|
43
24
|
|
44
25
|
attr_reader :data
|
45
26
|
|
@@ -50,9 +31,86 @@ module Pipedrive
|
|
50
31
|
# @param [Hash] attributes
|
51
32
|
# @return [CloudApp::Base]
|
52
33
|
def initialize(attrs = {})
|
53
|
-
|
34
|
+
if attrs['data']
|
35
|
+
super( attrs['data'] )
|
36
|
+
else
|
37
|
+
super(attrs)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
# Updates the object.
|
42
|
+
#
|
43
|
+
# @param [Hash] opts
|
44
|
+
# @return [Boolean]
|
45
|
+
def update(opts = {})
|
46
|
+
res = put "#{resource_path}/#{id}", :body => opts
|
47
|
+
!!(res.success? && @table.merge!(res['data'].symbolize_keys))
|
48
|
+
end
|
49
|
+
|
50
|
+
class << self
|
51
|
+
# Sets the authentication credentials in a class variable.
|
52
|
+
#
|
53
|
+
# @param [String] email cl.ly email
|
54
|
+
# @param [String] password cl.ly password
|
55
|
+
# @return [Hash] authentication credentials
|
56
|
+
def authenticate(token)
|
57
|
+
default_params :api_token => token
|
58
|
+
end
|
59
|
+
|
60
|
+
# Examines a bad response and raises an appropriate exception
|
61
|
+
#
|
62
|
+
# @param [HTTParty::Response] response
|
63
|
+
def bad_response(response)
|
64
|
+
if response.class == HTTParty::Response
|
65
|
+
raise HTTParty::ResponseError, response
|
66
|
+
end
|
67
|
+
raise StandardError, 'Unknown error'
|
68
|
+
end
|
69
|
+
|
70
|
+
def new_list( attrs )
|
71
|
+
attrs['data'].is_a?(Array) ? attrs['data'].map {|data| self.new( 'data' => data ) } : []
|
72
|
+
end
|
73
|
+
|
74
|
+
def all(response = nil)
|
75
|
+
res = response || get(resource_path)
|
76
|
+
if res.ok?
|
77
|
+
res['data'].nil? ? [] : res['data'].map{|obj| new(obj)}
|
78
|
+
else
|
79
|
+
bad_response(res)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
def create( opts = {} )
|
84
|
+
res = post resource_path, :body => opts
|
85
|
+
if res.success?
|
86
|
+
res['data'] = opts.merge res['data']
|
87
|
+
new(res)
|
88
|
+
else
|
89
|
+
bad_response(res)
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
def find(id)
|
94
|
+
res = get "#{resource_path}/#{id}"
|
95
|
+
res.ok? ? new(res) : bad_response(res)
|
96
|
+
end
|
97
|
+
|
98
|
+
def find_by_name(name, opts={})
|
99
|
+
res = get "#{resource_path}/find", :query => { :term => name }.merge(opts)
|
100
|
+
res.ok? ? new_list(res) : bad_response(res)
|
101
|
+
end
|
102
|
+
|
103
|
+
def resource_path
|
104
|
+
"/#{name.split('::').last.downcase}s"
|
105
|
+
end
|
54
106
|
end
|
55
|
-
|
56
|
-
|
57
|
-
|
107
|
+
|
108
|
+
# TODO Rewrite this.
|
109
|
+
module Deals
|
110
|
+
def deals
|
111
|
+
Deal.all(get "#{resource_path}/#{id}/deals")
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
58
116
|
end
|
data/lib/pipedrive/deal.rb
CHANGED
@@ -1,26 +1,10 @@
|
|
1
1
|
module Pipedrive
|
2
|
-
|
3
2
|
class Deal < Base
|
4
3
|
|
5
|
-
def
|
6
|
-
res = post "/
|
7
|
-
|
8
|
-
res['data'] = opts.merge res['data']
|
9
|
-
Deal.new(res)
|
10
|
-
else
|
11
|
-
bad_response(res)
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
def self.find(id)
|
16
|
-
res = get "/deals/#{id}"
|
17
|
-
if res.ok?
|
18
|
-
Deal.new(res)
|
19
|
-
else
|
20
|
-
bad_response(res)
|
21
|
-
end
|
4
|
+
def add_product(opts = {})
|
5
|
+
res = post "#{resource_path}/#{id}/products", :body => opts
|
6
|
+
res.success? ? res['data']['product_attachment_id'] : bad_response(res)
|
22
7
|
end
|
23
8
|
|
24
9
|
end
|
25
|
-
|
26
10
|
end
|
@@ -1,39 +1,18 @@
|
|
1
1
|
module Pipedrive
|
2
|
-
|
3
2
|
class Organization < Base
|
3
|
+
include Deals
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
res['data'] = opts.merge res['data']
|
9
|
-
Organization.new(res)
|
10
|
-
else
|
11
|
-
bad_response(res)
|
12
|
-
end
|
5
|
+
# TODO Rewrite this.
|
6
|
+
def persons
|
7
|
+
Person.all(get "#{resource_path}/#{id}/persons")
|
13
8
|
end
|
14
9
|
|
15
|
-
|
16
|
-
find_by_name( name ).first || create( opts.merge( :title => name ) )
|
17
|
-
end
|
10
|
+
class << self
|
18
11
|
|
19
|
-
|
20
|
-
|
21
|
-
if res.ok?
|
22
|
-
Organization.new(res)
|
23
|
-
else
|
24
|
-
bad_response(res)
|
12
|
+
def find_or_create_by_name(name, opts={})
|
13
|
+
find_by_name(name).first || create(opts.merge(:title => name))
|
25
14
|
end
|
26
|
-
end
|
27
15
|
|
28
|
-
def self.find_by_name(name, opts={})
|
29
|
-
res = get "/organizations/find", :query => { :term => name }.merge(opts)
|
30
|
-
if res.ok?
|
31
|
-
Organization.new_list(res)
|
32
|
-
else
|
33
|
-
bad_response(res)
|
34
|
-
end
|
35
16
|
end
|
36
|
-
|
37
17
|
end
|
38
|
-
|
39
18
|
end
|
data/lib/pipedrive/person.rb
CHANGED
@@ -1,39 +1,12 @@
|
|
1
1
|
module Pipedrive
|
2
|
-
|
3
2
|
class Person < Base
|
4
3
|
|
5
|
-
|
6
|
-
res = post "/persons", :body => opts
|
7
|
-
if res.success?
|
8
|
-
res['data'] = opts.merge res['data']
|
9
|
-
Person.new(res)
|
10
|
-
else
|
11
|
-
bad_response(res)
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
def self.find_or_create_by_name( name, opts={} )
|
16
|
-
find_by_name( name, :org_id => opts[:org_id] ).first || create( opts.merge( :name => name ) )
|
17
|
-
end
|
4
|
+
class << self
|
18
5
|
|
19
|
-
|
20
|
-
|
21
|
-
if res.ok?
|
22
|
-
Person.new(res)
|
23
|
-
else
|
24
|
-
bad_response(res)
|
6
|
+
def find_or_create_by_name(name, opts={})
|
7
|
+
find_by_name(name, :org_id => opts[:org_id]).first || create(opts.merge(:name => name))
|
25
8
|
end
|
26
|
-
end
|
27
9
|
|
28
|
-
def self.find_by_name(name, opts={})
|
29
|
-
res = get "/persons/find", :query => { :term => name }.merge(opts)
|
30
|
-
if res.ok?
|
31
|
-
Person.new_list(res)
|
32
|
-
else
|
33
|
-
bad_response(res)
|
34
|
-
end
|
35
10
|
end
|
36
|
-
|
37
11
|
end
|
38
|
-
|
39
12
|
end
|
data/pipedrive-ruby.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "pipedrive-ruby"
|
8
|
-
s.version = "0.2.
|
8
|
+
s.version = "0.2.5"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
-
s.authors = ["
|
12
|
-
s.date = "
|
11
|
+
s.authors = ["Jan Schwenzien", "Waldemar Kusnezow"]
|
12
|
+
s.date = "2013-02-09"
|
13
13
|
s.description = "Ruby wrapper for the Pipedrive API"
|
14
14
|
s.email = "jan@general-scripting.com"
|
15
15
|
s.extra_rdoc_files = [
|
@@ -27,6 +27,7 @@ Gem::Specification.new do |s|
|
|
27
27
|
"lib/pipedrive/deal.rb",
|
28
28
|
"lib/pipedrive/organization.rb",
|
29
29
|
"lib/pipedrive/person.rb",
|
30
|
+
"lib/pipedrive/product.rb",
|
30
31
|
"pipedrive-ruby.gemspec",
|
31
32
|
"test/helper.rb",
|
32
33
|
"test/test_pipedrive-rails.rb"
|
metadata
CHANGED
@@ -1,17 +1,16 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pipedrive-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
|
-
- Waldemar Kusnezow
|
9
8
|
- Jan Schwenzien
|
10
|
-
-
|
9
|
+
- Waldemar Kusnezow
|
11
10
|
autorequire:
|
12
11
|
bindir: bin
|
13
12
|
cert_chain: []
|
14
|
-
date:
|
13
|
+
date: 2013-02-09 00:00:00.000000000 Z
|
15
14
|
dependencies:
|
16
15
|
- !ruby/object:Gem::Dependency
|
17
16
|
name: httparty
|
@@ -127,6 +126,7 @@ files:
|
|
127
126
|
- lib/pipedrive/deal.rb
|
128
127
|
- lib/pipedrive/organization.rb
|
129
128
|
- lib/pipedrive/person.rb
|
129
|
+
- lib/pipedrive/product.rb
|
130
130
|
- pipedrive-ruby.gemspec
|
131
131
|
- test/helper.rb
|
132
132
|
- test/test_pipedrive-rails.rb
|
@@ -145,7 +145,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
145
145
|
version: '0'
|
146
146
|
segments:
|
147
147
|
- 0
|
148
|
-
hash:
|
148
|
+
hash: -526297699486921758
|
149
149
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
150
150
|
none: false
|
151
151
|
requirements:
|