pipekit 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a97ca3462a69b58e56337a81273147db6d6b81ca
4
- data.tar.gz: a58a9d65ecd33575e907d124a69670692843e8e1
3
+ metadata.gz: 981bfd42ed2e6376d3c1be868c3bdf613cc9db3c
4
+ data.tar.gz: 19a904f8f395f64092e0eb7d53dbf927c2c6a225
5
5
  SHA512:
6
- metadata.gz: 09e9a02a4d5021799ca0cf39a96b55d7c0b5a136c8f0427428037f395034ce203c575421fbacc36559198676fce62f3c3f24ed6b07b99cb8594ad4173d3b8f0b
7
- data.tar.gz: 649b62d3e62ae41873880705282876663943b8e0ce38659482814fde8db3140ba8617bdf54a9905b2888679e0be71cdeb6cf7d05d0fc9862b361a32994f3b70b
6
+ metadata.gz: 34a620ac856281d038cb4f24feffd15be0d06b64f64eb7475e02161f9b80f8d794712d4f5778d020e928b96379b9c19cd634c0c18ecc0ee10fd131e29541c693
7
+ data.tar.gz: 48809728f9edfca1c12abc4b6ec5e4bb11b7ec6a453ee607229c63d1c044da49e31c36b04e9dd865ab21ed93f99467642b6ca1bddfe976a3bf17e32153e81297
@@ -69,6 +69,10 @@ module Pipekit
69
69
  config.fetch(key.to_s, default)
70
70
  end
71
71
 
72
+ def set(key, value)
73
+ config[key.to_s] = value
74
+ end
75
+
72
76
  def custom_fields(resource)
73
77
  fetch("fields", {})
74
78
  .fetch(resource.to_s, {})
@@ -1,6 +1,5 @@
1
1
  module Pipekit
2
2
  class DealField
3
- include Repository
4
3
  include FieldRepository
5
4
  end
6
5
  end
@@ -1,25 +1,34 @@
1
1
  module Pipekit
2
2
  module FieldRepository
3
- def get_by_key(key)
4
- key = Config.field_id(parent_resource, key)
5
- search_fields("key", key)
6
- end
3
+ include Repository
4
+ def get_by_key(key)
5
+ key = Config.field_id(parent_resource, key)
6
+ search_fields("key", key)
7
+ end
7
8
 
8
- def get_by_name(name)
9
- search_fields("name", name)
10
- end
9
+ def get_by_name(name)
10
+ search_fields("name", name)
11
+ end
11
12
 
12
- private
13
+ def find_label(field:,id:)
14
+ find_values(field).find({}) { |value| value["id"] == id }.fetch("label")
15
+ end
13
16
 
14
- def search_fields(field_element, value)
15
- result = request.get.select { |element| element[field_element] == value }
17
+ def find_values(field)
18
+ find_by(name: field)["options"]
19
+ end
16
20
 
17
- raise ResourceNotFoundError.new("#{parent_resource}Field searching by element #{field_element} for #{value} could not be found") if result.empty?
18
- result
19
- end
21
+ private
20
22
 
21
- def parent_resource
22
- resource.chomp("Field")
23
- end
23
+ def search_fields(field_element, value)
24
+ result = request.get.select { |element| element[field_element] == value }
25
+
26
+ raise ResourceNotFoundError.new("#{parent_resource}Field searching by element #{field_element} for #{value} could not be found") if result.empty?
27
+ result
28
+ end
29
+
30
+ def parent_resource
31
+ resource.chomp("Field")
32
+ end
24
33
  end
25
34
  end
@@ -10,9 +10,13 @@ module Pipekit
10
10
  request.get("find", term: name)
11
11
  end
12
12
 
13
- def create_or_update(fields)
14
- person = find_by(email: fields[:email])
13
+ def update_by_email(email, fields)
14
+ person = find_by(email: email)
15
15
  update(person["id"], fields)
16
+ end
17
+
18
+ def create_or_update(fields)
19
+ update_by_email(fields[:email], fields)
16
20
  rescue ResourceNotFoundError
17
21
  create(fields)
18
22
  end
@@ -1,6 +1,5 @@
1
1
  module Pipekit
2
2
  class PersonField
3
- include Repository
4
3
  include FieldRepository
5
4
  end
6
5
  end
@@ -5,8 +5,8 @@ module Pipekit
5
5
  @request = request || Request.new(resource)
