stripe_model_callbacks 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (110) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +153 -0
  4. data/Rakefile +26 -0
  5. data/app/assets/config/stripe_model_callbacks_manifest.js +2 -0
  6. data/app/assets/javascripts/stripe_model_callbacks/application.js +13 -0
  7. data/app/assets/stylesheets/stripe_model_callbacks/application.css +15 -0
  8. data/app/controllers/stripe_model_callbacks/application_controller.rb +3 -0
  9. data/app/jobs/stripe_model_callbacks/application_job.rb +2 -0
  10. data/app/mailers/stripe_model_callbacks/application_mailer.rb +4 -0
  11. data/app/models/stripe_model_callbacks/application_record.rb +60 -0
  12. data/app/services/stripe_model_callbacks/account/external_account/updated_service.rb +13 -0
  13. data/app/services/stripe_model_callbacks/attributes_assigner_service.rb +35 -0
  14. data/app/services/stripe_model_callbacks/base_event_service.rb +9 -0
  15. data/app/services/stripe_model_callbacks/base_service.rb +26 -0
  16. data/app/services/stripe_model_callbacks/charge/dispute_updated_service.rb +29 -0
  17. data/app/services/stripe_model_callbacks/charge/updated_service.rb +40 -0
  18. data/app/services/stripe_model_callbacks/configure_service.rb +217 -0
  19. data/app/services/stripe_model_callbacks/coupon/updated_service.rb +18 -0
  20. data/app/services/stripe_model_callbacks/customer/bank_account/deleted_service.rb +13 -0
  21. data/app/services/stripe_model_callbacks/customer/deleted_service.rb +13 -0
  22. data/app/services/stripe_model_callbacks/customer/discount_updated_service.rb +32 -0
  23. data/app/services/stripe_model_callbacks/customer/source_updated_service.rb +25 -0
  24. data/app/services/stripe_model_callbacks/customer/subscription/updated_service.rb +28 -0
  25. data/app/services/stripe_model_callbacks/customer/updated_service.rb +13 -0
  26. data/app/services/stripe_model_callbacks/event_mocker_service.rb +38 -0
  27. data/app/services/stripe_model_callbacks/invoice/updated_service.rb +26 -0
  28. data/app/services/stripe_model_callbacks/invoice_item/updated_service.rb +13 -0
  29. data/app/services/stripe_model_callbacks/notifier_service.rb +6 -0
  30. data/app/services/stripe_model_callbacks/order/updated_service.rb +28 -0
  31. data/app/services/stripe_model_callbacks/payout/updated_service.rb +29 -0
  32. data/app/services/stripe_model_callbacks/plan/updated_service.rb +14 -0
  33. data/app/services/stripe_model_callbacks/product/updated_service.rb +14 -0
  34. data/app/services/stripe_model_callbacks/recipient/updated_service.rb +14 -0
  35. data/app/services/stripe_model_callbacks/refund/updated_service.rb +12 -0
  36. data/app/services/stripe_model_callbacks/review/updated_service.rb +13 -0
  37. data/app/services/stripe_model_callbacks/sku/updated_service.rb +14 -0
  38. data/app/services/stripe_model_callbacks/source/updated_service.rb +31 -0
  39. data/app/services/stripe_model_callbacks/subscription/state_checker_service.rb +21 -0
  40. data/app/services/stripe_model_callbacks/transfer/updated_service.rb +18 -0
  41. data/app/views/layouts/stripe_model_callbacks/application.html.erb +14 -0
  42. data/config/rails_best_practices.yml +49 -0
  43. data/config/routes.rb +2 -0
  44. data/db/migrate/20180206115801_create_stripe_charges.rb +54 -0
  45. data/db/migrate/20180206115802_create_stripe_coupons.rb +22 -0
  46. data/db/migrate/20180206115803_create_stripe_customers.rb +21 -0
  47. data/db/migrate/20180206115804_create_stripe_discounts.rb +27 -0
  48. data/db/migrate/20180206115805_create_stripe_invoice_items.rb +26 -0
  49. data/db/migrate/20180206115806_create_stripe_invoices.rb +57 -0
  50. data/db/migrate/20180206115807_create_stripe_order_items.rb +15 -0
  51. data/db/migrate/20180206115808_create_stripe_orders.rb +46 -0
  52. data/db/migrate/20180206115809_create_stripe_payouts.rb +27 -0
  53. data/db/migrate/20180206115810_create_stripe_plans.rb +20 -0
  54. data/db/migrate/20180206115811_create_stripe_products.rb +25 -0
  55. data/db/migrate/20180206115812_create_stripe_recipients.rb +18 -0
  56. data/db/migrate/20180206115813_create_stripe_refunds.rb +21 -0
  57. data/db/migrate/20180206115814_create_stripe_skus.rb +22 -0
  58. data/db/migrate/20180206115815_create_stripe_sources.rb +70 -0
  59. data/db/migrate/20180206115816_create_stripe_subscriptions.rb +29 -0
  60. data/db/migrate/20180206115817_create_stripe_transfers.rb +25 -0
  61. data/db/migrate/20180206130408_create_disputes.rb +76 -0
  62. data/db/migrate/20180206151132_change_activities_trackable_id_to_string.rb +5 -0
  63. data/db/migrate/20180207121808_create_stripe_subscription_items.rb +14 -0
  64. data/db/migrate/20180207171559_remove_name_from_stripe_plans.rb +5 -0
  65. data/db/migrate/20180207172011_add_stripe_product_id_to_stripe_plans.rb +6 -0
  66. data/db/migrate/20180207185604_add_index_on_refund_charge.rb +5 -0
  67. data/db/migrate/20180208091647_change_stripe_subscription_items_quantity_to_integer.rb +5 -0
  68. data/db/migrate/20180208102513_add_attempt_count_to_stripe_invoices.rb +7 -0
  69. data/db/migrate/20180208121235_create_stripe_reviews.rb +13 -0
  70. data/db/migrate/20180208122654_create_stripe_bank_accounts.rb +20 -0
  71. data/db/migrate/20180208160046_add_nickname_to_stripe_plans.rb +5 -0
  72. data/db/migrate/20180211092437_rename_stripe_invoice_items_subscription_item.rb +6 -0
  73. data/db/migrate/20180216224335_rename_stripe_subscriptions_discount.rb +5 -0
  74. data/db/migrate/20180217200350_change_stripe_invoices_to_reference_discounts.rb +9 -0
  75. data/db/migrate/20180217204628_create_stripe_cards.rb +29 -0
  76. data/db/migrate/20180218092600_add_deleted_at_to_stripe_cards.rb +9 -0
  77. data/db/migrate/20181219121712_add_new_primary_id_and_rename_old.rb +37 -0
  78. data/db/migrate/20190629112050_rename_stripe_invoice_date_to_created.rb +5 -0
  79. data/lib/stripe_model_callbacks.rb +19 -0
  80. data/lib/stripe_model_callbacks/autoload_models.rb +8 -0
  81. data/lib/stripe_model_callbacks/configuration.rb +23 -0
  82. data/lib/stripe_model_callbacks/engine.rb +5 -0
  83. data/lib/stripe_model_callbacks/event_mocker.rb +5 -0
  84. data/lib/stripe_model_callbacks/factory_bot_definitions.rb +7 -0
  85. data/lib/stripe_model_callbacks/models/stripe_bank_account.rb +17 -0
  86. data/lib/stripe_model_callbacks/models/stripe_card.rb +25 -0
  87. data/lib/stripe_model_callbacks/models/stripe_charge.rb +47 -0
  88. data/lib/stripe_model_callbacks/models/stripe_coupon.rb +24 -0
  89. data/lib/stripe_model_callbacks/models/stripe_customer.rb +23 -0
  90. data/lib/stripe_model_callbacks/models/stripe_discount.rb +53 -0
  91. data/lib/stripe_model_callbacks/models/stripe_dispute.rb +86 -0
  92. data/lib/stripe_model_callbacks/models/stripe_invoice.rb +88 -0
  93. data/lib/stripe_model_callbacks/models/stripe_invoice_item.rb +33 -0
  94. data/lib/stripe_model_callbacks/models/stripe_order.rb +63 -0
  95. data/lib/stripe_model_callbacks/models/stripe_order_item.rb +20 -0
  96. data/lib/stripe_model_callbacks/models/stripe_payout.rb +26 -0
  97. data/lib/stripe_model_callbacks/models/stripe_plan.rb +32 -0
  98. data/lib/stripe_model_callbacks/models/stripe_product.rb +27 -0
  99. data/lib/stripe_model_callbacks/models/stripe_recipient.rb +16 -0
  100. data/lib/stripe_model_callbacks/models/stripe_refund.rb +28 -0
  101. data/lib/stripe_model_callbacks/models/stripe_review.rb +18 -0
  102. data/lib/stripe_model_callbacks/models/stripe_sku.rb +28 -0
  103. data/lib/stripe_model_callbacks/models/stripe_source.rb +79 -0
  104. data/lib/stripe_model_callbacks/models/stripe_subscription.rb +101 -0
  105. data/lib/stripe_model_callbacks/models/stripe_subscription_item.rb +36 -0
  106. data/lib/stripe_model_callbacks/models/stripe_transfer.rb +25 -0
  107. data/lib/stripe_model_callbacks/require_models.rb +7 -0
  108. data/lib/stripe_model_callbacks/version.rb +3 -0
  109. data/lib/tasks/stripe_model_callbacks_tasks.rake +4 -0
  110. metadata +249 -0
