nifty_settings 1.1.7 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8c4cd283e57e135e322311d816dee8a29df9da4b
4
- data.tar.gz: a354ba55bb47ad7b8d6915e820e87a6a2d5ca36a
3
+ metadata.gz: d295420005dfbdfaa51b187c0b0fd2586c036fee
4
+ data.tar.gz: 8dd9664844c4074cb72b7ef44e12af70c699c316
5
5
  SHA512:
6
- metadata.gz: e16f56f7ada98619ec65977970c94e607f1bf910442a5a085f6e35528ec315adc48513077bb1e4d9c30d0f512f3f5bae7016f38a038e63c35ca74ccc801d8820
7
- data.tar.gz: 3d3ce608e8d4664b7cb218f8902bc05ef252645206e8a48f6b85bfe456f62fc8c9f4e436f6840aab43233f8296ee52fc7b8276999be5a422df772bbc4bb07979
6
+ metadata.gz: abf8e34f7edb80a87c94a04fda3b3a7d42f9ce00e362ec3cfb24ef79ae497daeaf5566a962de1303959731f03b338c56561dad64cb1af7c3e69ee43e790f5bde
7
+ data.tar.gz: 1f5748a556ecae8c4f58da8cf20f58734e268c3705e8d3c18049b277ca1b2fd68b7722f60e8062e68322f36ee5667227c1fd1ef21e497af6853f240c813cd74e
@@ -0,0 +1 @@
1
+ Gemfile.lock
@@ -1,6 +1,6 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 1.9
4
3
  - 2.0
5
4
  - 2.1
5
+ - 2.2
6
6
  - jruby
@@ -1,4 +1,13 @@
1
- # 1.1.6 - 2014-07-15
1
+ # 2.0.0
2
+
3
+ * Drop support for Ruby 1.9
4
+ * Add support for loading files from settings dir
5
+
6
+ # 1.1.7
7
+
8
+ * Fix merging env settings
9
+
10
+ # 1.1.6
2
11
 
3
12
  * Enable setting a custom settings file path via `NiftySettings::Settings.settings_path = '...'`
4
13
  * Don't throw an exception when settings file is empty
data/README.md CHANGED
@@ -90,12 +90,15 @@ true
90
90
 
91
91
  ## Configuration
92
92
 
93
- ### Specify configuration file
93
+ ### File locations
94
94
 
95
- By default NiftySettings looks for settings in `config/settings.yml`, but this can be changed by setting the path in an initializer.
95
+ NiftySettings loads settings from a default file (`config/settings.yml`) and all YAML files in a default folder (`config/settings/*.yml`). This allows you to put simple settings in the default file but group related settings in dedicated files in the default folder.
96
+
97
+ Both locations can be customized:
96
98
 
97
99
  ```ruby
98
- Settings.settings_path = '/home/shared/other_settings.yml'
100
+ NiftySettings.configuration.settings_file = '/home/shared/other_settings.yml'
101
+ NiftySettings.configuration.settings_folder = Rails.root.join('config', 'my_settings')
99
102
  ```
100
103
 
101
104
  ### Namespacing
@@ -1,4 +1,12 @@
1
+ require 'gem_config'
2
+
1
3
  module NiftySettings
4
+ include GemConfig::Base
5
+
6
+ with_configuration do
7
+ has :settings_file, classes: [String, Pathname]
8
+ has :settings_dir, classes: [String, Pathname]
9
+ end
2
10
  end
3
11
 
4
12
  require 'nifty_settings/version'
@@ -53,7 +53,7 @@ module NiftySettings
53
53
  end
54
54
  alias_method :nil?, :empty?
55
55
 
56
- def method_missing(name, *args, &blk)
56
+ def method_missing(name, *args, &block)
57
57
  name = name.to_s
58
58
  key, modifier = name[0..-2], name[-1, 1]
59
59
  case
@@ -63,56 +63,53 @@ module NiftySettings
63
63
  end
64
64
  end
65
65
 
66
- def respond_to?(name, key = false)
66
+ def respond_to?(name, include_all = false)
67
67
  true
68
68
  end
69
69
 
70
70
  class << self
71
- def setup(value = nil, &blk)
72
- @@setup_callback = (blk || value)
73
- end
74
-
75
- def settings_path
76
- @@settings_path ||= root.join('config', 'settings.yml').to_s
77
- end
71
+ def load
72
+ files = []
78
73
 
79
- def settings_path=(value)
80
- @@settings_path = value
81
- end
74
+ settings_file = NiftySettings.configuration.settings_file || self.root.join('config', 'settings.yml')
75
+ if File.file?(settings_file)
76
+ files << settings_file
77
+ end
82
78
 
83
- def load_from_file
84
- if !File.readable?(settings_path)
85
- $stderr.puts "Unable to load settings from #{settings_path} - Please check it exists and is readable."
86
- return {}
79
+ settings_dir = NiftySettings.configuration.settings_dir || self.root.join('config', 'settings')
80
+ if File.directory?(settings_dir)
81
+ files.concat Dir[File.join(settings_dir, '*.yml')]
87
82
  end
