EasySettings (Deprecated)
EasySettings is a simple manager of setting constants.
Installation
Add this line to your application's Gemfile:
gem 'easy_settings'
And then execute:
$ bundle
Or install it yourself as:
$ gem install easy_settings
Usage
EasySettings can load YAML file and understand ERB format.
Basic usage
Most simple usage is to put your settings file settings.yml
to your application's directory.
settings.yml
or config/settings.yml
:
log_level: info
other_service:
endpoint: https://myapp/api/v1
apikey: API_KEY_XXX
secret: SECRET_KEY_XXX
demo_users:
<% 5.times do |i| %>
- <%= "user%02d" % [i] %>
<% end %>
And you can use EasySettings constant in your application:
require "easy_settings"
EasySettings.log_level #=> "info"
EasySettings hash can be used with method style, string keys and symbol keys:
EasySettings.log_level #=> "info"
EasySettings["log_level"] #=> "info"
EasySettings[:log_level] #=> "info"
EasySettings can treat nested hash:
EasySettings.other_service
#=> {"endpoint"=>"https://myapp/api/v1", "apikey"=>"API_KEY_XXX", "secret"=>"SECRET_KEY_XXX"}
EasySettings.other_service.endpoint #=> "https://myapp/api/v1"
EasySettings.other_service["endpoint"] #=> "https://myapp/api/v1"
EasySettings.other_service[:endpoint] #=> "https://myapp/api/v1"
EasySettings process ERB format:
EasySettings.demo_users
#=> ["user00", "user01", "user02", "user03", "user04"]
You can set values.
EasySettings.app_name = "MyApp" #=> "MyApp"
EasySettings["app_name"] #=> "MyApp"
EasySettings[:app_name] #=> "MyApp"
If you want to use other settings file, you can use any other file with EasySettings.source_file =
.
EasySettings.source_file = Rails.root.join("config/application.yml").to_s
Namespace
You can use EasySettings with namespace:
defaults: &defaults
app_name: NamespaceSample
development: &development
<<: *defaults
endpoint: http://backend-dev/api/v1
test:
<<: *development
production:
<<: *defaults
endpoint: http://backend/api/v1
Using EasySettings with namespace =
:
Rails.env
#=> "production"
EasySettings.namespace = Rails.env
#=> "production"
EasySettings.app_name
#=> "NamespaceSample"
EasySettings.endpoint
#=> "http://backend/api/v1"
Default value
You can set default value. Default value will be set when EasySettings doesn't have value with the key yet.
EasySettings.has_key?(:foo)
#=> false
EasySettings.foo
#=> nil
EasySettings.foo("bar")
#=> "bar"
EasySettings.foo
#=> "bar"
EasySettings.has_key?(:foo)
#=> true
EasySettings.foo("baz")
#=> "bar"
Using nil option, you can set nil:
EasySettings.app_name(nil)
#=> nil
EasySettings.has_key?(:app_name)
#=> false
EasySettings.app_name(nil, nil: true)
#=> nil
EasySettings.has_key?(:app_name)
#=> true
And EasySettings can treat nested hash:
EasySettings.other_service({}).endpoint = "https://default/"
#=> "https://default/"
EasySettings.to_h
#=> {"other_service"=>{"endpoint"=>"https://default/"}}
Or more simple:
EasySettings.other_service!.endpoint = "https://default/"
Reset EasySettings
EasySettings.source_file = "new_settings.yml"
EasySettings.reload!
EasySettings.source_hash = {}
EasySettings.reload!
Alias
Config = EasySettings
Config.endpoint
Or using class that inherit EasySettings:
class Config < EasySettings
self.namespace = Rails.env
end
Config.endpoint
With Rails
In your Gemfile:
gem "easy_settings"
And write your settings in config/settings.yml
with env:
default: &default
app_name: MyApp
apikey: <%= ENV["APIKEY"] %>
development:
<<: *default
endpoint: https://endpoint-for-development
test:
<<: *default
endpoint: https://endpoint-for-test
production:
<<: *default
endpoint: https://endpoint-for-production
Then you can access EasySettings anywhere.
Contributing
- Fork it ( https://github.com/nownabe/easy_settings/fork )
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create a new Pull Request