mini_hiera 0.1.2 → 0.2.0.pre1

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
- SHA256:
3
- metadata.gz: e9be79b96a1416956202d0cce8850a22bd61064d2c70ec68c71ba782fe4d00be
4
- data.tar.gz: 72afdac7e3e1004680391cb49940936d58e553c0c54ff8733f896cc2ab47d97d
2
+ SHA1:
3
+ metadata.gz: e18494403a76998e355b030bd2db2a80cbc18175
4
+ data.tar.gz: c330263d17f7921188ffa40dc650a9f8ce02a035
5
5
  SHA512:
6
- metadata.gz: b562c8082495933c35417afa39fb1b5a37b52e9e68e089016cda4b4cd7c5fda700f76111f2ef255ebfba58fc7afd1aed905b8792d2d1e045b6604e583045f20a
7
- data.tar.gz: 1102a8830f2d7ad29b7c604f134fcda5da9a47b2cfc9714d581607702985b9e150ee5834d55e51bd9d63f518bbfa9b27b4e41cd01a2994de2b19659fe2e72e75
6
+ metadata.gz: 568a67276ee9b56ce2cf26dba50f3d08a4e025a30c93e7fb019d34db9ef2ed204e0447a5bca849a0ea76f2c3afe6dd639d4ecc803eec25f332119449418e99ca
7
+ data.tar.gz: 2cc10f45ed391d13a91872aea74af2dc5840ad72b43a768b61d6729bd133195cfedb2b2c616daff831413d2997ae1fd73624a1050e7e0e43ce441558438a0c9b
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- mini_hiera (0.1.2)
4
+ mini_hiera (0.2.0.pre1)
5
5
  deep_merge (~> 1.0)
6
6
 
7
7
  GEM
@@ -28,10 +28,10 @@ PLATFORMS
28
28
  ruby
29
29
 
30
30
  DEPENDENCIES
31
- bundler (~> 1.16)
31
+ bundler
32
32
  mini_hiera!
33
33
  rake (~> 10.0)
34
34
  rspec (~> 3.0)
35
35
 
36
36
  BUNDLED WITH
37
- 1.17.1
37
+ 2.0.1
data/lib/mini_hiera.rb CHANGED
@@ -12,10 +12,19 @@ class MiniHiera
12
12
  CircularReferenceError = Class.new(RuntimeError)
13
13
  KeyNotFoundError = Class.new(RuntimeError)
14
14
 
15
- attr_reader :config, :options
15
+ attr_reader :config, :options, :context_functions, :value_functions
16
16
  def initialize(config, options={})
17
17
  @config = config
18
18
  @options = options
19
+ @context_functions = {}
20
+ @value_functions = {}
21
+ end
22
+
23
+ def context_function(name, &impl)
24
+ @context_functions[name] = impl
25
+ end
26
+ def value_function(name, &impl)
27
+ @value_functions[name] = impl
19
28
  end
20
29
 
21
30
  class Context
@@ -26,7 +35,19 @@ class MiniHiera
26
35
  def postprocess(value)
27
36
  if value.is_a?(String)
28
37
  value.gsub(/\%\{([^}]+)\}/) do |match|
29
- fetch($1)
38
+ replace = $1
39
+ _, block = @hiera.value_functions.find { |name, _| replace =~ /^#{name}\((.*)\)$/ }
40
+ if block
41
+ argument = $1
42
+ argument = if argument =~ /^["'](.*)['"]$/
43
+ $1
44
+ else
45
+ fetch(argument)
46
+ end
47
+ block.call(argument)
48
+ else
49
+ fetch(replace)
50
+ end
30
51
  end
31
52
  elsif value.is_a?(Hash)
32
53
  Hash[value.map { |k,v| [k, postprocess(v)] }]
@@ -66,22 +87,38 @@ class MiniHiera
66
87
 
67
88
  default_block_wrapper = lambda { |*_| default_block.arity == 0 ? default_block.call : default_block.call(key) }
68
89
 
69
- data = hiera_data
90
+ # is the first key a function that yields a tree?
91
+ split_key = key.split(".")
92
+ _, block = @hiera.context_functions.find { |name, block| split_key.first =~ /^#{name}\(([^\)]*)\)$/ }
93
+ argument = $1
94
+
70
95
 
71
- key.split(".").each do |k|
72
- if data.is_a?(Array)
73
- raise TypeError, "no implicit conversion of String into Integer" unless k.to_i.to_s == k
74
- data = data[k.to_i]
75
- elsif data.is_a?(Hash)
76
- data = data.fetch(k, &default_block_wrapper)
96
+ if !!block
97
+ split_key.shift
98
+ argument = if argument =~ /^["'](.*)['"]$/
99
+ $1
77
100
  else
78
- data = default_block_wrapper.call
79
- break
101
+ fetch(argument)
80
102
  end
81
- end
82
103
 
83
- detect_circular_interpolation(key) do
84
- postprocess(data)
104
+ block.call(argument).fetch(split_key.join("."))
105
+ else
106
+ data = hiera_data
107
+ split_key.each do |k|
108
+ if data.is_a?(Array)
109
+ raise TypeError, "no implicit conversion of String into Integer" unless k.to_i.to_s == k
110
+ data = data[k.to_i]
111
+ elsif data.is_a?(Hash)
112
+ data = data.fetch(k, &default_block_wrapper)
113
+ else
114
+ data = default_block_wrapper.call
115
+ break
116
+ end
117
+ end
118
+
119
+ detect_circular_interpolation(key) do
120
+ postprocess(data)
121
+ end
85
122
  end
86
123
  end
87
124
 
@@ -1,3 +1,3 @@
1
1
  class MiniHiera
2
- VERSION = "0.1.2"
2
+ VERSION = "0.2.0.pre1"
3
3
  end
data/mini_hiera.gemspec CHANGED
@@ -25,7 +25,7 @@ Gem::Specification.new do |spec|
25
25
 
26
26
  spec.add_dependency 'deep_merge', '~> 1.0'
27
27
 
28
- spec.add_development_dependency "bundler", "~> 1.16"
28
+ spec.add_development_dependency "bundler"
29
29
  spec.add_development_dependency "rake", "~> 10.0"
30
30
  spec.add_development_dependency "rspec", "~> 3.0"
31
31
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mini_hiera
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.0.pre1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thomas Haggett
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-02-18 00:00:00.000000000 Z
11
+ date: 2019-04-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: deep_merge
@@ -28,16 +28,16 @@ dependencies:
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '1.16'
33
+ version: '0'
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: '1.16'
40
+ version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -101,12 +101,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
101
101
  version: '0'
102
102
  required_rubygems_version: !ruby/object:Gem::Requirement
103
103
  requirements:
104
- - - ">="
104
+ - - ">"
105
105
  - !ruby/object:Gem::Version
106
- version: '0'
106
+ version: 1.3.1
107
107
  requirements: []
108
108
  rubyforge_project:
109
- rubygems_version: 2.7.6
109
+ rubygems_version: 2.5.2.3
110
110
  signing_key:
111
111
  specification_version: 4
112
112
  summary: Hierarchial key/value configuration