diff options
author | Rafael Mendonça França <rafaelmfranca@gmail.com> | 2013-01-31 11:18:28 -0800 |
---|---|---|
committer | Rafael Mendonça França <rafaelmfranca@gmail.com> | 2013-01-31 11:18:28 -0800 |
commit | 45883a32963734e2e6741847307340d82ed72446 (patch) | |
tree | cd4ecad2d5664b4ab5f4411a2141a32164e0d769 /activerecord/lib | |
parent | ee4a2bb23d46ee3e644293ba59b70fa7ecb3f7eb (diff) | |
parent | 4b005fb371c2e7af80df7da63be94509b1db038c (diff) | |
download | rails-45883a32963734e2e6741847307340d82ed72446.tar.gz rails-45883a32963734e2e6741847307340d82ed72446.tar.bz2 rails-45883a32963734e2e6741847307340d82ed72446.zip |
Merge pull request #9041 from sodabrew/patch-1
Convert int, float, and bools from ENV['DATABASE_URL'] query args
Diffstat (limited to 'activerecord/lib')
-rw-r--r-- | activerecord/lib/active_record/connection_adapters/connection_specification.rb | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/connection_specification.rb b/activerecord/lib/active_record/connection_adapters/connection_specification.rb index 09250d3c01..d7cd34df22 100644 --- a/activerecord/lib/active_record/connection_adapters/connection_specification.rb +++ b/activerecord/lib/active_record/connection_adapters/connection_specification.rb @@ -62,6 +62,10 @@ module ActiveRecord ConnectionSpecification.new(spec, adapter_method) end + # For DATABASE_URL, accept a limited concept of ints and floats + SIMPLE_INT = /^\d+$/ + SIMPLE_FLOAT = /^\d+\.\d+$/ + def connection_url_to_hash(url) # :nodoc: config = URI.parse url adapter = config.scheme @@ -77,6 +81,21 @@ module ActiveRecord spec.map { |key,value| spec[key] = uri_parser.unescape(value) if value.is_a?(String) } if config.query options = Hash[config.query.split("&").map{ |pair| pair.split("=") }].symbolize_keys + # If anything looks numeric, make it numeric (e.g. pool count, timeout values, etc.) + options.map do |key,value| + options[key] = case value + when SIMPLE_INT + value.to_i + when SIMPLE_FLOAT + value.to_f + when 'true' + true + when 'false' + false + else + value + end + end spec.merge!(options) end spec |