chartmogul-ruby 1.6.1 → 1.6.7

Sign up to get free protection for your applications and to get access to all the features.
@@ -73,11 +73,11 @@ require 'chartmogul/enrichment/customer'
73
73
  module ChartMogul
74
74
  API_BASE = 'https://api.chartmogul.com'
75
75
  MAX_RETRIES = 20
76
+ CONFIG_THREAD_KEY = 'chartmogul_ruby.config'
76
77
 
77
78
  class << self
78
79
  extend ConfigAttributes
79
80
 
80
- CONFIG_THREAD_KEY = 'chartmogul_ruby.config'
81
81
 
82
82
  def config
83
83
  Thread.current[CONFIG_THREAD_KEY] = ChartMogul::Configuration.new if Thread.current[CONFIG_THREAD_KEY].nil?
@@ -87,5 +87,6 @@ module ChartMogul
87
87
  config_accessor :account_token
88
88
  config_accessor :secret_key
89
89
  config_accessor :max_retries, MAX_RETRIES
90
+ config_accessor :api_base, API_BASE
90
91
  end
91
92
  end
@@ -15,7 +15,7 @@ module ChartMogul
15
15
  req.body = JSON.dump(serialize_for_write)
16
16
  end
17
17
  end
18
- json = ChartMogul::Utils::JSONParser.parse(resp.body)
18
+ json = ChartMogul::Utils::JSONParser.parse(resp.body, skip_case_conversion: self.class.skip_case_conversion)
19
19
 
20
20
  assign_all_attributes(json)
21
21
  end
@@ -30,7 +30,7 @@ module ChartMogul
30
30
  req.body = JSON.dump(resource.serialize_for_write)
31
31
  end
32
32
  end
33
- json = ChartMogul::Utils::JSONParser.parse(resp.body)
33
+ json = ChartMogul::Utils::JSONParser.parse(resp.body, skip_case_conversion: skip_case_conversion)
34
34
 
35
35
  new_from_json(json)
36
36
  end
@@ -25,7 +25,7 @@ module ChartMogul
25
25
  req.body = JSON.dump(body_data)
26
26
  end
27
27
  end
28
- ChartMogul::Utils::JSONParser.parse(resp.body)
28
+ ChartMogul::Utils::JSONParser.parse(resp.body, skip_case_conversion: skip_case_conversion)
29
29
  end
30
30
 
31
31
  def custom!(http_method, http_path, body_data = {})
@@ -15,7 +15,7 @@ module ChartMogul
15
15
  req.headers['Content-Type'] = 'application/json'
16
16
  end
17
17
  end
18
- json = ChartMogul::Utils::JSONParser.parse(resp.body)
18
+ json = ChartMogul::Utils::JSONParser.parse(resp.body, skip_case_conversion: skip_case_conversion)
19
19
  new_from_json(json)
20
20
  end
21
21
  end
@@ -4,6 +4,10 @@ module ChartMogul
4
4
  module API
5
5
  module Actions
6
6
  module Update
7
+ def self.included(base)
8
+ base.extend ClassMethods
9
+ end
10
+
7
11
  def update!
8
12
  resp = handling_errors do
9
13
  connection.patch("#{resource_path.apply(instance_attributes)}/#{uuid}") do |req|
@@ -11,10 +15,27 @@ module ChartMogul
11
15
  req.body = JSON.dump(serialize_for_write)
12
16
  end
13
17
  end
14
- json = ChartMogul::Utils::JSONParser.parse(resp.body)
18
+
19
+ json = ChartMogul::Utils::JSONParser.parse(resp.body, skip_case_conversion: self.class.skip_case_conversion)
15
20
 
16
21
  assign_all_attributes(json)
17
22
  end
23
+
24
+ module ClassMethods
25
+ def update!(uuid, attributes = {})
26
+ resource = new(attributes)
27
+
28
+ resp = handling_errors do
29
+ connection.patch("#{resource_path.apply(attributes)}/#{uuid}") do |req|
30
+ req.headers['Content-Type'] = 'application/json'
31
+ req.body = JSON.dump(resource.serialize_for_write)
32
+ end
33
+ end
34
+ json = ChartMogul::Utils::JSONParser.parse(resp.body, skip_case_conversion: skip_case_conversion)
35
+
36
+ new_from_json(json)
37
+ end
38
+ end
18
39
  end
19
40
  end
