config_files 0.1.0 → 0.1.6

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: 69666324c397bf59a18efef190d2660ce376143b246bda3752409af21fe1b51b
4
- data.tar.gz: 79c42d11ba5617e182e6b6cdb56074036c99f7bcd32fe0f5f0d0022b971f3194
3
+ metadata.gz: 0e601554ecea9bc4ad625f62936f005413b5cc13e76c25776a6abd1455dca6ff
4
+ data.tar.gz: 91b7f6eeb1e07b2646c3086d4ef008b91ee04d63fee1b7b6ccb9a73c8adfd67a
5
5
  SHA512:
6
- metadata.gz: e53a814869eaebf6ed6b6ecc55425dedbaca918434168720e96eed9812a84bce6b64f0818c5b751343b20ce4adc42d7d23ab3b01b857542443fb8da68a5a7eca
7
- data.tar.gz: 72ea7cc041cf8405429244a42c96a5a2f275de969b9fd183b62bca9423271847d38a43ae3970b23b64679643a3acdc26ff594c82a75456509c9a7a94cb76e830
6
+ metadata.gz: d086ca2975a90d9035a7e81eac2a7ddaadfcbd42ca61a3cb33fbde4675b42c226bfd181c48a9dcc6206f6fd6167e26b016af977fee61b2ab02d5bb132c67da53
7
+ data.tar.gz: 84211ae6ba278ebec36df53a7e0f7275b35430118b135ae6ecc5e73f3ad5ca02833691e4655e38f61f67857c62beb7a041189d3b00a3395e33526f96730c1520
data/Gemfile.lock ADDED
@@ -0,0 +1,34 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ config_files (0.1.5)
5
+ activesupport (>= 2.2.1)
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ activesupport (6.0.3.3)
11
+ concurrent-ruby (~> 1.0, >= 1.0.2)
12
+ i18n (>= 0.7, < 2)
13
+ minitest (~> 5.1)
14
+ tzinfo (~> 1.1)
15
+ zeitwerk (~> 2.2, >= 2.2.2)
16
+ concurrent-ruby (1.1.7)
17
+ i18n (1.8.5)
18
+ concurrent-ruby (~> 1.0)
19
+ minitest (5.14.2)
20
+ rake (13.0.1)
21
+ thread_safe (0.3.6)
22
+ tzinfo (1.2.7)
23
+ thread_safe (~> 0.1)
24
+ zeitwerk (2.4.0)
25
+
26
+ PLATFORMS
27
+ ruby
28
+
29
+ DEPENDENCIES
30
+ config_files!
31
+ rake
32
+
33
+ BUNDLED WITH
34
+ 1.16.1
data/config_files.gemspec CHANGED
@@ -20,5 +20,6 @@ SUMMARY
20
20
  spec.license = 'MIT'
21
21
  spec.date = '2012-11-11'
22
22
 
23
- spec.add_dependency 'activesupport'
23
+ spec.add_runtime_dependency 'activesupport', '>=2.2.1'
24
+ spec.add_development_dependency 'rake'
24
25
  end
data/lib/config_files.rb CHANGED
@@ -3,23 +3,32 @@ require 'config_files/loader_factory'
3
3
  require 'config_files/loaders'
4
4
  require 'config_files/version'
5
5
  require 'active_support/core_ext/hash/deep_merge'
6
+ require 'active_support/core_ext/object/blank'
6
7
 
7
8
  require 'meta'
8
9
  require 'yaml'
10
+
11
+ class NoDirectoryEntry < NoMethodError; end
9
12
  module ConfigFiles
10
13
 
11
14
  class << self
12
15
  def included(base)
13
16
  base.class_eval do
14
- extend ClassMethods
17
+ extend ConfigFilesClassMethods
15
18
  end
16
19
  end
17
20
  end
18
21
 
19
- module ClassMethods
22
+ module ConfigFilesClassMethods
20
23
  include Meta
21
24
  attr_accessor :directories
22
25
 
26
+ def self.extended(base)
27
+ base.instance_eval do
28
+ self.directories=default_directories
29
+ end
30
+ end
31
+
23
32
  def any_extension
24
33
  '*'
25
34
  end
@@ -28,11 +37,15 @@ module ConfigFiles
28
37
  :etc
29
38
  end
30
39
 
40
+ def default_directories
41
+ { :etc => ['config', 'etc', '/etc'] }
42
+ end
43
+
31
44
  def config_directories(*arr)
32
- self.directories||={ :etc => ['etc', '/etc'] }
45
+ self.directories||=default_directories
33
46
  arr.each do |directory_list|
34
47
  directory_list.each do |key, value|
35
- self.directories[key]=value.map { |dir| File.expand_path(dir) }
48
+ self.directories[key]=value.map { |dir| ::File.expand_path(dir) }
36
49
  meta_def("#{key}_dir") { @directories[key] }
37
50
  end
38
51
  end
@@ -43,7 +56,7 @@ module ConfigFiles
43
56
  end
44
57
 
45
58
  def build_combined(file)
46
- JSON.parse(merged_hash(file).to_json, object_class: OpenStruct)
59
+ merged_hash(file)
47
60
  end
48
61
 
49
62
  def static_config_files(*arr)
@@ -62,12 +75,20 @@ module ConfigFiles
62
75
  alias_method :config_files, :dynamic_config_files
