chamber 2.8.0 → 2.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (79) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +1 -0
  4. data/LICENSE.txt +19 -0
  5. data/Rakefile +1 -0
  6. data/bin/chamber +1 -0
  7. data/lib/chamber.rb +1 -0
  8. data/lib/chamber/binary/heroku.rb +1 -0
  9. data/lib/chamber/binary/runner.rb +1 -0
  10. data/lib/chamber/binary/travis.rb +1 -0
  11. data/lib/chamber/commands/base.rb +1 -0
  12. data/lib/chamber/commands/comparable.rb +1 -0
  13. data/lib/chamber/commands/compare.rb +1 -0
  14. data/lib/chamber/commands/files.rb +1 -0
  15. data/lib/chamber/commands/heroku.rb +1 -0
  16. data/lib/chamber/commands/heroku/clear.rb +1 -0
  17. data/lib/chamber/commands/heroku/compare.rb +1 -0
  18. data/lib/chamber/commands/heroku/pull.rb +1 -0
  19. data/lib/chamber/commands/heroku/push.rb +1 -0
  20. data/lib/chamber/commands/initialize.rb +5 -3
  21. data/lib/chamber/commands/securable.rb +1 -0
  22. data/lib/chamber/commands/secure.rb +1 -0
  23. data/lib/chamber/commands/show.rb +1 -0
  24. data/lib/chamber/commands/travis.rb +1 -0
  25. data/lib/chamber/commands/travis/secure.rb +1 -0
  26. data/lib/chamber/configuration.rb +1 -0
  27. data/lib/chamber/context_resolver.rb +10 -7
  28. data/lib/chamber/decryption_key.rb +1 -0
  29. data/lib/chamber/encryption_methods/none.rb +17 -0
  30. data/lib/chamber/encryption_methods/public_key.rb +27 -0
  31. data/lib/chamber/encryption_methods/ssl.rb +60 -0
  32. data/lib/chamber/environmentable.rb +1 -0
  33. data/lib/chamber/errors/decryption_failure.rb +1 -0
  34. data/lib/chamber/file.rb +9 -1
  35. data/lib/chamber/file_set.rb +4 -3
  36. data/lib/chamber/filters/boolean_conversion_filter.rb +2 -1
  37. data/lib/chamber/filters/decryption_filter.rb +20 -29
  38. data/lib/chamber/filters/encryption_filter.rb +29 -14
  39. data/lib/chamber/filters/environment_filter.rb +2 -1
  40. data/lib/chamber/filters/failed_decryption_filter.rb +3 -2
  41. data/lib/chamber/filters/insecure_filter.rb +1 -0
  42. data/lib/chamber/filters/namespace_filter.rb +2 -1
  43. data/lib/chamber/filters/secure_filter.rb +2 -1
  44. data/lib/chamber/filters/translate_secure_keys_filter.rb +2 -1
  45. data/lib/chamber/instance.rb +1 -0
  46. data/lib/chamber/namespace_set.rb +4 -3
  47. data/lib/chamber/rails.rb +1 -0
  48. data/lib/chamber/rails/railtie.rb +3 -1
  49. data/lib/chamber/rubinius_fix.rb +1 -0
  50. data/lib/chamber/settings.rb +23 -18
  51. data/lib/chamber/version.rb +2 -1
  52. data/spec/lib/chamber/commands/files_spec.rb +5 -2
  53. data/spec/lib/chamber/commands/heroku/clear_spec.rb +1 -0
  54. data/spec/lib/chamber/commands/heroku/compare_spec.rb +1 -0
  55. data/spec/lib/chamber/commands/heroku/pull_spec.rb +1 -0
  56. data/spec/lib/chamber/commands/heroku/push_spec.rb +1 -0
  57. data/spec/lib/chamber/commands/secure_spec.rb +5 -2
  58. data/spec/lib/chamber/commands/show_spec.rb +1 -0
  59. data/spec/lib/chamber/context_resolver_spec.rb +8 -5
  60. data/spec/lib/chamber/file_set_spec.rb +55 -52
  61. data/spec/lib/chamber/file_spec.rb +43 -9
  62. data/spec/lib/chamber/filters/boolean_conversion_filter_spec.rb +14 -5
  63. data/spec/lib/chamber/filters/decryption_filter_spec.rb +85 -9
  64. data/spec/lib/chamber/filters/encryption_filter_spec.rb +76 -10
  65. data/spec/lib/chamber/filters/environment_filter_spec.rb +9 -2
  66. data/spec/lib/chamber/filters/failed_decryption_filter_spec.rb +7 -6
  67. data/spec/lib/chamber/filters/insecure_filter_spec.rb +12 -4
  68. data/spec/lib/chamber/filters/namespace_filter_spec.rb +33 -14
  69. data/spec/lib/chamber/filters/secure_filter_spec.rb +8 -3
  70. data/spec/lib/chamber/filters/translate_secure_keys_filter_spec.rb +10 -3
  71. data/spec/lib/chamber/namespace_set_spec.rb +6 -3
  72. data/spec/lib/chamber/settings_spec.rb +36 -25
  73. data/spec/lib/chamber_spec.rb +25 -10
  74. data/spec/rails-2-test/config/application.rb +1 -0
  75. data/spec/rails-3-test/config/application.rb +1 -0
  76. data/spec/rails-4-test/config/application.rb +1 -0
  77. metadata +35 -9
  78. metadata.gz.sig +0 -0
  79. data/LICENSE +0 -22
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'rspectacular'
2
3
  require 'chamber/filters/failed_decryption_filter'
