From c1db7241a5bfd8ef635d7ba583ad70b22cd429d0 Mon Sep 17 00:00:00 2001 From: Wiktor Plaga Date: Mon, 1 Dec 2025 11:28:07 +0100 Subject: [PATCH 1/3] Add fetching additional DataSource fields --- lib/chartmogul.rb | 5 + .../concerns/invoice_handling_setting.rb | 21 ++ lib/chartmogul/concerns/processing_status.rb | 21 ++ lib/chartmogul/data_source.rb | 8 + .../invoice_handling_setting.rb | 20 ++ .../invoice_handling_settings.rb | 13 ++ .../data_source_settings/processing_status.rb | 11 + spec/chartmogul/data_source_spec.rb | 61 +++++- .../correctly_interracts_with_the_API.yml | 189 ++++++++---------- spec/spec_helper.rb | 1 + 10 files changed, 235 insertions(+), 115 deletions(-) create mode 100644 lib/chartmogul/concerns/invoice_handling_setting.rb create mode 100644 lib/chartmogul/concerns/processing_status.rb create mode 100644 lib/chartmogul/data_source_settings/invoice_handling_setting.rb create mode 100644 lib/chartmogul/data_source_settings/invoice_handling_settings.rb create mode 100644 lib/chartmogul/data_source_settings/processing_status.rb diff --git a/lib/chartmogul.rb b/lib/chartmogul.rb index 6681795..0b552a0 100644 --- a/lib/chartmogul.rb +++ b/lib/chartmogul.rb @@ -50,6 +50,8 @@ require 'chartmogul/concerns/pageable2' require 'chartmogul/concerns/pageable_with_anchor' require 'chartmogul/concerns/pageable_with_cursor' +require 'chartmogul/concerns/processing_status' +require 'chartmogul/concerns/invoice_handling_setting' require 'chartmogul/subscription' require 'chartmogul/invoice' @@ -58,6 +60,9 @@ require 'chartmogul/note' require 'chartmogul/contact' require 'chartmogul/data_source' +require 'chartmogul/data_source_settings/invoice_handling_settings' +require 'chartmogul/data_source_settings/invoice_handling_setting' +require 'chartmogul/data_source_settings/processing_status' require 'chartmogul/ping' require 'chartmogul/plan' require 'chartmogul/plan_group' diff --git a/lib/chartmogul/concerns/invoice_handling_setting.rb b/lib/chartmogul/concerns/invoice_handling_setting.rb new file mode 100644 index 0000000..5ea1dda --- /dev/null +++ b/lib/chartmogul/concerns/invoice_handling_setting.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true + +module ChartMogul + module Concerns + module InvoiceHandlingSetting + def self.included(base) + base.send :prepend, InstanceMethods + + base.instance_eval do + readonly_attr :invoice_handling_setting + end + end + + module InstanceMethods + def set_invoice_handling_setting(invoice_handling_setting_attributes) + @invoice_handling_setting = ChartMogul::DataSourceSettings::InvoiceHandlingSetting.new_from_json(invoice_handling_setting_attributes) + end + end + end + end +end diff --git a/lib/chartmogul/concerns/processing_status.rb b/lib/chartmogul/concerns/processing_status.rb new file mode 100644 index 0000000..5b7c754 --- /dev/null +++ b/lib/chartmogul/concerns/processing_status.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true + +module ChartMogul + module Concerns + module ProcessingStatus + def self.included(base) + base.send :prepend, InstanceMethods + + base.instance_eval do + readonly_attr :processing_status + end + end + + module InstanceMethods + def set_processing_status(processing_status_attributes) + @processing_status = ChartMogul::DataSourceSettings::ProcessingStatus.new_from_json(processing_status_attributes) if processing_status_attributes + end + end + end + end +end diff --git a/lib/chartmogul/data_source.rb b/lib/chartmogul/data_source.rb index 7c31ed0..4434206 100644 --- a/lib/chartmogul/data_source.rb +++ b/lib/chartmogul/data_source.rb @@ -9,6 +9,7 @@ class DataSource < APIResource readonly_attr :status readonly_attr :system readonly_attr :created_at, type: :time + readonly_attr :auto_churn_subscription_setting writeable_attr :name @@ -17,10 +18,17 @@ class DataSource < APIResource include API::Actions::Custom include API::Actions::Destroy include API::Actions::Retrieve + include Concerns::ProcessingStatus + include Concerns::InvoiceHandlingSetting def self.all(options = {}) DataSources.all(options) end + + def self.retrieve(uuid, options = {}) + path = ChartMogul::ResourcePath.new('/v1/data_sources/:uuid') + custom!(:get, path.apply_with_get_params(options.merge(uuid: uuid))) + end end class DataSources < APIResource diff --git a/lib/chartmogul/data_source_settings/invoice_handling_setting.rb b/lib/chartmogul/data_source_settings/invoice_handling_setting.rb new file mode 100644 index 0000000..a58762e --- /dev/null +++ b/lib/chartmogul/data_source_settings/invoice_handling_setting.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +module ChartMogul + module DataSourceSettings + class InvoiceHandlingSetting < ChartMogul::Object + readonly_attr :manual + readonly_attr :automatic + + private + + def set_manual(invoice_handling_settings_attributes) + @manual = InvoiceHandlingSettings.new_from_json(invoice_handling_settings_attributes) if invoice_handling_settings_attributes + end + + def set_automatic(invoice_handling_settings_attributes) + @automatic = InvoiceHandlingSettings.new_from_json(invoice_handling_settings_attributes) if invoice_handling_settings_attributes + end + end + end +end diff --git a/lib/chartmogul/data_source_settings/invoice_handling_settings.rb b/lib/chartmogul/data_source_settings/invoice_handling_settings.rb new file mode 100644 index 0000000..d0aa086 --- /dev/null +++ b/lib/chartmogul/data_source_settings/invoice_handling_settings.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +module ChartMogul + module DataSourceSettings + class InvoiceHandlingSettings < ChartMogul::Object + readonly_attr :create_subscription_when_invoice_is + readonly_attr :update_subscription_when_invoice_is + readonly_attr :prevent_subscription_for_invoice_refunded + readonly_attr :prevent_subscription_for_invoice_voided + readonly_attr :prevent_subscription_for_invoice_written_off + end + end +end diff --git a/lib/chartmogul/data_source_settings/processing_status.rb b/lib/chartmogul/data_source_settings/processing_status.rb new file mode 100644 index 0000000..a972c7d --- /dev/null +++ b/lib/chartmogul/data_source_settings/processing_status.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +module ChartMogul + module DataSourceSettings + class ProcessingStatus < ChartMogul::Object + readonly_attr :processed + readonly_attr :pending + readonly_attr :failed + end + end +end diff --git a/spec/chartmogul/data_source_spec.rb b/spec/chartmogul/data_source_spec.rb index 5df6aea..6833c6f 100644 --- a/spec/chartmogul/data_source_spec.rb +++ b/spec/chartmogul/data_source_spec.rb @@ -44,13 +44,64 @@ expect(ds.uuid).not_to be_nil expect(ds.name).to eq('Test Data Source') - data_sources = ChartMogul::DataSource.all + data_sources = ChartMogul::DataSource.all( + with_processing_status: true, + with_auto_churn_subscription_setting: true, + with_invoice_handling_setting: true, + ) expect(data_sources.size).to eq(1) - expect(data_sources[0].uuid).to eq(ds.uuid) - expect(data_sources[0].name).to eq(ds.name) - expect(data_sources[0].created_at).to eq(ds.created_at) - expect(data_sources[0].status).to eq(ds.status) + data_source = data_sources[0] + expect(data_source.uuid).to eq(ds.uuid) + expect(data_source.name).to eq(ds.name) + expect(data_source.created_at).to eq(ds.created_at) + expect(data_source.status).to eq(ds.status) + expect(data_source.processing_status).to be_a(ChartMogul::DataSourceSettings::ProcessingStatus) + expect(data_source.processing_status.processed).to eq(12) + expect(data_source.processing_status.failed).to eq(8) + expect(data_source.processing_status.pending).to eq(37) + expect(data_source.auto_churn_subscription_setting).to eq(false) + expect(data_source.invoice_handling_setting).to be_a(ChartMogul::DataSourceSettings::InvoiceHandlingSetting) + expect(data_source.invoice_handling_setting.automatic).to be_a(ChartMogul::DataSourceSettings::InvoiceHandlingSettings) + expect(data_source.invoice_handling_setting.automatic.create_subscription_when_invoice_is).to eq('open') + expect(data_source.invoice_handling_setting.automatic.update_subscription_when_invoice_is).to eq('open') + expect(data_source.invoice_handling_setting.automatic.prevent_subscription_for_invoice_refunded).to eq(false) + expect(data_source.invoice_handling_setting.automatic.prevent_subscription_for_invoice_voided).to eq(true) + expect(data_source.invoice_handling_setting.automatic.prevent_subscription_for_invoice_written_off).to eq(true) + expect(data_source.invoice_handling_setting.manual).to be_a(ChartMogul::DataSourceSettings::InvoiceHandlingSettings) + expect(data_source.invoice_handling_setting.manual.create_subscription_when_invoice_is).to eq('open') + expect(data_source.invoice_handling_setting.manual.update_subscription_when_invoice_is).to eq('open') + expect(data_source.invoice_handling_setting.manual.prevent_subscription_for_invoice_refunded).to eq(false) + expect(data_source.invoice_handling_setting.manual.prevent_subscription_for_invoice_voided).to eq(true) + expect(data_source.invoice_handling_setting.manual.prevent_subscription_for_invoice_written_off).to eq(true) + + data_source = ChartMogul::DataSource.retrieve(ds.uuid, + with_processing_status: true, + with_auto_churn_subscription_setting: true, + with_invoice_handling_setting: true, + ) + expect(data_source.uuid).to eq(ds.uuid) + expect(data_source.name).to eq(ds.name) + expect(data_source.created_at).to eq(ds.created_at) + expect(data_source.status).to eq(ds.status) + expect(data_source.processing_status).to be_a(ChartMogul::DataSourceSettings::ProcessingStatus) + expect(data_source.processing_status.processed).to eq(12) + expect(data_source.processing_status.failed).to eq(8) + expect(data_source.processing_status.pending).to eq(37) + expect(data_source.auto_churn_subscription_setting).to eq(false) + expect(data_source.invoice_handling_setting).to be_a(ChartMogul::DataSourceSettings::InvoiceHandlingSetting) + expect(data_source.invoice_handling_setting.automatic).to be_a(ChartMogul::DataSourceSettings::InvoiceHandlingSettings) + expect(data_source.invoice_handling_setting.automatic.create_subscription_when_invoice_is).to eq('open') + expect(data_source.invoice_handling_setting.automatic.update_subscription_when_invoice_is).to eq('open') + expect(data_source.invoice_handling_setting.automatic.prevent_subscription_for_invoice_refunded).to eq(false) + expect(data_source.invoice_handling_setting.automatic.prevent_subscription_for_invoice_voided).to eq(true) + expect(data_source.invoice_handling_setting.automatic.prevent_subscription_for_invoice_written_off).to eq(true) + expect(data_source.invoice_handling_setting.manual).to be_a(ChartMogul::DataSourceSettings::InvoiceHandlingSettings) + expect(data_source.invoice_handling_setting.manual.create_subscription_when_invoice_is).to eq('open') + expect(data_source.invoice_handling_setting.manual.update_subscription_when_invoice_is).to eq('open') + expect(data_source.invoice_handling_setting.manual.prevent_subscription_for_invoice_refunded).to eq(false) + expect(data_source.invoice_handling_setting.manual.prevent_subscription_for_invoice_voided).to eq(true) + expect(data_source.invoice_handling_setting.manual.prevent_subscription_for_invoice_written_off).to eq(true) data_sources[0].destroy! diff --git a/spec/fixtures/vcr_cassettes/ChartMogul_DataSource/API_Interactions/correctly_interracts_with_the_API.yml b/spec/fixtures/vcr_cassettes/ChartMogul_DataSource/API_Interactions/correctly_interracts_with_the_API.yml index 543ca96..ccb8565 100644 --- a/spec/fixtures/vcr_cassettes/ChartMogul_DataSource/API_Interactions/correctly_interracts_with_the_API.yml +++ b/spec/fixtures/vcr_cassettes/ChartMogul_DataSource/API_Interactions/correctly_interracts_with_the_API.yml @@ -8,7 +8,7 @@ http_interactions: string: '{"name":"Test Data Source"}' headers: User-Agent: - - Faraday v0.9.1 + - chartmogul-ruby/4.9.0 Content-Type: - application/json Authorization: @@ -16,129 +16,113 @@ http_interactions: response: status: code: 201 - message: + message: Created headers: - server: - - nginx/1.9.10 date: - - Sun, 05 Jun 2016 17:02:43 GMT + - Tue, 02 Dec 2025 09:32:26 GMT content-type: - - application/json; charset=utf-8 - transfer-encoding: - - chunked + - application/json + content-length: + - '150' connection: - - close - x-frame-options: - - SAMEORIGIN - x-xss-protection: - - 1; mode=block - x-content-type-options: - - nosniff - etag: - - W/"2cbdc42d67c582b8b8e9b5b649142c6d" - cache-control: - - max-age=0, private, must-revalidate - x-request-id: - - 8e251145-840a-4a38-ba7c-468416d00c7a - x-runtime: - - '0.195234' - strict-transport-security: - - max-age=15768000 + - keep-alive + access-control-allow-credentials: + - 'true' body: encoding: UTF-8 - string: '{"uuid":"ds_9afd5143-3884-4977-9281-dbb5f15df461","name":"Test Data - Source","created_at":"2016-06-05T17:02:43.282Z","status":"never_imported"}' - http_version: - recorded_at: Sun, 05 Jun 2016 17:02:43 GMT + string: '{"uuid":"ds_d0b59f2a-cf61-11f0-95c7-c7391c16ed34","name":"Test Data + Source","system":"Custom","created_at":"2025-12-02T09:32:26.858Z","status":"idle"}' + recorded_at: Tue, 02 Dec 2025 09:32:26 GMT - request: method: get - uri: https://api.chartmogul.com/v1/data_sources + uri: https://api.chartmogul.com/v1/data_sources?with_auto_churn_subscription_setting=true&with_invoice_handling_setting=true&with_processing_status=true body: encoding: US-ASCII string: '' headers: User-Agent: - - Faraday v0.9.1 + - chartmogul-ruby/4.9.0 + Content-Type: + - application/json + Authorization: + - Basic hidden + response: + status: + code: 200 + message: OK + headers: + date: + - Tue, 02 Dec 2025 09:32:27 GMT + content-type: + - application/json + content-length: + - '169' + connection: + - keep-alive + access-control-allow-credentials: + - 'true' + body: + encoding: UTF-8 + string: '{"data_sources":[{"uuid":"ds_d0b59f2a-cf61-11f0-95c7-c7391c16ed34","name":"Test Data Source","system":"Custom","created_at":"2025-12-02T09:32:26.858Z","status":"idle","processing_status":{"processed":12,"failed":8,"pending":37},"auto_churn_subscription_setting":false,"invoice_handling_setting":{"manual":{"create_subscription_when_invoice_is":"open","update_subscription_when_invoice_is":"open","prevent_subscription_for_invoice_voided":true,"prevent_subscription_for_invoice_refunded":false,"prevent_subscription_for_invoice_written_off":true},"automatic":{"create_subscription_when_invoice_is":"open","update_subscription_when_invoice_is":"open","prevent_subscription_for_invoice_voided":true,"prevent_subscription_for_invoice_refunded":false,"prevent_subscription_for_invoice_written_off":true}}}]}' + recorded_at: Tue, 02 Dec 2025 09:32:27 GMT +- request: + method: get + uri: https://api.chartmogul.com/v1/data_sources/ds_d0b59f2a-cf61-11f0-95c7-c7391c16ed34?with_auto_churn_subscription_setting=true&with_invoice_handling_setting=true&with_processing_status=true + body: + encoding: UTF-8 + string: "{}" + headers: + User-Agent: + - chartmogul-ruby/4.9.0 + Content-Type: + - application/json Authorization: - Basic hidden response: status: code: 200 - message: + message: OK headers: - server: - - nginx/1.9.10 date: - - Sun, 05 Jun 2016 17:02:43 GMT + - Tue, 02 Dec 2025 09:32:27 GMT content-type: - - application/json; charset=utf-8 - transfer-encoding: - - chunked + - application/json + content-length: + - '173' connection: - - close - x-frame-options: - - SAMEORIGIN - x-xss-protection: - - 1; mode=block - x-content-type-options: - - nosniff - etag: - - W/"8d1f4cac283a3aecfeea3e952b417e64" - cache-control: - - max-age=0, private, must-revalidate - x-request-id: - - a8ee9d0b-364e-4f70-a17f-bfb4883e6ba7 - x-runtime: - - '0.264734' - strict-transport-security: - - max-age=15768000 + - keep-alive + access-control-allow-credentials: + - 'true' body: encoding: UTF-8 - string: '{"data_sources":[{"uuid":"ds_9afd5143-3884-4977-9281-dbb5f15df461","name":"Test - Data Source","created_at":"2016-06-05T17:02:43.282Z","status":"never_imported"}]}' - http_version: - recorded_at: Sun, 05 Jun 2016 17:02:43 GMT + string: '{"uuid":"ds_d0b59f2a-cf61-11f0-95c7-c7391c16ed34","name":"Test Data Source","system":"Custom","created_at":"2025-12-02T09:32:26.858Z","status":"idle","processing_status":{"processed":12,"failed":8,"pending":37},"auto_churn_subscription_setting":false,"invoice_handling_setting":{"manual":{"create_subscription_when_invoice_is":"open","update_subscription_when_invoice_is":"open","prevent_subscription_for_invoice_voided":true,"prevent_subscription_for_invoice_refunded":false,"prevent_subscription_for_invoice_written_off":true},"automatic":{"create_subscription_when_invoice_is":"open","update_subscription_when_invoice_is":"open","prevent_subscription_for_invoice_voided":true,"prevent_subscription_for_invoice_refunded":false,"prevent_subscription_for_invoice_written_off":true}}}' + recorded_at: Tue, 02 Dec 2025 09:32:27 GMT - request: method: delete - uri: https://api.chartmogul.com/v1/data_sources/ds_9afd5143-3884-4977-9281-dbb5f15df461 + uri: https://api.chartmogul.com/v1/data_sources/ds_d0b59f2a-cf61-11f0-95c7-c7391c16ed34 body: encoding: US-ASCII string: '' headers: User-Agent: - - Faraday v0.9.1 + - chartmogul-ruby/4.9.0 Authorization: - Basic hidden response: status: code: 204 - message: + message: No Content headers: - server: - - nginx/1.9.10 date: - - Sun, 05 Jun 2016 17:02:44 GMT + - Tue, 02 Dec 2025 09:32:27 GMT connection: - - close - x-frame-options: - - SAMEORIGIN - x-xss-protection: - - 1; mode=block - x-content-type-options: - - nosniff - cache-control: - - no-cache - x-request-id: - - 11210672-f1bf-4590-9db3-77894c7aa619 - x-runtime: - - '0.008042' - strict-transport-security: - - max-age=15768000 + - keep-alive + access-control-allow-credentials: + - 'true' body: encoding: UTF-8 string: '' - http_version: - recorded_at: Sun, 05 Jun 2016 17:02:44 GMT + recorded_at: Tue, 02 Dec 2025 09:32:27 GMT - request: method: get uri: https://api.chartmogul.com/v1/data_sources @@ -147,43 +131,28 @@ http_interactions: string: '' headers: User-Agent: - - Faraday v0.9.1 + - chartmogul-ruby/4.9.0 + Content-Type: + - application/json Authorization: - Basic hidden response: status: code: 200 - message: + message: OK headers: - server: - - nginx/1.9.10 date: - - Sun, 05 Jun 2016 17:02:54 GMT + - Tue, 02 Dec 2025 09:32:28 GMT content-type: - - application/json; charset=utf-8 - transfer-encoding: - - chunked + - application/json + content-length: + - '19' connection: - - close - x-frame-options: - - SAMEORIGIN - x-xss-protection: - - 1; mode=block - x-content-type-options: - - nosniff - etag: - - W/"fff2ed4cc06b2b7851a2db975ef7e229" - cache-control: - - max-age=0, private, must-revalidate - x-request-id: - - 1340397d-947c-4483-a970-d3707ea5d8a3 - x-runtime: - - '0.121280' - strict-transport-security: - - max-age=15768000 + - keep-alive + access-control-allow-credentials: + - 'true' body: encoding: UTF-8 string: '{"data_sources":[]}' - http_version: - recorded_at: Sun, 05 Jun 2016 17:02:54 GMT -recorded_with: VCR 3.0.3 + recorded_at: Tue, 02 Dec 2025 09:32:28 GMT +recorded_with: VCR 6.3.1 diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 8f2b2d9..a05b504 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -8,6 +8,7 @@ end require 'chartmogul' +require 'pry' require 'vcr' require 'webmock/rspec' require_relative 'support/shared_example_raises_deprecated_param_error' From 5a4993c201d1d05c6901353f40aa2c1e06a055c0 Mon Sep 17 00:00:00 2001 From: Wiktor Plaga Date: Tue, 9 Dec 2025 10:21:44 +0100 Subject: [PATCH 2/3] Update auto_churn_subscription_setting response format --- lib/chartmogul.rb | 2 ++ .../auto_churn_subscription_setting.rb | 21 +++++++++++++++++++ lib/chartmogul/data_source.rb | 2 +- .../auto_churn_subscription_setting.rb | 10 +++++++++ spec/chartmogul/data_source_spec.rb | 8 +++++-- .../correctly_interracts_with_the_API.yml | 4 ++-- 6 files changed, 42 insertions(+), 5 deletions(-) create mode 100644 lib/chartmogul/concerns/auto_churn_subscription_setting.rb create mode 100644 lib/chartmogul/data_source_settings/auto_churn_subscription_setting.rb diff --git a/lib/chartmogul.rb b/lib/chartmogul.rb index 0b552a0..80ca5c6 100644 --- a/lib/chartmogul.rb +++ b/lib/chartmogul.rb @@ -50,6 +50,7 @@ require 'chartmogul/concerns/pageable2' require 'chartmogul/concerns/pageable_with_anchor' require 'chartmogul/concerns/pageable_with_cursor' +require 'chartmogul/concerns/auto_churn_subscription_setting' require 'chartmogul/concerns/processing_status' require 'chartmogul/concerns/invoice_handling_setting' @@ -60,6 +61,7 @@ require 'chartmogul/note' require 'chartmogul/contact' require 'chartmogul/data_source' +require 'chartmogul/data_source_settings/auto_churn_subscription_setting' require 'chartmogul/data_source_settings/invoice_handling_settings' require 'chartmogul/data_source_settings/invoice_handling_setting' require 'chartmogul/data_source_settings/processing_status' diff --git a/lib/chartmogul/concerns/auto_churn_subscription_setting.rb b/lib/chartmogul/concerns/auto_churn_subscription_setting.rb new file mode 100644 index 0000000..3f504c7 --- /dev/null +++ b/lib/chartmogul/concerns/auto_churn_subscription_setting.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true + +module ChartMogul + module Concerns + module AutoChurnSubscriptionSetting + def self.included(base) + base.send :prepend, InstanceMethods + + base.instance_eval do + readonly_attr :auto_churn_subscription_setting + end + end + + module InstanceMethods + def set_auto_churn_subscription_setting(auto_churn_subscription_setting_attributes) + @auto_churn_subscription_setting = ChartMogul::DataSourceSettings::AutoChurnSubscriptionSetting.new_from_json(auto_churn_subscription_setting_attributes) if auto_churn_subscription_setting_attributes + end + end + end + end +end diff --git a/lib/chartmogul/data_source.rb b/lib/chartmogul/data_source.rb index 4434206..f721a10 100644 --- a/lib/chartmogul/data_source.rb +++ b/lib/chartmogul/data_source.rb @@ -9,7 +9,6 @@ class DataSource < APIResource readonly_attr :status readonly_attr :system readonly_attr :created_at, type: :time - readonly_attr :auto_churn_subscription_setting writeable_attr :name @@ -18,6 +17,7 @@ class DataSource < APIResource include API::Actions::Custom include API::Actions::Destroy include API::Actions::Retrieve + include Concerns::AutoChurnSubscriptionSetting include Concerns::ProcessingStatus include Concerns::InvoiceHandlingSetting diff --git a/lib/chartmogul/data_source_settings/auto_churn_subscription_setting.rb b/lib/chartmogul/data_source_settings/auto_churn_subscription_setting.rb new file mode 100644 index 0000000..50abe40 --- /dev/null +++ b/lib/chartmogul/data_source_settings/auto_churn_subscription_setting.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true + +module ChartMogul + module DataSourceSettings + class AutoChurnSubscriptionSetting < ChartMogul::Object + readonly_attr :enabled + readonly_attr :interval + end + end +end diff --git a/spec/chartmogul/data_source_spec.rb b/spec/chartmogul/data_source_spec.rb index 6833c6f..074cbad 100644 --- a/spec/chartmogul/data_source_spec.rb +++ b/spec/chartmogul/data_source_spec.rb @@ -60,7 +60,9 @@ expect(data_source.processing_status.processed).to eq(12) expect(data_source.processing_status.failed).to eq(8) expect(data_source.processing_status.pending).to eq(37) - expect(data_source.auto_churn_subscription_setting).to eq(false) + expect(data_source.auto_churn_subscription_setting).to be_a(ChartMogul::DataSourceSettings::AutoChurnSubscriptionSetting) + expect(data_source.auto_churn_subscription_setting.enabled).to eq(true) + expect(data_source.auto_churn_subscription_setting.interval).to eq(30) expect(data_source.invoice_handling_setting).to be_a(ChartMogul::DataSourceSettings::InvoiceHandlingSetting) expect(data_source.invoice_handling_setting.automatic).to be_a(ChartMogul::DataSourceSettings::InvoiceHandlingSettings) expect(data_source.invoice_handling_setting.automatic.create_subscription_when_invoice_is).to eq('open') @@ -88,7 +90,9 @@ expect(data_source.processing_status.processed).to eq(12) expect(data_source.processing_status.failed).to eq(8) expect(data_source.processing_status.pending).to eq(37) - expect(data_source.auto_churn_subscription_setting).to eq(false) + expect(data_source.auto_churn_subscription_setting).to be_a(ChartMogul::DataSourceSettings::AutoChurnSubscriptionSetting) + expect(data_source.auto_churn_subscription_setting.enabled).to eq(true) + expect(data_source.auto_churn_subscription_setting.interval).to eq(30) expect(data_source.invoice_handling_setting).to be_a(ChartMogul::DataSourceSettings::InvoiceHandlingSetting) expect(data_source.invoice_handling_setting.automatic).to be_a(ChartMogul::DataSourceSettings::InvoiceHandlingSettings) expect(data_source.invoice_handling_setting.automatic.create_subscription_when_invoice_is).to eq('open') diff --git a/spec/fixtures/vcr_cassettes/ChartMogul_DataSource/API_Interactions/correctly_interracts_with_the_API.yml b/spec/fixtures/vcr_cassettes/ChartMogul_DataSource/API_Interactions/correctly_interracts_with_the_API.yml index ccb8565..08d77b5 100644 --- a/spec/fixtures/vcr_cassettes/ChartMogul_DataSource/API_Interactions/correctly_interracts_with_the_API.yml +++ b/spec/fixtures/vcr_cassettes/ChartMogul_DataSource/API_Interactions/correctly_interracts_with_the_API.yml @@ -63,7 +63,7 @@ http_interactions: - 'true' body: encoding: UTF-8 - string: '{"data_sources":[{"uuid":"ds_d0b59f2a-cf61-11f0-95c7-c7391c16ed34","name":"Test Data Source","system":"Custom","created_at":"2025-12-02T09:32:26.858Z","status":"idle","processing_status":{"processed":12,"failed":8,"pending":37},"auto_churn_subscription_setting":false,"invoice_handling_setting":{"manual":{"create_subscription_when_invoice_is":"open","update_subscription_when_invoice_is":"open","prevent_subscription_for_invoice_voided":true,"prevent_subscription_for_invoice_refunded":false,"prevent_subscription_for_invoice_written_off":true},"automatic":{"create_subscription_when_invoice_is":"open","update_subscription_when_invoice_is":"open","prevent_subscription_for_invoice_voided":true,"prevent_subscription_for_invoice_refunded":false,"prevent_subscription_for_invoice_written_off":true}}}]}' + string: '{"data_sources":[{"uuid":"ds_d0b59f2a-cf61-11f0-95c7-c7391c16ed34","name":"Test Data Source","system":"Custom","created_at":"2025-12-02T09:32:26.858Z","status":"idle","processing_status":{"processed":12,"failed":8,"pending":37},"auto_churn_subscription_setting":{"enabled":true,"interval":30},"invoice_handling_setting":{"manual":{"create_subscription_when_invoice_is":"open","update_subscription_when_invoice_is":"open","prevent_subscription_for_invoice_voided":true,"prevent_subscription_for_invoice_refunded":false,"prevent_subscription_for_invoice_written_off":true},"automatic":{"create_subscription_when_invoice_is":"open","update_subscription_when_invoice_is":"open","prevent_subscription_for_invoice_voided":true,"prevent_subscription_for_invoice_refunded":false,"prevent_subscription_for_invoice_written_off":true}}}]}' recorded_at: Tue, 02 Dec 2025 09:32:27 GMT - request: method: get @@ -95,7 +95,7 @@ http_interactions: - 'true' body: encoding: UTF-8 - string: '{"uuid":"ds_d0b59f2a-cf61-11f0-95c7-c7391c16ed34","name":"Test Data Source","system":"Custom","created_at":"2025-12-02T09:32:26.858Z","status":"idle","processing_status":{"processed":12,"failed":8,"pending":37},"auto_churn_subscription_setting":false,"invoice_handling_setting":{"manual":{"create_subscription_when_invoice_is":"open","update_subscription_when_invoice_is":"open","prevent_subscription_for_invoice_voided":true,"prevent_subscription_for_invoice_refunded":false,"prevent_subscription_for_invoice_written_off":true},"automatic":{"create_subscription_when_invoice_is":"open","update_subscription_when_invoice_is":"open","prevent_subscription_for_invoice_voided":true,"prevent_subscription_for_invoice_refunded":false,"prevent_subscription_for_invoice_written_off":true}}}' + string: '{"uuid":"ds_d0b59f2a-cf61-11f0-95c7-c7391c16ed34","name":"Test Data Source","system":"Custom","created_at":"2025-12-02T09:32:26.858Z","status":"idle","processing_status":{"processed":12,"failed":8,"pending":37},"auto_churn_subscription_setting":{"enabled":true,"interval":30},"invoice_handling_setting":{"manual":{"create_subscription_when_invoice_is":"open","update_subscription_when_invoice_is":"open","prevent_subscription_for_invoice_voided":true,"prevent_subscription_for_invoice_refunded":false,"prevent_subscription_for_invoice_written_off":true},"automatic":{"create_subscription_when_invoice_is":"open","update_subscription_when_invoice_is":"open","prevent_subscription_for_invoice_voided":true,"prevent_subscription_for_invoice_refunded":false,"prevent_subscription_for_invoice_written_off":true}}}' recorded_at: Tue, 02 Dec 2025 09:32:27 GMT - request: method: delete From c4be895318372d4371e4cd1c8cbfe06206c58dcb Mon Sep 17 00:00:00 2001 From: Wiktor Plaga Date: Mon, 15 Dec 2025 12:19:22 +0100 Subject: [PATCH 3/3] Update invoice_handling_setting format to fully backwards-compatible --- lib/chartmogul.rb | 3 -- .../concerns/invoice_handling_setting.rb | 21 -------- lib/chartmogul/data_source.rb | 2 +- .../invoice_handling_setting.rb | 20 ------- .../invoice_handling_settings.rb | 13 ----- spec/chartmogul/data_source_spec.rb | 52 +++++++++---------- 6 files changed, 27 insertions(+), 84 deletions(-) delete mode 100644 lib/chartmogul/concerns/invoice_handling_setting.rb delete mode 100644 lib/chartmogul/data_source_settings/invoice_handling_setting.rb delete mode 100644 lib/chartmogul/data_source_settings/invoice_handling_settings.rb diff --git a/lib/chartmogul.rb b/lib/chartmogul.rb index 80ca5c6..cd7790c 100644 --- a/lib/chartmogul.rb +++ b/lib/chartmogul.rb @@ -52,7 +52,6 @@ require 'chartmogul/concerns/pageable_with_cursor' require 'chartmogul/concerns/auto_churn_subscription_setting' require 'chartmogul/concerns/processing_status' -require 'chartmogul/concerns/invoice_handling_setting' require 'chartmogul/subscription' require 'chartmogul/invoice' @@ -62,8 +61,6 @@ require 'chartmogul/contact' require 'chartmogul/data_source' require 'chartmogul/data_source_settings/auto_churn_subscription_setting' -require 'chartmogul/data_source_settings/invoice_handling_settings' -require 'chartmogul/data_source_settings/invoice_handling_setting' require 'chartmogul/data_source_settings/processing_status' require 'chartmogul/ping' require 'chartmogul/plan' diff --git a/lib/chartmogul/concerns/invoice_handling_setting.rb b/lib/chartmogul/concerns/invoice_handling_setting.rb deleted file mode 100644 index 5ea1dda..0000000 --- a/lib/chartmogul/concerns/invoice_handling_setting.rb +++ /dev/null @@ -1,21 +0,0 @@ -# frozen_string_literal: true - -module ChartMogul - module Concerns - module InvoiceHandlingSetting - def self.included(base) - base.send :prepend, InstanceMethods - - base.instance_eval do - readonly_attr :invoice_handling_setting - end - end - - module InstanceMethods - def set_invoice_handling_setting(invoice_handling_setting_attributes) - @invoice_handling_setting = ChartMogul::DataSourceSettings::InvoiceHandlingSetting.new_from_json(invoice_handling_setting_attributes) - end - end - end - end -end diff --git a/lib/chartmogul/data_source.rb b/lib/chartmogul/data_source.rb index f721a10..6ae71e3 100644 --- a/lib/chartmogul/data_source.rb +++ b/lib/chartmogul/data_source.rb @@ -9,6 +9,7 @@ class DataSource < APIResource readonly_attr :status readonly_attr :system readonly_attr :created_at, type: :time + readonly_attr :invoice_handling_setting writeable_attr :name @@ -19,7 +20,6 @@ class DataSource < APIResource include API::Actions::Retrieve include Concerns::AutoChurnSubscriptionSetting include Concerns::ProcessingStatus - include Concerns::InvoiceHandlingSetting def self.all(options = {}) DataSources.all(options) diff --git a/lib/chartmogul/data_source_settings/invoice_handling_setting.rb b/lib/chartmogul/data_source_settings/invoice_handling_setting.rb deleted file mode 100644 index a58762e..0000000 --- a/lib/chartmogul/data_source_settings/invoice_handling_setting.rb +++ /dev/null @@ -1,20 +0,0 @@ -# frozen_string_literal: true - -module ChartMogul - module DataSourceSettings - class InvoiceHandlingSetting < ChartMogul::Object - readonly_attr :manual - readonly_attr :automatic - - private - - def set_manual(invoice_handling_settings_attributes) - @manual = InvoiceHandlingSettings.new_from_json(invoice_handling_settings_attributes) if invoice_handling_settings_attributes - end - - def set_automatic(invoice_handling_settings_attributes) - @automatic = InvoiceHandlingSettings.new_from_json(invoice_handling_settings_attributes) if invoice_handling_settings_attributes - end - end - end -end diff --git a/lib/chartmogul/data_source_settings/invoice_handling_settings.rb b/lib/chartmogul/data_source_settings/invoice_handling_settings.rb deleted file mode 100644 index d0aa086..0000000 --- a/lib/chartmogul/data_source_settings/invoice_handling_settings.rb +++ /dev/null @@ -1,13 +0,0 @@ -# frozen_string_literal: true - -module ChartMogul - module DataSourceSettings - class InvoiceHandlingSettings < ChartMogul::Object - readonly_attr :create_subscription_when_invoice_is - readonly_attr :update_subscription_when_invoice_is - readonly_attr :prevent_subscription_for_invoice_refunded - readonly_attr :prevent_subscription_for_invoice_voided - readonly_attr :prevent_subscription_for_invoice_written_off - end - end -end diff --git a/spec/chartmogul/data_source_spec.rb b/spec/chartmogul/data_source_spec.rb index 074cbad..3704942 100644 --- a/spec/chartmogul/data_source_spec.rb +++ b/spec/chartmogul/data_source_spec.rb @@ -63,19 +63,19 @@ expect(data_source.auto_churn_subscription_setting).to be_a(ChartMogul::DataSourceSettings::AutoChurnSubscriptionSetting) expect(data_source.auto_churn_subscription_setting.enabled).to eq(true) expect(data_source.auto_churn_subscription_setting.interval).to eq(30) - expect(data_source.invoice_handling_setting).to be_a(ChartMogul::DataSourceSettings::InvoiceHandlingSetting) - expect(data_source.invoice_handling_setting.automatic).to be_a(ChartMogul::DataSourceSettings::InvoiceHandlingSettings) - expect(data_source.invoice_handling_setting.automatic.create_subscription_when_invoice_is).to eq('open') - expect(data_source.invoice_handling_setting.automatic.update_subscription_when_invoice_is).to eq('open') - expect(data_source.invoice_handling_setting.automatic.prevent_subscription_for_invoice_refunded).to eq(false) - expect(data_source.invoice_handling_setting.automatic.prevent_subscription_for_invoice_voided).to eq(true) - expect(data_source.invoice_handling_setting.automatic.prevent_subscription_for_invoice_written_off).to eq(true) - expect(data_source.invoice_handling_setting.manual).to be_a(ChartMogul::DataSourceSettings::InvoiceHandlingSettings) - expect(data_source.invoice_handling_setting.manual.create_subscription_when_invoice_is).to eq('open') - expect(data_source.invoice_handling_setting.manual.update_subscription_when_invoice_is).to eq('open') - expect(data_source.invoice_handling_setting.manual.prevent_subscription_for_invoice_refunded).to eq(false) - expect(data_source.invoice_handling_setting.manual.prevent_subscription_for_invoice_voided).to eq(true) - expect(data_source.invoice_handling_setting.manual.prevent_subscription_for_invoice_written_off).to eq(true) + expect(data_source.invoice_handling_setting).to be_a(Hash) + expect(data_source.invoice_handling_setting[:automatic]).to be_a(Hash) + expect(data_source.invoice_handling_setting[:automatic][:create_subscription_when_invoice_is]).to eq('open') + expect(data_source.invoice_handling_setting[:automatic][:update_subscription_when_invoice_is]).to eq('open') + expect(data_source.invoice_handling_setting[:automatic][:prevent_subscription_for_invoice_refunded]).to eq(false) + expect(data_source.invoice_handling_setting[:automatic][:prevent_subscription_for_invoice_voided]).to eq(true) + expect(data_source.invoice_handling_setting[:automatic][:prevent_subscription_for_invoice_written_off]).to eq(true) + expect(data_source.invoice_handling_setting[:manual]).to be_a(Hash) + expect(data_source.invoice_handling_setting[:manual][:create_subscription_when_invoice_is]).to eq('open') + expect(data_source.invoice_handling_setting[:manual][:update_subscription_when_invoice_is]).to eq('open') + expect(data_source.invoice_handling_setting[:manual][:prevent_subscription_for_invoice_refunded]).to eq(false) + expect(data_source.invoice_handling_setting[:manual][:prevent_subscription_for_invoice_voided]).to eq(true) + expect(data_source.invoice_handling_setting[:manual][:prevent_subscription_for_invoice_written_off]).to eq(true) data_source = ChartMogul::DataSource.retrieve(ds.uuid, with_processing_status: true, @@ -93,19 +93,19 @@ expect(data_source.auto_churn_subscription_setting).to be_a(ChartMogul::DataSourceSettings::AutoChurnSubscriptionSetting) expect(data_source.auto_churn_subscription_setting.enabled).to eq(true) expect(data_source.auto_churn_subscription_setting.interval).to eq(30) - expect(data_source.invoice_handling_setting).to be_a(ChartMogul::DataSourceSettings::InvoiceHandlingSetting) - expect(data_source.invoice_handling_setting.automatic).to be_a(ChartMogul::DataSourceSettings::InvoiceHandlingSettings) - expect(data_source.invoice_handling_setting.automatic.create_subscription_when_invoice_is).to eq('open') - expect(data_source.invoice_handling_setting.automatic.update_subscription_when_invoice_is).to eq('open') - expect(data_source.invoice_handling_setting.automatic.prevent_subscription_for_invoice_refunded).to eq(false) - expect(data_source.invoice_handling_setting.automatic.prevent_subscription_for_invoice_voided).to eq(true) - expect(data_source.invoice_handling_setting.automatic.prevent_subscription_for_invoice_written_off).to eq(true) - expect(data_source.invoice_handling_setting.manual).to be_a(ChartMogul::DataSourceSettings::InvoiceHandlingSettings) - expect(data_source.invoice_handling_setting.manual.create_subscription_when_invoice_is).to eq('open') - expect(data_source.invoice_handling_setting.manual.update_subscription_when_invoice_is).to eq('open') - expect(data_source.invoice_handling_setting.manual.prevent_subscription_for_invoice_refunded).to eq(false) - expect(data_source.invoice_handling_setting.manual.prevent_subscription_for_invoice_voided).to eq(true) - expect(data_source.invoice_handling_setting.manual.prevent_subscription_for_invoice_written_off).to eq(true) + expect(data_source.invoice_handling_setting).to be_a(Hash) + expect(data_source.invoice_handling_setting[:automatic]).to be_a(Hash) + expect(data_source.invoice_handling_setting[:automatic][:create_subscription_when_invoice_is]).to eq('open') + expect(data_source.invoice_handling_setting[:automatic][:update_subscription_when_invoice_is]).to eq('open') + expect(data_source.invoice_handling_setting[:automatic][:prevent_subscription_for_invoice_refunded]).to eq(false) + expect(data_source.invoice_handling_setting[:automatic][:prevent_subscription_for_invoice_voided]).to eq(true) + expect(data_source.invoice_handling_setting[:automatic][:prevent_subscription_for_invoice_written_off]).to eq(true) + expect(data_source.invoice_handling_setting[:manual]).to be_a(Hash) + expect(data_source.invoice_handling_setting[:manual][:create_subscription_when_invoice_is]).to eq('open') + expect(data_source.invoice_handling_setting[:manual][:update_subscription_when_invoice_is]).to eq('open') + expect(data_source.invoice_handling_setting[:manual][:prevent_subscription_for_invoice_refunded]).to eq(false) + expect(data_source.invoice_handling_setting[:manual][:prevent_subscription_for_invoice_voided]).to eq(true) + expect(data_source.invoice_handling_setting[:manual][:prevent_subscription_for_invoice_written_off]).to eq(true) data_sources[0].destroy!