data-com-api 0.1.5 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|