chartmogul-ruby 0.1.4 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/README.md +11 -6
- data/bin/setup +1 -0
- data/changelog.md +4 -0
- data/fixtures/vcr_cassettes/{ChartMogul_Import_Customer → ChartMogul_Customer}/API_Interactions/correctly_handles_a_422_response.yml +3 -3
- data/fixtures/vcr_cassettes/{ChartMogul_Import_Customer → ChartMogul_Customer}/API_Interactions/correctly_interracts_with_the_API.yml +15 -15
- data/fixtures/vcr_cassettes/{ChartMogul_Import_Customer → ChartMogul_Customer}/_find_by_external_id/when_external_id_is_provided/returns_matching_user_if_exists.yml +2 -2
- data/fixtures/vcr_cassettes/{ChartMogul_Import_Customer → ChartMogul_Customer}/_find_by_external_id/when_external_id_is_provided/returns_nil_if_customer_does_not_exist.yml +2 -2
- data/fixtures/vcr_cassettes/{ChartMogul_Import_CustomerInvoices → ChartMogul_CustomerInvoices}/API_Interactions/correctly_interracts_with_the_API.yml +4 -4
- data/fixtures/vcr_cassettes/ChartMogul_DataSource/API_Interactions/correctly_interracts_with_the_API.yml +12 -12
- data/fixtures/vcr_cassettes/ChartMogul_DataSource/API_Interactions/correctly_raises_errors_on_404.yml +3 -3
- data/fixtures/vcr_cassettes/ChartMogul_DataSource/API_Interactions/correctly_raises_errors_on_422.yml +3 -3
- data/fixtures/vcr_cassettes/ChartMogul_DataSource/API_Interactions/retrieves_existing_data_source_matching_uuid.yml +101 -0
- data/fixtures/vcr_cassettes/ChartMogul_Enrichment_Customer/API_Interactions/raises_401_if_invalid_credentials.yml +38 -0
- data/fixtures/vcr_cassettes/ChartMogul_Ping/pings/and_fails_on_incorrect_credentials.yml +38 -0
- data/fixtures/vcr_cassettes/ChartMogul_Ping/pings/when_credentials_correct.yml +38 -0
- data/fixtures/vcr_cassettes/{ChartMogul_Import_Plan/API_Interractions → ChartMogul_Plan/API_Interactions}/correctly_handles_a_422_error.yml +3 -3
- data/fixtures/vcr_cassettes/{ChartMogul_Import_Plan/API_Interractions/correctly_interracts_with_the_API.yml → ChartMogul_Plan/API_Interactions/correctly_interacts_with_the_API.yml} +9 -9
- data/fixtures/vcr_cassettes/{ChartMogul_Import_DataSource/API_Interactions/correctly_interracts_with_the_API.yml → ChartMogul_Plan/API_Interactions/deletes_existing_plan.yml} +61 -52
- data/fixtures/vcr_cassettes/ChartMogul_Plan/API_Interactions/retrieves_existing_plan_by_uuid.yml +151 -0
- data/fixtures/vcr_cassettes/ChartMogul_Plan/API_Interactions/updates_existing_plan.yml +198 -0
- data/fixtures/vcr_cassettes/{ChartMogul_Import_Subscription → ChartMogul_Subscription}/API_Interactions/correctly_interracts_with_the_API.yml +4 -4
- data/fixtures/vcr_cassettes/{ChartMogul_Import_Transactions_Payment → ChartMogul_Transactions_Payment}/API_Interactions/correctly_interracts_with_the_API.yml +3 -3
- data/lib/chartmogul.rb +12 -11
- data/lib/chartmogul/api_resource.rb +12 -1
- data/lib/chartmogul/customer.rb +41 -0
- data/lib/chartmogul/customer_invoices.rb +42 -0
- data/lib/chartmogul/data_source.rb +22 -0
- data/lib/chartmogul/errors/unauthorized_error.rb +4 -0
- data/lib/chartmogul/invoice.rb +62 -0
- data/lib/chartmogul/line_items/one_time.rb +23 -0
- data/lib/chartmogul/line_items/subscription.rb +29 -0
- data/lib/chartmogul/ping.rb +14 -0
- data/lib/chartmogul/plan.rb +26 -0
- data/lib/chartmogul/subscription.rb +31 -0
- data/lib/chartmogul/transactions/payment.rb +24 -0
- data/lib/chartmogul/transactions/refund.rb +24 -0
- data/lib/chartmogul/version.rb +1 -1
- metadata +30 -24
- data/fixtures/vcr_cassettes/ChartMogul_Import_DataSource/API_Interactions/correctly_raises_errors_on_404.yml +0 -46
- data/fixtures/vcr_cassettes/ChartMogul_Import_DataSource/API_Interactions/correctly_raises_errors_on_422.yml +0 -48
- data/lib/chartmogul/import/customer.rb +0 -43
- data/lib/chartmogul/import/customer_invoices.rb +0 -44
- data/lib/chartmogul/import/data_source.rb +0 -19
- data/lib/chartmogul/import/invoice.rb +0 -64
- data/lib/chartmogul/import/line_items/one_time.rb +0 -25
- data/lib/chartmogul/import/line_items/subscription.rb +0 -31
- data/lib/chartmogul/import/plan.rb +0 -21
- data/lib/chartmogul/import/subscription.rb +0 -33
- data/lib/chartmogul/import/transactions/payment.rb +0 -26
- data/lib/chartmogul/import/transactions/refund.rb +0 -26
@@ -0,0 +1,198 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: post
|
5
|
+
uri: https://api.chartmogul.com/v1/data_sources
|
6
|
+
body:
|
7
|
+
encoding: UTF-8
|
8
|
+
string: '{"name":"Another Data Source"}'
|
9
|
+
headers:
|
10
|
+
User-Agent:
|
11
|
+
- Faraday v0.10.0
|
12
|
+
Content-Type:
|
13
|
+
- application/json
|
14
|
+
Authorization:
|
15
|
+
- Basic ZHVtbXktdG9rZW46ZHVtbXktdG9rZW4=
|
16
|
+
response:
|
17
|
+
status:
|
18
|
+
code: 201
|
19
|
+
message:
|
20
|
+
headers:
|
21
|
+
server:
|
22
|
+
- nginx/1.9.10
|
23
|
+
date:
|
24
|
+
- Sun, 05 Jun 2016 19:47:08 GMT
|
25
|
+
content-type:
|
26
|
+
- application/json; charset=utf-8
|
27
|
+
transfer-encoding:
|
28
|
+
- chunked
|
29
|
+
connection:
|
30
|
+
- close
|
31
|
+
x-frame-options:
|
32
|
+
- SAMEORIGIN
|
33
|
+
x-xss-protection:
|
34
|
+
- 1; mode=block
|
35
|
+
x-content-type-options:
|
36
|
+
- nosniff
|
37
|
+
etag:
|
38
|
+
- W/"05335923b74e9c38a5a5fe8e83ac0f79"
|
39
|
+
cache-control:
|
40
|
+
- max-age=0, private, must-revalidate
|
41
|
+
x-request-id:
|
42
|
+
- e163c0c6-e937-4427-a0c8-78bd5e3f1711
|
43
|
+
x-runtime:
|
44
|
+
- '0.509776'
|
45
|
+
strict-transport-security:
|
46
|
+
- max-age=15768000
|
47
|
+
body:
|
48
|
+
encoding: UTF-8
|
49
|
+
string: '{"uuid":"ds_77eb401d-fff6-43be-94dc-2cbc2e96e31e","name":"Another Data
|
50
|
+
Source","created_at":"2016-06-05T19:47:08.020Z","status":"never_imported"}'
|
51
|
+
http_version:
|
52
|
+
recorded_at: Wed, 04 Jan 2017 02:32:48 GMT
|
53
|
+
- request:
|
54
|
+
method: post
|
55
|
+
uri: https://api.chartmogul.com/v1/plans
|
56
|
+
body:
|
57
|
+
encoding: UTF-8
|
58
|
+
string: '{"data_source_uuid":"ds_77eb401d-fff6-43be-94dc-2cbc2e96e31e","name":"A
|
59
|
+
Test Plan","interval_count":1,"interval_unit":"month","external_id":null}'
|
60
|
+
headers:
|
61
|
+
User-Agent:
|
62
|
+
- Faraday v0.9.1
|
63
|
+
Content-Type:
|
64
|
+
- application/json
|
65
|
+
Authorization:
|
66
|
+
- Basic ODE2MjZkMWFiMzU5NTIwMzY5MjhjNjJjYmJiNDMyN2M6ODY3MDRmMDdkYzQwZmYzYjYyYzRjY2E5OTYxMjk2MzY=
|
67
|
+
response:
|
68
|
+
status:
|
69
|
+
code: 201
|
70
|
+
message:
|
71
|
+
headers:
|
72
|
+
server:
|
73
|
+
- nginx/1.9.10
|
74
|
+
date:
|
75
|
+
- Sun, 05 Jun 2016 19:47:08 GMT
|
76
|
+
content-type:
|
77
|
+
- application/json; charset=utf-8
|
78
|
+
transfer-encoding:
|
79
|
+
- chunked
|
80
|
+
connection:
|
81
|
+
- close
|
82
|
+
x-frame-options:
|
83
|
+
- SAMEORIGIN
|
84
|
+
x-xss-protection:
|
85
|
+
- 1; mode=block
|
86
|
+
x-content-type-options:
|
87
|
+
- nosniff
|
88
|
+
etag:
|
89
|
+
- W/"7086a2e8b932cc1ce3b47f8de5fdfdb8"
|
90
|
+
cache-control:
|
91
|
+
- max-age=0, private, must-revalidate
|
92
|
+
x-request-id:
|
93
|
+
- 6e97fa02-8bc1-4d2f-8718-8473a58e4254
|
94
|
+
x-runtime:
|
95
|
+
- '0.120821'
|
96
|
+
strict-transport-security:
|
97
|
+
- max-age=15768000
|
98
|
+
body:
|
99
|
+
encoding: UTF-8
|
100
|
+
string: '{"uuid":"pl_ba808f0b-4c1c-4824-8705-a6736efa96dc","external_id":null,"name":"A
|
101
|
+
Test Plan","interval_count":1,"interval_unit":"month","data_source_uuid":"ds_77eb401d-fff6-43be-94dc-2cbc2e96e31e"}'
|
102
|
+
http_version:
|
103
|
+
recorded_at: Sun, 05 Jun 2016 19:47:08 GMT
|
104
|
+
- request:
|
105
|
+
method: get
|
106
|
+
uri: https://api.chartmogul.com/v1/plans/pl_5ee8bf93-b0b4-4722-8a17-6b624a3af072
|
107
|
+
body:
|
108
|
+
encoding: US-ASCII
|
109
|
+
string: ''
|
110
|
+
headers:
|
111
|
+
User-Agent:
|
112
|
+
- Faraday v0.9.1
|
113
|
+
Authorization:
|
114
|
+
- Basic ODE2MjZkMWFiMzU5NTIwMzY5MjhjNjJjYmJiNDMyN2M6ODY3MDRmMDdkYzQwZmYzYjYyYzRjY2E5OTYxMjk2MzY=
|
115
|
+
response:
|
116
|
+
status:
|
117
|
+
code: 200
|
118
|
+
message:
|
119
|
+
headers:
|
120
|
+
server:
|
121
|
+
- nginx/1.9.10
|
122
|
+
date:
|
123
|
+
- Sun, 05 Jun 2016 19:47:08 GMT
|
124
|
+
content-type:
|
125
|
+
- application/json; charset=utf-8
|
126
|
+
transfer-encoding:
|
127
|
+
- chunked
|
128
|
+
connection:
|
129
|
+
- close
|
130
|
+
x-frame-options:
|
131
|
+
- SAMEORIGIN
|
132
|
+
x-xss-protection:
|
133
|
+
- 1; mode=block
|
134
|
+
x-content-type-options:
|
135
|
+
- nosniff
|
136
|
+
etag:
|
137
|
+
- W/"2122e94312ef92cc077db62910743655"
|
138
|
+
cache-control:
|
139
|
+
- max-age=0, private, must-revalidate
|
140
|
+
x-request-id:
|
141
|
+
- 1286c5a2-596a-4bc2-9e24-cfccc393e589
|
142
|
+
x-runtime:
|
143
|
+
- '0.018019'
|
144
|
+
strict-transport-security:
|
145
|
+
- max-age=15768000
|
146
|
+
body:
|
147
|
+
encoding: UTF-8
|
148
|
+
string: '{"uuid":"pl_5ee8bf93-b0b4-4722-8a17-6b624a3af072","external_id":null,"name":"A Test Plan","interval_count":2,"interval_unit":"month","data_source_uuid":"ds_77eb401d-fff6-43be-94dc-2cbc2e96e31e"}'
|
149
|
+
http_version:
|
150
|
+
recorded_at: Wed, 04 Jan 2017 02:32:48 GMT
|
151
|
+
- request:
|
152
|
+
method: patch
|
153
|
+
uri: https://api.chartmogul.com/v1/plans/pl_5ee8bf93-b0b4-4722-8a17-6b624a3af072
|
154
|
+
body:
|
155
|
+
encoding: US-ASCII
|
156
|
+
string: ''
|
157
|
+
headers:
|
158
|
+
User-Agent:
|
159
|
+
- Faraday v0.9.1
|
160
|
+
Authorization:
|
161
|
+
- Basic ODE2MjZkMWFiMzU5NTIwMzY5MjhjNjJjYmJiNDMyN2M6ODY3MDRmMDdkYzQwZmYzYjYyYzRjY2E5OTYxMjk2MzY=
|
162
|
+
response:
|
163
|
+
status:
|
164
|
+
code: 200
|
165
|
+
message:
|
166
|
+
headers:
|
167
|
+
server:
|
168
|
+
- nginx/1.9.10
|
169
|
+
date:
|
170
|
+
- Sun, 05 Jun 2016 19:47:08 GMT
|
171
|
+
content-type:
|
172
|
+
- application/json; charset=utf-8
|
173
|
+
transfer-encoding:
|
174
|
+
- chunked
|
175
|
+
connection:
|
176
|
+
- close
|
177
|
+
x-frame-options:
|
178
|
+
- SAMEORIGIN
|
179
|
+
x-xss-protection:
|
180
|
+
- 1; mode=block
|
181
|
+
x-content-type-options:
|
182
|
+
- nosniff
|
183
|
+
etag:
|
184
|
+
- W/"2122e94312ef92cc077db62910743655"
|
185
|
+
cache-control:
|
186
|
+
- max-age=0, private, must-revalidate
|
187
|
+
x-request-id:
|
188
|
+
- 1286c5a2-596a-4bc2-9e24-cfccc393e589
|
189
|
+
x-runtime:
|
190
|
+
- '0.018019'
|
191
|
+
strict-transport-security:
|
192
|
+
- max-age=15768000
|
193
|
+
body:
|
194
|
+
encoding: UTF-8
|
195
|
+
string: '{"uuid":"pl_5ee8bf93-b0b4-4722-8a17-6b624a3af072","external_id":null,"name":"A Test Plan","interval_count":2,"interval_unit":"month","data_source_uuid":"ds_77eb401d-fff6-43be-94dc-2cbc2e96e31e"}'
|
196
|
+
http_version:
|
197
|
+
recorded_at: Wed, 04 Jan 2017 02:32:48 GMT
|
198
|
+
recorded_with: VCR 3.0.3
|
@@ -2,7 +2,7 @@
|
|
2
2
|
http_interactions:
|
3
3
|
- request:
|
4
4
|
method: post
|
5
|
-
uri: https://api.chartmogul.com/v1/
|
5
|
+
uri: https://api.chartmogul.com/v1/data_sources
|
6
6
|
body:
|
7
7
|
encoding: UTF-8
|
8
8
|
string: '{"name":"Subscription Test Data Source"}'
|
@@ -52,7 +52,7 @@ http_interactions:
|
|
52
52
|
recorded_at: Thu, 23 Jun 2016 20:46:05 GMT
|
53
53
|
- request:
|
54
54
|
method: post
|
55
|
-
uri: https://api.chartmogul.com/v1/
|
55
|
+
uri: https://api.chartmogul.com/v1/customers
|
56
56
|
body:
|
57
57
|
encoding: UTF-8
|
58
58
|
string: '{"data_source_uuid":"ds_55ab11fb-53e6-4468-aa95-bd582f14cac6","external_id":"test_cus_ext_id","name":"Test
|
@@ -103,7 +103,7 @@ http_interactions:
|
|
103
103
|
recorded_at: Thu, 23 Jun 2016 20:46:06 GMT
|
104
104
|
- request:
|
105
105
|
method: post
|
106
|
-
uri: https://api.chartmogul.com/v1/
|
106
|
+
uri: https://api.chartmogul.com/v1/plans
|
107
107
|
body:
|
108
108
|
encoding: UTF-8
|
109
109
|
string: '{"data_source_uuid":"ds_55ab11fb-53e6-4468-aa95-bd582f14cac6","name":"Test
|
@@ -298,7 +298,7 @@ http_interactions:
|
|
298
298
|
recorded_at: Thu, 23 Jun 2016 20:46:07 GMT
|
299
299
|
- request:
|
300
300
|
method: delete
|
301
|
-
uri: https://api.chartmogul.com/v1/
|
301
|
+
uri: https://api.chartmogul.com/v1/data_sources/ds_55ab11fb-53e6-4468-aa95-bd582f14cac6
|
302
302
|
body:
|
303
303
|
encoding: US-ASCII
|
304
304
|
string: ''
|
@@ -2,7 +2,7 @@
|
|
2
2
|
http_interactions:
|
3
3
|
- request:
|
4
4
|
method: post
|
5
|
-
uri: https://api.chartmogul.com/v1/
|
5
|
+
uri: https://api.chartmogul.com/v1/data_sources
|
6
6
|
body:
|
7
7
|
encoding: UTF-8
|
8
8
|
string: '{"name":"Invoice Payment Test Data Source"}'
|
@@ -52,7 +52,7 @@ http_interactions:
|
|
52
52
|
recorded_at: Thu, 23 Jun 2016 14:47:22 GMT
|
53
53
|
- request:
|
54
54
|
method: post
|
55
|
-
uri: https://api.chartmogul.com/v1/
|
55
|
+
uri: https://api.chartmogul.com/v1/customers
|
56
56
|
body:
|
57
57
|
encoding: UTF-8
|
58
58
|
string: '{"data_source_uuid":"ds_e25656b4-035e-433c-80e7-46c783271e9f","external_id":"test_cus_ext_id","name":"Test
|
@@ -201,7 +201,7 @@ http_interactions:
|
|
201
201
|
recorded_at: Thu, 23 Jun 2016 14:47:23 GMT
|
202
202
|
- request:
|
203
203
|
method: delete
|
204
|
-
uri: https://api.chartmogul.com/v1/
|
204
|
+
uri: https://api.chartmogul.com/v1/data_sources/ds_e25656b4-035e-433c-80e7-46c783271e9f
|
205
205
|
body:
|
206
206
|
encoding: US-ASCII
|
207
207
|
string: ''
|
data/lib/chartmogul.rb
CHANGED
@@ -12,6 +12,7 @@ require "chartmogul/errors/not_found_error"
|
|
12
12
|
require "chartmogul/errors/configuration_error"
|
13
13
|
require "chartmogul/errors/resource_invalid_error"
|
14
14
|
require "chartmogul/errors/schema_invalid_error"
|
15
|
+
require "chartmogul/errors/unauthorized_error"
|
15
16
|
|
16
17
|
require "chartmogul/config_attributes"
|
17
18
|
require "chartmogul/configuration"
|
@@ -27,19 +28,19 @@ require "chartmogul/api/actions/update"
|
|
27
28
|
require "chartmogul/api/actions/destroy"
|
28
29
|
require "chartmogul/api/actions/custom"
|
29
30
|
|
30
|
-
require "chartmogul/
|
31
|
-
require "chartmogul/
|
31
|
+
require "chartmogul/line_items/one_time"
|
32
|
+
require "chartmogul/line_items/subscription"
|
32
33
|
|
33
|
-
require "chartmogul/
|
34
|
-
require "chartmogul/
|
34
|
+
require "chartmogul/transactions/payment"
|
35
|
+
require "chartmogul/transactions/refund"
|
35
36
|
|
36
|
-
require "chartmogul/
|
37
|
-
require "chartmogul/
|
38
|
-
|
39
|
-
require "chartmogul/
|
40
|
-
require "chartmogul/
|
41
|
-
require "chartmogul/
|
42
|
-
require "chartmogul/
|
37
|
+
require "chartmogul/subscription"
|
38
|
+
require "chartmogul/invoice"
|
39
|
+
require "chartmogul/customer_invoices"
|
40
|
+
require "chartmogul/customer"
|
41
|
+
require "chartmogul/data_source"
|
42
|
+
require "chartmogul/ping"
|
43
|
+
require "chartmogul/plan"
|
43
44
|
|
44
45
|
require "chartmogul/concerns/entries"
|
45
46
|
require "chartmogul/concerns/summary"
|
@@ -29,12 +29,21 @@ module ChartMogul
|
|
29
29
|
def self.handling_errors
|
30
30
|
yield
|
31
31
|
rescue Faraday::ClientError => exception
|
32
|
+
exception.response ? handle_request_error(exception) : handle_other_error(exception)
|
33
|
+
rescue => exception
|
34
|
+
handle_other_error(exception)
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.handle_request_error(exception)
|
32
38
|
response = exception.response[:body]
|
33
39
|
http_status = exception.response[:status]
|
34
40
|
case http_status
|
35
41
|
when 400
|
36
42
|
message = "JSON schema validation hasn't passed."
|
37
43
|
raise ChartMogul::SchemaInvalidError.new(message, http_status: 400, response: response)
|
44
|
+
when 401
|
45
|
+
message = 'No valid API key provided'
|
46
|
+
raise ChartMogul::UnauthorizedError.new(message, http_status: 401, response: response)
|
38
47
|
when 403
|
39
48
|
message = "The requested action is forbidden."
|
40
49
|
raise ChartMogul::ForbiddenError.new(message, http_status: 403, response: response)
|
@@ -48,7 +57,9 @@ module ChartMogul
|
|
48
57
|
message = "#{resource_name} request error has occurred."
|
49
58
|
raise ChartMogul::ChartMogulError.new(message, http_status: http_status, response: response)
|
50
59
|
end
|
51
|
-
|
60
|
+
end
|
61
|
+
|
62
|
+
def self.handle_other_error(exception)
|
52
63
|
raise ChartMogul::ChartMogulError.new(exception.message)
|
53
64
|
end
|
54
65
|
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module ChartMogul
|
2
|
+
class Customer < APIResource
|
3
|
+
set_resource_name 'Customer'
|
4
|
+
set_resource_path '/v1/customers'
|
5
|
+
set_resource_root_key :customers
|
6
|
+
|
7
|
+
readonly_attr :uuid
|
8
|
+
|
9
|
+
writeable_attr :external_id
|
10
|
+
writeable_attr :name
|
11
|
+
writeable_attr :email
|
12
|
+
writeable_attr :company
|
13
|
+
writeable_attr :country
|
14
|
+
writeable_attr :state
|
15
|
+
writeable_attr :city
|
16
|
+
writeable_attr :zip
|
17
|
+
writeable_attr :data_source_uuid
|
18
|
+
writeable_attr :lead_created_at, type: :time
|
19
|
+
writeable_attr :free_trial_started_at, type: :time
|
20
|
+
|
21
|
+
include API::Actions::All
|
22
|
+
include API::Actions::Create
|
23
|
+
include API::Actions::Destroy
|
24
|
+
|
25
|
+
def self.find_by_external_id(external_id)
|
26
|
+
all(external_id: external_id).first
|
27
|
+
end
|
28
|
+
|
29
|
+
def subscriptions(options = {})
|
30
|
+
@subscriptions ||= ChartMogul::Subscription.all(uuid, options)
|
31
|
+
end
|
32
|
+
|
33
|
+
def invoices(options = {})
|
34
|
+
@invoices ||= ChartMogul::CustomerInvoices.all(uuid, options)
|
35
|
+
end
|
36
|
+
|
37
|
+
def invoices=(invoices_array)
|
38
|
+
@invoices = ChartMogul::CustomerInvoices.new(customer_uuid: uuid, invoices: invoices_array)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'forwardable'
|
2
|
+
|
3
|
+
module ChartMogul
|
4
|
+
class CustomerInvoices < APIResource
|
5
|
+
extend Forwardable
|
6
|
+
include Enumerable
|
7
|
+
|
8
|
+
set_resource_name 'Invoices'
|
9
|
+
set_resource_path '/v1/import/customers/:customer_uuid/invoices'
|
10
|
+
|
11
|
+
writeable_attr :invoices, default: []
|
12
|
+
|
13
|
+
writeable_attr :customer_uuid
|
14
|
+
|
15
|
+
include API::Actions::All
|
16
|
+
include API::Actions::Create
|
17
|
+
|
18
|
+
def serialize_invoices
|
19
|
+
map(&:serialize_for_write)
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.all(customer_uuid, options = {})
|
23
|
+
super(options.merge(customer_uuid: customer_uuid))
|
24
|
+
end
|
25
|
+
|
26
|
+
def_delegators :invoices, :each, :[], :<<, :size, :length
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def set_invoices(invoices_attributes)
|
31
|
+
@invoices = invoices_attributes.map.with_index do |invoice_attributes, index|
|
32
|
+
existing_invoice = invoices[index]
|
33
|
+
|
34
|
+
if existing_invoice
|
35
|
+
existing_invoice.assign_all_attributes(invoice_attributes)
|
36
|
+
else
|
37
|
+
Invoice.new_from_json(invoice_attributes)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module ChartMogul
|
2
|
+
class DataSource < APIResource
|
3
|
+
set_resource_name 'Data Source'
|
4
|
+
set_resource_path '/v1/data_sources'
|
5
|
+
set_resource_root_key :data_sources
|
6
|
+
|
7
|
+
readonly_attr :uuid
|
8
|
+
readonly_attr :status
|
9
|
+
readonly_attr :created_at, type: :time
|
10
|
+
|
11
|
+
writeable_attr :name
|
12
|
+
|
13
|
+
include API::Actions::All
|
14
|
+
include API::Actions::Create
|
15
|
+
include API::Actions::Destroy
|
16
|
+
include API::Actions::Custom
|
17
|
+
|
18
|
+
def self.retrieve(uuid)
|
19
|
+
custom!(:get, "/v1/data_sources/#{uuid}")
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|