Skip to content

Commit f881cd9

Browse files
Allow to use custom filename && directory name to store configs (#341)
* use custom filename * update README && revert version * update README --------- Co-authored-by: Chris LaRose <cjlarose@gmail.com>
1 parent 1f1bc5e commit f881cd9

File tree

7 files changed

+40
-12
lines changed

7 files changed

+40
-12
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -270,6 +270,8 @@ After installing `Config` in Rails, you will find automatically generated file t
270270

271271
* `const_name` - name of the object holing you settings. Default: `'Settings'`
272272
* `evaluate_erb_in_yaml` - evaluate ERB in YAML config files. Set to false if the config file contains ERB that should not be evaluated at load time. Default: `true`
273+
* `file_name` - name of the file to store general keys accessible in all environments. Default: `'settings'` - located at `config/settings.yml`
274+
* `dir_name` - name of the directory to store environment-specific files. Default: `'settings'` - located at `config/settings/`
273275

274276
### Merge customization
275277

lib/config.rb

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ module Config
1919
env_converter: :downcase,
2020
env_parse_values: true,
2121
fail_on_missing: false,
22+
file_name: 'settings',
23+
dir_name: 'settings',
2224
# deep_merge options
2325
knockout_prefix: nil,
2426
merge_nil_values: true,
@@ -58,17 +60,17 @@ def self.load_and_set_settings(*sources)
5860

5961
def self.setting_files(config_root, env)
6062
[
61-
File.join(config_root, 'settings.yml').to_s,
62-
File.join(config_root, 'settings', "#{env}.yml").to_s,
63+
File.join(config_root, "#{Config.file_name}.yml").to_s,
64+
File.join(config_root, Config.dir_name, "#{env}.yml").to_s,
6365
File.join(config_root, 'environments', "#{env}.yml").to_s,
6466
*local_setting_files(config_root, env)
6567
].freeze
6668
end
6769

6870
def self.local_setting_files(config_root, env)
6971
[
70-
(File.join(config_root, 'settings.local.yml').to_s if env != 'test'),
71-
File.join(config_root, 'settings', "#{env}.local.yml").to_s,
72+
(File.join(config_root, "#{Config.file_name}.local.yml").to_s if env != 'test'),
73+
File.join(config_root, Config.dir_name, "#{env}.local.yml").to_s,
7274
File.join(config_root, 'environments', "#{env}.local.yml").to_s
7375
].compact
7476
end

lib/config/integrations/heroku.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ def invoke
1414
def vars
1515
# Load only local options to Heroku
1616
Config.load_and_set_settings(
17-
Rails.root.join("config", "settings.local.yml").to_s,
18-
Rails.root.join("config", "settings", "#{environment}.local.yml").to_s,
17+
Rails.root.join("config", "#{Config.file_name}.local.yml").to_s,
18+
Rails.root.join("config", Config.dir_name, "#{environment}.local.yml").to_s,
1919
Rails.root.join("config", "environments", "#{environment}.local.yml").to_s
2020
)
2121

lib/generators/config/install_generator.rb

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,18 +12,18 @@ def copy_initializer
1212
end
1313

1414
def copy_settings
15-
template "settings.yml", "config/settings.yml"
16-
template "settings.local.yml", "config/settings.local.yml"
17-
directory "settings", "config/settings"
15+
template "settings.yml", "config/#{Config.file_name}.yml"
16+
template "settings.local.yml", "config/#{Config.file_name}.local.yml"
17+
directory "settings", "config/#{Config.dir_name}"
1818
end
1919

2020
def modify_gitignore
2121
create_file '.gitignore' unless File.exist? '.gitignore'
2222

2323
append_to_file '.gitignore' do
24-
"\n" +
25-
"config/settings.local.yml\n" +
26-
"config/settings/*.local.yml\n" +
24+
"\n" +
25+
"config/#{Config.file_name}.local.yml\n" +
26+
"config/#{Config.dir_name}/*.local.yml\n" +
2727
"config/environments/*.local.yml\n"
2828
end
2929
end

lib/generators/config/templates/config.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,4 +55,9 @@
5555
# Evaluate ERB in YAML config files at load time.
5656
#
5757
# config.evaluate_erb_in_yaml = true
58+
59+
# Name of directory and file to store config keys
60+
#
61+
# config.file_name = 'settings'
62+
# config.dir_name = 'settings'
5863
end

spec/config_spec.rb

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,23 @@
206206

207207
expect(Config.const_name).to eq("Settings2")
208208
end
209+
210+
context "filename and directory" do
211+
it "should allow to use custom names" do
212+
Config.setup do |config|
213+
config.file_name = "custom_file"
214+
config.dir_name = "custom_dir"
215+
end
216+
217+
expect(Config.file_name).to eq("custom_file")
218+
expect(Config.dir_name).to eq("custom_dir")
219+
end
220+
221+
it "should have default values" do
222+
expect(Config.file_name).to eq("settings")
223+
expect(Config.dir_name).to eq("settings")
224+
end
225+
end
209226
end
210227

211228
context "Settings with a type value of 'hash'" do

spec/spec_helper.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,8 @@ def self.reset
7878
self.schema = nil
7979
self.validation_contract = nil
8080
self.fail_on_missing = false
81+
self.file_name = 'settings'
82+
self.dir_name = 'settings'
8183
instance_variable_set(:@_ran_once, false)
8284
end
8385
end

0 commit comments

Comments
 (0)