Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/mrpowers/turf
Set application variables for the development, test, and production environments
https://github.com/mrpowers/turf
Last synced: 3 months ago
JSON representation
Set application variables for the development, test, and production environments
- Host: GitHub
- URL: https://github.com/mrpowers/turf
- Owner: MrPowers
- License: mit
- Created: 2015-08-13T18:06:16.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2016-01-27T22:33:22.000Z (almost 9 years ago)
- Last Synced: 2024-03-15T02:46:04.754Z (10 months ago)
- Language: Ruby
- Size: 21.5 KB
- Stars: 5
- Watchers: 5
- Forks: 1
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
Awesome Lists containing this project
README
# Turf
Turf lets you control the value of variables in different environments and makes it easy to override values locally. It's easy to set `speak_in_chat` to `true` when `RAILS_ENV` equals "production" and `false` otherwise. Turf is similar to the Rails `secrets.yml` file, but more powerful because it can execute Ruby code and return arrays, hashes, etc.
## How it works
Turf looks for methods in the following order:
1. The `Turf::Local` class.
2. The `Turf::Test`, `Turf::Development`, or `Turf::Production` class. Turf uses the development environment by default, but this can be overridden by setting `RAILS_ENV` to "production" or "test".
3. The `Turf::Default` class.I recommend defining the Turf classes in the `/config/turf` directory.
## Examples
```ruby
ENV["RAILS_ENV"] = "production"class Turf::Local
def something
"something in local"
end
endclass Turf::Development
def blah
"blah in development"
end
endclass Turf::Production
def something
"something in production"
enddef blah
"blah in production"
end
endclass Turf::Default
def four
2 + 2
end
end# Turf::Local is the first place Turf looks for a
# matching method
Turf.something # => "something in local"# The RAILS_ENV is set to production, so Turf looks
# in Turf::Production second if the method is not
# found in Turf::Local
# Turf::Development is ignored in production
Turf.blah # => "blah in production"# Turf::Default is the last place to look
Turf.four # => 4# Turf raises an exception when it can't find
# a matching method
Turf.hi_there # => raises an exception
```## Setup
Add this line to your application's Gemfile:
```ruby
gem 'turf'
```Require turf:
```ruby
require 'turf'
```## Suggested Setup
Include the Turf setup rake task in your project's `Rakefile`:
```ruby
load "tasks/setup.rake"
```Run the rake task to create the classes in your project:
```
bundle exec rake turf:setup
```### Ruby Projects (see below for Rails Projects)
Require all the files in the `/lib/#{project_name}.rb` file:
```ruby
require_relative "../config/turf/default.rb"def require_all(pattern)
Dir.glob("#{Turf.root}/#{pattern}/**/*.rb").sort.each { |path| require path }
endrequire_all("config/turf")
```***RAILS_ENV is used to manage the environment for compatibility with other gems***
Set the `RAILS_ENV` to "develoment" at the top of the `/lib/#{project_name}.rb` file:
```ruby
ENV['RAILS_ENV'] ||= "development"
```Set the `RAILS_ENV` to "test" in the `spec_helper.rb` file:
```ruby
ENV['RAILS_ENV'] = 'test'
```Set the `RAILS_ENV` to production on the remote host.
### Rails Projects
Require all the `Turf` files in the `config/application.rb` file:
```ruby
Dir.glob("#{Rails.root}/config/turf/**/*.rb").each { |path| require path }
```That's it!
## .gitignore Turf::Local
Application secrets can be stored in `Turf::Local` and the file can be gitignored so these secrets are not exposed in source control. Add this line (`/config/turf/local.rb`) to your `.gitignore` file and `scp` the local.rb file to the remote host when changes are made.
## Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/MrPowers/turf.
## License
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).