nifty_settings 1.1.7 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
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