figaro 0.7.0 → 1.0.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. checksums.yaml +6 -14
  2. data/.gitignore +1 -1
  3. data/.travis.yml +23 -18
  4. data/CHANGELOG.md +98 -0
  5. data/CONTRIBUTING.md +48 -0
  6. data/Gemfile +4 -6
  7. data/{LICENSE → LICENSE.txt} +0 -0
  8. data/README.md +184 -61
  9. data/Rakefile +1 -12
  10. data/bin/figaro +5 -0
  11. data/doc/title.png +0 -0
  12. data/figaro.gemspec +9 -5
  13. data/gemfiles/rails30.gemfile +3 -4
  14. data/gemfiles/rails31.gemfile +3 -4
  15. data/gemfiles/rails32.gemfile +3 -4
  16. data/gemfiles/rails40.gemfile +3 -7
  17. data/gemfiles/rails41.gemfile +11 -0
  18. data/lib/figaro.rb +16 -29
  19. data/lib/figaro/application.rb +91 -0
  20. data/lib/figaro/cli.rb +24 -0
  21. data/lib/figaro/cli/heroku_set.rb +29 -0
  22. data/lib/figaro/cli/task.rb +27 -0
  23. data/lib/figaro/env.rb +36 -7
  24. data/lib/figaro/error.rb +12 -0
  25. data/lib/figaro/rails.rb +9 -0
  26. data/lib/figaro/rails/application.rb +21 -0
  27. data/lib/figaro/rails/railtie.rb +9 -0
  28. data/lib/figaro/{tasks.rake → rails/tasks.rake} +0 -0
  29. data/lib/generators/figaro/install/install_generator.rb +1 -1
  30. data/lib/generators/figaro/install/templates/application.yml +10 -6
  31. data/spec/figaro/application_spec.rb +258 -0
  32. data/spec/figaro/cli/heroku_set_spec.rb +62 -0
  33. data/spec/figaro/env_spec.rb +167 -35
  34. data/spec/figaro/rails/application_spec.rb +43 -0
  35. data/spec/figaro_spec.rb +74 -36
  36. data/spec/rails_spec.rb +66 -0
  37. data/spec/spec_helper.rb +6 -3
  38. data/spec/support/aruba.rb +19 -0
  39. data/spec/support/bin/heroku +5 -0
  40. data/spec/support/command_helpers.rb +17 -0
  41. data/spec/support/command_interceptor.rb +33 -0
  42. data/spec/support/random.rb +3 -0
  43. data/spec/support/reset.rb +13 -0
  44. metadata +88 -44
  45. data/features/rails.feature +0 -97
  46. data/features/step_definitions/bundler_steps.rb +0 -7
  47. data/features/step_definitions/common_steps.rb +0 -19
  48. data/features/step_definitions/rails_steps.rb +0 -12
  49. data/features/support/aruba.rb +0 -12
  50. data/features/support/env.rb +0 -8
  51. data/lib/figaro/railtie.rb +0 -16
  52. data/lib/figaro/tasks.rb +0 -28
  53. data/spec/figaro/tasks_spec.rb +0 -71
  54. data/spec/support/rake.rb +0 -11