63
76
 
64
77
  private
78
+ def directory_listing(directory, file)
79
+ ::Dir.glob(::File.join(directory, "#{file}.*"))
80
+ end
81
+
65
82
  def first_directory(file, key=config_key)
66
- self.directories[key]&.detect { |directory| Dir.glob(File.join(directory, "#{file}.*")) } || (raise Errno::ENOENT, "No #{file}.* in #{self.directories[key]}")
83
+ begin
84
+ self.directories[key]&.detect { |directory| directory_listing(directory, file).presence } || ''
85
+ rescue NoMethodError=>e
86
+ raise NoDirectoryEntry, "Unable to find #{key} in #{self.directories}"
87
+ end
67
88
  end
68
89
 
69
90
  def files(file, key=config_key)
70
- Dir.glob(File.join(first_directory(file, key), "#{file}.*"))
91
+ directory_listing(first_directory(file, key), file)
71
92
  end
72
93
 
73
94
  def config_files(file, key=config_key)
@@ -8,7 +8,7 @@ module ConfigFiles
8
8
 
9
9
  public
10
10
  def call(file_name, options={})
11
- loader(file_name, options).(file_name, object_class: ::Hash)
11
+ loader(file_name, options).(file_name)
12
12
  end
13
13
  end
14
14
  end
@@ -4,8 +4,8 @@ module ConfigFiles
4
4
  module Loaders
5
5
  class Json
6
6
  class << self
7
- def call(file_name, object_class: ::OpenStruct)
8
- ::JSON.load(file_name, nil, {object_class: object_class})
7
+ def call(file_name, object_class: ::Hash)
8
+ ::JSON.load(::File.open(file_name), nil, {object_class: object_class, quirks_mode: true})
9
9
  end
10
10
  end
11
11
  end
@@ -2,8 +2,8 @@ module ConfigFiles
2
2
  module Loaders
3
3
  class Yaml
4
4
  class << self
5
- def call(file_name, object_class: OpenStruct)
6
- JSON.parse(::YAML.load_file(file_name).to_json, object_class: object_class)
5
+ def call(file_name)
6
+ ::YAML.load_file(file_name)
7
7
  end
8
8
  end
9
9
  end
@@ -1,3 +1,3 @@
1
1
  module ConfigFiles
2
- VERSION='0.1.0'
2
+ VERSION='0.1.6'
3
3
  end
@@ -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)
@@ -38,10 +43,14 @@ class ConfigFilesTest < MiniTest::Test
38
43
  end
39
44
 
40
45
  def test_empty_for_missing_files
41
- assert_equal({}, Dummy.broken.to_h)
46
+ assert_equal({}, Dummy.broken)
42
47
  end
43
48
 
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('test', Defaults.dummy[:config_test])
55
+ end
47
56
  end
@@ -0,0 +1,13 @@
1
+ {
2
+ "testId": "123123-323-radasd",
3
+ "testTitle": "string",
4
+ "testNest": [
5
+ {
6
+ "hash": {
7
+ "innerId": "27811a4c-9cb5-4e6d-a069-5c19288fae58",
8
+ "personGivenName": "Paul",
9
+ "personFamilyName": "Mak"
10
+ }
11
+ }
12
+ ]
13
+ }
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.0
4
+ version: 0.1.6
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
@@ -16,9 +16,23 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: 2.2.1
20
20
  type: :runtime
21
21
  prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 2.2.1
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
22
36
  version_requirements: !ruby/object:Gem::Requirement
23
37
  requirements:
24
38
  - - ">="
@@ -34,6 +48,7 @@ extra_rdoc_files: []
34
48
  files:
35
49
  - ".gitignore"
36
50
  - Gemfile
51
+ - Gemfile.lock
37
52
  - LICENCE.txt
38
53
  - README.md
39
54
  - Rakefile
@@ -49,13 +64,14 @@ files:
49
64
  - lib/meta.rb
50
65
  - test/config_files_test.rb
51
66
  - test/etc/dummy.conf
67
+ - test/etc/dummy.json
52
68
  - test/etc/dummy.yml
53
69
  - test/loader_factory_test.rb
54
70
  homepage: https://github.com/blackrat/config_files
55
71
  licenses:
56
72
  - MIT
57
73
  metadata: {}
58
- post_install_message:
74
+ post_install_message:
59
75
  rdoc_options: []
60
76
  require_paths:
61
77
  - lib
@@ -70,9 +86,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
70
86
  - !ruby/object:Gem::Version
71
87
  version: '0'
72
88
  requirements: []
73
- rubyforge_project:
74
- rubygems_version: 2.7.6
75
- signing_key:
89
+ rubygems_version: 3.1.4
90
+ signing_key:
76
91
  specification_version: 4
77
92
  summary: ConfigFiles is a configuration file access tool. It parses multiple configuration
78
93
  files in multiple formats and presents a consistent block to the application with
@@ -80,5 +95,6 @@ summary: ConfigFiles is a configuration file access tool. It parses multiple con
80
95
  test_files:
81
96
  - test/config_files_test.rb
82
97
  - test/etc/dummy.conf
98
+ - test/etc/dummy.json
83
99
  - test/etc/dummy.yml
84
100
  - test/loader_factory_test.rb