6
6
  end
7
7
 
8
- def all
9
- get
8
+ def all(query = {})
9
+ request.get("", query)
10
10
  end
11
11
 
12
12
  # Public: Get all records from Pipedrive by **one** of the record's fields.
@@ -46,8 +46,8 @@ module Pipekit
46
46
  #
47
47
  # fields - fields for the record.
48
48
  #
49
- # Examples
50
49
  #
50
+ # Examples
51
51
  # create({name: "John Doe", deal_id: 123})
52
52
  #
53
53
  # Returns nothing.
@@ -68,16 +68,6 @@ module Pipekit
68
68
  request.put(id, fields)
69
69
  end
70
70
 
71
- def self.included(base)
72
- base.extend(ClassMethods)
73
- end
74
-
75
- module ClassMethods
76
- def resource
77
- to_s.split("::").last.tap { |name| name[0] = name[0].downcase }
78
- end
79
- end
80
-
81
71
  private
82
72
 
83
73
  attr_reader :request
@@ -103,7 +93,7 @@ module Pipekit
103
93
  end
104
94
 
105
95
  def resource
106
- self.class.resource
96
+ self.class.to_s.split("::").last.tap { |name| name[0] = name[0].downcase }
107
97
  end
108
98
  end
109
99
  end
@@ -12,7 +12,7 @@ module Pipekit
12
12
 
13
13
  def initialize(resource)
14
14
  @resource = resource
15
- self.class.debug_output $stdout if Config.fetch("debug_requests")
15
+ self.class.debug_output $stdout if Config.fetch(:debug_requests)
16
16
  end
17
17
 
18
18
  # Public: Pipedrive /searchField API call.
@@ -31,14 +31,18 @@ module Pipekit
31
31
  #
32
32
  # Returns an array of Response objects or throws a ResourceNotFoundError if
33
33
  # it couldn't find anything.
34
+ #
35
+ # This also uses the "request_all_pages" config option when set to do
36
+ # multiple requests, getting around Pipedrive's pagination
34
37
  def search_by_field(field:, value:)
35
38
  query = {field_type: "#{resource}Field",
36
39
  field_key: Config.field_id(resource, field),
37
40
  return_item_ids: true,
38
- term: value
41
+ term: Config.field_value_id(resource, field, value),
42
+ exact_match: 1
39
43
  }
40
44
 
41
- response_from self.class.get("/searchResults/field", options(query: query))
45
+ get_request("/searchResults/field", query).response(resource)
42
46
  end
43
47
 
44
48
  # Public: Pipedrive GET API call - does a GET request to the Pipedrive API
@@ -52,8 +56,9 @@ module Pipekit
52
56
  # recursively call `#get` until all the pages of the request have been
53
57
  # fetched from pipedrive
54
58
  # Pipedrive until everything available has been received
55
- def get(id = nil, query = {})
56
- _get(id, query, get_request(id, query))
59
+ def get(id = "", query = {})
60
+ uri = uri(id)
61
+ _get(uri, query, get_request(uri, query))
57
62
  end
58
63
 
59
64
  def put(id, data)
@@ -68,13 +73,13 @@ module Pipekit
68
73
 
69
74
  attr_reader :resource
70
75
 
71
- def _get(id, query, result)
76
+ def _get(uri, query, result)
72
77
  return result.response(resource) unless result.fetch_next_request?
73
- _get(id, query, result + get_request(id, query, result.next_start))
78
+ _get(uri, query, result + get_request(uri, query, result.next_start))
74
79
  end
75
80
 
76
- def get_request(id, query, start = 0)
77
- response = self.class.get(uri(id), options(query: {limit: pagination_limit, start: start}.merge(query)))
81
+ def get_request(uri, query, start = 0)
82
+ response = self.class.get(uri, options(query: {limit: pagination_limit, start: start}.merge(query)))
78
83
  Result.new(response)
79
84
  end
80
85
 
@@ -82,13 +87,13 @@ module Pipekit
82
87
  Result.response(resource, response_data)
83
88
  end
84
89
 
85
- def uri(id = nil)
90
+ def uri(id = "")
86
91
  "/#{resource}s/#{id}".chomp("/")
87
92
  end
88
93
 
89
94
  def options(query: {}, body: {})