88
- # Otherwise, try loading...
89
- contents = File.read(settings_path)
90
- contents = ERB.new(contents).result
91
- contents = YAML.load(contents) || {}
92
- if env.nil?
93
- contents
94
- else
95
- (contents['default'] || {}).deep_merge(contents[env] || {})
83
+
84
+ return {} if files.empty?
85
+
86
+ files.inject({}) do |hash, file|
87
+ contents = File.read(file)
88
+ contents = ERB.new(contents).result
89
+ contents = YAML.load(contents) || {}
90
+ if env
91
+ contents = (contents['default'] || {}).deep_merge(contents[env] || {})
92
+ end
93
+ hash.deep_merge contents
96
94
  end
97
95
  end
98
96
 
99
97
  def default
100
- @@default ||= new(load_from_file)
98
+ @@default ||= self.new(self.load)
101
99
  end
102
100
 
103
101
  def reset!
104
102
  @@default = nil
105
103
  default # Force us to reload the settings
106
104
  # If a setup block is defined, call it post configuration.
107
- @setup_callback.call if defined?(@setup_callback) && @setup_callback
108
105
  true
109
106
  end
110
107
 
111
- def method_missing(name, *args, &blk)
112
- default.send(name, *args, &blk)
108
+ def method_missing(name, *args, &block)
109
+ default.send(name, *args, &block)
113
110
  end
114
111
 
115
- def respond_to?(name, key = false)
112
+ def respond_to?(name, include_all = false)
116
113
  true
117
114
  end
118
115
 
@@ -1,3 +1,3 @@
1
1
  module NiftySettings
2
- VERSION = '1.1.7'
2
+ VERSION = '2.0.0'
3
3
  end
@@ -19,15 +19,8 @@ Gem::Specification.new do |gem|
19
19
  gem.test_files = gem.files.grep(%r(^(test|spec|features)/))
20
20
  gem.require_paths = ['lib']
21
21
 
22
- gem.add_development_dependency 'rake'
23
- gem.add_development_dependency 'rspec', '~> 2.14.0'
24
- gem.add_development_dependency 'rb-fsevent', '~> 0.9.0'
25
- if RUBY_VERSION < '1.9.3'
26
- # Use older Guard version that uses older Listen version since
27
- # Listen >= 2.0.0 only works with Ruby >= 1.9.3
28
- gem.add_development_dependency 'guard-rspec', '~> 3.1.0'
29
- gem.add_development_dependency 'listen', '< 2.0.0' if RUBY_VERSION < '1.9.3'
30
- else
31
- gem.add_development_dependency 'guard-rspec', '~> 4.2.0'
32
- end
22
+ gem.add_dependency 'gem_config', '~> 0.3'
23
+ gem.add_development_dependency 'rake', '~> 10.4'
24
+ gem.add_development_dependency 'rspec', '~> 3.2'
25
+ gem.add_development_dependency 'guard-rspec', '~> 4.5'
33
26
  end
@@ -86,42 +86,82 @@ describe NiftySettings::Settings do
86
86
  end
87
87
  end
88
88
 
89
- describe '.load_from_file' do
89
+ describe '.load' do
90
90
  context 'without Rails and RACK_ENV' do
91
91
  before do
92
92
  # Make sure `ENV['RACK_ENV']` is not set and Rails is not loaded
93
- # so that the loaded settings are not scoped to the env
93
+ # so that the loaded settings are not scoped to the env.
94
94
  ENV['RACK_ENV'] = nil
95
95
  raise 'Rails should not be loaded.' if defined?(Rails)
96
- end
97
-
98
- it 'loads the settings from the default location' do
99
- # Reset settings path in case it has been modified
100
- NiftySettings::Settings.settings_path = nil
101
-
102
- # Copy settings file to default location
103
- settings_file = File.expand_path('../../support/settings.yml', __FILE__)
104
- default_settings_file = File.expand_path('../../../config/settings.yml', __FILE__)
105
- FileUtils.mkdir_p File.dirname(default_settings_file)
106
- FileUtils.cp settings_file, default_settings_file
107
-
108
- settings = NiftySettings::Settings.load_from_file
109
- expect(settings).to eq('foo' => 'bar')
110
-
111
- # Delete settings file again
112
- FileUtils.rm default_settings_file
113
- end
114
-
115
- it 'can load the settings from a custom location' do
116
- NiftySettings::Settings.settings_path = File.expand_path('../../support/settings.yml', __FILE__)
117
- settings = NiftySettings::Settings.load_from_file
118
- expect(settings).to eq('foo' => 'bar')
119
- end
120
96
 
