Skip to content

Commit bc0bac0

Browse files
committed
Implement app_config_for helper
1 parent 7761f2e commit bc0bac0

File tree

6 files changed

+60
-8
lines changed

6 files changed

+60
-8
lines changed

README.md

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,8 @@ TODO.
3939

4040
### `Rails.app_env`
4141

42-
`Rails.app_env` is like `Rails.env` but it is set by the `APP_ENV` environment variable (`ENV["APP_ENV"]`).
42+
`Rails.app_env` is like [`Rails.env`](https://api.rubyonrails.org/classes/Rails.html#method-c-env) but it is set by the
43+
`APP_ENV` environment variable (`ENV["APP_ENV"]`).
4344

4445
It is optimization for `staging` and `review` ([the two extra Heroku pipeline stages](https://devcenter.heroku.com/articles/pipelines)),
4546
so it doesn't need to rely on the slower delegation through `method_missing` that `ActiveSupport::EnvironmentInquirer`
@@ -59,6 +60,17 @@ Rails.env.production? # => true
5960

6061
In case `ENV["APP_ENV"]` is blank, `Rails.app_env` falls back to `Rails.env`.
6162

63+
### `Rails.application.app_config_for`
64+
65+
`Rails.application.app_config_for` wraps[`Rails.application.config_for`](https://api.rubyonrails.org/classes/Rails/Application.html#method-i-config_for)
66+
with `{env: Rails.app_env}` as the second argument.
67+
68+
```ruby
69+
# These two lines are equivalent.
70+
Rails.application.app_config_for(:foo)
71+
Rails.application.config_for(:foo, env: Rails.app_env)
72+
```
73+
6274
### Credentials
6375

6476
`Rails APP_ENV` overrides the default Rails credentials `content_path` and `key_path` according to `Rails.app_env`.

lib/rails/app_env.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
require_relative "app_env/version"
22
require_relative "app_env/environment_inquirer"
3-
require_relative "app_env/helpers"
3+
require_relative "app_env/rails_helpers"
4+
require_relative "app_env/application_helpers"
45
require_relative "app_env/credentials"
56
require_relative "app_env/railtie"
67

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
module Rails
2+
module AppEnv
3+
module ApplicationHelpers
4+
def app_config_for(name)
5+
config_for(name, env: Rails.app_env)
6+
end
7+
end
8+
end
9+
end

lib/rails/app_env/helpers.rb renamed to lib/rails/app_env/rails_helpers.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
module Rails
22
module AppEnv
3-
module Helpers
3+
module RailsHelpers
44
def app_env
55
@_app_env ||= EnvironmentInquirer.new(ENV["APP_ENV"] || Rails.env)
66
end

lib/rails/app_env/railtie.rb

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,27 @@
11
module Rails
22
module AppEnv
33
class Railtie < Rails::Railtie
4-
initializer :load_helpers, before: :initialize_logger do
5-
Rails.extend(Helpers)
4+
config.before_configuration do
5+
Rails.extend(RailsHelpers)
6+
Rails.application.extend(ApplicationHelpers)
67
end
78

8-
initializer :set_credentials, before: :initialize_logger do
9+
config.before_configuration do
10+
# TODO: Allow opt-out.
911
Rails::AppEnv::Credentials.initialize!
1012
end
1113

1214
config.after_initialize do
13-
Rails::Info.property "Application environment", Rails.app_env
15+
Rails::Info.property "Application environment" do
16+
Rails.app_env
17+
end
1418
end
1519

1620
console do |app|
21+
# TODO: Allow opt-out.
1722
require_relative "console"
18-
1923
app.config.console = Rails::AppEnv::Console.new(app)
24+
2025
puts "Loading #{Rails.app_env} application environment (rails-app_env #{Rails::AppEnv::VERSION})" # standard:disable Rails/Output
2126
end
2227
end
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
require "minitest/mock"
2+
require_relative "../test_helper"
3+
require_relative "env_helpers"
4+
5+
module Rails::AppEnv::FeaturesTest
6+
class AppConfigForTest < ActiveSupport::TestCase
7+
include EnvHelpers
8+
9+
test "Rails.application.app_config_for delegates to Rails.application.config_for" do
10+
app_env = "foo"
11+
expected = Object.new
12+
13+
mock = Minitest::Mock.new
14+
mock.expect(:call, expected, [:bar], env: app_env)
15+
16+
with_app_env(app_env) do
17+
Rails.application.stub(:config_for, mock) do
18+
assert_same expected, Rails.application.app_config_for(:bar)
19+
end
20+
end
21+
22+
mock.verify
23+
end
24+
end
25+
end

0 commit comments

Comments
 (0)