Skip to content

Commit ef7ccc8

Browse files
committed
fix: fix rails 7.1 support
utilize ActiveSupport::EncryptedConfiguration config method
1 parent e508d90 commit ef7ccc8

File tree

9 files changed

+43
-22
lines changed

9 files changed

+43
-22
lines changed

.github/workflows/tests.yml

+1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ jobs:
1313
env:
1414
COVERAGE_RUBY_VERSION: 2.6
1515
BUNDLE_PATH: vendor/bundle
16+
RAILS_MASTER_KEY: 0e29551e5c31acf7c769d64397af54e4 # rails 7.1 use master key to decrypt creds
1617
strategy:
1718
fail-fast: false
1819
matrix:

lib/config.rb

+6-2
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ module Config
2828
merge_hash_arrays: false,
2929
validation_contract: nil,
3030
evaluate_erb_in_yaml: true,
31+
use_rails_credentials: false,
3132
environment: nil
32-
use_rails_credentials: false
3333
)
3434

3535
def self.setup
@@ -50,7 +50,11 @@ def self.load_files(*sources)
5050
config.add_source!(Sources::EnvSource.new(ENV)) if Config.use_env
5151

5252
if defined?(::Rails::Railtie) && Config.use_rails_credentials
53-
config.add_source!(Rails.application.credentials.to_h.deep_stringify_keys)
53+
if Rails.version < '7.1'
54+
config.add_source!(Sources::HashSource.new(secret: Rails.application.secrets.to_h.deep_stringify_keys))
55+
else
56+
config.add_source!(Sources::HashSource.new(secret: Rails.application.credentials.config))
57+
end
5458
end
5559

5660
config.load!
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
qU0cAsjfKz4lnoJPU36JuM7Yh3qm6B2YV7LhqJROKCu4AsOW0AfFY9FM+aTeRsZOIdIBHyyargCI1xmq3N5o4rdVZRXxWIt2PD93xZPlcMrlAb645m8hyni1cW4=--dPokgPsIyoKhzMzD--nb/fnuH1FaTNT5iF8J3TfQ==
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
qU0cAsjfKz4lnoJPU36JuM7Yh3qm6B2YV7LhqJROKCu4AsOW0AfFY9FM+aTeRsZOIdIBHyyargCI1xmq3N5o4rdVZRXxWIt2PD93xZPlcMrlAb645m8hyni1cW4=--dPokgPsIyoKhzMzD--nb/fnuH1FaTNT5iF8J3TfQ==
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
qU0cAsjfKz4lnoJPU36JuM7Yh3qm6B2YV7LhqJROKCu4AsOW0AfFY9FM+aTeRsZOIdIBHyyargCI1xmq3N5o4rdVZRXxWIt2PD93xZPlcMrlAb645m8hyni1cW4=--dPokgPsIyoKhzMzD--nb/fnuH1FaTNT5iF8J3TfQ==
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
qU0cAsjfKz4lnoJPU36JuM7Yh3qm6B2YV7LhqJROKCu4AsOW0AfFY9FM+aTeRsZOIdIBHyyargCI1xmq3N5o4rdVZRXxWIt2PD93xZPlcMrlAb645m8hyni1cW4=--dPokgPsIyoKhzMzD--nb/fnuH1FaTNT5iF8J3TfQ==
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
qU0cAsjfKz4lnoJPU36JuM7Yh3qm6B2YV7LhqJROKCu4AsOW0AfFY9FM+aTeRsZOIdIBHyyargCI1xmq3N5o4rdVZRXxWIt2PD93xZPlcMrlAb645m8hyni1cW4=--dPokgPsIyoKhzMzD--nb/fnuH1FaTNT5iF8J3TfQ==

spec/config_spec.rb

+21-11
Original file line numberDiff line numberDiff line change
@@ -482,31 +482,41 @@
482482
end
483483

484484
context 'rails crendentials' do
485-
let(:config) do
486-
Config.use_rails_credentials = true
487-
end
488-
489485
if defined?(::Rails)
490-
it 'shoud have secret_key_base loaded' do
491-
expect(Settings.to_h.keys.include?('secret_key_base')).to eq(true)
486+
let(:config) do
487+
files = ["#{fixture_path}/development.yml"]
488+
Config.use_rails_credentials = true
489+
Config.load_files(files)
490+
end
491+
492+
it "shoud have secret_key_base loaded" do
493+
expect(config.keys).to contain_exactly(:size, :section, :secret)
494+
expect(config.secret.secret_key_base).to_not eq(nil)
492495
end
493-
494496

495497
context 'use_rails_credentials is false' do
496498
let(:config) do
499+
files = ["#{fixture_path}/development.yml"]
497500
Config.use_rails_credentials = false
501+
Config.load_files(files)
498502
end
499503

500-
it 'shoud have secret_key_base loaded' do
501-
expect(Settings.to_h.keys.include?('secret_key_base')).to eq(false)
504+
it "shoud not have secret_key_base loaded" do
505+
expect(config.keys).to contain_exactly(:size, :section)
502506
end
503507
end
504508
end
505509

506510
unless defined?(::Rails)
507511
context 'when not using rails' do
508-
it 'shoud have secret_key_base loaded' do
509-
expect(Settings.to_h.keys.include?('secret_key_base')).to eq(false)
512+
let(:config) do
513+
files = ["#{fixture_path}/development.yml"]
514+
Config.use_rails_credentials = true
515+
Config.load_files(files)
516+
end
517+
518+
it 'shoud not have secret_key_base loaded' do
519+
expect(config.keys).to contain_exactly(:size, :section)
510520
end
511521
end
512522
end

spec/spec_helper.rb

+10-9
Original file line numberDiff line numberDiff line change
@@ -78,15 +78,16 @@ def fixture_path
7878

7979
# Extend Config module with ability to reset configuration to the default values
8080
def self.reset
81-
self.const_name = 'Settings'
82-
self.use_env = false
83-
self.knockout_prefix = nil
84-
self.overwrite_arrays = true
85-
self.schema = nil
86-
self.validation_contract = nil
87-
self.fail_on_missing = false
88-
self.file_name = 'settings'
89-
self.dir_name = 'settings'
81+
self.const_name = 'Settings'
82+
self.use_env = false
83+
self.knockout_prefix = nil
84+
self.overwrite_arrays = true
85+
self.schema = nil
86+
self.validation_contract = nil
87+
self.fail_on_missing = false
88+
self.use_rails_credentials = false
89+
self.file_name = 'settings'
90+
self.dir_name = 'settings'
9091
instance_variable_set(:@_ran_once, false)
9192
end
9293
end

0 commit comments

Comments
 (0)