config_files 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +7 -0
  2. data/lib/config_files.rb +61 -0
  3. data/lib/meta.rb +12 -0
  4. metadata +45 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: ba83f6bade45d06bfa8a9ea74ba48915cfa9c908790f635aea7c53e5e12ffb2d
4
+ data.tar.gz: 969daeff600eb0fd4e6e084e33b3d83159e9aded3cae3df02f46528c073182dd
5
+ SHA512:
6
+ metadata.gz: 70ad5d3313cb4a8a623bf07a0a113ab945b0ef729393d474cb076a392c5d5dbcdb5e87cc7c8dc4da0118a7f64afa31e4a5c8987f08185982590127fb94e9b731
7
+ data.tar.gz: 15b8aa187cdcd0ce70123ad2c98eb8a7f30652fac7455ea8a7792b570847f7b3923668b415dca9a9f6fbc9db89e008299e22dd7ca694a4d18fdd6fcf29f8548d
@@ -0,0 +1,61 @@
1
+ require 'meta'
2
+ require 'yaml'
3
+ module ConfigFiles
4
+
5
+ class << self
6
+ def included(base)
7
+ base.class_eval do
8
+ extend ClassMethods
9
+ end
10
+ end
11
+ end
12
+
13
+ module ClassMethods
14
+ include Meta
15
+ attr_accessor :directories
16
+
17
+ def yaml_extension
18
+ '.yml'
19
+ end
20
+
21
+ def config_key
22
+ :etc
23
+ end
24
+
25
+ def config_directories(*arr)
26
+ self.directories||={ :etc => ['etc', '/etc'] }
27
+ arr.each do |directory_list|
28
+ directory_list.each do |key, value|
29
+ self.directories[key]=value.map { |dir| File.expand_path(dir) }
30
+ meta_def("#{key}_dir") { @directories[key] }
31
+ end
32
+ end
33
+ end
34
+
35
+ def static_config_files(*arr)
36
+ arr.each do |file|
37
+ content=YAML.load_file(config_file(file))
38
+ meta_def(file) { content }
39
+ end
40
+ end
41
+
42
+ def dynamic_config_files(*arr)
43
+ arr.each do |file|
44
+ meta_def(file) { YAML.load_file(config_file(file)) }
45
+ end
46
+ end
47
+
48
+ alias_method :config_files, :dynamic_config_files
49
+
50
+ private
51
+ def first_directory(file, key=config_key)
52
+ self.directories[key].find { |directory|
53
+ File.exists?(File.join(directory, "#{file}#{yaml_extension}"))
54
+ } || (raise Errno::ENOENT, "No #{file}#{yaml_extension} in #{self.directories[key]}")
55
+ end
56
+
57
+ def config_file(file, key=config_key)
58
+ File.join(first_directory(file, key), "#{file}#{yaml_extension}")
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,12 @@
1
+ # @author Paul McKibbin based on meta definitions by _why_the_lucky_stiff_
2
+ module Meta
3
+ def meta_self
4
+ class << self
5
+ self
6
+ end
7
+ end
8
+
9
+ def meta_def name, &blk
10
+ meta_self.instance_eval { define_method name, &blk }
11
+ end
12
+ end
metadata ADDED
@@ -0,0 +1,45 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: config_files
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.4
5
+ platform: ruby
6
+ authors:
7
+ - Paul McKibbin
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-04-08 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: A configuration tool for using multiple configuration files with multiple
14
+ formats by presenting them as a hash.
15
+ email: pmckibbin@gmail.com
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - lib/config_files.rb
21
+ - lib/meta.rb
22
+ homepage: https://github.com/blackrat/config_files
23
+ licenses: []
24
+ metadata: {}
25
+ post_install_message:
26
+ rdoc_options: []
27
+ require_paths:
28
+ - lib
29
+ required_ruby_version: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ required_rubygems_version: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - ">="
37
+ - !ruby/object:Gem::Version
38
+ version: '0'
39
+ requirements: []
40
+ rubyforge_project:
41
+ rubygems_version: 2.6.14
42
+ signing_key:
43
+ specification_version: 4
44
+ summary: Configuration File Manager
45
+ test_files: []