chartmogul-ruby 1.1.5 → 1.1.7

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 (123) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +10 -10
  3. data/.rspec +2 -2
  4. data/.travis.yml +9 -4
  5. data/Gemfile +4 -4
  6. data/LICENSE.txt +21 -21
  7. data/README.md +111 -111
  8. data/Rakefile +6 -6
  9. data/bin/console +14 -14
  10. data/bin/setup +9 -9
  11. data/changelog.md +27 -27
  12. data/chartmogul-ruby.gemspec +30 -30
  13. data/fixtures/vcr_cassettes/ChartMogul_Customer/API_Interactions/adds_custom_attributes.yml +80 -80
  14. data/fixtures/vcr_cassettes/ChartMogul_Customer/API_Interactions/adds_required_tags.yml +79 -79
  15. data/fixtures/vcr_cassettes/ChartMogul_Customer/API_Interactions/can_page_through_search_endpoint.yml +43 -43
  16. data/fixtures/vcr_cassettes/ChartMogul_Customer/API_Interactions/correctly_handles_a_422_response.yml +50 -50
  17. data/fixtures/vcr_cassettes/ChartMogul_Customer/API_Interactions/correctly_interracts_with_the_API.yml +244 -244
  18. data/fixtures/vcr_cassettes/ChartMogul_Customer/API_Interactions/merges_customers.yml +185 -185
  19. data/fixtures/vcr_cassettes/ChartMogul_Customer/API_Interactions/raises_401_if_invalid_credentials.yml +38 -38
  20. data/fixtures/vcr_cassettes/ChartMogul_Customer/API_Interactions/raises_404_if_no_customers_found.yml +38 -38
  21. data/fixtures/vcr_cassettes/ChartMogul_Customer/API_Interactions/raises_422_for_update_with_invalid_data.yml +86 -86
  22. data/fixtures/vcr_cassettes/ChartMogul_Customer/API_Interactions/removes_custom_attributes.yml +80 -80
  23. data/fixtures/vcr_cassettes/ChartMogul_Customer/API_Interactions/removes_tags.yml +80 -80
  24. data/fixtures/vcr_cassettes/ChartMogul_Customer/API_Interactions/returns_all_customers_through_list_all_endpoint.yml +47 -47
  25. data/fixtures/vcr_cassettes/ChartMogul_Customer/API_Interactions/returns_customer_through_retrieve_endpoint.yml +42 -42
  26. data/fixtures/vcr_cassettes/ChartMogul_Customer/API_Interactions/returns_right_customers_through_search_endpoint.yml +43 -43
  27. data/fixtures/vcr_cassettes/ChartMogul_Customer/API_Interactions/updates_custom_attributes.yml +82 -82
  28. data/fixtures/vcr_cassettes/ChartMogul_Customer/API_Interactions/updates_customer.yml +139 -139
  29. data/fixtures/vcr_cassettes/ChartMogul_Customer/_find_by_external_id/when_external_id_is_provided/returns_matching_user_if_exists.yml +102 -102
  30. data/fixtures/vcr_cassettes/ChartMogul_Customer/_find_by_external_id/when_external_id_is_provided/returns_nil_if_customer_does_not_exist.yml +101 -101
  31. data/fixtures/vcr_cassettes/ChartMogul_CustomerInvoices/API_Interactions/correctly_interracts_with_the_API.yml +298 -298
  32. data/fixtures/vcr_cassettes/ChartMogul_DataSource/API_Interactions/correctly_interracts_with_the_API.yml +189 -189
  33. data/fixtures/vcr_cassettes/ChartMogul_DataSource/API_Interactions/correctly_raises_errors_on_404.yml +46 -46
  34. data/fixtures/vcr_cassettes/ChartMogul_DataSource/API_Interactions/correctly_raises_errors_on_422.yml +48 -48
  35. data/fixtures/vcr_cassettes/ChartMogul_DataSource/API_Interactions/retrieves_existing_data_source_matching_uuid.yml +101 -101
  36. data/fixtures/vcr_cassettes/ChartMogul_Invoice/API_Interactions/deletes_an_invoice.yml +37 -37
  37. data/fixtures/vcr_cassettes/ChartMogul_Invoice/API_Interactions/deletes_an_invoice_with_class_method.yml +37 -37
  38. data/fixtures/vcr_cassettes/ChartMogul_Invoice/API_Interactions/raises_error_on_deleting_non-existing_invoice.yml +42 -42
  39. data/fixtures/vcr_cassettes/ChartMogul_Invoice/API_Interactions/retrieves_existing_invoice_by_uuid.yml +50 -50
  40. data/fixtures/vcr_cassettes/ChartMogul_Invoice/API_Interactions/returns_all_invoices_through_list_all_endpoint.yml +46 -46
  41. data/fixtures/vcr_cassettes/ChartMogul_Metrics_ARPA/behaves_like_Metrics_API_resource/behaves_like_Summary/should_have_summary.yml +42 -42
  42. data/fixtures/vcr_cassettes/ChartMogul_Metrics_ARPA/behaves_like_Metrics_API_resource/should_have_entries.yml +42 -42
  43. data/fixtures/vcr_cassettes/ChartMogul_Metrics_ARR/behaves_like_Metrics_API_resource/behaves_like_Summary/should_have_summary.yml +42 -42
  44. data/fixtures/vcr_cassettes/ChartMogul_Metrics_ARR/behaves_like_Metrics_API_resource/should_have_entries.yml +42 -42
  45. data/fixtures/vcr_cassettes/ChartMogul_Metrics_ASP/behaves_like_Metrics_API_resource/behaves_like_Summary/should_have_summary.yml +40 -40
  46. data/fixtures/vcr_cassettes/ChartMogul_Metrics_ASP/behaves_like_Metrics_API_resource/should_have_entries.yml +40 -40
  47. data/fixtures/vcr_cassettes/ChartMogul_Metrics_Activity/behaves_like_Pageable/should_be_pageable.yml +41 -41
  48. data/fixtures/vcr_cassettes/ChartMogul_Metrics_Activity/should_have_Activity_entries.yml +41 -41
  49. data/fixtures/vcr_cassettes/ChartMogul_Metrics_AllKeyMetric/should_have_entries.yml +42 -42
  50. data/fixtures/vcr_cassettes/ChartMogul_Metrics_CustomerChurnRate/behaves_like_Metrics_API_resource/behaves_like_Summary/should_have_summary.yml +40 -40
  51. data/fixtures/vcr_cassettes/ChartMogul_Metrics_CustomerChurnRate/behaves_like_Metrics_API_resource/should_have_entries.yml +40 -40
  52. data/fixtures/vcr_cassettes/ChartMogul_Metrics_CustomerCount/behaves_like_Metrics_API_resource/behaves_like_Summary/should_have_summary.yml +42 -42
  53. data/fixtures/vcr_cassettes/ChartMogul_Metrics_CustomerCount/behaves_like_Metrics_API_resource/should_have_entries.yml +42 -42
  54. data/fixtures/vcr_cassettes/ChartMogul_Metrics_LTV/behaves_like_Metrics_API_resource/behaves_like_Summary/should_have_summary.yml +40 -40
  55. data/fixtures/vcr_cassettes/ChartMogul_Metrics_LTV/behaves_like_Metrics_API_resource/should_have_entries.yml +40 -40
  56. data/fixtures/vcr_cassettes/ChartMogul_Metrics_MRR/behaves_like_Summary/should_have_summary.yml +42 -42
  57. data/fixtures/vcr_cassettes/ChartMogul_Metrics_MRR/should_have_entries.yml +42 -42
  58. data/fixtures/vcr_cassettes/ChartMogul_Metrics_MRRChurnRate/behaves_like_Metrics_API_resource/behaves_like_Summary/should_have_summary.yml +40 -40
  59. data/fixtures/vcr_cassettes/ChartMogul_Metrics_MRRChurnRate/behaves_like_Metrics_API_resource/should_have_entries.yml +40 -40
  60. data/fixtures/vcr_cassettes/ChartMogul_Metrics_Subscription/behaves_like_Pageable/should_be_pageable.yml +40 -40
  61. data/fixtures/vcr_cassettes/ChartMogul_Metrics_Subscription/should_have_Subscription_entries.yml +40 -40
  62. data/fixtures/vcr_cassettes/ChartMogul_Ping/pings/and_fails_on_incorrect_credentials.yml +38 -38
  63. data/fixtures/vcr_cassettes/ChartMogul_Ping/pings/when_credentials_correct.yml +38 -38
  64. data/fixtures/vcr_cassettes/ChartMogul_Plan/API_Interactions/correctly_handles_a_422_error.yml +51 -51
  65. data/fixtures/vcr_cassettes/ChartMogul_Plan/API_Interactions/correctly_interacts_with_the_API.yml +152 -152
  66. data/fixtures/vcr_cassettes/ChartMogul_Plan/API_Interactions/deletes_existing_plan.yml +198 -198
  67. data/fixtures/vcr_cassettes/ChartMogul_Plan/API_Interactions/retrieves_existing_plan_by_uuid.yml +151 -151
  68. data/fixtures/vcr_cassettes/ChartMogul_Plan/API_Interactions/updates_existing_plan.yml +198 -198
  69. data/fixtures/vcr_cassettes/ChartMogul_Subscription/API_Interactions/correctly_interracts_with_the_API.yml +340 -340
  70. data/fixtures/vcr_cassettes/ChartMogul_Subscription/API_Interactions/has_multiple_aliases.yml +101 -101
  71. data/fixtures/vcr_cassettes/ChartMogul_Transactions_Payment/API_Interactions/correctly_interracts_with_the_API.yml +243 -243
  72. data/lib/chartmogul.rb +81 -81
  73. data/lib/chartmogul/api/actions/all.rb +23 -23
  74. data/lib/chartmogul/api/actions/create.rb +39 -39
  75. data/lib/chartmogul/api/actions/custom.rb +37 -37
  76. data/lib/chartmogul/api/actions/destroy.rb +27 -27
  77. data/lib/chartmogul/api/actions/retrieve.rb +23 -23
  78. data/lib/chartmogul/api/actions/update.rb +19 -19
  79. data/lib/chartmogul/api_resource.rb +68 -68
  80. data/lib/chartmogul/concerns/entries.rb +37 -37
  81. data/lib/chartmogul/concerns/pageable.rb +13 -13
  82. data/lib/chartmogul/concerns/pageable2.rb +12 -12
  83. data/lib/chartmogul/concerns/summary.rb +19 -19
  84. data/lib/chartmogul/config_attributes.rb +15 -15
  85. data/lib/chartmogul/configuration.rb +6 -6
  86. data/lib/chartmogul/customer.rb +156 -156
  87. data/lib/chartmogul/customer_invoices.rb +44 -44
  88. data/lib/chartmogul/data_source.rb +34 -34
  89. data/lib/chartmogul/enrichment/customer.rb +140 -140
  90. data/lib/chartmogul/errors/chartmogul_error.rb +19 -19
  91. data/lib/chartmogul/errors/configuration_error.rb +4 -4
  92. data/lib/chartmogul/errors/forbidden_error.rb +4 -4
  93. data/lib/chartmogul/errors/not_found_error.rb +4 -4
  94. data/lib/chartmogul/errors/resource_invalid_error.rb +4 -4
  95. data/lib/chartmogul/errors/schema_invalid_error.rb +4 -4
  96. data/lib/chartmogul/errors/unauthorized_error.rb +4 -4
  97. data/lib/chartmogul/invoice.rb +86 -86
  98. data/lib/chartmogul/line_items/one_time.rb +24 -23
  99. data/lib/chartmogul/line_items/subscription.rb +30 -29
  100. data/lib/chartmogul/metrics/activity.rb +33 -33
  101. data/lib/chartmogul/metrics/all_key_metrics.rb +24 -24
  102. data/lib/chartmogul/metrics/arpa.rb +18 -18
  103. data/lib/chartmogul/metrics/arr.rb +18 -18
  104. data/lib/chartmogul/metrics/asp.rb +18 -18
  105. data/lib/chartmogul/metrics/base.rb +54 -54
  106. data/lib/chartmogul/metrics/customer_churn_rate.rb +18 -18
  107. data/lib/chartmogul/metrics/customer_count.rb +18 -18
  108. data/lib/chartmogul/metrics/ltv.rb +18 -18
  109. data/lib/chartmogul/metrics/mrr.rb +26 -26
  110. data/lib/chartmogul/metrics/mrr_churn_rate.rb +18 -18
  111. data/lib/chartmogul/metrics/subscription.rb +37 -37
  112. data/lib/chartmogul/object.rb +119 -119
  113. data/lib/chartmogul/ping.rb +14 -14
  114. data/lib/chartmogul/plan.rb +37 -37
  115. data/lib/chartmogul/resource_path.rb +42 -42
  116. data/lib/chartmogul/subscription.rb +47 -47
  117. data/lib/chartmogul/summary.rb +7 -7
  118. data/lib/chartmogul/transactions/payment.rb +24 -24
  119. data/lib/chartmogul/transactions/refund.rb +24 -24
  120. data/lib/chartmogul/utils/hash_snake_caser.rb +49 -49
  121. data/lib/chartmogul/utils/json_parser.rb +10 -10
  122. data/lib/chartmogul/version.rb +3 -3
  123. metadata +3 -4
