solidusio / solidus_braintree

💳 Integrate Solidus with Braintree
https://www.braintreepayments.com/
BSD 3-Clause "New" or "Revised" License
19 stars 55 forks source link

Make migrations independent of existing models #100

Closed elia closed 1 year ago

elia commented 1 year ago

Summary

Using model classes local to the migration is a technique that allows accessing the underlying tables through AR without a dependency of the app models being available across time. This is supported by rails that explicitly sets the table_name_prefix of migration classes to be an empty string.

In this specific case, for example, SpreePayment.table_name will be spree_payments, which is the same as Spree::Payment.table_name.

If Spree::Payment will change name and become, say, Solidus::Payment, this migration won't break a sweat and will keep working.

This way any change in table names or prefixes, or even removing a model altogether won't affect older migrations.

Manual check log

solidus_braintree:elia/table-prefix-independent-migrations * ⤑ bin/rails-sandbox db:rollback                                                                                                ~/C/N/solidus_braintree
== 20230119102399 AddVenmoToBraintreeConfiguration: reverting =================
-- remove_column(:solidus_paypal_braintree_configurations, :venmo, :boolean, {:null=>false, :default=>false})
   -> 0.0055s
== 20230119102399 AddVenmoToBraintreeConfiguration: reverted (0.0055s) ========

solidus_braintree:elia/table-prefix-independent-migrations + ⤑ bin/rails-sandbox db:rollback                                                                                                ~/C/N/solidus_braintree
== 20230119102398 AddPaypalFundingSourceToSolidusPaypalBraintreeSources: reverting 
-- remove_column(:solidus_paypal_braintree_sources, :paypal_funding_source, :integer)
   -> 0.0073s
== 20230119102398 AddPaypalFundingSourceToSolidusPaypalBraintreeSources: reverted (0.0073s) 

solidus_braintree:elia/table-prefix-independent-migrations + ⤑ bin/rails-sandbox db:rollback                                                                                                ~/C/N/solidus_braintree
== 20230119102397 Add3dSecureToBraintreeConfiguration: reverting ==============
-- remove_column(:solidus_paypal_braintree_configurations, :three_d_secure, :boolean, {:null=>false, :default=>false})
   -> 0.0054s
== 20230119102397 Add3dSecureToBraintreeConfiguration: reverted (0.0055s) =====

solidus_braintree:elia/table-prefix-independent-migrations + ⤑ bin/rails-sandbox db:rollback                                                                                                ~/C/N/solidus_braintree
== 20230119102396 AddPaypalButtonPreferencesToBraintreeConfigurations: reverting 
-- remove_column(:solidus_paypal_braintree_configurations, :preferences, :text)
   -> 0.0051s
== 20230119102396 AddPaypalButtonPreferencesToBraintreeConfigurations: reverted (0.0052s) 

solidus_braintree:elia/table-prefix-independent-migrations + ⤑ bin/rails-sandbox db:rollback                                                                                                ~/C/N/solidus_braintree
== 20230119102395 AddNotNullConstraintToSourcesPaymentType: reverting =========
-- change_column_null(:solidus_paypal_braintree_sources, :payment_type, true)
   -> 0.0074s
== 20230119102395 AddNotNullConstraintToSourcesPaymentType: reverted (0.0075s) 

solidus_braintree:elia/table-prefix-independent-migrations + ⤑ bin/rails-sandbox db:rollback                                                                                                ~/C/N/solidus_braintree
== 20230119102394 AddNullConstraintToSources: reverting =======================
-- change_column_null(:solidus_paypal_braintree_sources, :payment_method_id, true)
   -> 0.0078s
== 20230119102394 AddNullConstraintToSources: reverted (0.0078s) ==============

solidus_braintree:elia/table-prefix-independent-migrations + ⤑ bin/rails-sandbox db:migrate                                                                                                 ~/C/N/solidus_braintree
== 20230119102394 AddNullConstraintToSources: migrating =======================
-- change_column_null(:solidus_paypal_braintree_sources, :payment_method_id, false)
   -> 0.0066s
== 20230119102394 AddNullConstraintToSources: migrated (0.0090s) ==============

== 20230119102395 AddNotNullConstraintToSourcesPaymentType: migrating =========
-- change_column_null(:solidus_paypal_braintree_sources, :payment_type, false)
   -> 0.0067s
== 20230119102395 AddNotNullConstraintToSourcesPaymentType: migrated (0.0088s) 

== 20230119102396 AddPaypalButtonPreferencesToBraintreeConfigurations: migrating 
-- add_column(:solidus_paypal_braintree_configurations, :preferences, :text)
   -> 0.0014s
== 20230119102396 AddPaypalButtonPreferencesToBraintreeConfigurations: migrated (0.0014s) 

== 20230119102397 Add3dSecureToBraintreeConfiguration: migrating ==============
-- add_column(:solidus_paypal_braintree_configurations, :three_d_secure, :boolean, {:null=>false, :default=>false})
   -> 0.0014s
== 20230119102397 Add3dSecureToBraintreeConfiguration: migrated (0.0014s) =====

== 20230119102398 AddPaypalFundingSourceToSolidusPaypalBraintreeSources: migrating 
-- add_column(:solidus_paypal_braintree_sources, :paypal_funding_source, :integer)
   -> 0.0013s
== 20230119102398 AddPaypalFundingSourceToSolidusPaypalBraintreeSources: migrated (0.0013s) 

== 20230119102399 AddVenmoToBraintreeConfiguration: migrating =================
-- add_column(:solidus_paypal_braintree_configurations, :venmo, :boolean, {:null=>false, :default=>false})
   -> 0.0013s
== 20230119102399 AddVenmoToBraintreeConfiguration: migrated (0.0014s) ========

solidus_braintree:elia/table-prefix-independent-migrations + ⤑                                                                                                                              ~/C/N/solidus_braintree

Checklist

Check out our PR guidelines for more details.

The following are mandatory for all PRs:

The following are not always needed (~cross them out~ if they are not):