chartmogul-ruby 1.7.1 → 2.1.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 +4 -4
- data/.github/workflows/test.yml +44 -0
- data/.rspec +0 -0
- data/2.0-Upgrade.md +9 -0
- data/README.md +8 -2
- data/changelog.md +14 -0
- data/chartmogul-ruby.gemspec +1 -1
- data/fixtures/vcr_cassettes/ChartMogul_Customer/API_Interactions/correctly_interracts_with_the_API.yml +67 -119
- data/fixtures/vcr_cassettes/ChartMogul_Metrics_ActivitiesExport/get_activities_export.yml +43 -0
- data/fixtures/vcr_cassettes/ChartMogul_Metrics_ActivitiesExport/post_activities_export.yml +83 -0
- data/fixtures/vcr_cassettes/ChartMogul_Metrics_Activity.yml +37 -0
- data/fixtures/vcr_cassettes/ChartMogul_Metrics_Activity/behaves_like_PageableWithAnchor/should_be_pageable.yml +44 -0
- data/fixtures/vcr_cassettes/ChartMogul_Metrics_Activity/should_have_Activity_entries.yml +17 -14
- data/fixtures/vcr_cassettes/{ChartMogul_Metrics_Activity → ChartMogul_Metrics_Customers_Activity}/behaves_like_Pageable/should_be_pageable.yml +0 -0
- data/fixtures/vcr_cassettes/ChartMogul_Metrics_Customers_Activity/should_have_Activity_entries.yml +41 -0
- data/fixtures/vcr_cassettes/{ChartMogul_Metrics_Subscription → ChartMogul_Metrics_Customers_Subscription}/behaves_like_Pageable/should_be_pageable.yml +0 -0
- data/fixtures/vcr_cassettes/{ChartMogul_Metrics_Subscription → ChartMogul_Metrics_Customers_Subscription}/should_have_Subscription_entries.yml +0 -0
- data/lib/chartmogul.rb +10 -3
- data/lib/chartmogul/api/actions/all.rb +1 -1
- data/lib/chartmogul/api/actions/create.rb +2 -2
- data/lib/chartmogul/api/actions/custom.rb +1 -1
- data/lib/chartmogul/api/actions/retrieve.rb +2 -1
- data/lib/chartmogul/api/actions/update.rb +2 -2
- data/lib/chartmogul/api_resource.rb +8 -4
- data/lib/chartmogul/concerns/pageable_with_anchor.rb +14 -0
- data/lib/chartmogul/config_attributes.rb +17 -1
- data/lib/chartmogul/customer.rb +2 -2
- data/lib/chartmogul/metrics/activities_export.rb +38 -0
- data/lib/chartmogul/metrics/activity.rb +12 -8
- data/lib/chartmogul/metrics/customers/activity.rb +38 -0
- data/lib/chartmogul/metrics/customers/subscription.rb +41 -0
- data/lib/chartmogul/utils/hash_snake_caser.rb +9 -2
- data/lib/chartmogul/utils/json_parser.rb +2 -4
- data/lib/chartmogul/version.rb +1 -1
- data/pre-commit.example +0 -0
- metadata +18 -9
- data/.travis.yml +0 -25
- data/lib/chartmogul/metrics/subscription.rb +0 -39
data/lib/chartmogul/customer.rb
CHANGED
@@ -4,7 +4,7 @@ module ChartMogul
|
|
4
4
|
class Customer < APIResource
|
5
5
|
set_resource_name 'Customer'
|
6
6
|
set_resource_path '/v1/customers'
|
7
|
-
|
7
|
+
set_immutable_keys([:attributes, :custom])
|
8
8
|
|
9
9
|
readonly_attr :uuid
|
10
10
|
readonly_attr :id
|
@@ -132,7 +132,7 @@ module ChartMogul
|
|
132
132
|
class Customers < APIResource
|
133
133
|
set_resource_name 'Customers'
|
134
134
|
set_resource_path '/v1/customers'
|
135
|
-
|
135
|
+
set_immutable_keys([:attributes, :custom])
|
136
136
|
|
137
137
|
include Concerns::Entries
|
138
138
|
include API::Actions::Custom
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ChartMogul
|
4
|
+
module Metrics
|
5
|
+
class ActivitiesExport < APIResource
|
6
|
+
set_resource_name 'ActivitiesExport'
|
7
|
+
set_resource_path '/v1/activities_export'
|
8
|
+
|
9
|
+
readonly_attr :id
|
10
|
+
readonly_attr :status
|
11
|
+
readonly_attr :file_url
|
12
|
+
readonly_attr :params
|
13
|
+
readonly_attr :expires_at
|
14
|
+
readonly_attr :created_at
|
15
|
+
|
16
|
+
writeable_attr :start_date
|
17
|
+
writeable_attr :end_date
|
18
|
+
writeable_attr :type
|
19
|
+
|
20
|
+
include API::Actions::Retrieve
|
21
|
+
include API::Actions::Create
|
22
|
+
|
23
|
+
def serialize_for_write
|
24
|
+
super.tap do |attributes|
|
25
|
+
attributes.clone.each do |k, v|
|
26
|
+
attributes[preprocess_attributes(k)] = attributes.delete(k)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def preprocess_attributes(attribute)
|
32
|
+
return attribute unless %i[start_date end_date].include?(attribute)
|
33
|
+
|
34
|
+
attribute.to_s.tr('_', '-')
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -3,7 +3,6 @@
|
|
3
3
|
module ChartMogul
|
4
4
|
module Metrics
|
5
5
|
class Activity < ChartMogul::Object
|
6
|
-
readonly_attr :id
|
7
6
|
readonly_attr :description
|
8
7
|
readonly_attr :type
|
9
8
|
readonly_attr :date, type: :time
|
@@ -11,25 +10,30 @@ module ChartMogul
|
|
11
10
|
readonly_attr :activity_mrr
|
12
11
|
readonly_attr :activity_mrr_movement
|
13
12
|
readonly_attr :currency
|
14
|
-
readonly_attr :currency_sign
|
15
13
|
readonly_attr :subscription_external_id
|
14
|
+
readonly_attr :plan_external_id
|
15
|
+
readonly_attr :customer_name
|
16
|
+
readonly_attr :customer_uuid
|
17
|
+
readonly_attr :customer_external_id
|
18
|
+
readonly_attr :billing_connector_uuid
|
19
|
+
readonly_attr :uuid
|
16
20
|
|
17
|
-
def self.all(
|
18
|
-
ChartMogul::Metrics::Activities.all(
|
21
|
+
def self.all(options = {})
|
22
|
+
ChartMogul::Metrics::Activities.all(options)
|
19
23
|
end
|
20
24
|
end
|
21
25
|
|
22
26
|
class Activities < APIResource
|
23
27
|
set_resource_name 'Activities'
|
24
|
-
set_resource_path '/v1/
|
28
|
+
set_resource_path '/v1/activities'
|
25
29
|
|
26
30
|
include Concerns::Entries
|
27
|
-
include Concerns::
|
31
|
+
include Concerns::PageableWithAnchor
|
28
32
|
|
29
33
|
set_entry_class Activity
|
30
34
|
|
31
|
-
def self.all(
|
32
|
-
super(options
|
35
|
+
def self.all(options = {})
|
36
|
+
super(options)
|
33
37
|
end
|
34
38
|
end
|
35
39
|
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ChartMogul
|
4
|
+
module Metrics
|
5
|
+
module Customers
|
6
|
+
class Activity < ChartMogul::Object
|
7
|
+
readonly_attr :id
|
8
|
+
readonly_attr :description
|
9
|
+
readonly_attr :type
|
10
|
+
readonly_attr :date, type: :time
|
11
|
+
readonly_attr :activity_arr
|
12
|
+
readonly_attr :activity_mrr
|
13
|
+
readonly_attr :activity_mrr_movement
|
14
|
+
readonly_attr :currency
|
15
|
+
readonly_attr :currency_sign
|
16
|
+
readonly_attr :subscription_external_id
|
17
|
+
|
18
|
+
def self.all(customer_uuid, options = {})
|
19
|
+
ChartMogul::Metrics::Customers::Activities.all(customer_uuid, options)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
class Activities < APIResource
|
24
|
+
set_resource_name 'Activities'
|
25
|
+
set_resource_path '/v1/customers/:customer_uuid/activities'
|
26
|
+
|
27
|
+
include Concerns::Entries
|
28
|
+
include Concerns::Pageable
|
29
|
+
|
30
|
+
set_entry_class Activity
|
31
|
+
|
32
|
+
def self.all(customer_uuid, options = {})
|
33
|
+
super(options.merge(customer_uuid: customer_uuid))
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ChartMogul
|
4
|
+
module Metrics
|
5
|
+
module Customers
|
6
|
+
class Subscription < ChartMogul::Object
|
7
|
+
readonly_attr :id
|
8
|
+
readonly_attr :external_id
|
9
|
+
readonly_attr :plan
|
10
|
+
readonly_attr :quantity
|
11
|
+
readonly_attr :mrr
|
12
|
+
readonly_attr :arr
|
13
|
+
readonly_attr :status
|
14
|
+
readonly_attr :billing_cycle
|
15
|
+
readonly_attr :billing_cycle_count
|
16
|
+
readonly_attr :start_date, type: :time
|
17
|
+
readonly_attr :end_date, type: :time
|
18
|
+
readonly_attr :currency
|
19
|
+
readonly_attr :currency_sign
|
20
|
+
|
21
|
+
def self.all(customer_uuid, options = {})
|
22
|
+
ChartMogul::Metrics::Customers::Subscriptions.all(customer_uuid, options)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
class Subscriptions < APIResource
|
27
|
+
set_resource_name 'Subscriptions'
|
28
|
+
set_resource_path '/v1/customers/:customer_uuid/subscriptions'
|
29
|
+
|
30
|
+
include Concerns::Entries
|
31
|
+
include Concerns::Pageable
|
32
|
+
|
33
|
+
set_entry_class Subscription
|
34
|
+
|
35
|
+
def self.all(customer_uuid, options = {})
|
36
|
+
super(options.merge(customer_uuid: customer_uuid))
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -8,8 +8,9 @@ module ChartMogul
|
|
8
8
|
# Rubyish snake_case, suitable for use during instantiation of Ruby
|
9
9
|
# model attributes.
|
10
10
|
#
|
11
|
-
def initialize(hash)
|
11
|
+
def initialize(hash, immutable_keys: [])
|
12
12
|
@hash = hash
|
13
|
+
@immutable_keys = immutable_keys
|
13
14
|
end
|
14
15
|
|
15
16
|
def to_snake_keys(value = @hash)
|
@@ -26,7 +27,13 @@ module ChartMogul
|
|
26
27
|
private
|
27
28
|
|
28
29
|
def snake_hash(value)
|
29
|
-
Hash[value.map { |k, v| [underscore_key(k),
|
30
|
+
Hash[value.map { |k, v| [underscore_key(k), immutable_check(k, v)] }]
|
31
|
+
end
|
32
|
+
|
33
|
+
def immutable_check(k,v)
|
34
|
+
return v if @immutable_keys.include?(k)
|
35
|
+
|
36
|
+
to_snake_keys(v)
|
30
37
|
end
|
31
38
|
|
32
39
|
def underscore_key(k)
|
@@ -4,11 +4,9 @@ module ChartMogul
|
|
4
4
|
module Utils
|
5
5
|
class JSONParser
|
6
6
|
class << self
|
7
|
-
def parse(json_string,
|
7
|
+
def parse(json_string, immutable_keys: [])
|
8
8
|
hash = JSON.parse(json_string, symbolize_names: true)
|
9
|
-
|
10
|
-
|
11
|
-
HashSnakeCaser.new(hash).to_snake_keys
|
9
|
+
HashSnakeCaser.new(hash, immutable_keys: immutable_keys).to_snake_keys
|
12
10
|
end
|
13
11
|
|
14
12
|
def typecast_custom_attributes(custom_attributes)
|
data/lib/chartmogul/version.rb
CHANGED
data/pre-commit.example
CHANGED
File without changes
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: chartmogul-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 2.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Petr Kopac
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-07-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 1.0
|
19
|
+
version: '1.0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 1.0
|
26
|
+
version: '1.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: bundler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -171,9 +171,10 @@ executables: []
|
|
171
171
|
extensions: []
|
172
172
|
extra_rdoc_files: []
|
173
173
|
files:
|
174
|
+
- ".github/workflows/test.yml"
|
174
175
|
- ".gitignore"
|
175
176
|
- ".rspec"
|
176
|
-
-
|
177
|
+
- 2.0-Upgrade.md
|
177
178
|
- Gemfile
|
178
179
|
- LICENSE.txt
|
179
180
|
- README.md
|
@@ -221,21 +222,26 @@ files:
|
|
221
222
|
- fixtures/vcr_cassettes/ChartMogul_Metrics_ARR/behaves_like_Metrics_API_resource/should_have_entries.yml
|
222
223
|
- fixtures/vcr_cassettes/ChartMogul_Metrics_ASP/behaves_like_Metrics_API_resource/behaves_like_Summary/should_have_summary.yml
|
223
224
|
- fixtures/vcr_cassettes/ChartMogul_Metrics_ASP/behaves_like_Metrics_API_resource/should_have_entries.yml
|
224
|
-
- fixtures/vcr_cassettes/
|
225
|
+
- fixtures/vcr_cassettes/ChartMogul_Metrics_ActivitiesExport/get_activities_export.yml
|
226
|
+
- fixtures/vcr_cassettes/ChartMogul_Metrics_ActivitiesExport/post_activities_export.yml
|
227
|
+
- fixtures/vcr_cassettes/ChartMogul_Metrics_Activity.yml
|
228
|
+
- fixtures/vcr_cassettes/ChartMogul_Metrics_Activity/behaves_like_PageableWithAnchor/should_be_pageable.yml
|
225
229
|
- fixtures/vcr_cassettes/ChartMogul_Metrics_Activity/should_have_Activity_entries.yml
|
226
230
|
- fixtures/vcr_cassettes/ChartMogul_Metrics_AllKeyMetric/should_have_entries.yml
|
227
231
|
- fixtures/vcr_cassettes/ChartMogul_Metrics_CustomerChurnRate/behaves_like_Metrics_API_resource/behaves_like_Summary/should_have_summary.yml
|
228
232
|
- fixtures/vcr_cassettes/ChartMogul_Metrics_CustomerChurnRate/behaves_like_Metrics_API_resource/should_have_entries.yml
|
229
233
|
- fixtures/vcr_cassettes/ChartMogul_Metrics_CustomerCount/behaves_like_Metrics_API_resource/behaves_like_Summary/should_have_summary.yml
|
230
234
|
- fixtures/vcr_cassettes/ChartMogul_Metrics_CustomerCount/behaves_like_Metrics_API_resource/should_have_entries.yml
|
235
|
+
- fixtures/vcr_cassettes/ChartMogul_Metrics_Customers_Activity/behaves_like_Pageable/should_be_pageable.yml
|
236
|
+
- fixtures/vcr_cassettes/ChartMogul_Metrics_Customers_Activity/should_have_Activity_entries.yml
|
237
|
+
- fixtures/vcr_cassettes/ChartMogul_Metrics_Customers_Subscription/behaves_like_Pageable/should_be_pageable.yml
|
238
|
+
- fixtures/vcr_cassettes/ChartMogul_Metrics_Customers_Subscription/should_have_Subscription_entries.yml
|
231
239
|
- fixtures/vcr_cassettes/ChartMogul_Metrics_LTV/behaves_like_Metrics_API_resource/behaves_like_Summary/should_have_summary.yml
|
232
240
|
- fixtures/vcr_cassettes/ChartMogul_Metrics_LTV/behaves_like_Metrics_API_resource/should_have_entries.yml
|
233
241
|
- fixtures/vcr_cassettes/ChartMogul_Metrics_MRR/behaves_like_Summary/should_have_summary.yml
|
234
242
|
- fixtures/vcr_cassettes/ChartMogul_Metrics_MRR/should_have_entries.yml
|
235
243
|
- fixtures/vcr_cassettes/ChartMogul_Metrics_MRRChurnRate/behaves_like_Metrics_API_resource/behaves_like_Summary/should_have_summary.yml
|
236
244
|
- fixtures/vcr_cassettes/ChartMogul_Metrics_MRRChurnRate/behaves_like_Metrics_API_resource/should_have_entries.yml
|
237
|
-
- fixtures/vcr_cassettes/ChartMogul_Metrics_Subscription/behaves_like_Pageable/should_be_pageable.yml
|
238
|
-
- fixtures/vcr_cassettes/ChartMogul_Metrics_Subscription/should_have_Subscription_entries.yml
|
239
245
|
- fixtures/vcr_cassettes/ChartMogul_Ping/pings/and_fails_on_incorrect_credentials.yml
|
240
246
|
- fixtures/vcr_cassettes/ChartMogul_Ping/pings/and_fails_with_500_internal_server_error.yml
|
241
247
|
- fixtures/vcr_cassettes/ChartMogul_Ping/pings/and_fails_with_504_gateway_timeout_error.yml
|
@@ -274,6 +280,7 @@ files:
|
|
274
280
|
- lib/chartmogul/concerns/entries.rb
|
275
281
|
- lib/chartmogul/concerns/pageable.rb
|
276
282
|
- lib/chartmogul/concerns/pageable2.rb
|
283
|
+
- lib/chartmogul/concerns/pageable_with_anchor.rb
|
277
284
|
- lib/chartmogul/concerns/summary.rb
|
278
285
|
- lib/chartmogul/config_attributes.rb
|
279
286
|
- lib/chartmogul/configuration.rb
|
@@ -292,6 +299,7 @@ files:
|
|
292
299
|
- lib/chartmogul/invoice.rb
|
293
300
|
- lib/chartmogul/line_items/one_time.rb
|
294
301
|
- lib/chartmogul/line_items/subscription.rb
|
302
|
+
- lib/chartmogul/metrics/activities_export.rb
|
295
303
|
- lib/chartmogul/metrics/activity.rb
|
296
304
|
- lib/chartmogul/metrics/all_key_metrics.rb
|
297
305
|
- lib/chartmogul/metrics/arpa.rb
|
@@ -300,10 +308,11 @@ files:
|
|
300
308
|
- lib/chartmogul/metrics/base.rb
|
301
309
|
- lib/chartmogul/metrics/customer_churn_rate.rb
|
302
310
|
- lib/chartmogul/metrics/customer_count.rb
|
311
|
+
- lib/chartmogul/metrics/customers/activity.rb
|
312
|
+
- lib/chartmogul/metrics/customers/subscription.rb
|
303
313
|
- lib/chartmogul/metrics/ltv.rb
|
304
314
|
- lib/chartmogul/metrics/mrr.rb
|
305
315
|
- lib/chartmogul/metrics/mrr_churn_rate.rb
|
306
|
-
- lib/chartmogul/metrics/subscription.rb
|
307
316
|
- lib/chartmogul/object.rb
|
308
317
|
- lib/chartmogul/ping.rb
|
309
318
|
- lib/chartmogul/plan.rb
|
data/.travis.yml
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
os: linux
|
2
|
-
dist: bionic
|
3
|
-
|
4
|
-
language: ruby
|
5
|
-
|
6
|
-
rvm:
|
7
|
-
- 2.3
|
8
|
-
- 2.4
|
9
|
-
- 2.5
|
10
|
-
- 2.6
|
11
|
-
- 2.7
|
12
|
-
|
13
|
-
before_install: gem install bundler
|
14
|
-
|
15
|
-
before_script:
|
16
|
-
- curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
|
17
|
-
- chmod +x ./cc-test-reporter
|
18
|
-
- ./cc-test-reporter before-build
|
19
|
-
|
20
|
-
branches:
|
21
|
-
only:
|
22
|
-
- main
|
23
|
-
|
24
|
-
after_script:
|
25
|
-
- ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT
|
@@ -1,39 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module ChartMogul
|
4
|
-
module Metrics
|
5
|
-
class Subscription < ChartMogul::Object
|
6
|
-
readonly_attr :id
|
7
|
-
readonly_attr :external_id
|
8
|
-
readonly_attr :plan
|
9
|
-
readonly_attr :quantity
|
10
|
-
readonly_attr :mrr
|
11
|
-
readonly_attr :arr
|
12
|
-
readonly_attr :status
|
13
|
-
readonly_attr :billing_cycle
|
14
|
-
readonly_attr :billing_cycle_count
|
15
|
-
readonly_attr :start_date, type: :time
|
16
|
-
readonly_attr :end_date, type: :time
|
17
|
-
readonly_attr :currency
|
18
|
-
readonly_attr :currency_sign
|
19
|
-
|
20
|
-
def self.all(customer_uuid, options = {})
|
21
|
-
ChartMogul::Metrics::Subscriptions.all(customer_uuid, options)
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
class Subscriptions < APIResource
|
26
|
-
set_resource_name 'Subscriptions'
|
27
|
-
set_resource_path '/v1/customers/:customer_uuid/subscriptions'
|
28
|
-
|
29
|
-
include Concerns::Entries
|
30
|
-
include Concerns::Pageable
|
31
|
-
|
32
|
-
set_entry_class Subscription
|
33
|
-
|
34
|
-
def self.all(customer_uuid, options = {})
|
35
|
-
super(options.merge(customer_uuid: customer_uuid))
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|