3
4
 
@@ -5,7 +6,7 @@ module Chamber
5
6
  module Filters
6
7
  describe FailedDecryptionFilter do
7
8
  it 'raises an exception if any of the settings are not decrypted' do
8
- expect do
9
+ expect {
9
10
  FailedDecryptionFilter.execute(
10
11
  data: {
11
12
  _secure_my_secure_setting: 'cJbFe0NI5wknmsp2fVgpC/YeBD2pvcdVD+p0pUdnMoYThaV4m' \
@@ -17,12 +18,12 @@ describe FailedDecryptionFilter do
17
18
  'TcdgbE9NcAhNr1+WfNxMnz84XzmUp2Y0H1jPgGkBKQJKArfQ==',
18
19
  },
19
20
  )
20
- end.
21
+ }.
21
22
  to raise_error Chamber::Errors::DecryptionFailure
22
23
  end
23
24
 
24
25
  it 'does not raise an exception if it is not a secure key' do
25
- expect do
26
+ expect {
26
27
  FailedDecryptionFilter.execute(
27
28
  data: {
28
29
  my_secure_setting: 'cJbFe0NI5wknmsp2fVgpC/YeBD2pvcdVD+p0pUdnMoYThaV4m' \
@@ -34,18 +35,18 @@ describe FailedDecryptionFilter do
34
35
  'TcdgbE9NcAhNr1+WfNxMnz84XzmUp2Y0H1jPgGkBKQJKArfQ==',
35
36
  },
36
37
  )
37
- end.
38
+ }.
38
39
  not_to raise_error
39
40
  end
40
41
 
41
42
  it 'does not raise an exception if it is not a secure value' do
42
- expect do
43
+ expect {
43
44
  FailedDecryptionFilter.execute(
44
45
  data: {
45
46
  _secure_my_secure_setting: 'hello',
46
47
  },
47
48
  )
48
- end.
49
+ }.
49
50
  not_to raise_error
50
51
  end
51
52
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'rspectacular'
2
3
  require 'chamber/filters/insecure_filter'
3
4
 
@@ -6,14 +7,16 @@ module Filters
6
7
  describe InsecureFilter do
7
8
  it 'will return values which are marked as "secure" if they are unencrypted' do
8
9
  filtered_settings = InsecureFilter.execute(data: {
9
- _secure_my_secure_setting: 'hello' })
10
+ _secure_my_secure_setting: 'hello',
11
+ })
10
12
 
11
13
  expect(filtered_settings._secure_my_secure_setting).to match 'hello'
12
14
  end
13
15
 
