Allow symbol value via ENV
khoan opened this issue · 5 comments
Setup
cd /path/to/rails/app/src
cat config/initializers/config.rb
Config.setup do |config|
config.const_name = 'Settings'
config.use_env = true
config.env_prefix = 'SETTINGS'
config.env_separator = '__'
config.env_converter = :downcase
config.env_parse_values = true
end
cat config/settings/test.yml
provider: :bam
SETTINGS__PROVIDER=:bam RAILS_ENV=test bin/rails c
Settings.provider # => ":bam" want symbol instead of string
RAILS_ENV=test bin/rails c
Settings.provider # => :bam got symbol as expected
maybe related to issue#194? Thanks.
I don't think its related to #194. They actually wanted something opposite to your case.
Env vars are string and I don't think we should force conversion to symbols. However we could implement a logic where strings staring from :
would be converted to symbols (see: https://stackoverflow.com/questions/2004491/convert-string-to-symbol-able-in-ruby)
If you are interested, maybe you can fire up a PR?
@khoan are you interested in firing up PR for this?
I always get Symbol :bam
for the above configuration. I am executing this on rails-6.1.4
& ruby-3.0.2
. Can you please help me replicate? I'd be more than happy to create a PR.
@manjunath724 If I understand the feature request correctly, this can be replicated with the following spec:
diff --git a/spec/config_env_spec.rb b/spec/config_env_spec.rb
index 65e7da8..5f91def 100644
--- a/spec/config_env_spec.rb
+++ b/spec/config_env_spec.rb
@@ -77,6 +77,12 @@ describe Config::Options do
expect(config.new_var.is_a? Float).to eq(true)
end
+ it 'should recognize strings starting with : as symbols' do
+ ENV['Settings.new_var'] = ':hello'
+
+ expect(config.new_var).to eq(:hello)
+ end
+
it 'should leave strings intact' do
ENV['Settings.new_var'] = 'foobar'
Execute
bundle install
bundle exec appraisal install
bundle exec appraisal rails-6.1 rspec spec/config_env_spec.rb
And you'll get this result
Bundler version 2.1.4
Skipping rails-4.2 for Bundler >= 2.x
Bundler version 2.1.4
Skipping rails-4.2 for Bundler >= 2.x
>> BUNDLE_GEMFILE=/Users/chris.larose/workspace/rubyconfig/config/gemfiles/rails_6.1.gemfile bundle exec rspec spec/config_env_spec.rb
RUBY_ENGINE: ruby
RUBY_VERSION: 2.7.0
Gemfile: /Users/chris.larose/workspace/rubyconfig/config/gemfiles/rails_6.1.gemfile
Version:
rails-6.1.4
rspec-rails-5.0.1
sqlite3-1.4.2
psych-4.0.1
Randomized with seed 33866
....................F....
Failures:
1) Config::Options when overriding settings via ENV variables is enabled and parsing ENV variable values is enabled should recognize strings starting with : as symbols
Failure/Error: expect(config.new_var).to eq(:hello)
expected: :hello
got: ":hello"
(compared using ==)
Diff:
@@ -1 +1 @@
-:hello
+":hello"
# ./spec/config_env_spec.rb:83:in `block (5 levels) in <top (required)>'
Finished in 0.15873 seconds (files took 0.93499 seconds to load)
25 examples, 1 failure
Failed examples:
rspec ./spec/config_env_spec.rb:80 # Config::Options when overriding settings via ENV variables is enabled and parsing ENV variable values is enabled should recognize strings starting with : as symbols
Randomized with seed 33866
@cjlarose Thanks, I have opened a PR, please take a look at it.