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.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/README.md +11 -6
  4. data/bin/setup +1 -0
  5. data/changelog.md +4 -0
  6. data/fixtures/vcr_cassettes/{ChartMogul_Import_Customer → ChartMogul_Customer}/API_Interactions/correctly_handles_a_422_response.yml +3 -3
  7. data/fixtures/vcr_cassettes/{ChartMogul_Import_Customer → ChartMogul_Customer}/API_Interactions/correctly_interracts_with_the_API.yml +15 -15
  8. 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
  9. 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
  10. data/fixtures/vcr_cassettes/{ChartMogul_Import_CustomerInvoices → ChartMogul_CustomerInvoices}/API_Interactions/correctly_interracts_with_the_API.yml +4 -4
  11. data/fixtures/vcr_cassettes/ChartMogul_DataSource/API_Interactions/correctly_interracts_with_the_API.yml +12 -12
  12. data/fixtures/vcr_cassettes/ChartMogul_DataSource/API_Interactions/correctly_raises_errors_on_404.yml +3 -3
  13. data/fixtures/vcr_cassettes/ChartMogul_DataSource/API_Interactions/correctly_raises_errors_on_422.yml +3 -3
  14. data/fixtures/vcr_cassettes/ChartMogul_DataSource/API_Interactions/retrieves_existing_data_source_matching_uuid.yml +101 -0
  15. data/fixtures/vcr_cassettes/ChartMogul_Enrichment_Customer/API_Interactions/raises_401_if_invalid_credentials.yml +38 -0
  16. data/fixtures/vcr_cassettes/ChartMogul_Ping/pings/and_fails_on_incorrect_credentials.yml +38 -0
  17. data/fixtures/vcr_cassettes/ChartMogul_Ping/pings/when_credentials_correct.yml +38 -0
  18. data/fixtures/vcr_cassettes/{ChartMogul_Import_Plan/API_Interractions → ChartMogul_Plan/API_Interactions}/correctly_handles_a_422_error.yml +3 -3
  19. 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
  20. 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
  21. data/fixtures/vcr_cassettes/ChartMogul_Plan/API_Interactions/retrieves_existing_plan_by_uuid.yml +151 -0
  22. data/fixtures/vcr_cassettes/ChartMogul_Plan/API_Interactions/updates_existing_plan.yml +198 -0
  23. data/fixtures/vcr_cassettes/{ChartMogul_Import_Subscription → ChartMogul_Subscription}/API_Interactions/correctly_interracts_with_the_API.yml +4 -4
  24. data/fixtures/vcr_cassettes/{ChartMogul_Import_Transactions_Payment → ChartMogul_Transactions_Payment}/API_Interactions/correctly_interracts_with_the_API.yml +3 -3
  25. data/lib/chartmogul.rb +12 -11
  26. data/lib/chartmogul/api_resource.rb +12 -1
  27. data/lib/chartmogul/customer.rb +41 -0
  28. data/lib/chartmogul/customer_invoices.rb +42 -0
  29. data/lib/chartmogul/data_source.rb +22 -0
  30. data/lib/chartmogul/errors/unauthorized_error.rb +4 -0
  31. data/lib/chartmogul/invoice.rb +62 -0
  32. data/lib/chartmogul/line_items/one_time.rb +23 -0
  33. data/lib/chartmogul/line_items/subscription.rb +29 -0
  34. data/lib/chartmogul/ping.rb +14 -0
  35. data/lib/chartmogul/plan.rb +26 -0
  36. data/lib/chartmogul/subscription.rb +31 -0
  37. data/lib/chartmogul/transactions/payment.rb +24 -0
  38. data/lib/chartmogul/transactions/refund.rb +24 -0
  39. data/lib/chartmogul/version.rb +1 -1
  40. metadata +30 -24
  41. data/fixtures/vcr_cassettes/ChartMogul_Import_DataSource/API_Interactions/correctly_raises_errors_on_404.yml +0 -46
  42. data/fixtures/vcr_cassettes/ChartMogul_Import_DataSource/API_Interactions/correctly_raises_errors_on_422.yml +0 -48
  43. data/lib/chartmogul/import/customer.rb +0 -43
  44. data/lib/chartmogul/import/customer_invoices.rb +0 -44
  45. data/lib/chartmogul/import/data_source.rb +0 -19
  46. data/lib/chartmogul/import/invoice.rb +0 -64
  47. data/lib/chartmogul/import/line_items/one_time.rb +0 -25
  48. data/lib/chartmogul/import/line_items/subscription.rb +0 -31
  49. data/lib/chartmogul/import/plan.rb +0 -21
  50. data/lib/chartmogul/import/subscription.rb +0 -33
  51. data/lib/chartmogul/import/transactions/payment.rb +0 -26
  52. data/lib/chartmogul/import/transactions/refund.rb +0 -26