14
16
  it 'will not return values which are not marked as "secure"' do
15
17
  filtered_settings = InsecureFilter.execute(data: {
16
- my_secure_setting: 'hello' })
18
+ my_secure_setting: 'hello',
19
+ })
17
20
 
18
21
  expect(filtered_settings.my_secure_setting).to be_nil
19
22
  end
@@ -24,7 +27,9 @@ describe InsecureFilter do
24
27
  secure_setting: 'goodbye',
25
28
  secure_group: {
26
29
  _secure_nested_setting: 'movie',
27
- insecure_nested_setting: 'dinner' } })
30
+ insecure_nested_setting: 'dinner',
31
+ },
32
+ })
28
33
 
29
34
  expect(filtered_settings._secure_setting).to eql 'hello'
30
35
  expect(filtered_settings.secure_setting).to be_nil
@@ -60,7 +65,10 @@ describe InsecureFilter do
60
65
  'gfXc86wdgUKc8aaoX8OQA1kKTcdgbE9NcAhNr1+WfNxMn' \
61
66
  'z84XzmUp2Y0H1jPgGkBKQJKArfQ==',
62
67
  _secure_other_nested_setting: 'goodbye',
63
- insecure_nested_setting: 'dinner' } })
68
+ insecure_nested_setting: 'dinner',
69
+ },
70
+ },
71
+ )
64
72
 
65
73
  expect(filtered_settings._secure_setting?).to eql false
66
74
  expect(filtered_settings.secure_setting?).to eql false
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'rspectacular'
2
3
  require 'chamber/filters/namespace_filter'
3
4
  require 'chamber/namespace_set'
@@ -9,10 +10,14 @@ describe NamespaceFilter do
9
10
  filtered_settings = NamespaceFilter.execute(
10
11
  data: {
11
12
  namespace_value: {
12
- namespace_setting: 'value 1' },
13
+ namespace_setting: 'value 1',
14
+ },
13
15
  other_namespace_value: {
14
- other_namespace_setting: 'value 2' } },
15
- namespaces: %w{namespace_value other_namespace_value})
16
+ other_namespace_setting: 'value 2',
17
+ },
18
+ },
19
+ namespaces: %w{namespace_value other_namespace_value},
20
+ )
16
21
 
17
22
  expect(filtered_settings.namespace_setting).to eql 'value 1'
18
23
  expect(filtered_settings.other_namespace_setting).to eql 'value 2'
@@ -22,11 +27,16 @@ describe NamespaceFilter do
22
27
  filtered_settings = NamespaceFilter.execute(
23
28
  data: {
24
29
  namespace_value: {
25
- namespace_setting: 'value 1' },
30
+ namespace_setting: 'value 1',
31
+ },
26
32
  non_namespaced_value: {
27
- non_namespaced_setting: 'value 2' } },
33
+ non_namespaced_setting: 'value 2',
34
+ },
35
+ },
28
36
  namespaces: [
29
- 'namespace_value'])
37
+ 'namespace_value',
38
+ ],
39
+ )
30
40
 
31
41
  expect(filtered_settings.namespace_setting).to eql 'value 1'
32
42
  expect(filtered_settings.non_namespaced_setting).to be_nil
@@ -36,8 +46,11 @@ describe NamespaceFilter do
36
46
  filtered_settings = NamespaceFilter.execute(
37
47
  data: {
38
48
  namespace_value: {
39
- namespace_setting: 'value 1' } },
40
- namespaces: %w{namespace_value other_namespace_value})
49
+ namespace_setting: 'value 1',
50
+ },
51
+ },
52
+ namespaces: %w{namespace_value other_namespace_value},
53
+ )
41
54
 
42
55
  expect(filtered_settings.namespace_setting).to eql 'value 1'
43
56
  end
@@ -45,8 +58,10 @@ describe NamespaceFilter do
45
58
  it 'does not filter data if it does not include any namespaces' do
46
59
  filtered_settings = NamespaceFilter.execute(
47
60
  data: {
48
- non_namespaced_setting: 'value 1' },
49
- namespaces: [])
61
+ non_namespaced_setting: 'value 1',
62
+ },
63
+ namespaces: [],
64
+ )
50
65
 