121
- it 'can load empty settings' do
122
- NiftySettings::Settings.settings_path = File.expand_path('../../support/settings_empty.yml', __FILE__)
123
- settings = NiftySettings::Settings.load_from_file
124
- expect(settings).to eq({})
97
+ FileUtils.mkdir_p settings_dir
98
+ end
99
+
100
+ after do
101
+ Dir[File.join(settings_dir, '*.yml')].unshift(settings_file).each do |file|
102
+ File.delete file if File.exist?(file)
103
+ end
104
+ %i(settings_file settings_dir).each do |config|
105
+ NiftySettings.configuration.unset config
106
+ end
107
+ end
108
+
109
+ let(:settings_file) { File.expand_path('../../../config/settings.yml', __FILE__) }
110
+ let(:settings_dir) { File.expand_path('../../../config/settings', __FILE__) }
111
+ 1.upto(3).each do |i|
112
+ let(:"support_settings_file_#{i}") { File.expand_path("../../support/settings#{i}.yml", __FILE__) }
113
+ end
114
+
115
+ context 'when only the settings file exists' do
116
+ context 'in the default location' do
117
+ before do
118
+ FileUtils.cp support_settings_file_1, settings_file
119
+ end
120
+
121
+ it 'loads the settings' do
122
+ settings = NiftySettings::Settings.load
123
+ expect(settings).to eq('foo' => 'bar')
124
+ end
125
+ end
126
+
127
+ context 'in a custom location' do
128
+ before do
129
+ NiftySettings.configuration.settings_file = support_settings_file_1
130
+ end
131
+
132
+ it 'loads the settings' do
133
+ settings = NiftySettings::Settings.load
134
+ expect(settings).to eq('foo' => 'bar')
135
+ end
136
+ end
137
+ end
138
+
139
+ context 'when only a file in the settings dir exists' do
140
+ before do
141
+ FileUtils.cp support_settings_file_1, settings_dir
142
+ end
143
+
144
+ it 'loads the settings' do
145
+ settings = NiftySettings::Settings.load
146
+ expect(settings).to eq('foo' => 'bar')
147
+ end
148
+ end
149
+
150
+ context 'when the settings file and files in the settings dir exist' do
151
+ before do
152
+ FileUtils.cp support_settings_file_1, settings_file
153
+ FileUtils.cp support_settings_file_2, settings_dir
154
+ FileUtils.cp support_settings_file_3, settings_dir
155
+ end
156
+
157
+ it 'loads the settings' do
158
+ settings = NiftySettings::Settings.load
159
+ expect(settings).to eq(
160
+ 'foo' => 'bar',
161
+ 'pelle' => 'fant',
162
+ 'zing' => 'zang'
163
+ )
164
+ end
125
165
  end
126
166
  end
127
167
  end
@@ -1,7 +1,6 @@
1
1
  require 'nifty_settings'
2
2
 
3
3
  RSpec.configure do |config|
4
- config.treat_symbols_as_metadata_keys_with_true_values = true
5
4
  config.run_all_when_everything_filtered = true
6
5
  config.filter_run :focus
7
6
  config.order = 'random'
@@ -0,0 +1 @@
1
+ pelle: fant
@@ -0,0 +1 @@
1
+ zing: zang
metadata CHANGED
@@ -1,77 +1,78 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nifty_settings
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.7
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Manuel Meurer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-01 00:00:00.000000000 Z
11
+ date: 2015-04-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: rake
14
+ name: gem_config
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
20
- type: :development
19
+ version: '0.3'
20
+ type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: '0.3'
27
27
  - !ruby/object:Gem::Dependency
28
- name: rspec
28
+ name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 2.14.0
33
+ version: '10.4'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 2.14.0
40
+ version: '10.4'
41
41
  - !ruby/object:Gem::Dependency
42
- name: rb-fsevent
42
+ name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 0.9.0
47
+ version: '3.2'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 0.9.0
54
+ version: '3.2'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: guard-rspec
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: 4.2.0
61
+ version: '4.5'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: 4.2.0
68
+ version: '4.5'
69
69
  description: A nifty way to save and access application-wide settings.
70
70
  email: manuel@krautcomputing.com
71
71
  executables: []
72
72
  extensions: []
73
73
  extra_rdoc_files: []
74
74
  files:
75
+ - ".gitignore"
75
76
  - ".travis.yml"
76
77
  - CHANGELOG.md
77
78
  - Gemfile
@@ -87,8 +88,9 @@ files:
87
88
  - nifty_settings.gemspec
88
89
  - spec/nifty_settings/settings_spec.rb
89
90
  - spec/spec_helper.rb
90
- - spec/support/settings.yml
91
- - spec/support/settings_empty.yml
91
+ - spec/support/settings1.yml
92
+ - spec/support/settings2.yml
93
+ - spec/support/settings3.yml
92
94
  homepage: http://krautcomputing.github.io/nifty_settings/
93
95
  licenses:
94
96
  - MIT
@@ -109,13 +111,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
109
111
  version: '0'
110
112
  requirements: []
111
113
  rubyforge_project:
112
- rubygems_version: 2.2.2
114
+ rubygems_version: 2.4.5
113
115
  signing_key:
114
116
  specification_version: 4
115
117
  summary: A nifty way to save and access application-wide settings.
116
118
  test_files:
117
119
  - spec/nifty_settings/settings_spec.rb
118
120
  - spec/spec_helper.rb
119
- - spec/support/settings.yml
120
- - spec/support/settings_empty.yml
121
+ - spec/support/settings1.yml
122
+ - spec/support/settings2.yml
123
+ - spec/support/settings3.yml
121
124
  has_rdoc:
File without changes