Forum: Ruby on Rails Why is deep_symbolize_keys not available within application.rb (undefined method `deep_symbolize_key

Posted by David Kahn (dkahn)
on 2011-05-10 19:33
(Received via mailing list)
If there is a better way to do this I am open: I am trying to load a 
yaml
config file which holds application settings (which happens to be shared
between the main app and an engine).

class Application < Rails::Application
    config_file = "#{Rails.root}/config/config.yml"
    if File.exists?(config_file)
      ::APP_CONFIG =
YAML.load_file(config_file)[Rails.env].deep_symbolize_keys
    else
      puts "No config.yml file found, run 'rails g blog_engine:install'"
    end
 ....
end

The file loads if I use #symbolize_keys, but Hash#deep_symbolize_keys is 
not
available at this point. I know I could iterate the hash myself and do 
this
but of course would prefer not to and makes me wonder if there is an
alternative way to load such a config file and have the values 
accessible
within environment.rb so that I can assign the value.

Thanks,

David
Posted by David Kahn (dkahn)
on 2011-05-10 19:50
(Received via mailing list)
Ok, so it looks like I need ActiveSupport::CoreExtensions::Hash. A bit
confused as at the top of application.rb there is * require 'rails/all' 
*,
so I would think this should be included but is not. ActiveSupport is 
loaded
but not CoreExtensions.
ActiveSupport::CoreExtensions::Hash::Conversions<http://rubydoc.info/docs/rails/2.3.8/ActiveSupport...,
ActiveSupport::CoreExtensions::Hash::DeepMerge<http://rubydoc.info/docs/rails/2.3.8/ActiveSupport...,
ActiveSupport::CoreExtensions::Hash::Diff<http://rubydoc.info/docs/rails/2.3.8/ActiveSupport...,
ActiveSupport::CoreExtensions::Hash::Except<http://rubydoc.info/docs/rails/2.3.8/ActiveSupport...,
ActiveSupport::CoreExtensions::Hash::IndifferentAccess<http://rubydoc.info/docs/rails/2.3.8/ActiveSupport...,
ActiveSupport::CoreExtensions::Hash::Keys<http://rubydoc.info/docs/rails/2.3.8/ActiveSupport...,
ActiveSupport::CoreExtensions::Hash::ReverseMerge<http://rubydoc.info/docs/rails/2.3.8/ActiveSupport...,
ActiveSupport::CoreExtensions::Hash::Slice<http://rubydoc.info/docs/rails/2.3.8/ActiveSupport...
Posted by David Kahn (dkahn)
on 2011-05-10 19:57
(Received via mailing list)
On Tue, May 10, 2011 at 12:37 PM, David Kahn 
<dk@structuralartistry.com>wrote:

> 
ActiveSupport::CoreExtensions::Hash::ReverseMerge<http://rubydoc.info/docs/rails/2.3.8/ActiveSupport...,
> 
ActiveSupport::CoreExtensions::Hash::Slice<http://rubydoc.info/docs/rails/2.3.8/ActiveSupport...


Looks like I have answered my own question: if I do my assignments in
"config.after_initialize" then I have the CoreExtensions and
deep_symbolize_keys.
Posted by Sean Linsley (Guest)
on 2012-11-30 14:07
(Received via mailing list)
On Tuesday, May 10, 2011 12:43:16 PM UTC-5, David Kahn wrote:

> "config.after_initialize" then I have the CoreExtensions and
> deep_symbolize_keys.
>

Your workaround didn't work for me, as I want to use my config hash in
application.rb directly.

A quick recursive grep through all of my gems located the offender: 
i18n,
of all things. While ActiveSupport has Hash.deep_symbolize_keys defined 
on
the master branch on Github, that hasn't made into the latest release
(3.2.9). So for now, require 'i18n/core_ext/hash' will do the job 
nicely.
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.