51
66
  expect(filtered_settings.non_namespaced_setting).to eql 'value 1'
52
67
  end
@@ -56,12 +71,16 @@ describe NamespaceFilter do
56
71
  data: {
57
72
  namespace_value: {
58
73
  namespace_setting: 'value 1',
59
- another_namespace_setting: 'value 2' },
74
+ another_namespace_setting: 'value 2',
75
+ },
60
76
  other_namespace_value: {
61
77
  namespace_setting_1: 'value 1',
62
- another_namespace_setting_2: 'value 2' },
63
- non_namespaced_value: 'value 3' },
64
- namespaces: NamespaceSet.new(%w{namespace_value other_namespace_value}))
78
+ another_namespace_setting_2: 'value 2',
79
+ },
80
+ non_namespaced_value: 'value 3',
81
+ },
82
+ namespaces: NamespaceSet.new(%w{namespace_value other_namespace_value}),
83
+ )
65
84
 
66
85
  expect(filtered_settings.to_hash).to eql('namespace_setting' => 'value 1',
67
86
  'another_namespace_setting' => 'value 2',
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'rspectacular'
2
3
  require 'chamber/filters/secure_filter'
3
4
 
@@ -6,14 +7,16 @@ module Filters
6
7
  describe SecureFilter do
7
8
  it 'will return values which are marked as "secure"' do
8
9
  filtered_settings = SecureFilter.execute(data: {
9
- _secure_my_secure_setting: 'hello' })
10
+ _secure_my_secure_setting: 'hello',
11
+ })
10
12
 
11
13
  expect(filtered_settings._secure_my_secure_setting).to match 'hello'
12
14
  end
13
15
 
14
16
  it 'will not return values which are not marked as "secure"' do
15
17
  filtered_settings = SecureFilter.execute(data: {
16
- my_secure_setting: 'hello' })
18
+ my_secure_setting: 'hello',
19
+ })
17
20
 
18
21
  expect(filtered_settings.my_secure_setting).to be_nil
19
22
  end
@@ -24,7 +27,9 @@ describe SecureFilter do
24
27
  secure_setting: 'goodbye',
25
28
  secure_group: {
26
29
  _secure_nested_setting: 'movie',
27
- insecure_nested_setting: 'dinner' } })
30
+ insecure_nested_setting: 'dinner',
31
+ },
32
+ })
28
33
 
29
34
  expect(filtered_settings._secure_setting).to eql 'hello'
30
35
  expect(filtered_settings.secure_setting).to be_nil
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'rspectacular'
2
3
  require 'chamber/filters/translate_secure_keys_filter'
3
4
 
@@ -7,7 +8,9 @@ describe TranslateSecureKeysFilter do
7
8
  it 'will translate keys if they start with "_secure_"' do
8
9
  filtered_settings = TranslateSecureKeysFilter.execute(
9
10
  data: {
10
- _secure_my_secure_setting: 'hello' })
11
+ _secure_my_secure_setting: 'hello',
12
+ },
13
+ )
11
14
 
12
15
  expect(filtered_settings.my_secure_setting).to eql 'hello'
13
16
  end
@@ -15,7 +18,9 @@ describe TranslateSecureKeysFilter do
15
18
  it 'will not translate keys if they do not start with "_secure_"' do
16
19
  filtered_settings = TranslateSecureKeysFilter.execute(
17
20
  data: {
18
- my_secure_setting: 'hello' })
21
+ my_secure_setting: 'hello',
22
+ },
23
+ )
19
24
 
20
25
  expect(filtered_settings.my_secure_setting).to eql 'hello'
21
26
  end
@@ -23,7 +28,9 @@ describe TranslateSecureKeysFilter do
23
28
  it 'will not translate the key if it starts with "secure"' do
24
29
  filtered_settings = TranslateSecureKeysFilter.execute(
25
30
  data: {
26
- secure_setting: 'hello' })
31
+ secure_setting: 'hello',
32
+ },
33
+ )
27
34
 
