heroku_config_vars 0.0.2.pre

Sign up to get free protection for your applications and to get access to all the features.
Files changed (94) hide show
  1. data/MIT-LICENSE +20 -0
  2. data/README.md +1 -0
  3. data/Rakefile +30 -0
  4. data/app/assets/javascripts/heroku_config_vars/application.js +15 -0
  5. data/app/assets/javascripts/heroku_config_vars/var_form.js +28 -0
  6. data/app/assets/stylesheets/heroku_config_vars/application.css +31 -0
  7. data/app/assets/stylesheets/heroku_config_vars/button.css.scss +54 -0
  8. data/app/assets/stylesheets/heroku_config_vars/menu.css.scss +36 -0
  9. data/app/assets/stylesheets/heroku_config_vars/table.css.scss +28 -0
  10. data/app/controllers/heroku_config_vars/application_controller.rb +46 -0
  11. data/app/controllers/heroku_config_vars/heroku_apps_controller.rb +50 -0
  12. data/app/helpers/heroku_config_vars/application_helper.rb +8 -0
  13. data/app/models/heroku_config_vars/heroku_app.rb +138 -0
  14. data/app/views/heroku_config_vars/application/env.html.erb +14 -0
  15. data/app/views/heroku_config_vars/application/recommend_https.html.erb +6 -0
  16. data/app/views/heroku_config_vars/heroku_apps/_errors.html.erb +5 -0
  17. data/app/views/heroku_config_vars/heroku_apps/confirmation.html.erb +73 -0
  18. data/app/views/heroku_config_vars/heroku_apps/edit.html.erb +37 -0
  19. data/app/views/heroku_config_vars/heroku_apps/new.html.erb +21 -0
  20. data/app/views/heroku_config_vars/heroku_apps/show.html.erb +20 -0
  21. data/app/views/layouts/heroku_config_vars/application.html.erb +20 -0
  22. data/config/routes.rb +5 -0
  23. data/lib/heroku_config_vars/engine.rb +12 -0
  24. data/lib/heroku_config_vars/version.rb +3 -0
  25. data/lib/heroku_config_vars.rb +5 -0
  26. data/lib/tasks/heroku_config_vars_tasks.rake +4 -0
  27. data/spec/dummy/README.rdoc +261 -0
  28. data/spec/dummy/Rakefile +7 -0
  29. data/spec/dummy/app/assets/javascripts/application.js +15 -0
  30. data/spec/dummy/app/assets/stylesheets/application.css +13 -0
  31. data/spec/dummy/app/controllers/application_controller.rb +8 -0
  32. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  33. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  34. data/spec/dummy/config/application.rb +49 -0
  35. data/spec/dummy/config/boot.rb +10 -0
  36. data/spec/dummy/config/environment.rb +5 -0
  37. data/spec/dummy/config/environments/development.rb +29 -0
  38. data/spec/dummy/config/environments/test.rb +29 -0
  39. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  40. data/spec/dummy/config/initializers/inflections.rb +15 -0
  41. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  42. data/spec/dummy/config/initializers/secret_token.rb +7 -0
  43. data/spec/dummy/config/initializers/session_store.rb +8 -0
  44. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  45. data/spec/dummy/config/locales/en.yml +5 -0
  46. data/spec/dummy/config/routes.rb +4 -0
  47. data/spec/dummy/config.ru +4 -0
  48. data/spec/dummy/log/test.log +6002 -0
  49. data/spec/dummy/public/404.html +26 -0
  50. data/spec/dummy/public/422.html +26 -0
  51. data/spec/dummy/public/500.html +25 -0
  52. data/spec/dummy/public/favicon.ico +0 -0
  53. data/spec/dummy/script/rails +6 -0
  54. data/spec/dummy/tmp/cache/assets/C20/540/sprockets%2F9f7052464a49612e023f9088fa442053 +0 -0
  55. data/spec/dummy/tmp/cache/assets/C97/2C0/sprockets%2F3945d527e8ea800568e77dd095c67391 +0 -0
  56. data/spec/dummy/tmp/cache/assets/C9B/060/sprockets%2Fa20484759fec963d3f51839934c3848f +0 -0
  57. data/spec/dummy/tmp/cache/assets/CAC/5E0/sprockets%2F425b0f4900e04b7736af6e64c4f46902 +0 -0
  58. data/spec/dummy/tmp/cache/assets/CBA/440/sprockets%2F8291695bea92c347d6a509dfa2379810 +0 -0
  59. data/spec/dummy/tmp/cache/assets/CBF/C20/sprockets%2Fdd57917c8268e99fe0a17332550ef632 +0 -0
  60. data/spec/dummy/tmp/cache/assets/CD9/8E0/sprockets%2F0681932233ab9af521f58c34cbf091f5 +0 -0
  61. data/spec/dummy/tmp/cache/assets/CF0/D20/sprockets%2F6997e8f2f3f34b07c51d6689d3ec5120 +0 -0
  62. data/spec/dummy/tmp/cache/assets/CFA/C10/sprockets%2Fca5852e7ebc212e12405091c0ca7a449 +0 -0
  63. data/spec/dummy/tmp/cache/assets/D0C/BD0/sprockets%2F7e5673b3d2e6c24b8a290ff222a4843d +0 -0
  64. data/spec/dummy/tmp/cache/assets/D0F/CF0/sprockets%2Fa54d897b366850d6aff2583dcd21141b +0 -0
  65. data/spec/dummy/tmp/cache/assets/D11/650/sprockets%2Fa79c1979284b6712e0a09bdde83c711b +0 -0
  66. data/spec/dummy/tmp/cache/assets/D2A/5E0/sprockets%2F8f9f3295a33983dafe83cbc75895a346 +0 -0
  67. data/spec/dummy/tmp/cache/assets/D2F/830/sprockets%2Fd6b510595130dc04df17a75eae623ee0 +0 -0
  68. data/spec/dummy/tmp/cache/assets/D3A/0E0/sprockets%2F12c0c4243a0757c81af09989ece2d4dc +0 -0
  69. data/spec/dummy/tmp/cache/assets/D3A/B10/sprockets%2Fa6033a4a85f3d8f4f5a68c3215bc64b6 +0 -0
  70. data/spec/dummy/tmp/cache/assets/D44/BB0/sprockets%2F6f8a1b369f3e20121751ff9356bebf8c +0 -0
  71. data/spec/dummy/tmp/cache/assets/D70/B70/sprockets%2Fa1415c8ffaef728e4e786c0e48061ac2 +0 -0
  72. data/spec/dummy/tmp/cache/assets/D94/CA0/sprockets%2Fb36822d80e1aee3257c5cf2f4ddeb043 +0 -0
  73. data/spec/dummy/tmp/cache/assets/DAA/850/sprockets%2F7e2ddb2b088e0c526941fef48af19ff5 +0 -0
  74. data/spec/dummy/tmp/cache/assets/DC3/970/sprockets%2Fd5d2e0cc86cec4e411aa31c549fcb870 +0 -0
  75. data/spec/dummy/tmp/capybara/capybara-201302162255389397158257.html +56 -0
  76. data/spec/dummy/tmp/capybara/capybara-201302162255545698499887.html +56 -0
  77. data/spec/dummy/tmp/capybara/capybara-201302162256212974676040.html +56 -0
  78. data/spec/dummy/tmp/capybara/capybara-201302162256278576954261.html +56 -0
  79. data/spec/dummy/tmp/capybara/capybara-201302200948319507521481.html +26 -0
  80. data/spec/dummy/tmp/capybara/capybara-20130220094839395273181.html +46 -0
  81. data/spec/dummy/tmp/pids/server.pid +1 -0
  82. data/spec/features/config_vars/edit_spec.rb +102 -0
  83. data/spec/features/config_vars/show_spec.rb +39 -0
  84. data/spec/features/env/show_spec.rb +16 -0
  85. data/spec/features/security/requires_admin_spec.rb +9 -0
  86. data/spec/features/security/suggests_ssl_spec.rb +28 -0
  87. data/spec/features/setup/new_app_spec.rb +42 -0
  88. data/spec/helpers/application_helper_spec.rb +15 -0
  89. data/spec/lib/heroku_config_vars_spec.rb +6 -0
  90. data/spec/models/heroku_config_vars/heroku_app_spec.rb +185 -0
  91. data/spec/spec_helper.rb +39 -0
  92. data/spec/support/heroku_responses.rb +35 -0
  93. data/spec/views/heroku_config_vars/application/recommend_https_spec.rb +14 -0
  94. metadata +336 -0