@@ -1,43 +0,0 @@
1
- module ChartMogul
2
- module Import
3
- class Customer < APIResource
4
- set_resource_name 'Customer'
5
- set_resource_path '/v1/import/customers'
6
- set_resource_root_key :customers
7
-
8
- readonly_attr :uuid
9
-
10
- writeable_attr :external_id
11
- writeable_attr :name
12
- writeable_attr :email
13
- writeable_attr :company
14
- writeable_attr :country
15
- writeable_attr :state
16
- writeable_attr :city
17
- writeable_attr :zip
18
- writeable_attr :data_source_uuid
19
- writeable_attr :lead_created_at, type: :time
20
- writeable_attr :free_trial_started_at, type: :time
21
-
22
- include API::Actions::All
23
- include API::Actions::Create
24
- include API::Actions::Destroy
25
-
26
- def self.find_by_external_id(external_id)
27
- all(external_id: external_id).first
28
- end
29
-
30
- def subscriptions(options = {})
31
- @subscriptions ||= Subscription.all(uuid, options)
32
- end
33
-
34
- def invoices(options = {})
35
- @invoices ||= CustomerInvoices.all(uuid, options)
36
- end
37
-
38
- def invoices=(invoices_array)
39
- @invoices = CustomerInvoices.new(customer_uuid: uuid, invoices: invoices_array)
40
- end
41
- end
42
- end
43
- end
@@ -1,44 +0,0 @@
1
- require 'forwardable'
2
-
3
- module ChartMogul
4
- module Import
5
- class CustomerInvoices < APIResource
6
- extend Forwardable
7
- include Enumerable
8
-
9
- set_resource_name 'Invoices'
10
- set_resource_path '/v1/import/customers/:customer_uuid/invoices'
11
-
12
- writeable_attr :invoices, default: []
13
-
14
- writeable_attr :customer_uuid
15
-
16
- include API::Actions::All
17
- include API::Actions::Create
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
28
-
29
- private
30
-
31
- def set_invoices(invoices_attributes)
32
- @invoices = invoices_attributes.map.with_index do |invoice_attributes, index|
33
- existing_invoice = invoices[index]
34
-
35
- if existing_invoice
36
- existing_invoice.assign_all_attributes(invoice_attributes)
37
- else
38
- Invoice.new_from_json(invoice_attributes)
39
- end
40
- end
41
- end
42
- end
43
- end
44
- end
@@ -1,19 +0,0 @@
1
- module ChartMogul
2
- module Import
3
- class DataSource < APIResource
4
- set_resource_name 'Data Source'
5
- set_resource_path '/v1/import/data_sources'
6
- set_resource_root_key :data_sources
7
-
8
- readonly_attr :uuid
9
- readonly_attr :status
10
- readonly_attr :created_at, type: :time
11
-
12
- writeable_attr :name
13
-
14
- include API::Actions::All
15
- include API::Actions::Create
16
- include API::Actions::Destroy
17
- end
18
- end
19
- end
@@ -1,64 +0,0 @@
1
- module ChartMogul
2
- module Import
3
- class Invoice < ChartMogul::Object
4
- readonly_attr :uuid
5
-
6
- writeable_attr :date, type: :time
7
- writeable_attr :currency
8
- writeable_attr :line_items, default: []
9
- writeable_attr :transactions, default: []
10
- writeable_attr :external_id
11
- writeable_attr :due_date, type: :time
12
-
13
- def serialize_line_items
14
- line_items.map(&:serialize_for_write)
15
- end
16
-
17
- def serialize_transactions
18
- transactions.map(&:serialize_for_write)
19
- end
20
-
21
- private
22
-
23
- def set_line_items(line_items_attributes)
24
- @line_items = line_items_attributes.map.with_index do |line_item_attributes, index|
25
- existing_line_item = line_items[index]
26
-
27
- if existing_line_item
28
- existing_line_item.assign_all_attributes(line_item_attributes)
29
- else
30
- line_item_class(line_item_attributes[:type])
31
- .new_from_json(line_item_attributes.merge(invoice_uuid: uuid))
32
- end
33
- end
34
- end
35
-
36
- def set_transactions(transactions_attributes)
37
- @transactions = transactions_attributes.map.with_index do |transaction_attributes, index|
38
- existing_transaction = transactions[index]
39
-
40
- if existing_transaction
41
- existing_transaction.assign_all_attributes(transaction_attributes)
42
- else
43
- transaction_class(transaction_attributes[:type])
44
- .new_from_json(transaction_attributes.merge(invoice_uuid: uuid))
45
- end
46
- end
47
- end
48
-
49
- def line_item_class(type)
50
- case type
51
- when 'subscription' then ChartMogul::Import::LineItems::Subscription
52
- when 'one_time' then ChartMogul::Import::LineItems::OneTime
53
- end
54
- end
55
-
56
- def transaction_class(type)
57
- case type
58
- when 'payment' then ChartMogul::Import::Transactions::Payment
59
- when 'refund' then ChartMogul::Import::Transactions::Refund
60
- end
61
- end
62
- end
63
- end
64
- end
@@ -1,25 +0,0 @@
1
- module ChartMogul
2
- module Import
3
- module LineItems
4
- class OneTime < ChartMogul::Object
5
- readonly_attr :uuid
6
-
7
- writeable_attr :type, default: 'one_time'
8
- writeable_attr :amount_in_cents
9
- writeable_attr :description
10
- writeable_attr :quantity
11
- writeable_attr :discount_amount_in_cents
12
- writeable_attr :discount_code
13
- writeable_attr :tax_amount_in_cents
14
- writeable_attr :external_id
15
-
16
- writeable_attr :invoice_uuid
17
-
18
- def initialize(attributes = {})
19
- super(attributes)
20
- @type = 'one_time'
21
- end
22
- end
23
- end
24
- end
25
- end
@@ -1,31 +0,0 @@
1
- module ChartMogul
2
- module Import
3
- module LineItems
4
- class Subscription < ChartMogul::Object
5
- readonly_attr :uuid
6
-
7
- writeable_attr :type, default: 'subscription'
8
- writeable_attr :subscription_external_id
9
- writeable_attr :service_period_start, type: :time
10
- writeable_attr :service_period_end, type: :time
11
- writeable_attr :amount_in_cents
12
- writeable_attr :cancelled_at, type: :time
13
- writeable_attr :prorated
14
- writeable_attr :quantity
15
- writeable_attr :discount_amount_in_cents
16
- writeable_attr :discount_code
17
- writeable_attr :tax_amount_in_cents
18
- writeable_attr :external_id
19
-
20
- readonly_attr :subscription_uuid
21
- writeable_attr :invoice_uuid
22
- writeable_attr :plan_uuid
23
-
24
- def initialize(attributes = {})
25
- super(attributes)
26
- @type = 'subscription'
27
- end
28
- end
29
- end
30
- end
31
- end
@@ -1,21 +0,0 @@
1
- module ChartMogul
2
- module Import
3
- class Plan < APIResource
4
- set_resource_name 'Plan'
5
- set_resource_path '/v1/import/plans'
6
- set_resource_root_key :plans
7
-
8
- readonly_attr :uuid
9
-
10
- writeable_attr :name
11
- writeable_attr :interval_count
12
- writeable_attr :interval_unit
13
- writeable_attr :external_id
14
-
15
- writeable_attr :data_source_uuid
16
-
17
- include API::Actions::All
18
- include API::Actions::Create
19
- end
20
- end
21
- end
@@ -1,33 +0,0 @@
1
- module ChartMogul
2
- module Import
3
- class Subscription < APIResource
4
- set_resource_name 'Subscription'
5
- set_resource_path '/v1/import/customers/:customer_uuid/subscriptions'
6
- set_resource_root_key :subscriptions
7
-
8
- readonly_attr :uuid
9
- readonly_attr :external_id
10
- readonly_attr :cancellation_dates, default: []
11
-
12
- readonly_attr :plan_uuid
13
- readonly_attr :data_source_uuid
14
-
15
- include API::Actions::All
16
- include API::Actions::Custom
17
-
18
- def set_cancellation_dates(cancellation_dates_array)
19
- @cancellation_dates = cancellation_dates_array.map do |cancellation_date|
20
- Time.parse(cancellation_date)
21
- end
22
- end
23
-
24
- def cancel(cancelled_at)
25
- custom!(:patch, "/v1/import/subscriptions/#{uuid}", cancelled_at: cancelled_at)
26
- end
27
-
28
- def self.all(customer_uuid, options = {})
29
- super(options.merge(customer_uuid: customer_uuid))
30
- end
31
- end
32
- end
33
- end
@@ -1,26 +0,0 @@
1
- module ChartMogul
2
- module Import
3
- module Transactions
4
- class Payment < APIResource
5
- set_resource_name 'Payment Transaction'
6
- set_resource_path '/v1/import/invoices/:invoice_uuid/transactions'
7
-
8
- readonly_attr :uuid
9
-
10
- writeable_attr :type, default: 'payment'
11
- writeable_attr :date, type: :time
12
- writeable_attr :result
13
- writeable_attr :external_id
14
-
15
- writeable_attr :invoice_uuid
16
-
17
- def initialize(attributes = {})
18
- super(attributes)
19
- @type = 'payment'
20
- end
21
-
22
- include API::Actions::Create
23
- end
24
- end
25
- end
26
- end
@@ -1,26 +0,0 @@
1
- module ChartMogul
2
- module Import
3
- module Transactions
4
- class Refund < APIResource
5
- set_resource_name 'Refund Transaction'
6
- set_resource_path '/v1/import/invoices/:invoice_uuid/transactions'
7
-
8
- readonly_attr :uuid
9
-
10
- writeable_attr :type, default: 'refund'
11
- writeable_attr :date, type: :time
12
- writeable_attr :result
13
- writeable_attr :external_id
14
-
15
- writeable_attr :invoice_uuid
16
-
17
- def initialize(attributes = {})
18
- super(attributes)
19
- @type = 'refund'
20
- end
21
-
22
- include API::Actions::Create
23
- end
24
- end
25
- end
26
- end