20
41
  end
@@ -17,7 +17,7 @@ module ChartMogul
17
17
  MAX_INTERVAL = 60
18
18
  THREAD_CONNECTION_KEY = 'chartmogul_ruby.api_resource.connection'
19
19
 
20
- class << self; attr_reader :resource_path, :resource_name, :resource_root_key end
20
+ class << self; attr_reader :resource_path, :resource_name, :resource_root_key, :skip_case_conversion end
21
21
 
22
22
  def self.set_resource_path(path)
23
23
  @resource_path = ChartMogul::ResourcePath.new(path)
@@ -31,13 +31,18 @@ module ChartMogul
31
31
  @resource_root_key = root_key
32
32
  end
33
33
 
34
+ # When true, response hash keys won't be converted to snake case
35
+ def self.set_skip_case_conversion(value)
36
+ @skip_case_conversion = value
37
+ end
38
+
34
39
  def self.connection
35
40
  Thread.current[THREAD_CONNECTION_KEY] ||= build_connection
36
41
  end
37
42
 
38
43
  def self.handling_errors
39
44
  yield
40
- rescue Faraday::ClientError => e
45
+ rescue Faraday::ClientError, Faraday::ServerError => e
41
46
  e.response ? handle_request_error(e) : handle_other_error(e)
42
47
  rescue StandardError => e
43
48
  handle_other_error(e)
@@ -80,13 +85,13 @@ module ChartMogul
80
85
  private
81
86
 
82
87
  def self.build_connection
83
- Faraday.new(url: ChartMogul::API_BASE) do |faraday|
88
+ Faraday.new(url: ChartMogul.api_base) do |faraday|
84
89
  faraday.use Faraday::Request::BasicAuthentication, ChartMogul.account_token, ChartMogul.secret_key
85
90
  faraday.use Faraday::Response::RaiseError
86
91
  faraday.request :retry, max: ChartMogul.max_retries, retry_statuses: RETRY_STATUSES,
87
92
  max_interval: MAX_INTERVAL, backoff_factor: BACKOFF_FACTOR,
88
93
  interval_randomness: INTERVAL_RANDOMNESS, interval: INTERVAL, exceptions: RETRY_EXCEPTIONS
89
- faraday.use Faraday::Adapter::NetHttp
94
+ faraday.adapter Faraday::Adapter::NetHttp
90
95
  end
91
96
  end
92
97
  end
@@ -5,5 +5,6 @@ module ChartMogul
5
5
  attr_accessor :account_token
6
6
  attr_accessor :secret_key
7
7
  attr_accessor :max_retries
8
+ attr_accessor :api_base
8
9
  end
9
10
  end
@@ -4,6 +4,7 @@ module ChartMogul
4
4
  class Customer < APIResource
5
5
  set_resource_name 'Customer'
6
6
  set_resource_path '/v1/customers'
7
+ set_skip_case_conversion true
7
8
 
8
9
  readonly_attr :uuid
9
10
  readonly_attr :id
@@ -26,6 +26,15 @@ module ChartMogul
26
26
  super(options.merge(customer_uuid: customer_uuid))
27
27
  end
28
28
 
29
+ def self.destroy_all!(data_source_uuid, customer_uuid)
30
+ path = ChartMogul::ResourcePath.new('v1/data_sources/:data_source_uuid/customers/:customer_uuid/invoices')
31
+ handling_errors do
32
+ connection.delete(path.apply(data_source_uuid: data_source_uuid, customer_uuid: customer_uuid))
33
+ end
34
+ true
35
+ end
36
+
37
+
29
38
  def_delegators :invoices, :each, :[], :<<, :size, :length, :empty?, :first
30
39
 
31
40
  private
@@ -4,8 +4,10 @@ module ChartMogul
4
4
  module Utils
5
5
  class JSONParser
6
6
  class << self
7
- def parse(json_string)
7
+ def parse(json_string, skip_case_conversion: false)
8
8
  hash = JSON.parse(json_string, symbolize_names: true)
9
+ return hash if skip_case_conversion
10
+
9
11
  HashSnakeCaser.new(hash).to_snake_keys
10
12
  end
11
13
 
@@ -20,7 +22,15 @@ module ChartMogul
20
22
  def opt_string_to_time(value)
21
23
  return value unless value.instance_of?(String)
22
24
 
