recharge-api 0.0.1 → 0.0.2

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
- SHA1:
3
- metadata.gz: 38da2ffc86ba27bea660a00c153e74ffe72fc054
4
- data.tar.gz: eed4ac714a4c95f27791c196fbe8c74a2e458b63
2
+ SHA256:
3
+ metadata.gz: 9f3a7eb0f67af92f82030c6051b89285c6b12a0e6eeb6d959d0b3ce9ca467c62
4
+ data.tar.gz: 2ee8e765979f5b691ac980e9a4cc691069e6bfe1b672d36ddd0a816ecaaabed8
5
5
  SHA512:
6
- metadata.gz: 3b0e967d97687f1df95f7c981bae8846fd62736e246ff186087c40fb005f4711321652450475ccaff461b7ff915c3e7d4479c74e8021fe5794b67c7b1902a171
7
- data.tar.gz: fab06c67606cd8052deb664ebaea1d1adc1b7615cd6777080c737ccfb05ea53bf0fc56e4ab02a4cab480c3c05c333b5297410d5fbb2702f1c27c3e6c3d44ec3a
6
+ metadata.gz: 6ea64a155cd959427bf2e7cc39c2e657ee9e42915a13639b26fc58146b4a061c489d92dfdca43dd6e8266be6ef6c47a600e67522f9a1a973c9eea73999565024
7
+ data.tar.gz: ec422be602cb58ac9272bb70bee0a53a4423f94986c9fed5a1626c6e0e6c8db988cf02db64a9eb2563b5857c86c8874b681117a24a840e46bbc21aa0de7a661e
@@ -1,12 +1,15 @@
1
1
  language: ruby
2
2
  sudo: false
3
+ cache: bundler
3
4
  rvm:
4
- - 2.1
5
- - 2.2
6
5
  - 2.3
7
6
  - 2.4
7
+ - 2.5
8
+ - 2.6
9
+ - 2.7
8
10
 
9
- before_install: gem update bundler
11
+ before_install:
12
+ - gem update bundler
10
13
 
11
14
  notifications:
12
15
  email: false
data/README.md CHANGED
@@ -17,6 +17,9 @@ Bundler:
17
17
 
18
18
  ## Usage
19
19
 
