Skip to content

Commit

Permalink
fix: fix rails 7.1 support
Browse files Browse the repository at this point in the history
utilize ActiveSupport::EncryptedConfiguration config method
  • Loading branch information
noxasch committed Mar 16, 2024
1 parent e508d90 commit ef7ccc8
Show file tree
Hide file tree
Showing 9 changed files with 43 additions and 22 deletions.
1 change: 1 addition & 0 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ jobs:
env:
COVERAGE_RUBY_VERSION: 2.6
BUNDLE_PATH: vendor/bundle
RAILS_MASTER_KEY: 0e29551e5c31acf7c769d64397af54e4 # rails 7.1 use master key to decrypt creds
strategy:
fail-fast: false
matrix:
Expand Down
8 changes: 6 additions & 2 deletions lib/config.rb
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,8 @@ module Config
merge_hash_arrays: false,
validation_contract: nil,
evaluate_erb_in_yaml: true,
use_rails_credentials: false,
environment: nil
use_rails_credentials: false
)

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

if defined?(::Rails::Railtie) && Config.use_rails_credentials
config.add_source!(Rails.application.credentials.to_h.deep_stringify_keys)
if Rails.version < '7.1'
config.add_source!(Sources::HashSource.new(secret: Rails.application.secrets.to_h.deep_stringify_keys))
else
config.add_source!(Sources::HashSource.new(secret: Rails.application.credentials.config))
end
end

config.load!
Expand Down
1 change: 1 addition & 0 deletions spec/app/rails_5.2/config/credentials/test.yml.enc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
qU0cAsjfKz4lnoJPU36JuM7Yh3qm6B2YV7LhqJROKCu4AsOW0AfFY9FM+aTeRsZOIdIBHyyargCI1xmq3N5o4rdVZRXxWIt2PD93xZPlcMrlAb645m8hyni1cW4=--dPokgPsIyoKhzMzD--nb/fnuH1FaTNT5iF8J3TfQ==
1 change: 1 addition & 0 deletions spec/app/rails_6.0/config/credentials/test.yml.enc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
qU0cAsjfKz4lnoJPU36JuM7Yh3qm6B2YV7LhqJROKCu4AsOW0AfFY9FM+aTeRsZOIdIBHyyargCI1xmq3N5o4rdVZRXxWIt2PD93xZPlcMrlAb645m8hyni1cW4=--dPokgPsIyoKhzMzD--nb/fnuH1FaTNT5iF8J3TfQ==
1 change: 1 addition & 0 deletions spec/app/rails_6.1/config/credentials/test.yml.enc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
qU0cAsjfKz4lnoJPU36JuM7Yh3qm6B2YV7LhqJROKCu4AsOW0AfFY9FM+aTeRsZOIdIBHyyargCI1xmq3N5o4rdVZRXxWIt2PD93xZPlcMrlAb645m8hyni1cW4=--dPokgPsIyoKhzMzD--nb/fnuH1FaTNT5iF8J3TfQ==
1 change: 1 addition & 0 deletions spec/app/rails_7.0/config/credentials/test.yml.enc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
qU0cAsjfKz4lnoJPU36JuM7Yh3qm6B2YV7LhqJROKCu4AsOW0AfFY9FM+aTeRsZOIdIBHyyargCI1xmq3N5o4rdVZRXxWIt2PD93xZPlcMrlAb645m8hyni1cW4=--dPokgPsIyoKhzMzD--nb/fnuH1FaTNT5iF8J3TfQ==
1 change: 1 addition & 0 deletions spec/app/rails_7.1/config/credentials/test.yml.enc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
qU0cAsjfKz4lnoJPU36JuM7Yh3qm6B2YV7LhqJROKCu4AsOW0AfFY9FM+aTeRsZOIdIBHyyargCI1xmq3N5o4rdVZRXxWIt2PD93xZPlcMrlAb645m8hyni1cW4=--dPokgPsIyoKhzMzD--nb/fnuH1FaTNT5iF8J3TfQ==
32 changes: 21 additions & 11 deletions spec/config_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -482,31 +482,41 @@
end

context 'rails crendentials' do
let(:config) do
Config.use_rails_credentials = true
end

if defined?(::Rails)
it 'shoud have secret_key_base loaded' do
expect(Settings.to_h.keys.include?('secret_key_base')).to eq(true)
let(:config) do
files = ["#{fixture_path}/development.yml"]
Config.use_rails_credentials = true
Config.load_files(files)
end

it "shoud have secret_key_base loaded" do
expect(config.keys).to contain_exactly(:size, :section, :secret)
expect(config.secret.secret_key_base).to_not eq(nil)
end


context 'use_rails_credentials is false' do
let(:config) do
files = ["#{fixture_path}/development.yml"]
Config.use_rails_credentials = false
Config.load_files(files)
end

it 'shoud have secret_key_base loaded' do
expect(Settings.to_h.keys.include?('secret_key_base')).to eq(false)
it "shoud not have secret_key_base loaded" do
expect(config.keys).to contain_exactly(:size, :section)
end
end
end

unless defined?(::Rails)
context 'when not using rails' do
it 'shoud have secret_key_base loaded' do
expect(Settings.to_h.keys.include?('secret_key_base')).to eq(false)
let(:config) do
files = ["#{fixture_path}/development.yml"]
Config.use_rails_credentials = true
Config.load_files(files)
end

it 'shoud not have secret_key_base loaded' do
expect(config.keys).to contain_exactly(:size, :section)
end
end
end
Expand Down
19 changes: 10 additions & 9 deletions spec/spec_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -78,15 +78,16 @@ def fixture_path

# Extend Config module with ability to reset configuration to the default values
def self.reset
self.const_name = 'Settings'
self.use_env = false
self.knockout_prefix = nil
self.overwrite_arrays = true
self.schema = nil
self.validation_contract = nil
self.fail_on_missing = false
self.file_name = 'settings'
self.dir_name = 'settings'
self.const_name = 'Settings'
self.use_env = false
self.knockout_prefix = nil
self.overwrite_arrays = true
self.schema = nil
self.validation_contract = nil
self.fail_on_missing = false
self.use_rails_credentials = false
self.file_name = 'settings'
self.dir_name = 'settings'
instance_variable_set(:@_ran_once, false)
end
end
Expand Down

0 comments on commit ef7ccc8

Please sign in to comment.