28
35
  expect(filtered_settings.secure_setting).to eql 'hello'
29
36
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'rspectacular'
2
3
  require 'chamber/namespace_set'
3
4
 
@@ -11,8 +12,10 @@ describe NamespaceSet do
11
12
  end
12
13
 
13
14
  it 'can create a set from an array' do
14
- namespace_set = NamespaceSet.new([:development,
15
- 'my host'])
15
+ namespace_set = NamespaceSet.new([
16
+ :development,
17
+ 'my host',
18
+ ])
16
19
 
17
20
  expect(namespace_set).to eq ['development', 'my host']
18
21
  end
@@ -56,7 +59,7 @@ describe NamespaceSet do
56
59
  original_set = NamespaceSet[:development, 'my host']
57
60
  namespace_set = NamespaceSet.new(original_set)
58
61
 
59
- expect(namespace_set.send(:raw_namespaces)).not_to be_a NamespaceSet
62
+ expect(namespace_set.__send__(:raw_namespaces)).not_to be_a NamespaceSet
60
63
  end
61
64
 
62
65
  it 'can turn itself into an array' do
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'rspectacular'
2
3
  require 'chamber/settings'
3
4
 
@@ -55,17 +56,21 @@ describe Settings do
55
56
  it 'sorts environment variables by name when converted to an environment hash so ' \
56
57
  'that they are easier to parse for humans' do
57
58
 
58
- settings = Settings.new(settings: { 'C' => 'value',
59
- 'D' => 'value',
60
- 'A' => 'value',
61
- 'E' => 'value',
62
- 'B' => 'value' })
63
-
64
- expect(settings.to_environment.to_a).to eql([%w{A value},
65
- %w{B value},
66
- %w{C value},
67
- %w{D value},
68
- %w{E value}])
59
+ settings = Settings.new(settings: {
60
+ 'C' => 'value',
61
+ 'D' => 'value',
62
+ 'A' => 'value',
63
+ 'E' => 'value',
64
+ 'B' => 'value',
65
+ })
66
+
67
+ expect(settings.to_environment.to_a).to eql([
68
+ %w{A value},
69
+ %w{B value},
70
+ %w{C value},
71
+ %w{D value},
72
+ %w{E value},
73
+ ])
69
74
  end
70
75
 
71
76
  it 'can convert itself into a string' do
@@ -82,12 +87,12 @@ describe Settings do
82
87
  })
83
88
 
84
89
  expect(settings.to_s).to eql %w{
85
- LEVEL_1_BODY="gracias"
86
- LEVEL_1_LEVEL_2_ANOTHER="goodbye"
87
- LEVEL_1_LEVEL_2_SOME_SETTING="hello"
88
- MY_SETTING="value"
89
- THERE="was not that easy?"
90
- }.join(' ')
90
+ LEVEL_1_BODY="gracias"
91
+ LEVEL_1_LEVEL_2_ANOTHER="goodbye"
92
+ LEVEL_1_LEVEL_2_SOME_SETTING="hello"
93
+ MY_SETTING="value"
94
+ THERE="was not that easy?"
95
+ }.join(' ')
91
96
  end
92
97
 
93
98
  it 'can convert itself into a string with custom options' do
@@ -137,7 +142,8 @@ HEREDOC
137
142
 
138
143
  expect(merged_settings).to eql Settings.new(settings: {
139
144
  setting: 'value',
140
- other_setting: 'another value' },
145
+ other_setting: 'another value',
146
+ },
141
147
  namespaces: %w{good bad})
142
148
  end
143
149
 
@@ -172,7 +178,7 @@ HEREDOC
172
178
  there: 'was not that easy?',
173
179
  })
174
180
 