23
- Time.iso8601(value) rescue Time.rfc2822(value) rescue value
25
+ parse_timestamp(value)
26
+ rescue ArgumentError
27
+ value
28
+ end
29
+
30
+ def parse_timestamp(value)
31
+ Time.iso8601(value)
32
+ rescue ArgumentError
33
+ Time.rfc2822(value)
24
34
  end
25
35
  end
26
36
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ChartMogul
4
- VERSION = '1.6.1'
4
+ VERSION = '1.6.7'
5
5
  end
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.6.1
4
+ version: 1.6.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Petr Kopac
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-07-17 00:00:00.000000000 Z
11
+ date: 2020-09-09 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: 0.17.3
19
+ version: 1.0.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: 0.17.3
26
+ version: 1.0.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -200,6 +200,7 @@ files:
200
200
  - fixtures/vcr_cassettes/ChartMogul_Customer/API_Interactions/returns_right_customers_through_search_endpoint.yml
201
201
  - fixtures/vcr_cassettes/ChartMogul_Customer/API_Interactions/updates_custom_attributes.yml
202
202
  - fixtures/vcr_cassettes/ChartMogul_Customer/API_Interactions/updates_customer.yml
203
+ - fixtures/vcr_cassettes/ChartMogul_Customer/API_Interactions/updates_customer_using_class_method.yml
203
204
  - fixtures/vcr_cassettes/ChartMogul_Customer/_find_by_external_id/when_external_id_is_provided/returns_matching_user_if_exists.yml
204
205
  - fixtures/vcr_cassettes/ChartMogul_Customer/_find_by_external_id/when_external_id_is_provided/returns_nil_if_customer_does_not_exist.yml
205
206
  - fixtures/vcr_cassettes/ChartMogul_CustomerInvoices/API_Interactions/correctly_interracts_with_the_API.yml
@@ -242,11 +243,13 @@ files:
242
243
  - fixtures/vcr_cassettes/ChartMogul_Plan/API_Interactions/deletes_existing_plan.yml
243
244
  - fixtures/vcr_cassettes/ChartMogul_Plan/API_Interactions/retrieves_existing_plan_by_uuid.yml
244
245
  - fixtures/vcr_cassettes/ChartMogul_Plan/API_Interactions/updates_existing_plan.yml
246
+ - fixtures/vcr_cassettes/ChartMogul_Plan/API_Interactions/updates_existing_plan_using_class_method.yml
245
247
  - fixtures/vcr_cassettes/ChartMogul_PlanGroup/API_interactions/correctly_handles_a_422_error.yml
246
248
  - fixtures/vcr_cassettes/ChartMogul_PlanGroup/API_interactions/deletes_a_plan_group.yml
247
249
  - fixtures/vcr_cassettes/ChartMogul_PlanGroup/API_interactions/retrieves_existing_plan_group_by_uuid.yml
248
250
  - fixtures/vcr_cassettes/ChartMogul_PlanGroup/API_interactions/returns_an_array_of_plan_groups.yml
249
251
  - fixtures/vcr_cassettes/ChartMogul_PlanGroup/API_interactions/updates_existing_plan_group_name.yml
252
+ - fixtures/vcr_cassettes/ChartMogul_PlanGroup/API_interactions/updates_existing_plan_group_name_via_class_method.yml
250
253
  - fixtures/vcr_cassettes/ChartMogul_PlanGroup/API_interactions/updates_existing_plan_group_plans.yml
251
254
  - fixtures/vcr_cassettes/ChartMogul_PlanGroups_Plans/API_interactions/given_a_plan_group_uuid_returns_an_array_of_plans_in_the_plan_group.yml
252
255
  - fixtures/vcr_cassettes/ChartMogul_Subscription/API_Interactions/connects_subscriptions.yml
@@ -324,14 +327,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
324
327
  requirements:
325
328
  - - ">="
326
329
  - !ruby/object:Gem::Version
327
- version: '0'
330
+ version: '2.3'
328
331
  required_rubygems_version: !ruby/object:Gem::Requirement
329
332
  requirements:
330
333
  - - ">="
331
334
  - !ruby/object:Gem::Version
332
335
  version: '0'
333
336
  requirements: []
334
- rubygems_version: 3.0.8
337
+ rubygems_version: 3.1.4
335
338
  signing_key:
336
339
  specification_version: 4
337
340
  summary: Chartmogul API Ruby Client