stripe_model_callbacks 0.1.0
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.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/README.md +153 -0
- data/Rakefile +26 -0
- data/app/assets/config/stripe_model_callbacks_manifest.js +2 -0
- data/app/assets/javascripts/stripe_model_callbacks/application.js +13 -0
- data/app/assets/stylesheets/stripe_model_callbacks/application.css +15 -0
- data/app/controllers/stripe_model_callbacks/application_controller.rb +3 -0
- data/app/jobs/stripe_model_callbacks/application_job.rb +2 -0
- data/app/mailers/stripe_model_callbacks/application_mailer.rb +4 -0
- data/app/models/stripe_model_callbacks/application_record.rb +60 -0
- data/app/services/stripe_model_callbacks/account/external_account/updated_service.rb +13 -0
- data/app/services/stripe_model_callbacks/attributes_assigner_service.rb +35 -0
- data/app/services/stripe_model_callbacks/base_event_service.rb +9 -0
- data/app/services/stripe_model_callbacks/base_service.rb +26 -0
- data/app/services/stripe_model_callbacks/charge/dispute_updated_service.rb +29 -0
- data/app/services/stripe_model_callbacks/charge/updated_service.rb +40 -0
- data/app/services/stripe_model_callbacks/configure_service.rb +217 -0
- data/app/services/stripe_model_callbacks/coupon/updated_service.rb +18 -0
- data/app/services/stripe_model_callbacks/customer/bank_account/deleted_service.rb +13 -0
- data/app/services/stripe_model_callbacks/customer/deleted_service.rb +13 -0
- data/app/services/stripe_model_callbacks/customer/discount_updated_service.rb +32 -0
- data/app/services/stripe_model_callbacks/customer/source_updated_service.rb +25 -0
- data/app/services/stripe_model_callbacks/customer/subscription/updated_service.rb +28 -0
- data/app/services/stripe_model_callbacks/customer/updated_service.rb +13 -0
- data/app/services/stripe_model_callbacks/event_mocker_service.rb +38 -0
- data/app/services/stripe_model_callbacks/invoice/updated_service.rb +26 -0
- data/app/services/stripe_model_callbacks/invoice_item/updated_service.rb +13 -0
- data/app/services/stripe_model_callbacks/notifier_service.rb +6 -0
- data/app/services/stripe_model_callbacks/order/updated_service.rb +28 -0
- data/app/services/stripe_model_callbacks/payout/updated_service.rb +29 -0
- data/app/services/stripe_model_callbacks/plan/updated_service.rb +14 -0
- data/app/services/stripe_model_callbacks/product/updated_service.rb +14 -0
- data/app/services/stripe_model_callbacks/recipient/updated_service.rb +14 -0
- data/app/services/stripe_model_callbacks/refund/updated_service.rb +12 -0
- data/app/services/stripe_model_callbacks/review/updated_service.rb +13 -0
- data/app/services/stripe_model_callbacks/sku/updated_service.rb +14 -0
- data/app/services/stripe_model_callbacks/source/updated_service.rb +31 -0
- data/app/services/stripe_model_callbacks/subscription/state_checker_service.rb +21 -0
- data/app/services/stripe_model_callbacks/transfer/updated_service.rb +18 -0
- data/app/views/layouts/stripe_model_callbacks/application.html.erb +14 -0
- data/config/rails_best_practices.yml +49 -0
- data/config/routes.rb +2 -0
- data/db/migrate/20180206115801_create_stripe_charges.rb +54 -0
- data/db/migrate/20180206115802_create_stripe_coupons.rb +22 -0
- data/db/migrate/20180206115803_create_stripe_customers.rb +21 -0
- data/db/migrate/20180206115804_create_stripe_discounts.rb +27 -0
- data/db/migrate/20180206115805_create_stripe_invoice_items.rb +26 -0
- data/db/migrate/20180206115806_create_stripe_invoices.rb +57 -0
- data/db/migrate/20180206115807_create_stripe_order_items.rb +15 -0
- data/db/migrate/20180206115808_create_stripe_orders.rb +46 -0
- data/db/migrate/20180206115809_create_stripe_payouts.rb +27 -0
- data/db/migrate/20180206115810_create_stripe_plans.rb +20 -0
- data/db/migrate/20180206115811_create_stripe_products.rb +25 -0
- data/db/migrate/20180206115812_create_stripe_recipients.rb +18 -0
- data/db/migrate/20180206115813_create_stripe_refunds.rb +21 -0
- data/db/migrate/20180206115814_create_stripe_skus.rb +22 -0
- data/db/migrate/20180206115815_create_stripe_sources.rb +70 -0
- data/db/migrate/20180206115816_create_stripe_subscriptions.rb +29 -0
- data/db/migrate/20180206115817_create_stripe_transfers.rb +25 -0
- data/db/migrate/20180206130408_create_disputes.rb +76 -0
- data/db/migrate/20180206151132_change_activities_trackable_id_to_string.rb +5 -0
- data/db/migrate/20180207121808_create_stripe_subscription_items.rb +14 -0
- data/db/migrate/20180207171559_remove_name_from_stripe_plans.rb +5 -0
- data/db/migrate/20180207172011_add_stripe_product_id_to_stripe_plans.rb +6 -0
- data/db/migrate/20180207185604_add_index_on_refund_charge.rb +5 -0
- data/db/migrate/20180208091647_change_stripe_subscription_items_quantity_to_integer.rb +5 -0
- data/db/migrate/20180208102513_add_attempt_count_to_stripe_invoices.rb +7 -0
- data/db/migrate/20180208121235_create_stripe_reviews.rb +13 -0
- data/db/migrate/20180208122654_create_stripe_bank_accounts.rb +20 -0
- data/db/migrate/20180208160046_add_nickname_to_stripe_plans.rb +5 -0
- data/db/migrate/20180211092437_rename_stripe_invoice_items_subscription_item.rb +6 -0
- data/db/migrate/20180216224335_rename_stripe_subscriptions_discount.rb +5 -0
- data/db/migrate/20180217200350_change_stripe_invoices_to_reference_discounts.rb +9 -0
- data/db/migrate/20180217204628_create_stripe_cards.rb +29 -0
- data/db/migrate/20180218092600_add_deleted_at_to_stripe_cards.rb +9 -0
- data/db/migrate/20181219121712_add_new_primary_id_and_rename_old.rb +37 -0
- data/db/migrate/20190629112050_rename_stripe_invoice_date_to_created.rb +5 -0
- data/lib/stripe_model_callbacks.rb +19 -0
- data/lib/stripe_model_callbacks/autoload_models.rb +8 -0
- data/lib/stripe_model_callbacks/configuration.rb +23 -0
- data/lib/stripe_model_callbacks/engine.rb +5 -0
- data/lib/stripe_model_callbacks/event_mocker.rb +5 -0
- data/lib/stripe_model_callbacks/factory_bot_definitions.rb +7 -0
- data/lib/stripe_model_callbacks/models/stripe_bank_account.rb +17 -0
- data/lib/stripe_model_callbacks/models/stripe_card.rb +25 -0
- data/lib/stripe_model_callbacks/models/stripe_charge.rb +47 -0
- data/lib/stripe_model_callbacks/models/stripe_coupon.rb +24 -0
- data/lib/stripe_model_callbacks/models/stripe_customer.rb +23 -0
- data/lib/stripe_model_callbacks/models/stripe_discount.rb +53 -0
- data/lib/stripe_model_callbacks/models/stripe_dispute.rb +86 -0
- data/lib/stripe_model_callbacks/models/stripe_invoice.rb +88 -0
- data/lib/stripe_model_callbacks/models/stripe_invoice_item.rb +33 -0
- data/lib/stripe_model_callbacks/models/stripe_order.rb +63 -0
- data/lib/stripe_model_callbacks/models/stripe_order_item.rb +20 -0
- data/lib/stripe_model_callbacks/models/stripe_payout.rb +26 -0
- data/lib/stripe_model_callbacks/models/stripe_plan.rb +32 -0
- data/lib/stripe_model_callbacks/models/stripe_product.rb +27 -0
- data/lib/stripe_model_callbacks/models/stripe_recipient.rb +16 -0
- data/lib/stripe_model_callbacks/models/stripe_refund.rb +28 -0
- data/lib/stripe_model_callbacks/models/stripe_review.rb +18 -0
- data/lib/stripe_model_callbacks/models/stripe_sku.rb +28 -0
- data/lib/stripe_model_callbacks/models/stripe_source.rb +79 -0
- data/lib/stripe_model_callbacks/models/stripe_subscription.rb +101 -0
- data/lib/stripe_model_callbacks/models/stripe_subscription_item.rb +36 -0
- data/lib/stripe_model_callbacks/models/stripe_transfer.rb +25 -0
- data/lib/stripe_model_callbacks/require_models.rb +7 -0
- data/lib/stripe_model_callbacks/version.rb +3 -0
- data/lib/tasks/stripe_model_callbacks_tasks.rake +4 -0
- metadata +249 -0
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
class CreateDisputes < ActiveRecord::Migration[5.1]
|
|
2
|
+
def change
|
|
3
|
+
create_table :stripe_disputes do |table|
|
|
4
|
+
table.string :stripe_id, index: true, null: false
|
|
5
|
+
table.datetime :created
|
|
6
|
+
amount_columns(table)
|
|
7
|
+
table.string :balance_transaction_id, index: true
|
|
8
|
+
table.string :stripe_charge_id, index: true
|
|
9
|
+
table.string :currency
|
|
10
|
+
table.text :evidence_access_activity_log
|
|
11
|
+
table.text :evidence_billing_address
|
|
12
|
+
evidence_cancellation_duplicate_columns(table)
|
|
13
|
+
evidence_customer_columns(table)
|
|
14
|
+
table.text :evidence_product_description
|
|
15
|
+
table.text :evidence_receipt
|
|
16
|
+
evidence_refund_service_columns(table)
|
|
17
|
+
evidence_shipping_columns(table)
|
|
18
|
+
table.text :evidence_uncategorized_file
|
|
19
|
+
table.text :evidence_uncategorized_text
|
|
20
|
+
evidence_details_columns(table)
|
|
21
|
+
table.boolean :is_charge_refundable
|
|
22
|
+
table.boolean :livemode
|
|
23
|
+
table.text :metadata
|
|
24
|
+
table.string :reason
|
|
25
|
+
table.string :status
|
|
26
|
+
table.timestamps
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
private
|
|
31
|
+
|
|
32
|
+
def amount_columns(table)
|
|
33
|
+
table.integer :amount_cents
|
|
34
|
+
table.string :amount_currency
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def evidence_cancellation_duplicate_columns(table)
|
|
38
|
+
table.text :evidence_cancellation_policy
|
|
39
|
+
table.text :evidence_cancellation_policy_disclosure
|
|
40
|
+
table.text :evidence_cancellation_rebuttal
|
|
41
|
+
table.text :evidence_duplicate_charge_documentation
|
|
42
|
+
table.text :evidence_duplicate_charge_explanation
|
|
43
|
+
table.string :evidence_duplicate_charge_id
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def evidence_customer_columns(table)
|
|
47
|
+
table.text :evidence_customer_communication
|
|
48
|
+
table.string :evidence_customer_email_address
|
|
49
|
+
table.string :evidence_customer_name
|
|
50
|
+
table.string :evidence_customer_purchase_ip
|
|
51
|
+
table.text :evidence_customer_signature
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def evidence_refund_service_columns(table)
|
|
55
|
+
table.text :evidence_refund_policy
|
|
56
|
+
table.text :evidence_refund_policy_disclosure
|
|
57
|
+
table.text :evidence_refund_refusal_explanation
|
|
58
|
+
table.text :evidence_service_date
|
|
59
|
+
table.text :evidence_service_documentation
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def evidence_shipping_columns(table)
|
|
63
|
+
table.text :evidence_shipping_address
|
|
64
|
+
table.text :evidence_shipping_carrier
|
|
65
|
+
table.text :evidence_shipping_date
|
|
66
|
+
table.text :evidence_shipping_documentation
|
|
67
|
+
table.text :evidence_shipping_tracking_number
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def evidence_details_columns(table)
|
|
71
|
+
table.datetime :evidence_details_due_by
|
|
72
|
+
table.boolean :evidence_details_has_evidence
|
|
73
|
+
table.boolean :evidence_details_past_due
|
|
74
|
+
table.integer :evidence_details_submission_count
|
|
75
|
+
end
|
|
76
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
class CreateStripeSubscriptionItems < ActiveRecord::Migration[5.1]
|
|
2
|
+
def change
|
|
3
|
+
create_table :stripe_subscription_items do |t|
|
|
4
|
+
t.string :stripe_id, index: true, null: false
|
|
5
|
+
t.datetime :created
|
|
6
|
+
t.string :stripe_subscription_id, index: true
|
|
7
|
+
t.string :stripe_plan_id, index: true
|
|
8
|
+
t.boolean :deleted, default: false, null: false
|
|
9
|
+
t.text :metadata
|
|
10
|
+
t.decimal :quantity
|
|
11
|
+
t.timestamps
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
class CreateStripeReviews < ActiveRecord::Migration[5.1]
|
|
2
|
+
def change
|
|
3
|
+
create_table :stripe_reviews do |t|
|
|
4
|
+
t.string :stripe_id, index: true, null: false
|
|
5
|
+
t.string :stripe_charge_id, index: true
|
|
6
|
+
t.datetime :created
|
|
7
|
+
t.boolean :livemode, default: false, null: false
|
|
8
|
+
t.boolean :open, default: true, null: false
|
|
9
|
+
t.string :reason, index: true
|
|
10
|
+
t.timestamps
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
class CreateStripeBankAccounts < ActiveRecord::Migration[5.1]
|
|
2
|
+
def change
|
|
3
|
+
create_table :stripe_bank_accounts do |t|
|
|
4
|
+
t.string :stripe_id, index: true, null: false
|
|
5
|
+
t.string :stripe_account_id, index: true
|
|
6
|
+
t.string :account_holder_name
|
|
7
|
+
t.string :account_holder_type
|
|
8
|
+
t.string :bank_name
|
|
9
|
+
t.string :country
|
|
10
|
+
t.string :currency
|
|
11
|
+
t.boolean :default_for_currency
|
|
12
|
+
t.string :fingerprint
|
|
13
|
+
t.string :last4
|
|
14
|
+
t.text :metadata
|
|
15
|
+
t.string :routing_number
|
|
16
|
+
t.string :status, index: true
|
|
17
|
+
t.timestamps
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
class ChangeStripeInvoicesToReferenceDiscounts < ActiveRecord::Migration[5.1]
|
|
2
|
+
def change
|
|
3
|
+
remove_column :stripe_invoices, :discount_cents, :integer
|
|
4
|
+
remove_column :stripe_invoices, :discount_currency, :string
|
|
5
|
+
|
|
6
|
+
add_column :stripe_invoices, :stripe_discount_id, :string
|
|
7
|
+
add_index :stripe_invoices, :stripe_discount_id
|
|
8
|
+
end
|
|
9
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
class CreateStripeCards < ActiveRecord::Migration[5.1]
|
|
2
|
+
def change
|
|
3
|
+
create_table :stripe_cards do |t|
|
|
4
|
+
t.string :stripe_id, index: true, null: false
|
|
5
|
+
t.string :address_city
|
|
6
|
+
t.string :address_country
|
|
7
|
+
t.string :address_line1
|
|
8
|
+
t.string :address_line1_check
|
|
9
|
+
t.string :address_line2
|
|
10
|
+
t.string :address_state
|
|
11
|
+
t.string :address_zip
|
|
12
|
+
t.string :address_zip_check
|
|
13
|
+
t.string :brand
|
|
14
|
+
t.string :country
|
|
15
|
+
t.string :stripe_customer_id, index: true
|
|
16
|
+
t.string :cvc_check
|
|
17
|
+
t.string :dynamic_last4
|
|
18
|
+
t.integer :exp_month
|
|
19
|
+
t.integer :exp_year
|
|
20
|
+
t.string :fingerprint
|
|
21
|
+
t.string :funding
|
|
22
|
+
t.string :last4
|
|
23
|
+
t.text :metadata
|
|
24
|
+
t.string :name
|
|
25
|
+
t.string :tokenization_method
|
|
26
|
+
t.timestamps
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
class AddDeletedAtToStripeCards < ActiveRecord::Migration[5.1]
|
|
2
|
+
def change
|
|
3
|
+
add_column :stripe_cards, :deleted_at, :datetime
|
|
4
|
+
add_index :stripe_cards, :deleted_at
|
|
5
|
+
|
|
6
|
+
add_column :stripe_sources, :deleted_at, :datetime
|
|
7
|
+
add_index :stripe_sources, :deleted_at
|
|
8
|
+
end
|
|
9
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
class AddNewPrimaryIdAndRenameOld < ActiveRecord::Migration[5.2]
|
|
2
|
+
TABLES = %w[
|
|
3
|
+
bank_accounts cards charges coupons customers disputes invoice_items invoices
|
|
4
|
+
orders payouts plans products recipients refunds reviews skus sources
|
|
5
|
+
subscription_items subscriptions transfers
|
|
6
|
+
].freeze
|
|
7
|
+
|
|
8
|
+
def up
|
|
9
|
+
TABLES.each do |table|
|
|
10
|
+
table_name = "stripe_#{table}"
|
|
11
|
+
|
|
12
|
+
next if column_exists?(table_name, :stripe_id)
|
|
13
|
+
|
|
14
|
+
add_column table_name, :stripe_id, :string
|
|
15
|
+
add_index table_name, :stripe_id
|
|
16
|
+
execute "UPDATE #{table_name} SET stripe_id = id"
|
|
17
|
+
change_column_null table_name, :stripe_id, false
|
|
18
|
+
remove_column table_name, :id
|
|
19
|
+
|
|
20
|
+
add_column table_name, :id, :primary_key
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def down
|
|
25
|
+
TABLES.each do |table|
|
|
26
|
+
table_name = "stripe_#{table}"
|
|
27
|
+
|
|
28
|
+
next unless column_exists?(table_name, :stripe_id)
|
|
29
|
+
|
|
30
|
+
remove_column table_name, :id
|
|
31
|
+
add_column table_name, :id, :string, primary_key: true
|
|
32
|
+
execute "UPDATE #{table_name} SET id = stripe_id"
|
|
33
|
+
change_column_null table_name, :id, false
|
|
34
|
+
remove_column table_name, :stripe_id
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
require "auto_autoloader"
|
|
2
|
+
require "money-rails"
|
|
3
|
+
require "public_activity"
|
|
4
|
+
require "service_pattern"
|
|
5
|
+
require "stripe"
|
|
6
|
+
require "stripe_event"
|
|
7
|
+
require "stripe_model_callbacks/engine"
|
|
8
|
+
require "stripe_model_callbacks/autoload_models"
|
|
9
|
+
|
|
10
|
+
module StripeModelCallbacks
|
|
11
|
+
path = "#{File.dirname(__FILE__)}/stripe_model_callbacks"
|
|
12
|
+
|
|
13
|
+
autoload :Configuration, "#{path}/configuration"
|
|
14
|
+
autoload :EventMocker, "#{path}/event_mocker"
|
|
15
|
+
|
|
16
|
+
def self.configure
|
|
17
|
+
yield StripeModelCallbacks::Configuration.current
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
class StripeModelCallbacks::Configuration
|
|
2
|
+
def self.current
|
|
3
|
+
@current ||= StripeModelCallbacks::Configuration.new
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
def initialize
|
|
7
|
+
@on_error_callbacks = []
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def on_error(&blk)
|
|
11
|
+
@on_error_callbacks << blk
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def with_error_handling(args: nil)
|
|
15
|
+
yield
|
|
16
|
+
rescue => e # rubocop:disable Style/RescueStandardError
|
|
17
|
+
@on_error_callbacks.each do |callback|
|
|
18
|
+
callback.call(args: args, error: e)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
raise e
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
class StripeBankAccount < StripeModelCallbacks::ApplicationRecord
|
|
2
|
+
def self.stripe_class
|
|
3
|
+
Stripe::BankAccount
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
def assign_from_stripe(object)
|
|
7
|
+
assign_attributes(stripe_account_id: object.account)
|
|
8
|
+
|
|
9
|
+
StripeModelCallbacks::AttributesAssignerService.execute!(
|
|
10
|
+
model: self, stripe_model: object,
|
|
11
|
+
attributes: %w[
|
|
12
|
+
id account_holder_name account_holder_type bank_name country currency default_for_currency
|
|
13
|
+
fingerprint last4 metadata routing_number status
|
|
14
|
+
]
|
|
15
|
+
)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
class StripeCard < StripeModelCallbacks::ApplicationRecord
|
|
2
|
+
belongs_to :stripe_customer, optional: true, primary_key: "stripe_id"
|
|
3
|
+
|
|
4
|
+
def self.stripe_class
|
|
5
|
+
Stripe::Card
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def assign_from_stripe(object)
|
|
9
|
+
self.stripe_customer_id = object.customer if object.respond_to?(:customer)
|
|
10
|
+
|
|
11
|
+
StripeModelCallbacks::AttributesAssignerService.execute!(
|
|
12
|
+
model: self, stripe_model: object,
|
|
13
|
+
attributes: %w[
|
|
14
|
+
id address_city address_country address_line1 address_line1_check
|
|
15
|
+
address_line2 address_state address_zip address_zip_check brand
|
|
16
|
+
country cvc_check dynamic_last4 exp_month exp_year fingerprint
|
|
17
|
+
funding last4 name tokenization_method
|
|
18
|
+
]
|
|
19
|
+
)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def to_stripe
|
|
23
|
+
@to_stripe ||= Stripe::Customer.retrieve(stripe_customer_id).sources.retrieve(stripe_id)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
class StripeCharge < StripeModelCallbacks::ApplicationRecord
|
|
2
|
+
belongs_to :stripe_customer, optional: true, primary_key: "stripe_id"
|
|
3
|
+
has_many :stripe_orders, primary_key: "stripe_id"
|
|
4
|
+
has_many :stripe_refunds, primary_key: "stripe_id"
|
|
5
|
+
has_many :stripe_reviews, primary_key: "stripe_id"
|
|
6
|
+
|
|
7
|
+
monetize :amount_cents
|
|
8
|
+
monetize :amount_refunded_cents, allow_nil: true
|
|
9
|
+
monetize :application_cents, allow_nil: true
|
|
10
|
+
|
|
11
|
+
def self.stripe_class
|
|
12
|
+
Stripe::Charge
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def assign_from_stripe(object)
|
|
16
|
+
assign_attributes(
|
|
17
|
+
created: Time.zone.at(object.created),
|
|
18
|
+
stripe_customer_id: object.customer,
|
|
19
|
+
livemode: object.livemode,
|
|
20
|
+
stripe_invoice_id: object.invoice,
|
|
21
|
+
metadata: JSON.generate(object.metadata),
|
|
22
|
+
stripe_order_id: object.order,
|
|
23
|
+
stripe_source_id: object.source
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
assign_amounts_from_stripe(object)
|
|
27
|
+
|
|
28
|
+
StripeModelCallbacks::AttributesAssignerService.execute!(
|
|
29
|
+
model: self,
|
|
30
|
+
stripe_model: object,
|
|
31
|
+
attributes: %w[
|
|
32
|
+
captured currency description dispute outcome refunded fraud_details failure_message failure_code on_behalf_of paid
|
|
33
|
+
receipt_email receipt_number review shipping source_transfer statement_descriptor status transfer_group
|
|
34
|
+
]
|
|
35
|
+
)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
private
|
|
39
|
+
|
|
40
|
+
def assign_amounts_from_stripe(object)
|
|
41
|
+
assign_attributes(
|
|
42
|
+
amount: Money.new(object.amount, object.currency),
|
|
43
|
+
amount_refunded: object.amount_refunded ? Money.new(object.amount_refunded, object.currency) : nil,
|
|
44
|
+
application: object.application ? Money.new(object.application, object.currency) : nil
|
|
45
|
+
)
|
|
46
|
+
end
|
|
47
|
+
end
|