175
- expect(settings.to_flattened_name_hash).to eql(
181
+ expect(settings.to_flattened_name_hash).to eql(
176
182
  %w{my_setting} => 'value',
177
183
  %w{level_1 level_2 some_setting} => 'hello',
178
184
  %w{level_1 level_2 another} => 'goodbye',
@@ -191,7 +197,7 @@ HEREDOC
191
197
  settings_hash = settings.to_hash
192
198
  settings_hash['setting'] = 'foo'
193
199
 
194
- expect(settings.send(:data).object_id).not_to eql settings_hash.object_id
200
+ expect(settings.__send__(:data).object_id).not_to eql settings_hash.object_id
195
201
  expect(settings.setting).to eql 'value'
196
202
  end
197
203
 
@@ -216,9 +222,11 @@ HEREDOC
216
222
  it 'only includes namespaced data if any exists' do
217
223
  settings = Settings.new(settings: {
218
224
  namespace_value: {
219
- namespace_setting: 'value' },
225
+ namespace_setting: 'value',
226
+ },
220
227
  other_namespace_value: {
221
- other_namespace_setting: 'value' },
228
+ other_namespace_setting: 'value',
229
+ },
222
230
  non_namespace_setting: 'other value',
223
231
  },
224
232
  namespaces: %w{namespace_value other_namespace_value})
@@ -239,7 +247,8 @@ HEREDOC
239
247
  'wdgUKc8aaoX8OQA1kKTcdgbE9NcAhNr1+WfNxMnz84XzmU' \
240
248
  'p2Y0H1jPgGkBKQJKArfQ==',
241
249
  },
242
- decryption_key: './spec/spec_key')
250
+ decryption_key: './spec/spec_key',
251
+ )
243
252
 
244
253
  expect(settings).to eq('my_encrypted_setting' => 'hello')
245
254
  end
@@ -291,7 +300,8 @@ HEREDOC
291
300
  _secure_my_unencrypted_setting: 'nifty',
292
301
  my_insecure_setting: 'goodbye',
293
302
  },
294
- decryption_key: './spec/spec_key')
303
+ decryption_key: './spec/spec_key',
304
+ )
295
305
 
296
306
  secured_settings = settings.securable
297
307
 
@@ -314,7 +324,8 @@ HEREDOC
314
324
  _secure_my_unencrypted_setting: 'nifty',
315
325
  my_insecure_setting: 'goodbye',
316
326
  },
317
- decryption_key: './spec/spec_key')
327
+ decryption_key: './spec/spec_key',
328
+ )
318
329
 
319
330
  secured_settings = settings.insecure
320
331
 
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'rspectacular'
2
3
  require 'chamber'
3
4
  require 'fileutils'
@@ -118,7 +119,8 @@ describe 'Chamber' do
118
119
  it 'can load files based on the namespace passed in' do
119
120
  Chamber.load(basepath: '/tmp/chamber',
120
121
  namespaces: {
121
- my_namespace: -> { 'blue' } })
122
+ my_namespace: -> { 'blue' },
123
+ })
122
124
 
123
125
  expect(Chamber.other.everything).to eql 'works'
124
126
  expect(Chamber.test.my_dynamic_setting).to eql 2
@@ -128,24 +130,29 @@ describe 'Chamber' do
128
130
  Chamber.load(basepath: '/tmp/chamber',
129
131
  namespaces: {
130
132
  first_namespace_call: -> { :first },
131
- second_namespace_call: -> { :second } })
133
+ second_namespace_call: -> { :second },
134
+ })
132
135
 
133
136
  expect(Chamber.namespaces.to_a).to eql %w{first second}
134
137
  end
135
138
 
139
+ # rubocop:disable Lint/DuplicatedKey
136
140
  it 'does not load the same namespace twice' do
137
141
  Chamber.load(basepath: '/tmp/chamber',
138
142
  namespaces: {
139
143
  first_namespace_call: -> { :first },
140
- first_namespace_call: -> { :first } })
144
+ first_namespace_call: -> { :first },
145
+ })
141
146
 
142
147
  expect(Chamber.namespaces.to_a).to eql ['first']
143
148
  end
149
+ # rubocop:enable Lint/DuplicatedKey
144
150
 
145
151
  it 'will load settings files which are only namespaced' do
146
152
  Chamber.load(basepath: '/tmp/chamber',
147
153
  namespaces: {
148
- my_namespace: -> { 'blue' } })
154
+ my_namespace: -> { 'blue' },
155
+ })
149
156
 
