figaro 0.7.0 → 1.0.0.rc1

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.
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