diff options
author | yuuji.yaginuma <yuuji.yaginuma@gmail.com> | 2017-07-14 08:01:49 +0900 |
---|---|---|
committer | yuuji.yaginuma <yuuji.yaginuma@gmail.com> | 2017-07-16 20:03:56 +0900 |
commit | a18cf23a9cbcbeed61e8049442640c7153e0a8fb (patch) | |
tree | ad9c4b6b98247a8e5210f59c3e182d7796ba8bf9 | |
parent | f3d67e67abc1fc40b691372af318ede8e30fc4bf (diff) | |
download | rails-a18cf23a9cbcbeed61e8049442640c7153e0a8fb.tar.gz rails-a18cf23a9cbcbeed61e8049442640c7153e0a8fb.tar.bz2 rails-a18cf23a9cbcbeed61e8049442640c7153e0a8fb.zip |
Set `represent_boolean_as_integer` via `configuration`
5 files changed, 33 insertions, 5 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb b/activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb index 5174c98c4b..2fede7b847 100644 --- a/activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb @@ -86,7 +86,7 @@ module ActiveRecord # for all models and all boolean columns, after which the flag must be set # to true by adding the following to your application.rb file: # - # ActiveRecord::ConnectionAdapters::SQLite3Adapter.represent_boolean_as_integer = true + # Rails.application.config.active_record.sqlite3.represent_boolean_as_integer = true class_attribute :represent_boolean_as_integer, default: false class StatementPool < ConnectionAdapters::StatementPool diff --git a/activerecord/lib/active_record/railtie.rb b/activerecord/lib/active_record/railtie.rb index 9b19e85b33..0b82926081 100644 --- a/activerecord/lib/active_record/railtie.rb +++ b/activerecord/lib/active_record/railtie.rb @@ -26,6 +26,9 @@ module ActiveRecord config.active_record.use_schema_cache_dump = true config.active_record.maintain_test_schema = true + config.active_record.sqlite3 = ActiveSupport::OrderedOptions.new + config.active_record.sqlite3.represent_boolean_as_integer = nil + config.eager_load_namespaces << ActiveRecord rake_tasks do @@ -108,7 +111,9 @@ module ActiveRecord initializer "active_record.set_configs" do |app| ActiveSupport.on_load(:active_record) do - app.config.active_record.each do |k, v| + configs = app.config.active_record.dup + configs.delete(:sqlite3) + configs.each do |k, v| send "#{k}=", v end end @@ -178,6 +183,11 @@ end_warning initializer "active_record.check_represent_sqlite3_boolean_as_integer" do config.after_initialize do ActiveSupport.on_load(:active_record_sqlite3adapter) do + represent_boolean_as_integer = Rails.application.config.active_record.sqlite3.delete(:represent_boolean_as_integer) + unless represent_boolean_as_integer.nil? + ActiveRecord::ConnectionAdapters::SQLite3Adapter.represent_boolean_as_integer = represent_boolean_as_integer + end + unless ActiveRecord::ConnectionAdapters::SQLite3Adapter.represent_boolean_as_integer ActiveSupport::Deprecation.warn <<-MSG Leaving `ActiveRecord::ConnectionAdapters::SQLite3Adapter.represent_boolean_as_integer` @@ -192,7 +202,7 @@ by setting up a rake task which runs for all models and all boolean columns, after which the flag must be set to true by adding the following to your application.rb file: - ActiveRecord::ConnectionAdapters::SQLite3Adapter.represent_boolean_as_integer = true + Rails.application.config.active_record.sqlite3.represent_boolean_as_integer = true MSG end end diff --git a/guides/source/configuring.md b/guides/source/configuring.md index bc8df5a797..61c4bd1e61 100644 --- a/guides/source/configuring.md +++ b/guides/source/configuring.md @@ -394,7 +394,7 @@ by setting up a rake task which runs by adding the following to your application.rb file: ```ruby - ActiveRecord::ConnectionAdapters::SQLite3Adapter.represent_boolean_as_integer = true + Rails.application.config.active_record.sqlite3.represent_boolean_as_integer = true ``` The schema dumper adds one additional configuration option: diff --git a/railties/lib/rails/generators/rails/app/templates/config/initializers/new_framework_defaults_5_2.rb.tt b/railties/lib/rails/generators/rails/app/templates/config/initializers/new_framework_defaults_5_2.rb.tt index f2df0d1e9f..25dcddb27a 100644 --- a/railties/lib/rails/generators/rails/app/templates/config/initializers/new_framework_defaults_5_2.rb.tt +++ b/railties/lib/rails/generators/rails/app/templates/config/initializers/new_framework_defaults_5_2.rb.tt @@ -24,4 +24,4 @@ # Store boolean values are in sqlite3 databases as 1 and 0 instead of 't' and # 'f' after migrating old data. -# ActiveRecord::ConnectionAdapters::SQLite3Adapter.represent_boolean_as_integer = true +# Rails.application.config.active_record.sqlite3.represent_boolean_as_integer = true diff --git a/railties/test/application/configuration_test.rb b/railties/test/application/configuration_test.rb index b8a19379e0..e413163bb9 100644 --- a/railties/test/application/configuration_test.rb +++ b/railties/test/application/configuration_test.rb @@ -1613,6 +1613,24 @@ module ApplicationTests assert ActiveRecord::ConnectionAdapters::SQLite3Adapter.represent_boolean_as_integer end + test "represent_boolean_as_integer should be able to set via config.active_record.sqlite3.represent_boolean_as_integer" do + remove_from_config '.*config\.load_defaults.*\n' + + app_file "config/initializers/new_framework_defaults_5_2.rb", <<-RUBY + Rails.application.config.active_record.sqlite3.represent_boolean_as_integer = true + RUBY + + app_file "app/models/post.rb", <<-RUBY + class Post < ActiveRecord::Base + end + RUBY + + app "development" + Post.object_id # force lazy load hooks to run + + assert ActiveRecord::ConnectionAdapters::SQLite3Adapter.represent_boolean_as_integer + end + test "config_for containing ERB tags should evaluate" do app_file "config/custom.yml", <<-RUBY development: |