150
157
  expect(Chamber[:only_namespaced_sub_settings][:another_sub_setting]).to eql 'namespaced'
151
158
  end
@@ -153,7 +160,8 @@ describe 'Chamber' do
153
160
  it 'clears all settings each time the settings are loaded' do
154
161
  Chamber.load(basepath: '/tmp/chamber',
155
162
  namespaces: {
156
- my_namespace: -> { 'blue' } })
163
+ my_namespace: -> { 'blue' },
164
+ })
157
165
 
158
166
  expect(Chamber[:only_namespaced_sub_settings][:another_sub_setting]).to eql 'namespaced'
159
167
 
@@ -171,7 +179,8 @@ describe 'Chamber' do
171
179
  it 'does not raise an exception if a namespaced file does not exist' do
172
180
  Chamber.load(basepath: '/tmp/chamber',
173
181
  namespaces: {
174
- non_existant_namespace: -> { false } })
182
+ non_existant_namespace: -> { false },
183
+ })
175
184
 
176
185
  expect { Chamber.load(basepath: '/tmp/chamber') }.not_to raise_error
177
186
  end
@@ -179,7 +188,8 @@ describe 'Chamber' do
179
188
  it 'merges (not overrides) subsequent settings' do
180
189
  Chamber.load(basepath: '/tmp/chamber',
181
190
  namespaces: {
182
- my_namespace: -> { 'blue' } })
191
+ my_namespace: -> { 'blue' },
192
+ })
183
193
 
184
194
  expect(Chamber.test.my_setting).to eql 'my_value'
185
195
  expect(Chamber.test.my_other_setting).to eql 'my_other_value'
@@ -201,7 +211,8 @@ describe 'Chamber' do
201
211
 
202
212
  Chamber.load(basepath: '/tmp/chamber',
203
213
  namespaces: {
204
- my_namespace: -> { 'blue' } })
214
+ my_namespace: -> { 'blue' },
215
+ })
205
216
 
206
217
  expect(Chamber['sub_settings']['my_namespaced_sub_setting']).to eql 'my_namespaced_sub_setting_value'
207
218
  end
@@ -209,7 +220,8 @@ describe 'Chamber' do
209
220
  it 'loads namespaced settings if they are inline in a non-namespaced filename' do
210
221
  Chamber.load(basepath: '/tmp/chamber',
211
222
  namespaces: {
212
- my_namespace: -> { 'blue' } })
223
+ my_namespace: -> { 'blue' },
224
+ })
213
225
 
214
226
  expect(Chamber['my_settings_for_inline_namespace']).to eql 'my_value_for_inline_namespace'
215
227
  end
@@ -217,7 +229,8 @@ describe 'Chamber' do
217
229
  it 'does not load non-namespaced data from a file if inline namespaces are found' do
218
230
  Chamber.load(basepath: '/tmp/chamber',
219
231
  namespaces: {
220
- my_namespace: -> { 'blue' } })
232
+ my_namespace: -> { 'blue' },
233
+ })
221
234
 
222
235
  expect(Chamber['my_non_inline_namespaced_setting']).not_to eql 'my_value_for_non_inline_namespace'
223
236
  end
@@ -231,6 +244,7 @@ describe 'Chamber' do
231
244
  expect(Chamber['my_non_inline_namespaced_setting']).to eql 'my_value_for_non_inline_namespace'
232
245
  end
233
246
 
247
+ # rubocop:disable Lint/DuplicatedKey
234
248
  it 'can convert the settings to their environment variable versions' do
235
249
  Chamber.load(basepath: '/tmp/chamber')
236
250
 
@@ -249,6 +263,7 @@ describe 'Chamber' do
249
263
  'MY_NON_INLINE_NAMESPACED_SETTING' => 'my_value_for_non_inline_namespace',
250
264
  )
251
265
  end
266
+ # rubocop:enable Lint/DuplicatedKey
252
267
 
253
268
  it 'can convert boolean-like strings to actual booleans' do
254
269
  expect(Chamber[:test][:my_boolean]).to be_a FalseClass