@@ -0,0 +1,26 @@
1
+ class StripeModelCallbacks::Invoice::UpdatedService < StripeModelCallbacks::BaseEventService
2
+ def execute
3
+ invoice.assign_from_stripe(object)
4
+
5
+ if invoice.save
6
+ create_activity
7
+
8
+ succeed!
9
+ else
10
+ fail! invoice.errors.full_messages
11
+ end
12
+ end
13
+
14
+ private
15
+
16
+ def create_activity
17
+ invoice.create_activity :payment_failed if event.type == "invoice.payment_failed"
18
+ invoice.create_activity :payment_succeeded if event.type == "invoice.payment_succeeded"
19
+ invoice.create_activity :sent if event.type == "invoice.sent"
20
+ invoice.create_activity :upcoming if event.type == "invoice.upcoming"
21
+ end
22
+
23
+ def invoice
24
+ @invoice ||= StripeInvoice.find_or_initialize_by(stripe_id: object.id)
25
+ end
26
+ end
@@ -0,0 +1,13 @@
1
+ class StripeModelCallbacks::InvoiceItem::UpdatedService < StripeModelCallbacks::BaseEventService
2
+ def execute
3
+ invoice_item = ::StripeInvoiceItem.find_or_initialize_by(stripe_id: object.id)
4
+ invoice_item.assign_from_stripe(object)
5
+ invoice_item.deleted_at = Time.zone.now if event.type == "invoiceitem.deleted"
6
+
7
+ if invoice_item.save
8
+ succeed!
9
+ else
10
+ fail! invoice_item.errors.full_messages
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,6 @@
1
+ class StripeModelCallbacks::NotifierService < StripeModelCallbacks::BaseEventService
2
+ def execute
3
+ Rails.logger.info "New Stripe event: #{event.type}"
4
+ succeed!
5
+ end
6
+ end
@@ -0,0 +1,28 @@
1
+ class StripeModelCallbacks::Order::UpdatedService < StripeModelCallbacks::BaseEventService
2
+ def execute
3
+ order.assign_from_stripe(object)
4
+
5
+ if order.save
6
+ create_order_items
7
+
8
+ succeed!
9
+ else
10
+ fail! order.errors.full_messages
11
+ end
12
+ end
13
+
14
+ private
15
+
16
+ def create_order_items
17
+ object.items.each do |order_item|
18
+ stripe_order_item = StripeOrderItem.find_or_initialize_by(parent_id: order_item.parent)
19
+ stripe_order_item.stripe_order_id = object.id
20
+ stripe_order_item.assign_from_stripe(order_item)
21
+ stripe_order_item.save!
22
+ end
23
+ end
24
+
25
+ def order
26
+ @order ||= StripeOrder.find_or_initialize_by(stripe_id: object.id)
27
+ end
28
+ end
@@ -0,0 +1,29 @@
1
+ class StripeModelCallbacks::Payout::UpdatedService < StripeModelCallbacks::BaseEventService
2
+ def execute
3
+ payout.assign_from_stripe(object)
4
+
5
+ if payout.save
6
+ create_activity
7
+ succeed!
8
+ else
9
+ fail! payout.errors.full_messages
10
+ end
11
+ end
12
+
13
+ private
14
+
15
+ def create_activity
16
+ case event.type
17
+ when "payout.canceled"
18
+ payout.create_activity :canceled
19
+ when "payout.failed"
20
+ payout.create_activity :failed
21
+ when "payout.paid"
22
+ payout.create_activity :paid
23
+ end
24
+ end
25
+
26
+ def payout
27
+ @payout ||= StripePayout.find_or_initialize_by(stripe_id: object.id)
28
+ end
29
+ end
@@ -0,0 +1,14 @@
1
+ class StripeModelCallbacks::Plan::UpdatedService < StripeModelCallbacks::BaseEventService
2
+ def execute
3
+ plan = StripePlan.find_or_initialize_by(stripe_id: object.id)
4
+ plan.assign_from_stripe(object)
5
+ plan.deleted_at ||= Time.zone.now if event.type == "plan.deleted"
6
+
7
+ if plan.save
8
+ plan.create_activity :deleted if event.type == "plan.deleted"
9
+ succeed!
10
+ else
11
+ fail! plan.errors.full_messages
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ class StripeModelCallbacks::Product::UpdatedService < StripeModelCallbacks::BaseEventService
2
+ def execute
3
+ product = StripeProduct.find_or_initialize_by(stripe_id: object.id)
4
+ product.assign_from_stripe(object)
5
+ product.deleted_at ||= Time.zone.now if event.type == "product.deleted"
6
+
7
+ if product.save
8
+ product.create_activity :deleted if event.type == "product.deleted"
9
+ succeed!
10
+ else
11
+ fail! product.errors.full_messages
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ class StripeModelCallbacks::Recipient::UpdatedService < StripeModelCallbacks::BaseEventService
2
+ def execute
3
+ recipient = StripeRecipient.find_or_initialize_by(stripe_id: object.id)
4
+ recipient.assign_from_stripe(object)
5
+ recipient.deleted_at ||= Time.zone.now if event.type == "recipient.deleted"
6
+
7
+ if recipient.save
8
+ recipient.create_activity :deleted if event.type == "recipient.deleted"
9
+ succeed!
10
+ else
11
+ fail! recipient.errors.full_messages
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,12 @@
1
+ class StripeModelCallbacks::Refund::UpdatedService < StripeModelCallbacks::BaseEventService
2
+ def execute
3
+ refund = StripeRefund.find_or_initialize_by(stripe_id: object.id)
4
+ refund.assign_from_stripe(object)
5
+
6
+ if refund.save
7
+ succeed!
8
+ else
9
+ fail! refund.errors.full_messages
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,13 @@
1
+ class StripeModelCallbacks::Review::UpdatedService < StripeModelCallbacks::BaseEventService
2
+ def execute
3
+ review = StripeReview.find_or_initialize_by(stripe_id: object.id)
4
+ review.assign_from_stripe(object)
5
+
6
+ if review.save
7
+ review.create_activity :closed if event.type == "review.closed"
8
+ succeed!
9
+ else
10
+ fail! review.errors.full_messages
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,14 @@
1
+ class StripeModelCallbacks::Sku::UpdatedService < StripeModelCallbacks::BaseEventService
2
+ def execute
3
+ sku = StripeSku.find_or_initialize_by(stripe_id: object.id)
4
+ sku.assign_from_stripe(object)
5
+ sku.deleted_at ||= Time.zone.now if event.type == "sku.deleted"
6
+
7
+ if sku.save
8
+ sku.create_activity :deleted if event.type == "sku.deleted"
9
+ succeed!
10
+ else
11
+ fail! sku.errors.full_messages
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,31 @@
1
+ class StripeModelCallbacks::Source::UpdatedService < StripeModelCallbacks::BaseEventService
2
+ def execute
3
+ source.assign_from_stripe(object)
4
+
5
+ if source.save
6
+ create_activity
7
+ succeed!
8
+ else
9
+ fail! source.errors.full_messages
10
+ end
11
+ end
12
+
13
+ private
14
+
15
+ def create_activity
16
+ case event.type
17
+ when "source.canceled"
18
+ source.create_activity :canceled
19
+ when "source.chargeable"
20
+ source.create_activity :chargeable
21
+ when "source.failed"
22
+ source.create_activity :failed
23
+ when "source.mandate_notification"
24
+ source.create_activity :mandate_notification
25
+ end
26
+ end
27
+
28
+ def source
29
+ @source ||= StripeSource.find_or_initialize_by(stripe_id: object.id)
30
+ end
31
+ end
@@ -0,0 +1,21 @@
1
+ class StripeModelCallbacks::Subscription::StateCheckerService < StripeModelCallbacks::BaseService
2
+ attr_reader :allowed, :state
3
+
4
+ def initialize(allowed:, state:)
5
+ @allowed = allowed
6
+ @state = state.to_s
7
+ end
8
+
9
+ def execute
10
+ if state.is_a?(Array)
11
+ state.each do |state_i|
12
+ response = Subscription::StateCheckerService.execute!(allowed: allowed, state: state_i)
13
+ return response unless response.success?
14
+ end
15
+ elsif !allowed.include?(state)
16
+ return fail! ["Not allowed: #{state}"]
17
+ end
18
+
19
+ succeed!
20
+ end
21
+ end
@@ -0,0 +1,18 @@
1
+ class StripeModelCallbacks::Transfer::UpdatedService < StripeModelCallbacks::BaseEventService
2
+ def execute
3
+ transfer.assign_from_stripe(object)
4
+
5
+ if transfer.save
6
+ transfer.create_activity :reversed if event.type == "transfer.reversed"
7
+ succeed!
8
+ else
9
+ fail! transfer.errors.full_messages
10
+ end
11
+ end
12
+
13
+ private
14
+
15
+ def transfer
16
+ @transfer ||= StripeTransfer.find_or_initialize_by(stripe_id: object.id)
17
+ end
18
+ end
@@ -0,0 +1,14 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>Stripe model callbacks</title>
5
+ <%= stylesheet_link_tag "stripe_model_callbacks/application", media: "all" %>
6
+ <%= javascript_include_tag "stripe_model_callbacks/application" %>
7
+ <%= csrf_meta_tags %>
8
+ </head>
9
+ <body>
10
+
11
+ <%= yield %>
12
+
13
+ </body>
14
+ </html>
@@ -0,0 +1,49 @@
1
+ AddModelVirtualAttributeCheck: { }
2
+ AlwaysAddDbIndexCheck: { }
3
+ #CheckSaveReturnValueCheck: { }
4
+ #CheckDestroyReturnValueCheck: { }
5
+ DefaultScopeIsEvilCheck: { }
6
+ DryBundlerInCapistranoCheck: { }
7
+ #HashSyntaxCheck: { }
8
+ IsolateSeedDataCheck: { }
9
+ KeepFindersOnTheirOwnModelCheck: { }
10
+ LawOfDemeterCheck: { }
11
+ #LongLineCheck: { max_line_length: 80 }
12
+ MoveCodeIntoControllerCheck: { }
13
+ MoveCodeIntoHelperCheck: { array_count: 3 }
14
+ MoveCodeIntoModelCheck: { use_count: 2 }
15
+ MoveFinderToNamedScopeCheck: { }
16
+ MoveModelLogicIntoModelCheck: { use_count: 4 }
17
+ NeedlessDeepNestingCheck: { nested_count: 2 }
18
+ NotRescueExceptionCheck: { }
19
+ NotUseDefaultRouteCheck: { }
20
+ NotUseTimeAgoInWordsCheck: { }
21
+ OveruseRouteCustomizationsCheck: { customize_count: 3 }
22
+ ProtectMassAssignmentCheck: { }
23
+ RemoveEmptyHelpersCheck: { }
24
+ #RemoveTabCheck: { }
25
+ RemoveTrailingWhitespaceCheck: { }
26
+ RemoveUnusedMethodsInControllersCheck: { except_methods: [] }
27
+ RemoveUnusedMethodsInHelpersCheck: { except_methods: [] }
28
+ RemoveUnusedMethodsInModelsCheck: {
29
+ except_methods: [
30
+ "StripeModelCallbacks::ApplicationRecord#create_on_stripe!",
31
+ "StripeModelCallbacks::ApplicationRecord#reload!",
32
+ "StripeModelCallbacks::ApplicationRecord#update_on_stripe!",
33
+ "StripeModelCallbacks::ApplicationRecord#destroy_on_stripe!"
34
+ ]
35
+ }
36
+ ReplaceComplexCreationWithFactoryMethodCheck: { attribute_assignment_count: 2 }
37
+ ReplaceInstanceVariableWithLocalVariableCheck: { }
38
+ RestrictAutoGeneratedRoutesCheck: { }
39
+ SimplifyRenderInControllersCheck: { }
40
+ SimplifyRenderInViewsCheck: { }
41
+ #UseBeforeFilterCheck: { customize_count: 2 }
42
+ UseModelAssociationCheck: { }
43
+ UseMultipartAlternativeAsContentTypeOfEmailCheck: { }
44
+ #UseParenthesesInMethodDefCheck: { }
45
+ UseObserverCheck: { }
46
+ UseQueryAttributeCheck: { }
47
+ UseSayWithTimeInMigrationsCheck: { }
48
+ UseScopeAccessCheck: { }
49
+ UseTurboSprocketsRails3Check: { }
data/config/routes.rb ADDED
@@ -0,0 +1,2 @@
1
+ StripeModelCallbacks::Engine.routes.draw do
2
+ end
@@ -0,0 +1,54 @@
1
+ class CreateStripeCharges < ActiveRecord::Migration[5.0]
2
+ def change
3
+ create_table :stripe_charges do |table|
4
+ table.string :stripe_id, index: true, null: false
5
+ amount_columns(table)
6
+ dispute_failure_and_fraud_columns(table)
7
+ recipient_columns(table)
8
+ table.boolean :livemode, default: true, null: false
9
+ table.text :metadata
10
+ table.string :source_transfer
11
+ table.string :statement_descriptor
12
+ table.string :status
13
+ table.string :transfer_group
14
+ table.datetime :created
15
+ table.timestamps
16
+ end
17
+ end
18
+
19
+ private
20
+
21
+ def amount_columns(table)
22
+ table.integer :amount_cents, null: false
23
+ table.string :amount_currency, null: false
24
+ table.integer :amount_refunded_cents
25
+ table.string :amount_refunded_currency
26
+ table.integer :application_cents
27
+ table.string :application_currency
28
+ table.string :currency, null: false
29
+ table.boolean :captured, null: false
30
+ table.boolean :paid, null: false
31
+ end
32
+
33
+ def dispute_failure_and_fraud_columns(table)
34
+ table.string :dispute
35
+ table.string :failure_code
36
+ table.string :failure_message
37
+ table.text :fraud_details
38
+ table.text :outcome
39
+ table.boolean :refunded, null: false
40
+ table.string :review
41
+ end
42
+
43
+ def recipient_columns(table)
44
+ table.string :description
45
+ table.string :stripe_customer_id, index: true
46
+ table.string :stripe_order_id, index: true
47
+ table.string :stripe_source_id, index: true
48
+ table.string :stripe_invoice_id, index: true
49
+ table.string :on_behalf_of
50
+ table.string :receipt_email
51
+ table.string :receipt_number
52
+ table.text :shipping
53
+ end
54
+ end
@@ -0,0 +1,22 @@
1
+ class CreateStripeCoupons < ActiveRecord::Migration[5.0]
2
+ def change
3
+ create_table :stripe_coupons do |t|
4
+ t.string :stripe_id, index: true, null: false
5
+ t.integer :amount_off_cents
6
+ t.string :amount_off_currency
7
+ t.datetime :created
8
+ t.datetime :deleted_at, index: true
9
+ t.string :currency
10
+ t.string :duration
11
+ t.integer :duration_in_months
12
+ t.boolean :livemode, default: true, null: false
13
+ t.integer :max_redemptions
14
+ t.text :metadata
15
+ t.integer :percent_off
16
+ t.datetime :redeem_by
17
+ t.integer :times_redeemed
18
+ t.boolean :stripe_valid
19
+ t.timestamps
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,21 @@
1
+ class CreateStripeCustomers < ActiveRecord::Migration[5.0]
2
+ def change
3
+ create_table :stripe_customers do |t|
4
+ t.string :stripe_id, index: true, null: false
5
+ t.integer :account_balance, null: false
6
+ t.string :business_vat_id
7
+ t.datetime :deleted_at, index: true
8
+ t.string :currency
9
+ t.string :default_source
10
+ t.boolean :delinquent, null: false
11
+ t.string :description
12
+ t.text :discount
13
+ t.string :email
14
+ t.boolean :livemode, default: true, null: false
15
+ t.text :metadata
16
+ t.text :shipping
17
+ t.datetime :created
18
+ t.timestamps
19
+ end
20
+ end
21
+ end