figaro 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +18 -0
- data/.travis.yml +7 -0
- data/Gemfile +3 -0
- data/LICENSE +22 -0
- data/README.md +71 -0
- data/Rakefile +8 -0
- data/features/rails.feature +31 -0
- data/features/step_definitions/bundler_steps.rb +7 -0
- data/features/step_definitions/common_steps.rb +11 -0
- data/features/step_definitions/rails_steps.rb +4 -0
- data/features/support/aruba.rb +8 -0
- data/features/support/env.rb +1 -0
- data/figaro.gemspec +23 -0
- data/lib/figaro.rb +4 -0
- data/lib/figaro/railtie.rb +11 -0
- metadata +155 -0
data/.gitignore
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/LICENSE
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
Copyright (c) 2012 Steve Richert
|
|
2
|
+
|
|
3
|
+
MIT License
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
6
|
+
a copy of this software and associated documentation files (the
|
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
|
11
|
+
the following conditions:
|
|
12
|
+
|
|
13
|
+
The above copyright notice and this permission notice shall be
|
|
14
|
+
included in all copies or substantial portions of the Software.
|
|
15
|
+
|
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# Figaro [](http://travis-ci.org/laserlemon/figaro) [](https://gemnasium.com/laserlemon/figaro)
|
|
2
|
+
|
|
3
|
+
Simple Rails app configuration
|
|
4
|
+
|
|
5
|
+
## What is this for?
|
|
6
|
+
|
|
7
|
+
Figaro is for configuring Rails 3 apps, especially open source Rails apps.
|
|
8
|
+
|
|
9
|
+
Open sourcing a Rails app can be a little tricky when it comes to sensitive configuration information like [Pusher](http://pusher.com/) or [Stripe](https://stripe.com/) credentials. You don't want to check private credentials into the repo but what other choice is there?
|
|
10
|
+
|
|
11
|
+
Figaro provides a clean and simple way to configure your app and keep the private stuff… private.
|
|
12
|
+
|
|
13
|
+
## How does it work?
|
|
14
|
+
|
|
15
|
+
It works really well.
|
|
16
|
+
|
|
17
|
+
There are a few similar solutions out there, and a lot of homegrown attempts. Most namespace your configuration under a `Config` (or similar) namespace. That's fine, but there's already a place to describe the application environment… `ENV`!
|
|
18
|
+
|
|
19
|
+
`ENV` is a collection of simple string key/value pairs and it works just great for application configuration.
|
|
20
|
+
|
|
21
|
+
As an added bonus, this is exactly how apps on [Heroku](http://www.heroku.com/) are configured. So if you configure your Rails app using `ENV`, you're already set to deploy to Heroku.
|
|
22
|
+
|
|
23
|
+
## Give me an example.
|
|
24
|
+
|
|
25
|
+
Okay. Add Figaro to your bundle:
|
|
26
|
+
|
|
27
|
+
```ruby
|
|
28
|
+
gem "figaro"
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Next up, create your application's configuration file in `config/application.yml`:
|
|
32
|
+
|
|
33
|
+
```yaml
|
|
34
|
+
PUSHER_APP_ID: "2954"
|
|
35
|
+
PUSHER_KEY: 7381a978f7dd7f9a1117
|
|
36
|
+
PUSHER_SECRET: abdc3b896a0ffb85d373
|
|
37
|
+
STRIPE_API_KEY: EdAvEPVEC3LuaTg5Q3z6WbDVqZlcBQ8Z
|
|
38
|
+
STRIPE_PUBLIC_KEY: pk_BRgD57O8fHja9HxduJUszhef6jCyS
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Now, just add `config/application.yml` to your `.gitignore` and you're done! Your configuration will be available as key/value pairs in `ENV`. For example, here's `config/initializers/pusher.rb`:
|
|
42
|
+
|
|
43
|
+
```ruby
|
|
44
|
+
Pusher.app_id = ENV["PUSHER_APP_ID"]
|
|
45
|
+
Pusher.key = ENV["PUSHER_KEY"]
|
|
46
|
+
Pusher.secret = ENV["PUSHER_SECRET"]
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## How does it work with Heroku?
|
|
50
|
+
|
|
51
|
+
Heroku's beautifully simple application configuration was the [inspiration](http://laserlemon.com/blog/2011/03/08/heroku-friendly-application-configuration/) for Figaro.
|
|
52
|
+
|
|
53
|
+
To configure your application `ENV` on Heroku, you can do the following from the command line using the `heroku` gem and your production configuration information.
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
heroku config:add PUSHER_APP_ID=8926
|
|
57
|
+
heroku config:add PUSHER_KEY=0463644d89a340ff1132
|
|
58
|
+
heroku config:add PUSHER_SECRET=0eadfd9847769f94367b
|
|
59
|
+
heroku config:add STRIPE_API_KEY=jHXKPPE0dUW84xJNYzn6CdWM2JfrCbPE
|
|
60
|
+
heroku config:add STRIPE_PUBLIC_KEY=pk_HHtUKJwlN7USCT6nE5jiXgoduiNl3
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## What if I'm not using Heroku?
|
|
64
|
+
|
|
65
|
+
No problem. Just add `config/application.yml` on your server for the production app.
|
|
66
|
+
|
|
67
|
+
## This sucks. How can I make it better?
|
|
68
|
+
|
|
69
|
+
1. Fork it.
|
|
70
|
+
2. Make it better.
|
|
71
|
+
3. Send me a pull request.
|
data/Rakefile
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
Feature: Rails
|
|
2
|
+
Background:
|
|
3
|
+
Given a new Rails app
|
|
4
|
+
And I add figaro as a dependency
|
|
5
|
+
And I bundle
|
|
6
|
+
And I create "lib/tasks/hello.rake" with:
|
|
7
|
+
"""
|
|
8
|
+
task :hello => :environment do
|
|
9
|
+
puts ["Hello", ENV["HELLO"]].compact.join(", ") << "!"
|
|
10
|
+
end
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
Scenario: Has no application.yml
|
|
14
|
+
When I run "bundle exec rake hello"
|
|
15
|
+
Then the output should be "Hello!"
|
|
16
|
+
|
|
17
|
+
Scenario: Has application.yml without requested key
|
|
18
|
+
When I create "config/application.yml" with:
|
|
19
|
+
"""
|
|
20
|
+
GOODBYE: Ruby Tuesday
|
|
21
|
+
"""
|
|
22
|
+
And I run "bundle exec rake hello"
|
|
23
|
+
Then the output should be "Hello!"
|
|
24
|
+
|
|
25
|
+
Scenario: Has application.yml with requested key
|
|
26
|
+
When I create "config/application.yml" with:
|
|
27
|
+
"""
|
|
28
|
+
HELLO: world
|
|
29
|
+
"""
|
|
30
|
+
And I run "bundle exec rake hello"
|
|
31
|
+
Then the output should be "Hello, world!"
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
When /^I create "([^"]+)" with:$/ do |path, content|
|
|
2
|
+
write_file(path, content)
|
|
3
|
+
end
|
|
4
|
+
|
|
5
|
+
When /^I run "([^"]+)"$/ do |command|
|
|
6
|
+
run_simple(command)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
Then /^the output should be "([^"]*)"$/ do |output|
|
|
10
|
+
assert_exact_output(output, output_from(@commands.last).strip)
|
|
11
|
+
end
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ROOT = File.expand_path("../../..", __FILE__)
|
data/figaro.gemspec
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
Gem::Specification.new do |gem|
|
|
4
|
+
gem.name = "figaro"
|
|
5
|
+
gem.version = "0.1.0"
|
|
6
|
+
|
|
7
|
+
gem.authors = ["Steve Richert"]
|
|
8
|
+
gem.email = ["steve.richert@gmail.com"]
|
|
9
|
+
gem.summary = "Simple Rails app configuration"
|
|
10
|
+
gem.description = "Simple, Heroku-friendly Rails app configuration using ENV and a single YAML file"
|
|
11
|
+
gem.homepage = "https://github.com/laserlemon/figaro"
|
|
12
|
+
|
|
13
|
+
gem.add_dependency "rails", "~> 3.0"
|
|
14
|
+
|
|
15
|
+
gem.add_development_dependency "aruba", "~> 0.4"
|
|
16
|
+
gem.add_development_dependency "cucumber", "~> 1.0"
|
|
17
|
+
gem.add_development_dependency "rake", ">= 0.8.7"
|
|
18
|
+
gem.add_development_dependency "rspec", "~> 2.0"
|
|
19
|
+
|
|
20
|
+
gem.files = `git ls-files`.split($\)
|
|
21
|
+
gem.test_files = gem.files.grep(/^spec\//)
|
|
22
|
+
gem.require_paths = ["lib"]
|
|
23
|
+
end
|
data/lib/figaro.rb
ADDED
metadata
ADDED
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: figaro
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
hash: 27
|
|
5
|
+
prerelease:
|
|
6
|
+
segments:
|
|
7
|
+
- 0
|
|
8
|
+
- 1
|
|
9
|
+
- 0
|
|
10
|
+
version: 0.1.0
|
|
11
|
+
platform: ruby
|
|
12
|
+
authors:
|
|
13
|
+
- Steve Richert
|
|
14
|
+
autorequire:
|
|
15
|
+
bindir: bin
|
|
16
|
+
cert_chain: []
|
|
17
|
+
|
|
18
|
+
date: 2012-04-02 00:00:00 Z
|
|
19
|
+
dependencies:
|
|
20
|
+
- !ruby/object:Gem::Dependency
|
|
21
|
+
name: rails
|
|
22
|
+
prerelease: false
|
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
|
24
|
+
none: false
|
|
25
|
+
requirements:
|
|
26
|
+
- - ~>
|
|
27
|
+
- !ruby/object:Gem::Version
|
|
28
|
+
hash: 7
|
|
29
|
+
segments:
|
|
30
|
+
- 3
|
|
31
|
+
- 0
|
|
32
|
+
version: "3.0"
|
|
33
|
+
type: :runtime
|
|
34
|
+
version_requirements: *id001
|
|
35
|
+
- !ruby/object:Gem::Dependency
|
|
36
|
+
name: aruba
|
|
37
|
+
prerelease: false
|
|
38
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
|
39
|
+
none: false
|
|
40
|
+
requirements:
|
|
41
|
+
- - ~>
|
|
42
|
+
- !ruby/object:Gem::Version
|
|
43
|
+
hash: 3
|
|
44
|
+
segments:
|
|
45
|
+
- 0
|
|
46
|
+
- 4
|
|
47
|
+
version: "0.4"
|
|
48
|
+
type: :development
|
|
49
|
+
version_requirements: *id002
|
|
50
|
+
- !ruby/object:Gem::Dependency
|
|
51
|
+
name: cucumber
|
|
52
|
+
prerelease: false
|
|
53
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
|
54
|
+
none: false
|
|
55
|
+
requirements:
|
|
56
|
+
- - ~>
|
|
57
|
+
- !ruby/object:Gem::Version
|
|
58
|
+
hash: 15
|
|
59
|
+
segments:
|
|
60
|
+
- 1
|
|
61
|
+
- 0
|
|
62
|
+
version: "1.0"
|
|
63
|
+
type: :development
|
|
64
|
+
version_requirements: *id003
|
|
65
|
+
- !ruby/object:Gem::Dependency
|
|
66
|
+
name: rake
|
|
67
|
+
prerelease: false
|
|
68
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
|
69
|
+
none: false
|
|
70
|
+
requirements:
|
|
71
|
+
- - ">="
|
|
72
|
+
- !ruby/object:Gem::Version
|
|
73
|
+
hash: 49
|
|
74
|
+
segments:
|
|
75
|
+
- 0
|
|
76
|
+
- 8
|
|
77
|
+
- 7
|
|
78
|
+
version: 0.8.7
|
|
79
|
+
type: :development
|
|
80
|
+
version_requirements: *id004
|
|
81
|
+
- !ruby/object:Gem::Dependency
|
|
82
|
+
name: rspec
|
|
83
|
+
prerelease: false
|
|
84
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
|
85
|
+
none: false
|
|
86
|
+
requirements:
|
|
87
|
+
- - ~>
|
|
88
|
+
- !ruby/object:Gem::Version
|
|
89
|
+
hash: 3
|
|
90
|
+
segments:
|
|
91
|
+
- 2
|
|
92
|
+
- 0
|
|
93
|
+
version: "2.0"
|
|
94
|
+
type: :development
|
|
95
|
+
version_requirements: *id005
|
|
96
|
+
description: Simple, Heroku-friendly Rails app configuration using ENV and a single YAML file
|
|
97
|
+
email:
|
|
98
|
+
- steve.richert@gmail.com
|
|
99
|
+
executables: []
|
|
100
|
+
|
|
101
|
+
extensions: []
|
|
102
|
+
|
|
103
|
+
extra_rdoc_files: []
|
|
104
|
+
|
|
105
|
+
files:
|
|
106
|
+
- .gitignore
|
|
107
|
+
- .travis.yml
|
|
108
|
+
- Gemfile
|
|
109
|
+
- LICENSE
|
|
110
|
+
- README.md
|
|
111
|
+
- Rakefile
|
|
112
|
+
- features/rails.feature
|
|
113
|
+
- features/step_definitions/bundler_steps.rb
|
|
114
|
+
- features/step_definitions/common_steps.rb
|
|
115
|
+
- features/step_definitions/rails_steps.rb
|
|
116
|
+
- features/support/aruba.rb
|
|
117
|
+
- features/support/env.rb
|
|
118
|
+
- figaro.gemspec
|
|
119
|
+
- lib/figaro.rb
|
|
120
|
+
- lib/figaro/railtie.rb
|
|
121
|
+
homepage: https://github.com/laserlemon/figaro
|
|
122
|
+
licenses: []
|
|
123
|
+
|
|
124
|
+
post_install_message:
|
|
125
|
+
rdoc_options: []
|
|
126
|
+
|
|
127
|
+
require_paths:
|
|
128
|
+
- lib
|
|
129
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
130
|
+
none: false
|
|
131
|
+
requirements:
|
|
132
|
+
- - ">="
|
|
133
|
+
- !ruby/object:Gem::Version
|
|
134
|
+
hash: 3
|
|
135
|
+
segments:
|
|
136
|
+
- 0
|
|
137
|
+
version: "0"
|
|
138
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
139
|
+
none: false
|
|
140
|
+
requirements:
|
|
141
|
+
- - ">="
|
|
142
|
+
- !ruby/object:Gem::Version
|
|
143
|
+
hash: 3
|
|
144
|
+
segments:
|
|
145
|
+
- 0
|
|
146
|
+
version: "0"
|
|
147
|
+
requirements: []
|
|
148
|
+
|
|
149
|
+
rubyforge_project:
|
|
150
|
+
rubygems_version: 1.8.21
|
|
151
|
+
signing_key:
|
|
152
|
+
specification_version: 3
|
|
153
|
+
summary: Simple Rails app configuration
|
|
154
|
+
test_files: []
|
|
155
|
+
|