@@ -1,97 +0,0 @@
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"]].reject(&:blank?).join(", ") << "!"
10
- end
11
-
12
- task :greet => :environment do
13
- puts ([Figaro.env.greeting] * 3).join(", ") << "!"
14
- end
15
- """
16
-
17
- Scenario: Has no application.yml
18
- When I run "rake hello"
19
- Then the output should be "Hello!"
20
-
21
- Scenario: Has blank application.yml
22
- Given I create "config/application.yml" with:
23
- """
24
- """
25
- When I run "rake hello"
26
- Then the output should be "Hello!"
27
-
28
- Scenario: Has commented application.yml
29
- Given I create "config/application.yml" with:
30
- """
31
- # Comment
32
- """
33
- When I run "rake hello"
34
- Then the output should be "Hello!"
35
-
36
- Scenario: Has application.yml with RAILS_ENV set
37
- Given I create "config/application.yml" with:
38
- """
39
- HELLO: world
40
- development:
41
- HELLO: developers
42
- production:
43
- HELLO: users
44
- """
45
- When I run "rake hello RAILS_ENV=test"
46
- Then the output should be "Hello, world!"
47
- When I run "rake hello RAILS_ENV=development"
48
- Then the output should be "Hello, developers!"
49
- When I run "rake hello RAILS_ENV=production"
50
- Then the output should be "Hello, users!"
51
-
52
- Scenario: Generator creates and ignores application.yml file
53
- When I run "rails generate figaro:install"
54
- Then "config/application.yml" should exist
55
- And ".gitignore" should contain "/config/application.yml"
56
-
57
- Scenario: Generator only creates application.yml if not using Git
58
- Given I run "rm .gitignore"
59
- When I run "rails generate figaro:install"
60
- Then "config/application.yml" should exist
61
- But ".gitignore" should not exist
62
-
63
- Scenario: Includes Heroku Rake task
64
- When I run "rake --tasks figaro:heroku"
65
- Then the output should be "rake figaro:heroku[app] # Configure Heroku according to application.yml"
66
-
67
- Scenario: Accessing values through the Figaro.env proxy
68
- Given I create "config/application.yml" with:
69
- """
70
- GREETING: Figaro
71
- """
72
- When I run "rake greet"
73
- Then the output should be "Figaro, Figaro, Figaro!"
74
-
75
- Scenario: Overriding values in application.yml
76
- Given I create "config/application.yml" with:
77
- """
78
- GREETING: Figaro
79
- """
80
- When I run "rake greet GREETING=Ho"
81
- Then the output should be "Ho, Ho, Ho!"
82
-
83
- Scenario: Nullifying values in application.yml
84
- Given I create "config/application.yml" with:
85
- """
86
- HELLO: world
87
- """
88
- When I run "rake hello HELLO="
89
- Then the output should be "Hello!"
90
-
91
- Scenario: Using ERB in application.yml
92
- Given I create "config/application.yml" with:
93
- """
94
- GREETING: <%= "Yo" %>
95
- """
96
- When I run "rake greet"
97
- Then the output should be "Yo, Yo, Yo!"
@@ -1,7 +0,0 @@
1
- When "I add figaro as a dependency" do
2
- append_to_file("Gemfile", %(gem "figaro", path: "#{ROOT}"))
3
- end
4
-
5
- When "I bundle" do
6
- run_simple("bundle install")
7
- end
@@ -1,19 +0,0 @@
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
12
-
13
- Then /^"([^"]+)" should ?(not)? exist$/ do |path, negative|
14
- check_file_presence([path], !negative)
15
- end
16
-
17
- Then /^"([^"]+)" should contain "([^"]*)"$/ do |path, content|
18
- check_file_content(path, content, true)
19
- end
@@ -1,12 +0,0 @@
1
- Given "a new Rails app" do
2
- in_current_dir { FileUtils.rm_rf("example") }
3
- run_simple(<<-CMD)
4
- bundle exec rails new example \
5
- --skip-bundle \
6
- --skip-active-record \
7
- --skip-sprockets \
8
- --skip-javascript \
9
- --skip-test-unit
10
- CMD
11
- cd("example")
12
- end
@@ -1,12 +0,0 @@
1
- require "aruba/api"
2
- require "aruba/cucumber/hooks"
3
-
4
- World(Aruba::Api)
5
-
6
- Before do
7
- @aruba_timeout_seconds = 60
8
- end
9
-
10
- After do
11
- FileUtils.rm_rf(current_dir)
12
- end
@@ -1,8 +0,0 @@
1
- if ENV["COVERAGE"]
2
- require "simplecov"
3
- SimpleCov.start { add_filter("features") }
4
- end
5
-
6
- require "pathname"
7
-
8
- ROOT = Pathname.new(File.expand_path("../../..", __FILE__))
@@ -1,16 +0,0 @@
1
- require "rails"
2
- require "yaml"
3
-
4
- module Figaro
5
- class Railtie < ::Rails::Railtie
6
- config.before_configuration do
7
- Figaro.env.each do |key, value|
8
- ENV[key] = value unless ENV.key?(key)
9
- end
10
- end
11
-
12
- rake_tasks do
13
- load "figaro/tasks.rake"
14
- end
15
- end
16
- end
@@ -1,28 +0,0 @@
1
- require "bundler"
2
-
3
- module Figaro
4
- module Tasks
5
- class Heroku < Struct.new(:app)
6
- def invoke
7
- heroku("config:set #{vars}")
8
- end
9
-
10
- def vars
11
- Figaro.vars(environment)
12
- end
13
-
14
- def environment
15
- heroku("run 'echo $RAILS_ENV'").chomp[/(\w+)\z/]
16
- end
17
-
18
- def heroku(command)
19
- with_app = app ? " --app #{app}" : ""
20
- `heroku #{command}#{with_app}`
21
- end
22
-
23
- def `(command)
24
- Bundler.with_clean_env { super }
25
- end
26
- end
27
- end
28
- end
@@ -1,71 +0,0 @@
1
- require "spec_helper"
2
-
3
- module Figaro::Tasks
4
- describe Heroku do
5
- subject(:heroku) { Heroku.new }
6
-
7
- describe "#invoke" do
8
- it "configures Heroku" do
9
- heroku.stub(:vars => "FOO=bar")
10
-
11
- heroku.should_receive(:heroku).once.with("config:set FOO=bar")
12
-
13
- heroku.invoke
14
- end
15
- end
16
-
17
- describe "#vars" do
18
- it "returns Figaro's vars for Heroku's environment" do
19
- heroku.stub(:environment => "staging")
20
- Figaro.stub(:vars).with("staging").and_return("FOO=bar")
21
-
22
- expect(heroku.vars).to eq("FOO=bar")
23
- end
24
- end
25
-
26
- describe "#environment" do
27
- it "returns Heroku's environment" do
28
- heroku.stub(:heroku).with("run 'echo $RAILS_ENV'").and_return(<<-OUT)
29
- Running `echo $RAILS_ENV` attached to terminal... up, run.1234
30
- staging
31
- OUT
32
-
33
- expect(heroku.environment).to eq("staging")
34
- end
35
- end
36
-
37
- describe "#heroku" do
38
- it "runs a command on Heroku" do
39
- heroku.should_receive(:`).once.with("heroku info")
40
-
41
- heroku.heroku("info")
42
- end
43
-
44
- it "runs a command on a specific Heroku app" do
45
- heroku = Heroku.new("my-app")
46
-
47
- heroku.should_receive(:`).once.with("heroku info --app my-app")
48
-
49
- heroku.heroku("info")
50
- end
51
- end
52
- end
53
-
54
- describe "figaro:heroku", :rake => true do
55
- subject(:heroku) { mock(:heroku) }
56
-
57
- it "configures Heroku" do
58
- Figaro::Tasks::Heroku.stub(:new).with(nil).and_return(heroku)
59
- heroku.should_receive(:invoke).once
60
-
61
- task.invoke
62
- end
63
-
64
- it "configures a specific Heroku app" do
65
- Figaro::Tasks::Heroku.stub(:new).with("my-app").and_return(heroku)
66
- heroku.should_receive(:invoke).once
67
-
68
- task.invoke("my-app")
69
- end
70
- end
71
- end
@@ -1,11 +0,0 @@
1
- require "rake"
2
-
3
- shared_context "rake", :rake => true do
4
- let(:rake) { Rake.application = Rake::Application.new }
5
- let(:task) { rake[self.class.description] }
6
-
7
- before do
8
- rake.rake_require("lib/figaro/tasks", [ROOT.to_s], [])
9
- Rake::Task.define_task(:environment)
10
- end
11
- end