90
95
  {
91
- query: query.merge(api_token: Config.fetch("api_token")),
96
+ query: query.merge(api_token: Config.fetch(:api_token)),
92
97
  body: parse_body(body)
93
98
  }
94
99
  end
@@ -115,7 +120,7 @@ module Pipekit
115
120
  end
116
121
 
117
122
  def pagination_limit
118
- Config.fetch("pagination_limit", DEFAULT_PAGINATION_LIMIT)
123
+ Config.fetch(:pagination_limit, DEFAULT_PAGINATION_LIMIT)
119
124
  end
120
125
 
121
126
  end
@@ -1,9 +1,10 @@
1
1
  module Pipekit
2
2
  class Response
3
3
 
4
- def initialize(resource, data)
4
+ def initialize(resource, data, field_repository: nil)
5
5
  @resource = resource
6
6
  @data = data || {}
7
+ @field_repository = field_repository
7
8
  end
8
9
 
9
10
  def ==(other)
@@ -84,23 +85,20 @@ module Pipekit
84
85
 
85
86
  attr_reader :data, :resource
86
87
 
88
+ def field_repository
89
+ @field_repository ||= build_field_repository
90
+ end
91
+
87
92
  def fetch_value(key, default)
88
93
  data.fetch(convert_key(key), default)
89
94
  end
90
95
 
91
96
  def value_from_pipedrive(key, value)
92
97
  return unless value && !value.empty?
93
-
94
- option = field_repository
95
- .find_by(name: key)
96
- .fetch("options", [], choose_first_value: false)
97
- .find { |options| options["id"] == value.to_i }
98
-
99
- raise ResourceNotFoundError.new("Could not find field #{key}'s value '#{value}' on Pipedrive") unless option
100
- option.fetch("label")
98
+ field_repository.find_label(field: key, id: value)
101
99
  end
102
100
 
103
- def field_repository
101
+ def build_field_repository
104
102
  Object.const_get("Pipekit::#{resource.capitalize}Field").new
105
103
  end
106
104
 
@@ -18,7 +18,7 @@ module Pipekit
18
18
  end
19
19
 
20
20
  def fetch_next_request?
21
- Config.fetch("request_all_pages", true) && pagination_data["more_items_in_collection"]
21
+ Config.fetch(:request_all_pages, true) && pagination_data["more_items_in_collection"]
22
22
  end
23
23
 
24
24
  def next_start
@@ -66,7 +66,7 @@ module Pipekit
66
66
  end
67
67
 
68
68
  def message
69
- "Resource not found: #{@response}"
69
+ "Resource not found, response was: #{@response}"
70
70
  end
71
71
  end
72
72
 
@@ -1,3 +1,3 @@
1
1
  module Pipekit
2
- VERSION = "1.0.0"
2
+ VERSION = "1.0.1"
3
3
  end
data/pipekit.gemspec CHANGED
@@ -6,8 +6,8 @@ require 'pipekit/version'
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = "pipekit"
8
8
  spec.version = Pipekit::VERSION
9
- spec.authors = ["jafrog", "pitchinvasion", "spike01"]
10
- spec.email = ["irina@makersacademy.com", "leo@makersacademy.com", "spike@makersacademy.com"]
9
+ spec.authors = ["jafrog", "pitchinvasion", "spike01", "danldb"]
10
+ spec.email = ["irina@makersacademy.com", "leo@makersacademy.com", "spike@makersacademy.com", "dan@makersacademy.com"]
11
11
 
12
12
  spec.summary = %q{Pipedrive API client for Ruby.}
13
13
  spec.description = %q{Pipedrive API client for Ruby.}
metadata CHANGED
@@ -1,16 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pipekit
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - jafrog
8
8
  - pitchinvasion
9
9
  - spike01
10
+ - danldb
10
11
  autorequire:
11
12
  bindir: exe
12
13
  cert_chain: []
13
- date: 2016-08-31 00:00:00.000000000 Z
14
+ date: 2016-09-06 00:00:00.000000000 Z
14
15
  dependencies:
15
16
  - !ruby/object:Gem::Dependency
16
17
  name: httparty
@@ -101,6 +102,7 @@ email:
101
102
  - irina@makersacademy.com
102
103
  - leo@makersacademy.com
103
104
  - spike@makersacademy.com
105
+ - dan@makersacademy.com
104
106
  executables: []
105
107
  extensions: []
106
108
  extra_rdoc_files: []