config_files 0.1.5 → 0.1.7

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
  SHA256:
3
- metadata.gz: f0a3001450205f4734271598f6b0cd51ca6aba8808434b734d031d3f7c7851b6
4
- data.tar.gz: d62a7f9bf5fc8e4f8a299b7fe9f8eba9f7f547917298a8e0e8b9c7d0944e15f1
3
+ metadata.gz: dabb2b8b5d0fb25738c2d55d02068fd4710f2085425b4236ad8b2da6b62a2167
4
+ data.tar.gz: b10790c4f63c114122a4ccd0aa2a31bbaf897ae22e926838af1ddc2363d65152
5
5
  SHA512:
6
- metadata.gz: 689ac43514f81720d263e6e5f707139b451a32703a5d361937626ce653f3c0494019aeed282d5b3e7e384e6b5a217dbd3f67d1927128a3cd12180148f32aef66
7
- data.tar.gz: '08c8db4aff8046683fafdfa71ef7cc4717a09b0165cac63a97a3ec660f6f344d0432c8823d7d662dddad221ea8202f83aef7d189cf06a70adc7729dc0aa86eaa'
6
+ metadata.gz: 742b8d8e6955a5c65dcaa5e62c789f9bd0acd24decc3957f7c58d22086d6ce16a25b29b68703ff98c769049350d7c9195deb7144391ca5d179454633de7db164
7
+ data.tar.gz: 623b886403b441802957faeebe5484a29b92fd9bd3b082e67c51270c6d53d5974b8ff0278699602bf2345861eb6c6788027a957677a19679e769a896b8d9ba3e
data/.gitignore CHANGED
@@ -1,3 +1,5 @@
1
- # Created by .ignore support plugin (hsz.mobi)
2
- .idea/
3
-
1
+ /.idea/.gitignore
2
+ /.idea/config_files.iml
3
+ /.idea/misc.xml
4
+ /.idea/modules.xml
5
+ /.idea/vcs.xml
@@ -1,3 +1,3 @@
1
1
  module ConfigFiles
2
- VERSION='0.1.5'
2
+ VERSION='0.1.7'
3
3
  end
data/lib/config_files.rb CHANGED
@@ -2,25 +2,34 @@ require 'config_files/file_factory'
2
2
  require 'config_files/loader_factory'
3
3
  require 'config_files/loaders'
4
4
  require 'config_files/version'
5
+ require 'active_support/core_ext/hash/indifferent_access'
5
6
  require 'active_support/core_ext/hash/deep_merge'
6
7
  require 'active_support/core_ext/object/blank'
7
8
 
8
9
  require 'meta'
9
10
  require 'yaml'
11
+
12
+ class NoDirectoryEntry < NoMethodError; end
10
13
  module ConfigFiles
11
14
 
12
15
  class << self
13
16
  def included(base)
14
17
  base.class_eval do
15
- extend ClassMethods
18
+ extend ConfigFilesClassMethods
16
19
  end
17
20
  end
18
21
  end
19
22
 
20
- module ClassMethods
23
+ module ConfigFilesClassMethods
21
24
  include Meta
22
25
  attr_accessor :directories
23
26
 
27
+ def self.extended(base)
28
+ base.instance_eval do
29
+ self.directories=default_directories
30
+ end
31
+ end
32
+
24
33
  def any_extension
25
34
  '*'
26
35
  end
@@ -29,8 +38,12 @@ module ConfigFiles
29
38
  :etc
30
39
  end
31
40
 
41
+ def default_directories
42
+ { :etc => ['config', 'etc', '/etc'] }
43
+ end
44
+
32
45
  def config_directories(*arr)
33
- self.directories||={ :etc => ['config', 'etc', '/etc'] }
46
+ self.directories||=default_directories
34
47
  arr.each do |directory_list|
35
48
  directory_list.each do |key, value|
36
49
  self.directories[key]=value.map { |dir| ::File.expand_path(dir) }
@@ -40,7 +53,7 @@ module ConfigFiles
40
53
  end
41
54
 
42
55
  def merged_hash(file)
43
- config_files(file).inject({}) { |master, file| master.deep_merge(FileFactory.(file)) }
56
+ config_files(file).inject(::HashWithIndifferentAccess.new) { |master, file| master.deep_merge(FileFactory.(file)) }
44
57
  end
45
58
 
46
59
  def build_combined(file)
@@ -68,7 +81,11 @@ module ConfigFiles
68
81
  end
69
82
 
70
83
  def first_directory(file, key=config_key)
71
- self.directories[key]&.detect { |directory| directory_listing(directory, file).presence } || ''
84
+ begin
85
+ self.directories[key]&.detect { |directory| directory_listing(directory, file).presence } || ''
86
+ rescue NoMethodError=>e
87
+ raise NoDirectoryEntry, "Unable to find #{key} in #{self.directories}"
88
+ end
72
89
  end
73
90
 
74
91
  def files(file, key=config_key)
@@ -3,12 +3,12 @@ require 'minitest/autorun'
3
3
  require 'config_files'
4
4
  class Dummy
5
5
  include ConfigFiles
6
- config_directories :etc => ['etc', 'nofiles/etc']
6
+ config_directories etc: ['test/etc', 'test/nofiles/etc']
7
7
  static_config_files :dummy, :broken
8
8
  end
9
9
 
10
10
  class Dummy2 < Dummy
11
- config_directories 'config' => ['etc', 'nofiles/etc']
11
+ config_directories config: ['test/etc', 'test/nofiles/etc']
12
12
  class << self
13
13
  def config_key
14
14
  "config"
@@ -16,6 +16,11 @@ class Dummy2 < Dummy
16
16
  end
17
17
  end
18
18
 
19
+ class Defaults
20
+ include ConfigFiles
21
+ static_config_files :dummy
22
+ end
23
+
19
24
  class ConfigFilesTest < MiniTest::Test
20
25
  def test_config_key
21
26
  assert_equal(:etc, Dummy.config_key)
@@ -44,4 +49,8 @@ class ConfigFilesTest < MiniTest::Test
44
49
  def test_yaml_and_config_override
45
50
  assert_equal('test', Dummy2.dummy[:config_test])
46
51
  end
52
+
53
+ def test_defaults_are_picked_up_when_no_directories_used
54
+ assert_equal(nil, Defaults.dummy[:config_test])
55
+ end
47
56
  end
data/test/etc/dummy.yml CHANGED
@@ -1,2 +1,2 @@
1
- :config_test: test
2
- :only_in_yaml: yaml_file
1
+ config_test: test
2
+ only_in_yaml: yaml_file
metadata CHANGED
@@ -1,11 +1,11 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: config_files
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.1.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Paul McKibbin
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
  date: 2012-11-11 00:00:00.000000000 Z
@@ -70,7 +70,7 @@ homepage: https://github.com/blackrat/config_files
70
70
  licenses:
71
71
  - MIT
72
72
  metadata: {}
73
- post_install_message:
73
+ post_install_message:
74
74
  rdoc_options: []
75
75
  require_paths:
76
76
  - lib
@@ -85,8 +85,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
85
85
  - !ruby/object:Gem::Version
86
86
  version: '0'
87
87
  requirements: []
88
- rubygems_version: 3.1.2
89
- signing_key:
88
+ rubygems_version: 3.1.6
89
+ signing_key:
90
90
  specification_version: 4
91
91
  summary: ConfigFiles is a configuration file access tool. It parses multiple configuration
92
92
  files in multiple formats and presents a consistent block to the application with