retailcrm 1.0.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.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/retailcrm.rb +386 -0
  3. metadata +44 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 628547b65ef69174b1078a72f18fa478ec180215
4
+ data.tar.gz: eed44d3358dd746f9e865f42e8d7d7948efb0739
5
+ SHA512:
6
+ metadata.gz: 34f3a694de6fd01e78196ddaae581bcb892d154ea79ceceb28b21478865f1519edb243f2ad70c044f63448b97ae8f16b7e2dcac2ae44e80891bbf67375215e5b
7
+ data.tar.gz: cae642d7b1444ca4405eaef03673c66cfd42104d44bc8123ac285bf6be4be8ca74f69cde249b120894f262901bd85a4d7485af493f80f9d576463f75a3ba0f9e
@@ -0,0 +1,386 @@
1
+ # encoding: utf-8
2
+
3
+ require 'net/http'
4
+ require 'net/https'
5
+ require 'uri'
6
+ require 'json'
7
+
8
+ # RetailCRM API Client
9
+ class Retailcrm
10
+
11
+ def initialize(url, key)
12
+ @rr_version = 3
13
+ @rr_url = "#{url}/api/v#{@rr_version}/"
14
+ @rr_key = key
15
+ @rr_params = { :apiKey => @rr_key }
16
+ end
17
+
18
+ ##
19
+ # === Get orders by filter
20
+ # http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
21
+ #
22
+ # Example:
23
+ # >> Retailcrm.orders(50, 2, {:email => 'test@example.com', :status => 'new'})
24
+ # => {...}
25
+ #
26
+ # Arguments:
27
+ # limit (Integer) (20|50|100)
28
+ # page (Integer)
29
+ # filter (Array)
30
+ def orders(filter = {}, limit = 20, page = 1)
31
+ url = "#{@rr_url}orders"
32
+ @rr_params[:limit] = limit
33
+ @rr_params[:page] = page
34
+ @rr_params[:filter] = filter.to_json
35
+ return make_request(url)
36
+ end
37
+
38
+ ##
39
+ # === Get orders by id (or externalId)
40
+ # http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
41
+ #
42
+ # Example:
43
+ # >> Retailcrm.orders_get(345, 'id')
44
+ # => {...}
45
+ #
46
+ # Arguments:
47
+ # id (Integer)
48
+ # by (String)
49
+ def orders_get(id, by = 'externalId')
50
+ url = "#{@rr_url}orders/#{id}"
51
+ if (by != 'externalId')
52
+ @rr_params[:by] = by
53
+ end
54
+ return make_request(url)
55
+ end
56
+
57
+ ##
58
+ # === Create order
59
+ # http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
60
+ #
61
+ # Example:
62
+ # >> Retailcrm.orders_create(order)
63
+ # => {...}
64
+ #
65
+ # Arguments:
66
+ # order (Array)
67
+ def orders_create(order)
68
+ url = "#{@rr_url}orders/create"
69
+ @rr_params[:order] = order.to_json
70
+ return make_request(url, 'post')
71
+ end
72
+
73
+ ##
74
+ # === Edit order
75
+ # http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
76
+ #
77
+ # Example:
78
+ # >> Retailcrm.orders_edit(order)
79
+ # => {...}
80
+ #
81
+ # Arguments:
82
+ # order (Array)
83
+ def orders_edit(order)
84
+ id = order[:externalId]
85
+ url = "#{@rr_url}orders/#{id}/edit"
86
+ @rr_params[:order] = order.to_json
87
+ return make_request(url, 'post')
88
+ end
89
+
90
+ ##
91
+ # === Upload orders
92
+ # http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
93
+ #
94
+ # Example:
95
+ # >> Retailcrm.orders_upload(orders)
96
+ # => {...}
97
+ #
98
+ # Arguments:
99
+ # orders (Array)
100
+ def orders_upload(orders)
101
+ url = "#{@rr_url}orders/upload"
102
+ @rr_params[:orders] = orders.to_json
103
+ result = JSON.parse(make_request(url, 'post'))
104
+ return result[:uploadedOrders] || result
105
+ end
106
+
107
+ ##
108
+ # === Set external ids for orders created into CRM
109
+ # http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
110
+ #
111
+ # Example:
112
+ # >> Retailcrm.orders_fix_external_ids([{:id => 200, :externalId => 334}, {:id => 201, :externalId => 364}])
113
+ # => {...}
114
+ #
115
+ # Arguments:
116
+ # orders (Array)
117
+ def orders_fix_external_ids(orders)
118
+ url = "#{@rr_url}orders/fix-external-ids"
119
+ @rr_params[:orders] = orders.to_json
120
+ return make_request(url, 'post')
121
+ end
122
+
123
+ ##
124
+ # === Get orders history
125
+ # http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
126
+ #
127
+ # Example:
128
+ # >> Retailcrm.orders_history('2015-04-10 22:23:12', '2015-04-10 23:33:12')
129
+ # => {...}
130
+ #
131
+ # Arguments:
132
+ # startDate (Time) (Time.strftime('%Y-%m-%d %H:%M:%S'))
133
+ # endDate (Time) (Time.strftime('%Y-%m-%d %H:%M:%S'))
134
+ # limit (Integer) (20|50|100)
135
+ # offset (Integer)
136
+ def orders_history(startDate = nil, endDate = nil, limit = 20, offset = 0)
137
+ url = "#{@rr_url}orders/history"
138
+ @rr_params[:startDate] = startDate
139
+ @rr_params[:endDate] = endDate
140
+ @rr_params[:limit] = limit
141
+ @rr_params[:offset] = offset
142
+ return make_request(url)
143
+ end
144
+
145
+ ##
146
+ # === Get orders statuses
147
+ # http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
148
+ #
149
+ # Example:
150
+ # >> Retailcrm.orders_statuses([231,244,356,564])
151
+ # => {...}
152
+ #
153
+ # Arguments:
154
+ # ids (Array)
155
+ def orders_statuses(ids)
156
+ url = "#{@rr_url}orders/statuses/#{ids}"
157
+ return make_request(url)
158
+ end
159
+
160
+ ##
161
+ # === Get customers by id (or externalId)
162
+ # http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
163
+ #
164
+ # Example:
165
+ # >> Retailcrm.customers_get(345, 'id')
166
+ # => {...}
167
+ #
168
+ # Arguments:
169
+ # id (Integer)
170
+ # by (String)
171
+ def customers_get(id, by = 'externalId')
172
+ url = "#{@rr_url}customers/#{id}"
173
+ if (by != 'externalId')
174
+ @rr_params[:by] = by
175
+ end
176
+ return make_request(url)
177
+ end
178
+
179
+ ##
180
+ # === Create customer
181
+ # http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
182
+ #
183
+ # Example:
184
+ # >> Retailcrm.customer_create(customer)
185
+ # => {...}
186
+ #
187
+ # Arguments:
188
+ # customer (Array)
189
+ def customers_create(customer)
190
+ url = "#{@rr_url}customers/create"
191
+ @rr_params[:customer] = customer.to_json
192
+ return make_request(url, 'post')
193
+ end
194
+
195
+ ##
196
+ # === Edit customer
197
+ # http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
198
+ #
199
+ # Example:
200
+ # >> Retailcrm.customers_edit(customer)
201
+ # => {...}
202
+ #
203
+ # Arguments:
204
+ # customer (Array)
205
+ def customers_edit(customer, id)
206
+ url = "#{@rr_url}customers/#{id}/edit"
207
+ @rr_params[:customer] = customer.to_json
208
+ return make_request(url, 'post')
209
+ end
210
+
211
+ ##
212
+ # === Upload customers
213
+ # http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
214
+ #
215
+ # Example:
216
+ # >> Retailcrm.customers_upload(customers)
217
+ # => {...}
218
+ #
219
+ # Arguments:
220
+ # customers (Array)
221
+ def customers_upload(customers)
222
+ url = "#{@rr_url}customers/upload"
223
+ @rr_params[:customers] = customers.to_json
224
+ result = JSON.parse(make_request(url, 'post'))
225
+ return result[:uploaded] || result
226
+ end
227
+
228
+ ##
229
+ # === Set external ids for customers created into CRM
230
+ # http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
231
+ #
232
+ # Example:
233
+ # >> Retailcrm.customers_fix_external_ids([{:id => 200, :externalId => 334}, {:id => 201, :externalId => 364}])
234
+ # => {...}
235
+ #
236
+ # Arguments:
237
+ # customers (Array)
238
+ def customers_fix_external_ids(customers)
239
+ url = "#{@rr_url}customers/fix-external-ids"
240
+ @rr_params[:customers] = customers.to_json
241
+ return make_request(url, 'post')
242
+ end
243
+
244
+ ##
245
+ # === Get delivery services
246
+ # http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
247
+ #
248
+ def delivery_services
249
+ url = "#{@rr_url}reference/delivery-services"
250
+ return make_request(url)
251
+ end
252
+
253
+ # Get delivery types
254
+ # http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
255
+ #
256
+ def delivery_types
257
+ url = "#{@rr_url}reference/delivery-types"
258
+ return make_request(url)
259
+ end
260
+
261
+ ##
262
+ # === Get order methods
263
+ # http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
264
+ #
265
+ def order_methods
266
+ url = "#{@rr_url}reference/order-methods"
267
+ return make_request(url)
268
+ end
269
+
270
+ ##
271
+ # === Get order types
272
+ # http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
273
+ #
274
+ def order_types
275
+ url = "#{@rr_url}reference/order-types"
276
+ return make_request(url)
277
+ end
278
+
279
+ # Get payment statuses
280
+ # http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
281
+ #
282
+ def payment_statuses
283
+ url = "#{@rr_url}reference/payment-statuses"
284
+ return make_request(url)
285
+ end
286
+
287
+ ##
288
+ # === Get payment types
289
+ # http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
290
+ #
291
+ def payment_types
292
+ url = "#{@rr_url}reference/payment-types"
293
+ return make_request(url)
294
+ end
295
+
296
+ ##
297
+ # === Get product statuses
298
+ # http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
299
+ #
300
+ def product_statuses
301
+ url = "#{@rr_url}reference/product-statuses"
302
+ return make_request(url)
303
+ end
304
+
305
+ # Get sites list
306
+ # http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
307
+ #
308
+ def sites
309
+ url = "#{@rr_url}reference/sites"
310
+ return make_request(url)
311
+ end
312
+
313
+ ##
314
+ # === Get status groups
315
+ # http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
316
+ #
317
+ def status_groups
318
+ url = "#{@rr_url}reference/status-groups"
319
+ return make_request(url)
320
+ end
321
+
322
+ # Get statuses
323
+ # http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
324
+ #
325
+ def statuses
326
+ url = "#{@rr_url}reference/statuses"
327
+ return make_request(url)
328
+ end
329
+
330
+ ##
331
+ # === Get stores
332
+ # http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
333
+ #
334
+ def stores
335
+ url = "#{@rr_url}reference/stores"
336
+ return make_request(url)
337
+ end
338
+
339
+
340
+ ##
341
+ # === Statistic update
342
+ # http://www.retailcrm.ru/docs/Разработчики/СправочникМетодовAPIV3
343
+ #
344
+ def statistic_update
345
+ url = "#{@rr_url}statistic/update"
346
+ return make_request(url)
347
+ end
348
+
349
+ protected
350
+
351
+ def make_request(url, method='get')
352
+ raise ArgumentError, 'url must be not empty' unless !url.empty?
353
+ uri = URI.parse(url)
354
+ https = Net::HTTP.new(uri.host, uri.port)
355
+ https.use_ssl = true
356
+ if method == 'post'
357
+ request = Net::HTTP::Post.new(uri)
358
+ request.set_form_data(@rr_params)
359
+ elsif method == 'get'
360
+ request = Net::HTTP::Get.new(uri.path)
361
+ request.set_form_data(@rr_params)
362
+ request = Net::HTTP::Get.new("#{uri.path}?#{request.body}")
363
+ end
364
+ response = https.request(request)
365
+ return Retailcrm::Response.new(response.code, response.body)
366
+ end
367
+ end
368
+
369
+ class Retailcrm::Response
370
+ def initialize(status, body)
371
+ @status = status
372
+ @response = body.empty? ? [] : JSON.parse(body);
373
+ end
374
+
375
+ def get_status
376
+ return @status
377
+ end
378
+
379
+ def get_response
380
+ return @response
381
+ end
382
+
383
+ def is_successfull?
384
+ return @status.to_i < 400
385
+ end
386
+ end
metadata ADDED
@@ -0,0 +1,44 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: retailcrm
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Alex Lushpai
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-04-13 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Library for interact with RetailCRM API
14
+ email: lushpai@gmail.com
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/retailcrm.rb
20
+ homepage: http://rubygems.org/gems/retailcrm
21
+ licenses:
22
+ - MIT
23
+ metadata: {}
24
+ post_install_message:
25
+ rdoc_options: []
26
+ require_paths:
27
+ - lib
28
+ required_ruby_version: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ required_rubygems_version: !ruby/object:Gem::Requirement
34
+ requirements:
35
+ - - ">="
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ requirements: []
39
+ rubyforge_project:
40
+ rubygems_version: 2.2.2
41
+ signing_key:
42
+ specification_version: 4
43
+ summary: RetailCRM Rest API client
44
+ test_files: []