@@ -0,0 +1,42 @@
1
+ require 'spec_helper'
2
+
3
+ feature 'New app' do
4
+
5
+ stub_heroku_responses
6
+
7
+ let(:set_vars) { live_vars }
8
+
9
+ scenario 'Visit root without ENV set' do
10
+ visit root_url(protocol: 'https')
11
+
12
+ expect(current_path).to eq new_heroku_app_path
13
+ end
14
+
15
+ scenario 'Visit new heroku app path' do
16
+ visit new_heroku_app_url(protocol: 'https')
17
+
18
+ expect(page).to have_selector 'h2', text: 'One Time Setup'
19
+ expect(page).to have_field 'App Name'
20
+ expect(page).to have_field 'API Key'
21
+ end
22
+
23
+ scenario 'Submit blank form' do
24
+ visit new_heroku_app_url(protocol: 'https')
25
+ click_button 'Save'
26
+
27
+ expect(page).to have_selector 'li', text: "App name can't be blank"
28
+ expect(page).to have_selector 'li', text: "Api key can't be blank"
29
+ end
30
+
31
+ scenario 'Submit valid form' do
32
+ visit new_heroku_app_url(protocol: 'https')
33
+ fill_in 'App Name', with: valid_app_name
34
+ fill_in 'API Key', with: valid_api_key
35
+ click_button 'Save'
36
+
37
+ expect(page).to have_selector 'h2', text: valid_app_name
38
+ expect(page).to have_text valid_api_key
39
+ expect(current_path).to eq heroku_app_path
40
+ end
41
+
42
+ end
@@ -0,0 +1,15 @@
1
+ require 'spec_helper'
2
+
3
+ module HerokuConfigVars
4
+ describe ApplicationHelper do
5
+
6
+ describe '#menu_link' do
7
+ it 'works' do
8
+ expect(helper.menu_link 'name', '/path').to eq(
9
+ '<a href="/path"><span class="menu-option">name</span></a>'
10
+ )
11
+ end
12
+ end
13
+
14
+ end
15
+ end
@@ -0,0 +1,6 @@
1
+ require 'spec_helper'
2
+
3
+ describe HerokuConfigVars do
4
+ # Sanity test
5
+ it { should be_a_kind_of Module }
6
+ end
@@ -0,0 +1,185 @@
1
+ require 'spec_helper'
2
+
3
+ module HerokuConfigVars
4
+ describe HerokuApp do
5
+
6
+ let(:app_name) { 'valid-app-name' }
7
+ let(:api_key) { 'valid-api-key' }
8
+ let(:auth) { 'Basic ' << Base64::strict_encode64(':' << api_key) }
9
+
10
+ before do
11
+ stub_request(:get, "https://api.heroku.com/apps/#{app_name}/config_vars").
12
+ with(:headers => {'Authorization'=>auth}).
13
+ to_return(:body => <<-RESPONSE
14
+ {
15
+ "DATABASE_URL": "postgres://xxx:xxx@ec2-54-243-229-75.compute-1.amazonaws.com:5432/d26ti1mqt7h24",
16
+ "HEROKU_POSTGRESQL_MAROON_URL": "postgres://xxx:xxx@ec2-54-243-229-75.compute-1.amazonaws.com:5432/d26ti1mqt7h24",
17
+ "HEROKU_APP_NAME": "#{app_name}",
18
+ "HEROKU_API_KEY": "#{api_key}"
19
+ }
20
+ RESPONSE
21
+ )
22
+ end
23
+
24
+ describe '::find' do
25
+ subject { described_class.find }
26
+
27
+ context 'without ENV set' do
28
+ before do
29
+ ENV.delete 'HEROKU_APP_NAME'
30
+ ENV.delete 'HEROKU_API_KEY'
31
+ end
32
+
33
+ it { should be_a_kind_of HerokuApp }
34
+ its(:app_name) { should be_nil }
35
+ its(:api_key) { should be_nil }
36
+
37
+ specify('no request made') do
38
+ expect(a_request :any, "api.heroku.com").not_to have_been_made
39
+ end
40
+ end
41
+
42
+ context 'with valid ENV set' do
43
+ before do
44
+ ENV['HEROKU_APP_NAME'] = app_name
45
+ ENV['HEROKU_API_KEY'] = api_key
46
+ end
47
+
48
+ it { should be_a_kind_of HerokuApp }
49
+ it { should be_loaded }
50
+
51
+ its(:api_key) { should eq api_key }
52
+ its(:app_name) { should eq app_name }
53
+ end
54
+
55
+ end
56
+
57
+ describe '::new' do
58
+ subject { described_class.new args }
59
+
60
+ context 'with no args' do
61
+ let(:args) do
62
+ {}
63
+ end
64
+
65
+ it { should_not be_valid }
66
+ it { should have(1).error_on(:app_name) }
67
+ it { should have(1).error_on(:api_key) }
68
+ it { should_not be_loaded }
69
+ its(:vars) { should be_empty }
70
+ end
71
+
72
+ context 'with valid credentials' do
73
+ let(:args) do
74
+ {
75
+ :api_key => api_key,
76
+ :app_name => app_name,
77
+ }
78
+ end
79
+
80
+ it { should be_valid }
81
+ it { should_not be_loaded }
82
+ its(:vars) { should include 'HEROKU_APP_NAME' }
83
+ its(:vars) { should include 'HEROKU_API_KEY' }
84
+ end
85
+ end
86
+
87
+ describe '#attributes=' do
88
+ subject(:app) { described_class.new }
89
+ before { app.attributes = {:api_key => 'foo'} }
90
+
91
+ its(:api_key) { should eq 'foo' }
92
+ end
93
+
94
+ describe '#load_vars' do
95
+ context 'with non-existent app name'
96
+ context 'with unauthorized app name'
97
+ context 'with invalid api key'
98
+ context 'with no config set'
99
+ context 'with config'
100
+ end
101
+
102
+ describe '#save'
103
+
104
+ context 'with changed `vars`' do
105
+ before do
106
+ stub_request(:get, "https://api.heroku.com/apps/#{app_name}/config_vars").
107
+ with(headers: {'Authorization'=>auth}).
108
+ to_return(headers: {
109
+ 'Content-Type' => 'application/json'
110
+ }, body: <<-RESPONSE
111
+ {
112
+ 'VAR1': 'value 1',
113
+ 'VAR2': 'value 2',
114
+ 'VAR3': 'value 3',
115
+ 'VAR4': 'value 4',
116
+ }
117
+ RESPONSE
118
+ )
119
+ end
120
+
121
+ let(:app) { described_class.new(api_key: api_key, app_name: app_name) { |app| app.load_vars } }
122
+
123
+ before do
124
+ puts app.vars
125
+ app.vars = {
126
+ 'VAR2' => 'value 2',
127
+ 'VAR3' => 'value 33',
128
+ 'VAR4' => 'value 44',
129
+ 'VAR5' => 'value 5'
130
+ }
131
+ end
132
+
133
+ describe '#removed_vars'
134
+ describe '#added_vars'
135
+ describe '#kept_vars'
136
+ describe '#updated_vars'
137
+ describe '#updated_and_added_vars'
138
+ describe '#changes'
139
+ end
140
+
141
+ # context 'with an invalid api_key' do
142
+ # let(:args) do
143
+ # {
144
+ # :api_key => 'xxx',
145
+ # :app_name => app_name,
146
+ # }
147
+ # end
148
+ #
149
+ # it { should_not be_valid }
150
+ # it { should have(1).error_on(:api_key) }
151
+ # end
152
+ #
153
+ # context 'with an invalid app_name' do
154
+ # let(:args) do
155
+ # {
156
+ # :api_key => api_key,
157
+ # :app_name => 'xxx',
158
+ # }
159
+ # end
160
+ #
161
+ # it { should_not be_valid }
162
+ # it { should have(1).error_on(:app_name) }
163
+ # end
164
+ # specify('no request made') do
165
+ # expect(a_request :any, "api.heroku.com").not_to have_been_made
166
+ # end
167
+ #
168
+ # context 'with an invalid ENV' do
169
+ # before do
170
+ # ENV['HEROKU_APP_NAME'] = 'xxx'
171
+ # ENV['HEROKU_API_KEY'] = 'xxx'
172
+ # end
173
+ #
174
+ # it { should be_a_kind_of HerokuApp }
175
+ # it { should be_loaded }
176
+ #
177
+ # its(:vars) { should be_present }
178
+ # its(:api_key) { should eq api_key }
179
+ # its(:app_name) { should eq app_name }
180
+ # its(:errors) { should be_blank }
181
+ # end
182
+
183
+
184
+ end
185
+ end
@@ -0,0 +1,39 @@
1
+ # This file is copied to spec/ when you run 'rails generate rspec:install'
2
+ ENV["RAILS_ENV"] ||= 'test'
3
+
4
+ require File.expand_path("../dummy/config/environment.rb", __FILE__)
5
+ require 'rspec/rails'
6
+ require 'webmock/rspec'
7
+ require 'capybara/rspec'
8
+
9
+ Rails.backtrace_cleaner.remove_silencers!
10
+
11
+ # Requires supporting ruby files with custom matchers and macros, etc,
12
+ # in spec/support/ and its subdirectories.
13
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
14
+
15
+ RSpec.configure do |config|
16
+ # If true, the base class of anonymous controllers will be inferred
17
+ # automatically. This will be the default behavior in future versions of
18
+ # rspec-rails.
19
+ config.infer_base_class_for_anonymous_controllers = false
20
+
21
+ # Run specs in random order to surface order dependencies. If you find an
22
+ # order dependency and want to debug it, you can fix the order by providing
23
+ # the seed, which is printed after each run.
24
+ # --seed 1234
25
+ config.order = "random"
26
+
27
+ config.expect_with :rspec do |c|
28
+ # Disable old-style `should` syntax
29
+ c.syntax = :expect
30
+ end
31
+
32
+ config.include HerokuConfigVars::Engine.routes.url_helpers
33
+ config.extend HerokuResponses::ClassMethods
34
+
35
+ config.after do
36
+ ENV.delete 'HEROKU_APP_NAME'
37
+ ENV.delete 'HEROKU_API_KEY'
38
+ end
39
+ end
@@ -0,0 +1,35 @@
1
+ module HerokuResponses
2
+ module ClassMethods
3
+
4
+ def stub_heroku_responses
5
+ let(:valid_app_name) { 'valid_app_name' }
6
+ let(:valid_api_key) { 'valid_api_key' }
7
+ let(:valid_auth) { 'Basic ' << Base64::strict_encode64(':' << valid_api_key) }
8
+ let(:live_vars) { {"HEROKU_APP_NAME" => valid_app_name, "HEROKU_API_KEY" => valid_api_key } }
9
+ let(:set_vars) { Hash.new }
10
+ let(:delete_var) { '' }
11
+
12
+ before do
13
+ stub_request(:get, "https://api.heroku.com/apps/#{valid_app_name}/config_vars").
14
+ with(headers: { 'Authorization' => valid_auth }).
15
+ to_return(body: live_vars.to_json)
16
+
17
+ stub_request(:put, "https://api.heroku.com/apps/#{valid_app_name}/config_vars").
18
+ with(headers: { 'Authorization' => valid_auth }).
19
+ with(body: set_vars.to_json).
20
+ to_return(:status => 200, :body => "", :headers => {})
21
+
22
+ stub_request(:delete, "https://api.heroku.com/apps/#{valid_app_name}/config_vars/#{delete_var}").
23
+ with(headers: { 'Authorization' => valid_auth }).
24
+ to_return(:status => 200, :body => "", :headers => {})
25
+ end
26
+ end
27
+
28
+ def setup_app
29
+ before do
30
+ ENV['HEROKU_APP_NAME'] = valid_app_name
31
+ ENV['HEROKU_API_KEY'] = valid_api_key
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,14 @@
1
+ # -- can't make this happen
2
+
3
+ #require 'spec_helper'
4
+ #
5
+ #
6
+ #describe 'heroku_config_vars/application/_recommend_https.html.erb' do
7
+ # before { render }
8
+ # before { @routes = HerokuConfigVars::Engine.routes }
9
+ #
10
+ # it 'displays both options' do
11
+ # expect(rendered).to match /Switch to secure connection/
12
+ # expect(rendered).to match /Continue insecurely/
13
+ # end
14
+ #end
metadata ADDED
@@ -0,0 +1,336 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: heroku_config_vars
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: 6
5
+ version: 0.0.2.pre
6
+ platform: ruby
7
+ authors:
8
+ - Daniel Fone
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-02-26 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ version_requirements: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '3.0'
20
+ none: false
21
+ prerelease: false
22
+ name: rails
23
+ requirement: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ~>
26
+ - !ruby/object:Gem::Version
27
+ version: '3.0'
28
+ none: false
29
+ type: :runtime
30
+ - !ruby/object:Gem::Dependency
31
+ version_requirements: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - ~>
34
+ - !ruby/object:Gem::Version
35
+ version: '0.3'
36
+ none: false
37
+ prerelease: false
38
+ name: heroku-api
39
+ requirement: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ~>
42
+ - !ruby/object:Gem::Version
43
+ version: '0.3'
44
+ none: false
45
+ type: :runtime
46
+ - !ruby/object:Gem::Dependency
47
+ version_requirements: !ruby/object:Gem::Requirement
48
+ requirements:
49
+ - - ~>
50
+ - !ruby/object:Gem::Version
51
+ version: 3.2.0
52
+ none: false
53
+ prerelease: false
54
+ name: rails
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - ~>
58
+ - !ruby/object:Gem::Version
59
+ version: 3.2.0
60
+ none: false
61
+ type: :development
62
+ - !ruby/object:Gem::Dependency
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ~>
66
+ - !ruby/object:Gem::Version
67
+ version: 2.12.0
68
+ none: false
69
+ prerelease: false
70
+ name: rspec-rails
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ~>
74
+ - !ruby/object:Gem::Version
75
+ version: 2.12.0
76
+ none: false
77
+ type: :development
78
+ - !ruby/object:Gem::Dependency
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ~>
82
+ - !ruby/object:Gem::Version
83
+ version: 1.9.0
84
+ none: false
85
+ prerelease: false
86
+ name: webmock
87
+ requirement: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - ~>
90
+ - !ruby/object:Gem::Version
91
+ version: 1.9.0
92
+ none: false
93
+ type: :development
94
+ - !ruby/object:Gem::Dependency
95
+ version_requirements: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - ~>
98
+ - !ruby/object:Gem::Version
99
+ version: 2.0.0
100
+ none: false
101
+ prerelease: false
102
+ name: capybara
103
+ requirement: !ruby/object:Gem::Requirement
104
+ requirements:
105
+ - - ~>
106
+ - !ruby/object:Gem::Version
107
+ version: 2.0.0
108
+ none: false
109
+ type: :development
110
+ - !ruby/object:Gem::Dependency
111
+ version_requirements: !ruby/object:Gem::Requirement
112
+ requirements:
113
+ - - ~>
114
+ - !ruby/object:Gem::Version
115
+ version: 2.2.0
116
+ none: false
117
+ prerelease: false
118
+ name: launchy
119
+ requirement: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - ~>
122
+ - !ruby/object:Gem::Version
123
+ version: 2.2.0
124
+ none: false
125
+ type: :development
126
+ - !ruby/object:Gem::Dependency
127
+ version_requirements: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ~>
130
+ - !ruby/object:Gem::Version
131
+ version: 3.2.0
132
+ none: false
133
+ prerelease: false
134
+ name: sass-rails
135
+ requirement: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - ~>
138
+ - !ruby/object:Gem::Version
139
+ version: 3.2.0
140
+ none: false
141
+ type: :development
142
+ description: Engine to manage Heroku configuration variables from within your application
143
+ email:
144
+ - daniel@fone.net.nz
145
+ executables: []
146
+ extensions: []
147
+ extra_rdoc_files: []
148
+ files:
149
+ - app/assets/javascripts/heroku_config_vars/application.js
150
+ - app/assets/javascripts/heroku_config_vars/var_form.js
151
+ - app/assets/stylesheets/heroku_config_vars/application.css
152
+ - app/assets/stylesheets/heroku_config_vars/button.css.scss
153
+ - app/assets/stylesheets/heroku_config_vars/menu.css.scss
154
+ - app/assets/stylesheets/heroku_config_vars/table.css.scss
155
+ - app/controllers/heroku_config_vars/application_controller.rb
156
+ - app/controllers/heroku_config_vars/heroku_apps_controller.rb
157
+ - app/helpers/heroku_config_vars/application_helper.rb
158
+ - app/models/heroku_config_vars/heroku_app.rb
159
+ - app/views/heroku_config_vars/application/env.html.erb
160
+ - app/views/heroku_config_vars/application/recommend_https.html.erb
161
+ - app/views/heroku_config_vars/heroku_apps/_errors.html.erb
162
+ - app/views/heroku_config_vars/heroku_apps/confirmation.html.erb
163
+ - app/views/heroku_config_vars/heroku_apps/edit.html.erb
164
+ - app/views/heroku_config_vars/heroku_apps/new.html.erb
165
+ - app/views/heroku_config_vars/heroku_apps/show.html.erb
166
+ - app/views/layouts/heroku_config_vars/application.html.erb
167
+ - config/routes.rb
168
+ - lib/heroku_config_vars/engine.rb
169
+ - lib/heroku_config_vars/version.rb
170
+ - lib/heroku_config_vars.rb
171
+ - lib/tasks/heroku_config_vars_tasks.rake
172
+ - MIT-LICENSE
173
+ - Rakefile
174
+ - README.md
175
+ - spec/dummy/app/assets/javascripts/application.js
176
+ - spec/dummy/app/assets/stylesheets/application.css
177
+ - spec/dummy/app/controllers/application_controller.rb
178
+ - spec/dummy/app/helpers/application_helper.rb
179
+ - spec/dummy/app/views/layouts/application.html.erb
180
+ - spec/dummy/config/application.rb
181
+ - spec/dummy/config/boot.rb
182
+ - spec/dummy/config/environment.rb
183
+ - spec/dummy/config/environments/development.rb
184
+ - spec/dummy/config/environments/test.rb
185
+ - spec/dummy/config/initializers/backtrace_silencers.rb
186
+ - spec/dummy/config/initializers/inflections.rb
187
+ - spec/dummy/config/initializers/mime_types.rb
188
+ - spec/dummy/config/initializers/secret_token.rb
189
+ - spec/dummy/config/initializers/session_store.rb
190
+ - spec/dummy/config/initializers/wrap_parameters.rb
191
+ - spec/dummy/config/locales/en.yml
192
+ - spec/dummy/config/routes.rb
193
+ - spec/dummy/config.ru
194
+ - spec/dummy/log/test.log
195
+ - spec/dummy/public/404.html
196
+ - spec/dummy/public/422.html
197
+ - spec/dummy/public/500.html
198
+ - spec/dummy/public/favicon.ico
199
+ - spec/dummy/Rakefile
200
+ - spec/dummy/README.rdoc
201
+ - spec/dummy/script/rails
202
+ - spec/dummy/tmp/cache/assets/C20/540/sprockets%2F9f7052464a49612e023f9088fa442053
203
+ - spec/dummy/tmp/cache/assets/C97/2C0/sprockets%2F3945d527e8ea800568e77dd095c67391
204
+ - spec/dummy/tmp/cache/assets/C9B/060/sprockets%2Fa20484759fec963d3f51839934c3848f
205
+ - spec/dummy/tmp/cache/assets/CAC/5E0/sprockets%2F425b0f4900e04b7736af6e64c4f46902
206
+ - spec/dummy/tmp/cache/assets/CBA/440/sprockets%2F8291695bea92c347d6a509dfa2379810
207
+ - spec/dummy/tmp/cache/assets/CBF/C20/sprockets%2Fdd57917c8268e99fe0a17332550ef632
208
+ - spec/dummy/tmp/cache/assets/CD9/8E0/sprockets%2F0681932233ab9af521f58c34cbf091f5
209
+ - spec/dummy/tmp/cache/assets/CF0/D20/sprockets%2F6997e8f2f3f34b07c51d6689d3ec5120
210
+ - spec/dummy/tmp/cache/assets/CFA/C10/sprockets%2Fca5852e7ebc212e12405091c0ca7a449
211
+ - spec/dummy/tmp/cache/assets/D0C/BD0/sprockets%2F7e5673b3d2e6c24b8a290ff222a4843d
212
+ - spec/dummy/tmp/cache/assets/D0F/CF0/sprockets%2Fa54d897b366850d6aff2583dcd21141b
213
+ - spec/dummy/tmp/cache/assets/D11/650/sprockets%2Fa79c1979284b6712e0a09bdde83c711b
214
+ - spec/dummy/tmp/cache/assets/D2A/5E0/sprockets%2F8f9f3295a33983dafe83cbc75895a346
215
+ - spec/dummy/tmp/cache/assets/D2F/830/sprockets%2Fd6b510595130dc04df17a75eae623ee0
216
+ - spec/dummy/tmp/cache/assets/D3A/0E0/sprockets%2F12c0c4243a0757c81af09989ece2d4dc
217
+ - spec/dummy/tmp/cache/assets/D3A/B10/sprockets%2Fa6033a4a85f3d8f4f5a68c3215bc64b6
218
+ - spec/dummy/tmp/cache/assets/D44/BB0/sprockets%2F6f8a1b369f3e20121751ff9356bebf8c
219
+ - spec/dummy/tmp/cache/assets/D70/B70/sprockets%2Fa1415c8ffaef728e4e786c0e48061ac2
220
+ - spec/dummy/tmp/cache/assets/D94/CA0/sprockets%2Fb36822d80e1aee3257c5cf2f4ddeb043
221
+ - spec/dummy/tmp/cache/assets/DAA/850/sprockets%2F7e2ddb2b088e0c526941fef48af19ff5
222
+ - spec/dummy/tmp/cache/assets/DC3/970/sprockets%2Fd5d2e0cc86cec4e411aa31c549fcb870
223
+ - spec/dummy/tmp/capybara/capybara-201302162255389397158257.html
224
+ - spec/dummy/tmp/capybara/capybara-201302162255545698499887.html
225
+ - spec/dummy/tmp/capybara/capybara-201302162256212974676040.html
226
+ - spec/dummy/tmp/capybara/capybara-201302162256278576954261.html
227
+ - spec/dummy/tmp/capybara/capybara-201302200948319507521481.html
228
+ - spec/dummy/tmp/capybara/capybara-20130220094839395273181.html
229
+ - spec/dummy/tmp/pids/server.pid
230
+ - spec/features/config_vars/edit_spec.rb
231
+ - spec/features/config_vars/show_spec.rb
232
+ - spec/features/env/show_spec.rb
233
+ - spec/features/security/requires_admin_spec.rb
234
+ - spec/features/security/suggests_ssl_spec.rb
235
+ - spec/features/setup/new_app_spec.rb
236
+ - spec/helpers/application_helper_spec.rb
237
+ - spec/lib/heroku_config_vars_spec.rb
238
+ - spec/models/heroku_config_vars/heroku_app_spec.rb
239
+ - spec/spec_helper.rb
240
+ - spec/support/heroku_responses.rb
241
+ - spec/views/heroku_config_vars/application/recommend_https_spec.rb
242
+ homepage: https://github.com/danielfone/heroku_config_vars
243
+ licenses: []
244
+ post_install_message:
245
+ rdoc_options: []
246
+ require_paths:
247
+ - lib
248
+ required_ruby_version: !ruby/object:Gem::Requirement
249
+ requirements:
250
+ - - ! '>='
251
+ - !ruby/object:Gem::Version
252
+ version: '0'
253
+ segments:
254
+ - 0
255
+ hash: -1751966687122114319
256
+ none: false
257
+ required_rubygems_version: !ruby/object:Gem::Requirement
258
+ requirements:
259
+ - - ! '>'
260
+ - !ruby/object:Gem::Version
261
+ version: 1.3.1
262
+ none: false
263
+ requirements: []
264
+ rubyforge_project:
265
+ rubygems_version: 1.8.25
266
+ signing_key:
267
+ specification_version: 3
268
+ summary: Engine to manage Heroku configuration variables from within your application
269
+ test_files:
270
+ - spec/dummy/app/assets/javascripts/application.js
271
+ - spec/dummy/app/assets/stylesheets/application.css
272
+ - spec/dummy/app/controllers/application_controller.rb
273
+ - spec/dummy/app/helpers/application_helper.rb
274
+ - spec/dummy/app/views/layouts/application.html.erb
275
+ - spec/dummy/config/application.rb
276
+ - spec/dummy/config/boot.rb
277
+ - spec/dummy/config/environment.rb
278
+ - spec/dummy/config/environments/development.rb
279
+ - spec/dummy/config/environments/test.rb
280
+ - spec/dummy/config/initializers/backtrace_silencers.rb
281
+ - spec/dummy/config/initializers/inflections.rb
282
+ - spec/dummy/config/initializers/mime_types.rb
283
+ - spec/dummy/config/initializers/secret_token.rb
284
+ - spec/dummy/config/initializers/session_store.rb
285
+ - spec/dummy/config/initializers/wrap_parameters.rb
286
+ - spec/dummy/config/locales/en.yml
287
+ - spec/dummy/config/routes.rb
288
+ - spec/dummy/config.ru
289
+ - spec/dummy/log/test.log
290
+ - spec/dummy/public/404.html
291
+ - spec/dummy/public/422.html
292
+ - spec/dummy/public/500.html
293
+ - spec/dummy/public/favicon.ico
294
+ - spec/dummy/Rakefile
295
+ - spec/dummy/README.rdoc
296
+ - spec/dummy/script/rails
297
+ - spec/dummy/tmp/cache/assets/C20/540/sprockets%2F9f7052464a49612e023f9088fa442053
298
+ - spec/dummy/tmp/cache/assets/C97/2C0/sprockets%2F3945d527e8ea800568e77dd095c67391
299
+ - spec/dummy/tmp/cache/assets/C9B/060/sprockets%2Fa20484759fec963d3f51839934c3848f
300
+ - spec/dummy/tmp/cache/assets/CAC/5E0/sprockets%2F425b0f4900e04b7736af6e64c4f46902
301
+ - spec/dummy/tmp/cache/assets/CBA/440/sprockets%2F8291695bea92c347d6a509dfa2379810
302
+ - spec/dummy/tmp/cache/assets/CBF/C20/sprockets%2Fdd57917c8268e99fe0a17332550ef632
303
+ - spec/dummy/tmp/cache/assets/CD9/8E0/sprockets%2F0681932233ab9af521f58c34cbf091f5
304
+ - spec/dummy/tmp/cache/assets/CF0/D20/sprockets%2F6997e8f2f3f34b07c51d6689d3ec5120
305
+ - spec/dummy/tmp/cache/assets/CFA/C10/sprockets%2Fca5852e7ebc212e12405091c0ca7a449
306
+ - spec/dummy/tmp/cache/assets/D0C/BD0/sprockets%2F7e5673b3d2e6c24b8a290ff222a4843d
307
+ - spec/dummy/tmp/cache/assets/D0F/CF0/sprockets%2Fa54d897b366850d6aff2583dcd21141b
308
+ - spec/dummy/tmp/cache/assets/D11/650/sprockets%2Fa79c1979284b6712e0a09bdde83c711b
309
+ - spec/dummy/tmp/cache/assets/D2A/5E0/sprockets%2F8f9f3295a33983dafe83cbc75895a346
310
+ - spec/dummy/tmp/cache/assets/D2F/830/sprockets%2Fd6b510595130dc04df17a75eae623ee0
311
+ - spec/dummy/tmp/cache/assets/D3A/0E0/sprockets%2F12c0c4243a0757c81af09989ece2d4dc
312
+ - spec/dummy/tmp/cache/assets/D3A/B10/sprockets%2Fa6033a4a85f3d8f4f5a68c3215bc64b6
313
+ - spec/dummy/tmp/cache/assets/D44/BB0/sprockets%2F6f8a1b369f3e20121751ff9356bebf8c
314
+ - spec/dummy/tmp/cache/assets/D70/B70/sprockets%2Fa1415c8ffaef728e4e786c0e48061ac2
315
+ - spec/dummy/tmp/cache/assets/D94/CA0/sprockets%2Fb36822d80e1aee3257c5cf2f4ddeb043
316
+ - spec/dummy/tmp/cache/assets/DAA/850/sprockets%2F7e2ddb2b088e0c526941fef48af19ff5
317
+ - spec/dummy/tmp/cache/assets/DC3/970/sprockets%2Fd5d2e0cc86cec4e411aa31c549fcb870
318
+ - spec/dummy/tmp/capybara/capybara-201302162255389397158257.html
319
+ - spec/dummy/tmp/capybara/capybara-201302162255545698499887.html
320
+ - spec/dummy/tmp/capybara/capybara-201302162256212974676040.html
321
+ - spec/dummy/tmp/capybara/capybara-201302162256278576954261.html
322
+ - spec/dummy/tmp/capybara/capybara-201302200948319507521481.html
323
+ - spec/dummy/tmp/capybara/capybara-20130220094839395273181.html
324
+ - spec/dummy/tmp/pids/server.pid
325
+ - spec/features/config_vars/edit_spec.rb
326
+ - spec/features/config_vars/show_spec.rb
327
+ - spec/features/env/show_spec.rb
328
+ - spec/features/security/requires_admin_spec.rb
329
+ - spec/features/security/suggests_ssl_spec.rb
330
+ - spec/features/setup/new_app_spec.rb
331
+ - spec/helpers/application_helper_spec.rb
332
+ - spec/lib/heroku_config_vars_spec.rb
333
+ - spec/models/heroku_config_vars/heroku_app_spec.rb
334
+ - spec/spec_helper.rb
335
+ - spec/support/heroku_responses.rb
336
+ - spec/views/heroku_config_vars/application/recommend_https_spec.rb