data-com-api 0.1.5 → 0.2.0
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.
- checksums.yaml +8 -8
- data/README.md +4 -1
- data/lib/data-com-api/responses/search_base.rb +21 -3
- data/lib/data-com-api/version.rb +1 -1
- data/spec/models/client_spec.rb +62 -0
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MzFkNTgyOTc3YjczMzc2MWZiYzE3ODliZGI2YzJkN2I4YWRiNmQxNA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ZDI0ZGVjYmNkODgyNTgyYWFhYjY5Y2QyMGM1ZWIzNzdhMGFhOWE1Mw==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
M2YzY2M3NDUxNjhhYjg1MjAxNGZhZWI0N2U0MTg3NzgyZTAwMWM1ZjMyZDE4
|
10
|
+
YTcwYWNlYmVhZTg1MDc2ZjY3YzljZDdjOGU2MDY5YTRlMjBlYTg0YWI0MzQ4
|
11
|
+
ZTM2ZWEyNDdmYTM5Y2ZkNDc1OThkMjI3NmMxYTkyZjEzYzNhMWU=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
NjlhNjgzMWQzYjUzODZjNmI2Mjg3Zjg2M2Q3NDE4MWMzZjNkMmFlMDcyNWIw
|
14
|
+
NTY0NzY4NWY5OTM4YmNhYTkwMDA0ZTQwOWRlZmIxNDk3NWE5NTAwMDBhMDEz
|
15
|
+
OTI1ZjdiOTcxM2M1NzFkY2EwOTNkYzdjZGYzMGRkNmQyYjEwY2M=
|
data/README.md
CHANGED
@@ -6,7 +6,7 @@ Ruby bindings for Data.com API ( Salesforce, ex Jigsaw ).
|
|
6
6
|
|
7
7
|
Add this line to your application's Gemfile:
|
8
8
|
|
9
|
-
gem 'data-com-api', '~> 0.
|
9
|
+
gem 'data-com-api', '~> 0.2.0'
|
10
10
|
|
11
11
|
And then execute:
|
12
12
|
|
@@ -55,6 +55,9 @@ requesting `size`, `all`, `each` and such (keep reading).
|
|
55
55
|
The parameters accepted by this method are the keys of the [DataComApi::QueryParameters](https://github.com/Fire-Dragon-DoL/data-com-api/blob/master/lib/data-com-api/query_parameters.rb). Notice that you can use the key specified as `:from` for a more ruby-like
|
56
56
|
syntax.
|
57
57
|
|
58
|
+
**start_at_offset** and **end_at_offset**: This two new parameters allow your response to start fetching data at specified offset or end earlier (if
|
59
|
+
`end_at_offset` is bigger than max fetchable records, it will be ignored and code will handle things in standard way).
|
60
|
+
|
58
61
|
The returned object is a `DataComApi::SearchContact` which is mostly a [DataComApi::SearchBase](https://github.com/Fire-Dragon-DoL/data-com-api/blob/master/lib/data-com-api/responses/search_base.rb) instance with the following main methods:
|
59
62
|
- `size` which returns the `totalHits` field from the response
|
60
63
|
(it will perform a request only if none performed)
|
@@ -5,9 +5,22 @@ module DataComApi
|
|
5
5
|
# Abstract class
|
6
6
|
class SearchBase < Base
|
7
7
|
|
8
|
+
OFFSET_KEYS = [:start_at_offset, :end_at_offset].freeze
|
8
9
|
|
10
|
+
# Options accept 2 special params: :start_at_offset and :end_at_offset
|
11
|
+
# which is where the records will be start being fetched from
|
9
12
|
def initialize(api_client, received_options)
|
10
|
-
@
|
13
|
+
@start_at_offset = 0
|
14
|
+
@end_at_offset = nil
|
15
|
+
|
16
|
+
unless received_options[OFFSET_KEYS[0]].nil?
|
17
|
+
@start_at_offset = received_options[OFFSET_KEYS[0]].to_i
|
18
|
+
end
|
19
|
+
unless received_options[OFFSET_KEYS[1]].nil?
|
20
|
+
@end_at_offset = received_options[OFFSET_KEYS[1]].to_i
|
21
|
+
end
|
22
|
+
|
23
|
+
@options = received_options.reject { |key| OFFSET_KEYS.include? key.to_sym }
|
11
24
|
super(api_client)
|
12
25
|
|
13
26
|
# Cache pagesize, MUST NOT change between requests
|
@@ -56,9 +69,9 @@ module DataComApi
|
|
56
69
|
end
|
57
70
|
|
58
71
|
def each_with_index
|
59
|
-
total_records = 0
|
60
72
|
records_per_previous_page = page_size
|
61
|
-
current_offset =
|
73
|
+
current_offset = @start_at_offset
|
74
|
+
total_records = current_offset
|
62
75
|
|
63
76
|
loop do
|
64
77
|
break if current_offset > self.real_max_offset
|
@@ -84,6 +97,11 @@ module DataComApi
|
|
84
97
|
|
85
98
|
@real_max_offset = client.max_offset
|
86
99
|
@real_max_offset = @real_max_offset - (@real_max_offset % page_size)
|
100
|
+
unless @end_at_offset.nil? || @real_max_offset < @end_at_offset
|
101
|
+
@real_max_offset = @end_at_offset
|
102
|
+
end
|
103
|
+
|
104
|
+
@real_max_offset
|
87
105
|
end
|
88
106
|
|
89
107
|
alias_method :to_a, :all
|
data/lib/data-com-api/version.rb
CHANGED
data/spec/models/client_spec.rb
CHANGED
@@ -159,6 +159,68 @@ describe DataComApi::Client do
|
|
159
159
|
|
160
160
|
end
|
161
161
|
|
162
|
+
context "when starting at different offset" do
|
163
|
+
|
164
|
+
describe "#each" do
|
165
|
+
before do
|
166
|
+
DataComApiStubRequests.stub_search_contact(
|
167
|
+
page_size: client.page_size,
|
168
|
+
total_hits: total_contacts_count
|
169
|
+
)
|
170
|
+
stub_request(
|
171
|
+
:get,
|
172
|
+
URI.join(
|
173
|
+
DataComApi::Client.base_uri, DataComApi::ApiURI.search_contact
|
174
|
+
).to_s
|
175
|
+
).with(
|
176
|
+
query: hash_including({
|
177
|
+
'offset' => '10',
|
178
|
+
'pageSize' => client.page_size.to_s
|
179
|
+
})
|
180
|
+
).to_return(
|
181
|
+
body: FactoryGirl.build(
|
182
|
+
:data_com_search_contact_response,
|
183
|
+
page_size: client.page_size,
|
184
|
+
totalHits: total_contacts_count
|
185
|
+
).to_json
|
186
|
+
)
|
187
|
+
end
|
188
|
+
|
189
|
+
let!(:total_contacts_count) { 10 }
|
190
|
+
|
191
|
+
it "is an array containing all records possible for request" do
|
192
|
+
start_at_offset = 2
|
193
|
+
response = client.search_contact(start_at_offset: start_at_offset)
|
194
|
+
contacts_count = 0
|
195
|
+
|
196
|
+
response.each { contacts_count += 1 }
|
197
|
+
expect(contacts_count).to eq(total_contacts_count - start_at_offset)
|
198
|
+
end
|
199
|
+
|
200
|
+
context "when ending at different offset" do
|
201
|
+
|
202
|
+
it "is an array containing all records possible for request" do
|
203
|
+
start_at_offset = 2
|
204
|
+
# XXX: BE EXTREMELY CAREFUL, use an odd number (0 counting as 1 record)
|
205
|
+
# otherwise test will fail because of the way I mocked web requests
|
206
|
+
# which are returning always 2 records, even if less are returned
|
207
|
+
end_at_offset = 7
|
208
|
+
contacts_count = 0
|
209
|
+
response = client.search_contact(
|
210
|
+
start_at_offset: start_at_offset,
|
211
|
+
end_at_offset: end_at_offset
|
212
|
+
)
|
213
|
+
|
214
|
+
response.each { contacts_count += 1 }
|
215
|
+
expect(contacts_count).to eq((end_at_offset + 1) - start_at_offset)
|
216
|
+
end
|
217
|
+
|
218
|
+
end
|
219
|
+
|
220
|
+
end
|
221
|
+
|
222
|
+
end
|
223
|
+
|
162
224
|
end
|
163
225
|
|
164
226
|
end
|