# HostConfig Simple per-host configuration for Rails 4. ## Setup/Usage First add it to your `Gemfile`: ``` ruby gem 'host_config' ``` Then make an initializer (or add it to one you already have, like so): ``` ruby AppConfig = HostConfig.init! ``` That's really it. This will attempt to load `config/hosts/HOSTNAME.yml` and assign an OpenStruct to `AppConfig` which you can then use all over your app. You can also override the hostname: ``` ruby override_hostname = Rails.env.production? ? 'aws' : Rails.env.staging? ? 'staging' : nil AppConfig = HostConfig.init! hostname: override_hostname ``` ...or something similar, so that you can share config for production environments. This is a good alternative to environment variables. You can handle your configuration just like you already handle `database.yml` (eg, by not committing production config to the git repo, but adding it to each host out of band). You can also add more values to it for things that aren't host-specific: ``` ruby AppConfig.analytics_id = 'UA-XXXXXXXX-Y' AppConfig.sanitize = Sanitize::Config::RELAXED AppConfig.sanitize[:attributes]['a'] = %w{ target href name } AppConfig.sanitize[:add_attributes] = { 'a' => { 'target' => '_blank' } } ``` ...can be quite convenient. ## Configuration Configuration is in YAML files. ``` yml --- force_ssl: true protocol: https application_host: myapp.com twitter: consumer: ABC secret: XYZ vegetables: - broccoli - carrots - corn ``` As simple as that. You can also setup common stuff in files prefixed with `_`. Eg, `_defaults.yml`, and load either before or after the stuff in the primary config: ``` yml --- load_before: - defaults other_stuff: 'here' ``` This will look for `_defaults.yml` and deep-merge in the rest. You can also use `load_after`, which will of course override values in the primary config... why would you ever need this? I don't know :) See the `test/dummy` app and the tests for the details if it isn't clear.