20
+ An API key is required. The key can be set via `ReCharge.api_key` or via the `RECHARGE_API_KEY`
21
+ environment variable.
22
+
20
23
  ```rb
21
24
  require "recharge"
22
25
 
@@ -64,16 +67,27 @@ For complete documentation refer to the API docs: http://rdoc.info/gems/recharge
64
67
 
65
68
  ## Rake Tasks for Webhook Management
66
69
 
67
- Requiring `recharge/tasks` will include several Rake tasks for webhook management.
68
- All tasks require `RECHARGE_API_KEY` be set.
70
+ Add the following to your `Rakefile`:
71
+
72
+ ```rb
73
+ require "recharge/tasks"
74
+ ```
69
75
 
70
- The hooks are:
76
+ This will add the following tasks:
71
77
 
72
78
  * `recharge:hook:create` - create webhook `HOOK` to be sent to `CALLBACK`
73
79
  * `recharge:hooks:delete` - delete the webhook(s) given by `ID`
74
80
  * `recharge:hooks:delete_all` - delete all webhooks
75
81
  * `recharge:hooks:list` - list webhooks
76
82
 
83
+ All tasks require `RECHARGE_API_KEY` be set.
84
+
85
+ For example, to create a hook run the following:
86
+
87
+ ```
88
+ rake recharge:hooks:create RECHARGE_API_KEY=YOURKEY HOOK=subscription/created CALLBACK=https://example.com/callback
89
+ ```
90
+
77
91
  ## License
78
92
 
79
93
  Released under the MIT License: www.opensource.org/licenses/MIT
@@ -11,7 +11,8 @@ module Recharge
11
11
  ConnectionError = Class.new(Error)
12
12
 
13
13
  #
14
- # Raised when a non-2XX HTTP response is returned
14
+ # Raised when a non-2XX HTTP response is returned or a response with
15
+ # an error or warning property
15
16
  #
16
17
  class RequestError < Error
17
18
  attr_accessor :errors
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "json"
2
4
  require "class2"
3
5
  require "recharge/http_request"
@@ -8,28 +10,42 @@ class2 "Recharge", JSON.parse(<<-END) do
8
10
  {
9
11
  "id":10101,
10
12
  "address_id":178918,
13
+ "analytics_data": {},
11
14
  "customer_id":1438,
15
+ "cancellation_reason": "$$$$",
16
+ "cancellation_reason_comments": "",
17
+ "cancelled_at":"2017-02-28T20:31:29",
18
+ "charge_interval_frequency": "3",
12
19
  "created_at":"2017-02-28T20:31:29",
13
20
  "updated_at":"2017-02-28 20:31:29",
14
21
  "next_charge_scheduled_at":"2017-04-01T00:00:00",
15
22
  "cancelled_at":null,
23
+ "has_queued_charges": 1,
24
+ "is_skippable": true,
25
+ "is_swappable": true,
26
+ "is_prepaid": false,
27
+ "max_retries_reached": 0,
16
28
  "product_title":"Sumatra Coffee",
17
29
  "price":12,
18
30
  "quantity":1,
31
+ "recharge_product_id": 518676,
19
32
  "status":"ACTIVE",
20
33
  "shopify_product_id":1255183683,
21
34
  "shopify_variant_id":3844924611,
35
+ "sku_override": false,
22
36
  "sku":null,
23
37
  "order_interval_unit":"day",
24
38
  "order_interval_frequency":"30",
25
39
  "charge_interval_frequency":"30",
26
40
  "order_day_of_month":null,
27
41
  "order_day_of_week":null,
28
- "properties": []
42
+ "properties": [],
43
+ "variant_title": "Milk - a / b"
29
44
  },
30
45
  "charge":
31
46
  {
32
47
  "address_id":178918,
48
+ "analytics_data": {},
33
49
  "billing_address":{
34
50
  "address1":"3030 Nebraska Avenue",
35
51
  "address2":"",
@@ -50,11 +66,13 @@ class2 "Recharge", JSON.parse(<<-END) do
50
66
  "customer_hash":null,
51
67
  "customer_id":10101,
52
68
  "first_name":"Mike",
69
+ "has_uncommited_changes": false,
53
70
  "id":1843,
54
71
  "last_name":"Flynn",
55
72
  "line_items":[
56
73
  {
57
74
  "grams":0,
75
+ "images": {},
58
76
  "price":100.0,
59
77
  "properties":[],
60
78
  "quantity":1,
@@ -67,6 +85,9 @@ class2 "Recharge", JSON.parse(<<-END) do
67
85
  "subscription_id":14562
68
86
  }
69
87
  ],
88
+ "note": "blah blah",
89
+ "note_attributes": [],
90
+ "processor_name": "foo",
70
91
  "processed_at":"2014-11-20T00:00:00",
71
92
  "scheduled_at":"2014-11-20T00:00:01",
72
93
  "shipments_count":null,
@@ -82,10 +103,20 @@ class2 "Recharge", JSON.parse(<<-END) do
82
103
  "province":"California",
83
104
  "zip":"90404"
84
105
  },
106
+ "shipping_lines": [],
85
107
  "shopify_order_id":"281223307",
86
108
  "status":"SUCCESS",
87
109
  "total_price":446.00,
88
- "updated_at":"2016-09-05T09:19:29"
110
+ "updated_at":"2016-09-05T09:19:29",
111
+ "tax_lines": 0,
112
+ "total_discounts": "0.0",
113
+ "total_line_items_price": "12.00",
114
+ "total_price": "12.00",
115
+ "total_refunds": null,
116
+ "total_tax": 0,
117
+ "total_weight": 4536,
118
+ "transaction_id": "cch_1Du2QpJ2iqHvZRd18RyqoPvc",
119
+ "type": "RECURRING"
89
120
  },
90
121
  "customer":
91
122
  {
@@ -108,7 +139,10 @@ class2 "Recharge", JSON.parse(<<-END) do
108
139
  "billing_country": "United States",
109
140
  "billing_phone": "3103843698",
110
141
  "processor_type": null,
111
- "status": "FOO"
142
+ "status": "FOO",
143
+ "stripe_customer_token": "123123",
144
+ "paypal_customer_token": "123123",
145
+ "braintree_customer_token": "123123"
112
146
  },
113
147
  "order": {
114
148
  "id":7271806,
@@ -168,11 +202,49 @@ class2 "Recharge", JSON.parse(<<-END) do
168
202
  "country":"United States"
169
203
  }
170
204
  },
171
- "webhook":
172
- {
173
- "id":6,
174
- "address":"https://request.in/foo",
175
- "topic":"order/create"
205
+ "metafield": {
206
+ "created_at": "2018-11-05T12:59:30",
207
+ "description": "desc lorem ipsum",
208
+ "id": 15,
209
+ "key": "marjan",
210
+ "namespace": "nmsp2c",
211
+ "owner_id": 17868054,
212
+ "owner_resource": "customer",
213
+ "updated_at": "2018-11-05T15:48:42",
214
+ "value": "5",
215
+ "value_type": "integer"
216
+ },
217
+ "product": {
218
+ "collection_id": null,
219
+ "created_at": "2019-11-07T11:36:19",
220
+ "discount_amount": 15.0,
221
+ "discount_type": "percentage",
222
+ "handle": null,
223
+ "id": 1327844,
224
+ "images": {},
225
+ "product_id": 4354268856408,
226
+ "shopify_product_id": 4354268856408,
227
+ "subscription_defaults": {
228
+ "charge_interval_frequency": 4,
229
+ "cutoff_day_of_month": null,
230
+ "cutoff_day_of_week": null,
231
+ "expire_after_specific_number_of_charges": null,
232
+ "modifiable_properties": [],
233
+ "number_charges_until_expiration": null,
234
+ "order_day_of_month": 0,
235
+ "order_day_of_week": null,
236
+ "order_interval_frequency": 4,
237
+ "order_interval_frequency_options": [],
238
+ "order_interval_unit": "month",
239
+ "storefront_purchase_options": "subscription_only"
240
+ },
241
+ "title": "T-shirt",
242
+ "updated_at": "2019-11-07T14:04:52"
243
+ },
244
+ "webhook": {
245
+ "id":6,
246
+ "address":"https://request.in/foo",
247
+ "topic":"order/create"
176
248
  },
177
249
  "address":{
178
250
  "id":3411137,
@@ -186,6 +258,26 @@ class2 "Recharge", JSON.parse(<<-END) do
186
258
  "company":"bootstrap",
187
259
  "phone":"3103103101",
188
260
  "country":"United States"
261
+ },
262
+ "discount":{
263
+ "id": 3748296,
264
+ "code": "Discount1",
265
+ "value": 12,
266
+ "ends_at": "2019-12-15T00:00:00",
267
+ "starts_at": "2018-05-16T00:00:00",
268
+ "status": "enabled",
269
+ "usage_limit": 10,
270
+ "applies_to_id": null,
271
+ "discount_type": "percentage",
272
+ "applies_to": null,
273
+ "applies_to_resource": null,
274
+ "times_used": 0,
275
+ "duration": "usage_limit",
276
+ "duration_usage_limit": 10,
277
+ "applies_to_product_type": "ALL",
278
+ "created_at": "2018-04-25T14:32:39",
279
+ "updated_at": "2018-05-04T13:33:53",
280
+ "once_per_customer": false
189
281
  }
190
282
  }
191
283
  END
@@ -348,6 +440,58 @@ module Recharge
348
440
  end
349
441
  end
350
442
 
443
+ class Discount
444
+ PATH = "/discounts".freeze
445
+ SINGLE = "discount".freeze
446
+ COLLECTION = "discounts"
447
+
448
+ extend HTTPRequest::Count
449
+ extend HTTPRequest::Create
450
+ extend HTTPRequest::Delete
451
+ extend HTTPRequest::Get
452
+ extend HTTPRequest::List
453
+ extend HTTPRequest::Update
454
+
455
+ include Persistable
456
+
457
+ def self.count(options = nil)
458
+ super(convert_date_params(options, :created_at_max, :created_at_min, :date_min, :date_max))
459
+ end
460
+
461
+ def self.list(options = nil)
462
+ super(convert_date_params(options, :created_at, :created_at_max, :updated_at, :updated_at_max))
463
+ end
464
+
465
+ def delete
466
+ self.class.delete(id)
467
+ true
468
+ end
469
+ end
470
+
471
+ class Metafield
472
+ PATH = "/metafields"
473
+ SINGLE = "metafield"
474
+ COLLECTION = "metafields"
475
+
476
+ extend HTTPRequest::Count
477
+ extend HTTPRequest::Create
478
+ extend HTTPRequest::Delete
479
+ extend HTTPRequest::Get
480
+ extend HTTPRequest::List
481
+
482
+ include Persistable
483
+
484
+ def self.list(owner, options = nil)
485
+ raise ArgumentError, "owner resource required" if owner.nil? || owner.to_s.strip.empty?
486
+ super (options||{}).merge(:owner_resource => owner)
487
+ end
488
+
489
+ def delete
490
+ self.class.delete(id)
491
+ true
492
+ end
493
+ end
494
+
351
495
  class Order
352
496
  PATH = "/orders".freeze
353
497
  SINGLE = "order".freeze
@@ -373,6 +517,16 @@ module Recharge
373
517
  end
374
518
  end
375
519
 
520
+ class Product
521
+ PATH = "/products".freeze
522
+ SINGLE = "product".freeze
523
+ COLLECTION = "products".freeze
524
+
525
+ extend HTTPRequest::Count
526
+ extend HTTPRequest::Get
527
+ extend HTTPRequest::List
528
+ end
529
+
376
530
  class Subscription
377
531
  PATH = "/subscriptions".freeze
378
532
  SINGLE = "subscription".freeze
@@ -3,8 +3,8 @@ require "uri"
3
3
  require "json"
4
4
 
5
5
  # For iso8601
6
- require "date"
7
- require "time"
6
+ #require "date"
7
+ #require "time"
8
8
 
9
9
  module Recharge
10
10
  module HTTPRequest # :nodoc:
@@ -56,7 +56,7 @@ module Recharge
56
56
  private
57
57
 
58
58
  def request(req, data = {})
59
- req[TOKEN_HEADER] = ReCharge.api_key || ""
59
+ req[TOKEN_HEADER] = ReCharge.api_key || ENV["RECHARGE_API_KEY"] || ""
60
60
  req["User-Agent"] = USER_AGENT
61
61
 
62
62
  if req.request_body_permitted? && data && data.any?
@@ -66,7 +66,8 @@ module Recharge
66
66
 
67
67
  connection.start do |http|
68
68
  res = http.request(req)
69
- data = res["Content-Type"] == "application/json" ? parse_json(res.body) : {}
69
+ # API returns 204 but content-type header is set to application/json so check body
70
+ data = res.body && res["Content-Type"] == "application/json" ? parse_json(res.body) : {}
70
71
  data["meta"] = { "id" => res["X-Request-Id"], "limit" => res["X-Recharge-Limit"] }
71
72
 
72
73
  return data if res.code[0] == "2" && !data["warning"] && !data["error"]
@@ -185,7 +186,7 @@ module Recharge
185
186
  end
186
187
 
187
188
  #
188
- # Retrieve a page of records for the included/extended class'
189
+ # Retrieve a page of records for the included/extended class' endpoint
189
190
  #
190
191
  # === Arguments
191
192
  #
@@ -1,3 +1,3 @@
1
1
  module Recharge
2
- VERSION = "0.0.1".freeze
2
+ VERSION = "0.0.2".freeze
3
3
  end
@@ -20,8 +20,10 @@ Gem::Specification.new do |spec|
20
20
  spec.require_paths = ["lib"]
21
21
 
22
22
  spec.add_dependency "class2", "~> 0.3.0"
23
+ # Keep this until we can upgrade class2
24
+ # We don't upgrade yet because versions > 3 default to Symbol keys
25
+ spec.add_dependency "activesupport", "< 6"
23
26
  spec.add_development_dependency "webmock", "~> 3.0"
24
- spec.add_development_dependency "bundler", "~> 1.12"
25
- spec.add_development_dependency "rake", "~> 10.0"
27
+ spec.add_development_dependency "rake", ">= 12.3.3"
26
28
  spec.add_development_dependency "rspec", "~> 3.0"
27
29
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: recharge-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Skye Shaw
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-12-06 00:00:00.000000000 Z
11
+ date: 2020-05-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: class2
@@ -25,47 +25,47 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: 0.3.0
27
27
  - !ruby/object:Gem::Dependency
28
- name: webmock
28
+ name: activesupport
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - "<"
32
32
  - !ruby/object:Gem::Version
33
- version: '3.0'
34
- type: :development
33
+ version: '6'
34
+ type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - "<"
39
39
  - !ruby/object:Gem::Version
40
- version: '3.0'
40
+ version: '6'
41
41
  - !ruby/object:Gem::Dependency
42
- name: bundler
42
+ name: webmock
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '1.12'
47
+ version: '3.0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '1.12'
54
+ version: '3.0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rake
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - "~>"
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
- version: '10.0'
61
+ version: 12.3.3
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - "~>"
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
- version: '10.0'
68
+ version: 12.3.3
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rspec
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -120,7 +120,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
120
120
  version: '0'
121
121
  requirements: []
122
122
  rubyforge_project:
123
- rubygems_version: 2.6.14
123
+ rubygems_version: 2.7.6
124
124
  signing_key:
125
125
  specification_version: 4
126
126
  summary: Client for ReCharge Payments API