@@ -1,44 +1,44 @@
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
- include Concerns::Pageable2
18
-
19
- def serialize_invoices
20
- map(&:serialize_for_write)
21
- end
22
-
23
- def self.all(customer_uuid, options = {})
24
- super(options.merge(customer_uuid: customer_uuid))
25
- end
26
-
27
- def_delegators :invoices, :each, :[], :<<, :size, :length, :empty?, :first
28
-
29
- private
30
-
31
- # TODO: replace with Entries concern?
32
- def set_invoices(invoices_attributes)
33
- @invoices = invoices_attributes.map.with_index do |invoice_attributes, index|
34
- existing_invoice = invoices[index]
35
-
36
- if existing_invoice
37
- existing_invoice.assign_all_attributes(invoice_attributes)
38
- else
39
- Invoice.new_from_json(invoice_attributes)
40
- end
41
- end
42
- end
43
- end
44
- end
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
+ include Concerns::Pageable2
18
+
19
+ def serialize_invoices
20
+ map(&:serialize_for_write)
21
+ end
22
+
23
+ def self.all(customer_uuid, options = {})
24
+ super(options.merge(customer_uuid: customer_uuid))
25
+ end
26
+
27
+ def_delegators :invoices, :each, :[], :<<, :size, :length, :empty?, :first
28
+
29
+ private
30
+
31
+ # TODO: replace with Entries concern?
32
+ def set_invoices(invoices_attributes)
33
+ @invoices = invoices_attributes.map.with_index do |invoice_attributes, index|
34
+ existing_invoice = invoices[index]
35
+
36
+ if existing_invoice
37
+ existing_invoice.assign_all_attributes(invoice_attributes)
38
+ else
39
+ Invoice.new_from_json(invoice_attributes)
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -1,34 +1,34 @@
1
- module ChartMogul
2
- class DataSource < APIResource
3
- set_resource_name 'Data Source'
4
- set_resource_path '/v1/data_sources'
5
-
6
- readonly_attr :uuid
7
- readonly_attr :status
8
- readonly_attr :system
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::Custom
16
- include API::Actions::Destroy
17
- include API::Actions::Retrieve
18
-
19
- def self.all(options = {})
20
- DataSources.all(options)
21
- end
22
- end
23
-
24
- class DataSources < APIResource
25
- set_resource_name 'Data Sources'
26
- set_resource_path '/v1/data_sources'
27
-
28
- set_resource_root_key :data_sources
29
-
30
- include Concerns::Entries
31
-
32
- set_entry_class DataSource
33
- end
34
- end
1
+ module ChartMogul
2
+ class DataSource < APIResource
3
+ set_resource_name 'Data Source'
4
+ set_resource_path '/v1/data_sources'
5
+
6
+ readonly_attr :uuid
7
+ readonly_attr :status
8
+ readonly_attr :system
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::Custom
16
+ include API::Actions::Destroy
17
+ include API::Actions::Retrieve
18
+
19
+ def self.all(options = {})
20
+ DataSources.all(options)
21
+ end
22
+ end
23
+
24
+ class DataSources < APIResource
25
+ set_resource_name 'Data Sources'
26
+ set_resource_path '/v1/data_sources'
27
+
28
+ set_resource_root_key :data_sources
29
+
30
+ include Concerns::Entries
31
+
32
+ set_entry_class DataSource
33
+ end
34
+ end
@@ -1,140 +1,140 @@
1
- module ChartMogul
2
- module Enrichment
3
- # <b>DEPRECATED:</b> Please use <tt>ChartMogul/Customer</tt> instead.
4
- class DeprecatedCustomer < APIResource
5
- set_resource_name 'Customer'
6
- set_resource_path '/v1/customers'
7
-
8
- readonly_attr :id
9
- readonly_attr :uuid
10
- readonly_attr :external_id
11
- readonly_attr :status
12
- readonly_attr :customer_since, type: :time
13
- readonly_attr :address
14
- readonly_attr :mrr
15
- readonly_attr :arr
16
- readonly_attr :billing_system_url
17
- readonly_attr :chartmogul_url
18
- readonly_attr :billing_system_type
19
- readonly_attr :currency
20
- readonly_attr :currency_sign
21
-
22
- writeable_attr :name
23
- writeable_attr :email
24
- writeable_attr :company
25
- writeable_attr :country
26
- writeable_attr :state
27
- writeable_attr :city
28
- writeable_attr :lead_created_at
29
- writeable_attr :free_trial_started_at
30
- writeable_attr :attributes
31
-
32
- include API::Actions::Custom
33
- include API::Actions::Retrieve
34
- include API::Actions::Update
35
-
36
- def tags
37
- @attributes[:tags]
38
- end
39
-
40
- def custom_attributes
41
- @attributes[:custom]
42
- end
43
-
44
- def add_tags!(*tags)
45
- self.tags = custom_without_assign!(:post,
46
- "/v1/customers/#{uuid}/attributes/tags",
47
- tags: tags)[:tags]
48
- end
49
-
50
- def remove_tags!(*tags)
51
- self.tags = custom_without_assign!(:delete,
52
- "/v1/customers/#{uuid}/attributes/tags",
53
- tags: tags)[:tags]
54
- end
55
-
56
- def add_custom_attributes!(*custom_attrs)
57
- self.custom_attributes = custom_without_assign!(:post,
58
- "/v1/customers/#{uuid}/attributes/custom",
59
- custom: custom_attrs)[:custom]
60
- end
61
-
62
- def update_custom_attributes!(custom_attrs = {})
63
- self.custom_attributes = custom_without_assign!(:put,
64
- "/v1/customers/#{uuid}/attributes/custom",
65
- custom: custom_attrs)[:custom]
66
- end
67
-
68
- def remove_custom_attributes!(*custom_attrs)
69
- self.custom_attributes = custom_without_assign!(:delete,
70
- "/v1/customers/#{uuid}/attributes/custom",
71
- custom: custom_attrs)[:custom]
72
- end
73
-
74
- def merge_into!(other_customer)
75
- options = {
76
- from: { customer_uuid: uuid },
77
- into: { customer_uuid: other_customer.uuid }
78
- }
79
- custom!(:post, '/v1/customers/merges', options)
80
- true
81
- end
82
-
83
- def self.all(options = {})
84
- Customers.all(options)
85
- end
86
-
87
- def self.search(email)
88
- Customers.search(email)
89
- end
90
-
91
- private
92
-
93
- def tags=(tags)
94
- @attributes[:tags] = tags
95
- end
96
-
97
- def custom_attributes=(custom_attributes = {})
98
- @attributes[:custom] = typecast_custom_attributes(custom_attributes)
99
- end
100
-
101
- def set_attributes(attributes_attributes)
102
- @attributes = attributes_attributes
103
- @attributes[:custom] = typecast_custom_attributes(attributes_attributes[:custom])
104
- end
105
-
106
- def typecast_custom_attributes(custom_attributes)
107
- return {} unless custom_attributes
108
- custom_attributes.each_with_object({}) do |(key, value), hash|
109
- hash[key] = value.instance_of?(String) ? (begin
110
- Time.parse(value)
111
- rescue
112
- value
113
- end) : value
114
- end
115
- end
116
- end
117
-
118
- def self.const_missing(const_name)
119
- super unless const_name == :Customer
120
- warn 'DEPRECATION WARNING: the class ChartMogul::Enrichment::Customer is deprecated. Use ChartMogul::Customer instead.'
121
- DeprecatedCustomer
122
- end
123
-
124
- class Customers < APIResource
125
- set_resource_name 'Customers'
126
- set_resource_path '/v1/customers'
127
-
128
- include Concerns::Entries
129
- include API::Actions::Custom
130
- include Concerns::Pageable
131
-
132
- set_entry_class DeprecatedCustomer
133
-
134
- def self.search(email)
135
- path = ChartMogul::ResourcePath.new('/v1/customers/search')
136
- custom!(:get, path.apply_with_get_params(email: email))
137
- end
138
- end
139
- end
140
- end
1
+ module ChartMogul
2
+ module Enrichment
3
+ # <b>DEPRECATED:</b> Please use <tt>ChartMogul/Customer</tt> instead.
4
+ class DeprecatedCustomer < APIResource
5
+ set_resource_name 'Customer'
6
+ set_resource_path '/v1/customers'
7
+
8
+ readonly_attr :id
9
+ readonly_attr :uuid
10
+ readonly_attr :external_id
11
+ readonly_attr :status
12
+ readonly_attr :customer_since, type: :time
13
+ readonly_attr :address
14
+ readonly_attr :mrr
15
+ readonly_attr :arr
16
+ readonly_attr :billing_system_url
17
+ readonly_attr :chartmogul_url
18
+ readonly_attr :billing_system_type
19
+ readonly_attr :currency
20
+ readonly_attr :currency_sign
21
+
22
+ writeable_attr :name
23
+ writeable_attr :email
24
+ writeable_attr :company
25
+ writeable_attr :country
26
+ writeable_attr :state
27
+ writeable_attr :city
28
+ writeable_attr :lead_created_at
29
+ writeable_attr :free_trial_started_at
30
+ writeable_attr :attributes
31
+
32
+ include API::Actions::Custom
33
+ include API::Actions::Retrieve
34
+ include API::Actions::Update
35
+
36
+ def tags
37
+ @attributes[:tags]
38
+ end
39
+
40
+ def custom_attributes
41
+ @attributes[:custom]
42
+ end
43
+
44
+ def add_tags!(*tags)
45
+ self.tags = custom_without_assign!(:post,
46
+ "/v1/customers/#{uuid}/attributes/tags",
47
+ tags: tags)[:tags]
48
+ end
49
+
50
+ def remove_tags!(*tags)
51
+ self.tags = custom_without_assign!(:delete,
52
+ "/v1/customers/#{uuid}/attributes/tags",
53
+ tags: tags)[:tags]
54
+ end
55
+
56
+ def add_custom_attributes!(*custom_attrs)
57
+ self.custom_attributes = custom_without_assign!(:post,
58
+ "/v1/customers/#{uuid}/attributes/custom",
59
+ custom: custom_attrs)[:custom]
60
+ end
61
+
62
+ def update_custom_attributes!(custom_attrs = {})
63
+ self.custom_attributes = custom_without_assign!(:put,
64
+ "/v1/customers/#{uuid}/attributes/custom",
65
+ custom: custom_attrs)[:custom]
66
+ end
67
+
68
+ def remove_custom_attributes!(*custom_attrs)
69
+ self.custom_attributes = custom_without_assign!(:delete,
70
+ "/v1/customers/#{uuid}/attributes/custom",
71
+ custom: custom_attrs)[:custom]
72
+ end
73
+
74
+ def merge_into!(other_customer)
75
+ options = {
76
+ from: { customer_uuid: uuid },
77
+ into: { customer_uuid: other_customer.uuid }
78
+ }
79
+ custom!(:post, '/v1/customers/merges', options)
80
+ true
81
+ end
82
+
83
+ def self.all(options = {})
84
+ Customers.all(options)
85
+ end
86
+
87
+ def self.search(email)
88
+ Customers.search(email)
89
+ end
90
+
91
+ private
92
+
93
+ def tags=(tags)
94
+ @attributes[:tags] = tags
95
+ end
96
+
97
+ def custom_attributes=(custom_attributes = {})
98
+ @attributes[:custom] = typecast_custom_attributes(custom_attributes)
99
+ end
100
+
101
+ def set_attributes(attributes_attributes)
102
+ @attributes = attributes_attributes
103
+ @attributes[:custom] = typecast_custom_attributes(attributes_attributes[:custom])
104
+ end
105
+
106
+ def typecast_custom_attributes(custom_attributes)
107
+ return {} unless custom_attributes
108
+ custom_attributes.each_with_object({}) do |(key, value), hash|
109
+ hash[key] = value.instance_of?(String) ? (begin
110
+ Time.parse(value)
111
+ rescue
112
+ value
113
+ end) : value
114
+ end
115
+ end
116
+ end
117
+
118
+ def self.const_missing(const_name)
119
+ super unless const_name == :Customer
120
+ warn 'DEPRECATION WARNING: the class ChartMogul::Enrichment::Customer is deprecated. Use ChartMogul::Customer instead.'
121
+ DeprecatedCustomer
122
+ end
123
+
124
+ class Customers < APIResource
125
+ set_resource_name 'Customers'
126
+ set_resource_path '/v1/customers'
127
+
128
+ include Concerns::Entries
129
+ include API::Actions::Custom
130
+ include Concerns::Pageable
131
+
132
+ set_entry_class DeprecatedCustomer
133
+
134
+ def self.search(email)
135
+ path = ChartMogul::ResourcePath.new('/v1/customers/search')
136
+ custom!(:get, path.apply_with_get_params(email: email))
137
+ end
138
+ end
139
+ end
140
+ end
@@ -1,19 +1,19 @@
1
- module ChartMogul
2
- class ChartMogulError < StandardError
3
- attr_accessor :message
4
- attr_accessor :response
5
- attr_accessor :http_status
6
-
7
- def initialize(message, http_status: nil, response: nil)
8
- @message = message
9
- @http_status = http_status
10
- @response = response
11
- end
12
-
13
- def to_s
14
- status = @http_status ? " (HTTP Status: #{@http_status})" : ''
15
- response = @response ? "\nResponse: #{@response}" : ''
16
- "#{message}#{status}#{response}"
17
- end
18
- end
19
- end
1
+ module ChartMogul
2
+ class ChartMogulError < StandardError
3
+ attr_accessor :message
4
+ attr_accessor :response
5
+ attr_accessor :http_status
6
+
7
+ def initialize(message, http_status: nil, response: nil)
8
+ @message = message
9
+ @http_status = http_status
10
+ @response = response
11
+ end
12
+
13
+ def to_s
14
+ status = @http_status ? " (HTTP Status: #{@http_status})" : ''
15
+ response = @response ? "\nResponse: #{@response}" : ''
16
+ "#{message}#{status}#{response}"
17
+ end
18
+ end
19
+ end