hieracles 0.3.0 → 0.3.1

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: 576b1abbe8d06fcf61896855b5474ed2d549e277
4
- data.tar.gz: 79022f2d38d33472e1e629724ebc4882c7718ba3
3
+ metadata.gz: 40e11515e3204a93d07953d15d29185a1b1881ad
4
+ data.tar.gz: 3e3c04ef13bbdab8d989ef49ddb3182eadae3007
5
5
  SHA512:
6
- metadata.gz: fd35c1ac42aca8724d507904387fb8bbd9543977482bd47e12e8e6301ec09e31ad655521b25904cd99c155caa5bb1ad1799e4e2ee3e4008fdc76f5582eb01139
7
- data.tar.gz: 8a0528fd874dc417140713ac28858f131f0d858a843e4df1d07861934e7ac57d18061201ba360876333f986457be88f1365c94562d50b5d50331162b77cedc81
6
+ metadata.gz: c1ff0c0467ec5f1d8128080e57559f2e0202cfa93b06389954fa70c25f7d887f4203bd2b5dd128e3c252e129dadfe16454a371471f49d8292fad00fb5a3dd57e
7
+ data.tar.gz: 0f1350b7fde0e2607e66ae2e3d07c416481c371fe7b91ed139023f283ec5a5c8cc6195f9cc4a9f3f36c826c95e2fcc3f4e427a2586fd54ef2d625290031ff1ca
data/CHANGELOG.md CHANGED
@@ -1,6 +1,11 @@
1
1
  Hieracles Changelog
2
2
  =======================
3
3
 
4
+ ### 0.3.1 - 2015-12-28
5
+ - added some relevance to the registry class
6
+ - changed the internal way to store the nodes information
7
+ - moved Config singleton to a proper class for modularity sake
8
+
4
9
  ### 0.3.0 - 2015-12-16
5
10
  - added json output as an option to ppdb
6
11
  - added some more ppdb commands
data/bin/hc CHANGED
@@ -23,15 +23,16 @@ end
23
23
 
24
24
  if Hieracles::Format.method_defined? command
25
25
  begin
26
- node = Hieracles::Node.new fqdn, opt.options
26
+ config = Hieracles::Config.new opt.options
27
+ node = Hieracles::Node.new fqdn, config
27
28
  rescue Exception => e
28
29
  puts "*** Error: #{e.message}"
29
30
  exit(1)
30
31
  end
31
32
  begin
32
- formatter = Object.const_get("Hieracles::Formats::#{Hieracles::Config.format}")
33
+ formatter = Object.const_get("Hieracles::Formats::#{config.format}")
33
34
  rescue
34
- puts "*** Unknown format #{Hieracles::Config.format}"
35
+ puts "*** Unknown format #{config.format}"
35
36
  exit(1)
36
37
  end
37
38
  dispatch = formatter.new node
data/bin/ppdb CHANGED
@@ -31,9 +31,9 @@ else
31
31
  exit(1)
32
32
  end
33
33
 
34
- Hieracles::Config.load opt.options
34
+ config = Hieracles::Config.new opt.options
35
35
 
36
- request = Hieracles::Puppetdb::Request.new Hieracles::Config.puppetdb
36
+ request = Hieracles::Puppetdb::Request.new config.puppetdb
37
37
  meth = request.method(command.to_sym)
38
38
  required = request.method(command.to_sym).parameters.select { |arg| arg[0] == :req }.map { |arg| arg[1] }
39
39
  if args.length < required.length
@@ -4,15 +4,13 @@ require 'yaml'
4
4
  require 'hieracles/utils'
5
5
 
6
6
  module Hieracles
7
- # configuration singleton
8
- module Config
7
+ class Config
9
8
  include Hieracles::Utils
10
- extend self
11
9
 
12
10
  attr_reader :extraparams, :server, :classpath, :scope, :puppetdb, :usedb,
13
11
  :modulepath, :hierafile, :basepath, :encpath, :format, :interactive
14
12
 
15
- def load(options)
13
+ def initialize(options)
16
14
  @options = options
17
15
  @optionfile = @options[:config] || defaultconfig
18
16
  @extraparams = extract_params(options[:params])
@@ -13,9 +13,9 @@ module Hieracles
13
13
  "\e[33m%s\e[0m",
14
14
  "\e[34m%s\e[0m",
15
15
  "\e[35m%s\e[0m",
16
- "\e[36m%s\e[0m",
17
16
  "\e[37m%s\e[0m",
18
17
  "\e[38m%s\e[0m",
18
+ "\e[36m%s\e[0m",
19
19
  "\e[97m%s\e[0m",
20
20
  "\e[35;1m%s\e[0m"
21
21
  ]
@@ -85,28 +85,29 @@ module Hieracles
85
85
  def build_params_line(key, value, filter)
86
86
  output = ''
87
87
  if !filter || Regexp.new(filter).match(key)
88
- output << build_first(key, value.pop)
89
- while value.count > 0
90
- output << build_next(key, value.pop)
91
- end
88
+ output << build_line_item(key, value)
92
89
  end
93
90
  output
94
91
  end
95
92
 
96
- def build_first(key, first)
97
- filecolor_index = @colors[first[:file]]
98
- filecolor = COLORS[filecolor_index]
99
- if is_merged? first
100
- format("%s #{COLORS[5]} %s\n", "[-]", key, sanitize(first[:merged]) ) +
101
- format(" #{COLORS[8]}\n", "[#{filecolor_index}] #{key} #{sanitize(first[:value])}" )
93
+ def build_line_item(key, value)
94
+ if value[:overriden]
95
+ format("%s #{COLORS[7]} %s\n", "[-]", key, sanitize(value[:value]) ) +
96
+ build_overriden(key, value[:found_in])
102
97
  else
103
- format("#{filecolor} #{COLORS[5]} %s\n", "[#{filecolor_index}]", key, sanitize(first[:value]) )
98
+ filecolor_index = @colors[value[:file]]
99
+ filecolor = COLORS[filecolor_index]
100
+ format("#{filecolor} #{COLORS[7]} %s\n", "[#{filecolor_index}]", key, sanitize(value[:value]) )
104
101
  end
105
102
  end
106
103
 
107
- def build_next(key, overriden)
108
- filecolor_index = @colors[overriden[:file]]
109
- format(" #{COLORS[8]}\n", "[#{filecolor_index}] #{key} #{overriden[:value]}")
104
+ def build_overriden(key, found_in)
105
+ back = ''
106
+ found_in.each do |v|
107
+ filecolor_index = @colors[v[:file]]
108
+ back << format(" #{COLORS[8]}\n", "[#{filecolor_index}] #{key} #{v[:value]}")
109
+ end
110
+ back
110
111
  end
111
112
 
112
113
  def build_modules_line(key, value)
@@ -32,16 +32,13 @@ module Hieracles
32
32
  def build_params_line(key, value, filter)
33
33
  output = ''
34
34
  if !filter || Regexp.new(filter).match(key)
35
- first = value.pop
36
- if is_merged? first
37
- output << build_line('-', key, first[:merged])
38
- output << build_line(first[:file], key, first[:value], '1')
35
+ if value[:overriden]
36
+ output << build_line('-', key, value[:value])
37
+ value[:found_in].each do |v|
38
+ output << build_line(v[:file], key, v[:value], '1')
39
+ end
39
40
  else
40
- output << build_line(first[:file], key, first[:value])
41
- end
42
- while value.count > 0
43
- overriden = value.pop
44
- output << build_line(overriden[:file], key, overriden[:value], '1')
41
+ output << build_line(value[:file], key, value[:value])
45
42
  end
46
43
  end
47
44
  output
@@ -60,23 +60,31 @@ module Hieracles
60
60
  def build_params_line(key, value, filter)
61
61
  output = ''
62
62
  if !filter || Regexp.new(filter).match(key)
63
- first = value.pop
64
- filecolor_index = @index[first[:file]]
65
- if is_merged? first
66
- output << "[-] #{key} #{first[:merged]}\n"
67
- output << " [#{filecolor_index}] #{key} #{first[:value]}\n"
68
- else
69
- output << "[#{filecolor_index}] #{key} #{first[:value]}\n"
70
- end
71
- while value.count > 0
72
- overriden = value.pop
73
- filecolor_index = @index[overriden[:file]]
74
- output << " [#{filecolor_index}] #{key} #{overriden[:value]}\n"
75
- end
63
+ output << build_line_item(key, value)
76
64
  end
77
65
  output
78
66
  end
79
67
 
68
+ def build_line_item(key, value)
69
+ if value[:overriden]
70
+ "[-] #{key} #{value[:value]}\n" +
71
+ build_overriden(key, value[:found_in])
72
+ else
73
+ filecolor_index = @index[value[:file]]
74
+ "[#{filecolor_index}] #{key} #{value[:value]}\n"
75
+ end
76
+ end
77
+
78
+ def build_overriden(key, found_in)
79
+ back = ''
80
+ found_in.each do |v|
81
+ filecolor_index = @index[v[:file]]
82
+ back << " [#{filecolor_index}] #{key} #{v[:value]}\n"
83
+ end
84
+ back
85
+ end
86
+
87
+
80
88
  def build_modules_line(key, value)
81
89
  length = max_key_length(@node.modules) + 3
82
90
  format("%-#{length}s %s\n", key, value)
@@ -39,7 +39,7 @@ module Hieracles
39
39
 
40
40
  def commented_yaml_tree(filter, without_common = true)
41
41
  tree = @node.params_tree(without_common)
42
- params = Hash[@node.params(without_common)]
42
+ params = @node.params(without_common)
43
43
  mergetree('---', [], tree, params)
44
44
  end
45
45
 
@@ -61,13 +61,8 @@ module Hieracles
61
61
  aryaml = yaml.each_line.map do |l|
62
62
  indent + l
63
63
  end
64
- if @node.hiera.merge_behavior == :deep ||
65
- @node.hiera.merge_behavior == :deeper
66
- params[key.join('.')].each do |f|
67
- output += "\n" + indent + "# " + f[:file]
68
- end
69
- else
70
- output += "\n" + indent + "# " + params[key.join('.')].last[:file]
64
+ params[key.join('.')][:found_in].each do |k|
65
+ output += "\n" + indent + "# " + k[:file]
71
66
  end
72
67
  output += "\n" + aryaml.join().chomp
73
68
  output
@@ -101,12 +96,10 @@ module Hieracles
101
96
 
102
97
  def added(output, key, leaf, params)
103
98
  output += leaf.to_s
104
- if params["#{key.join('.')}"]
105
- params["#{key.join('.')}"].each do |k|
106
- if k[:value].to_s == leaf.to_s
107
- output += " # " + k[:file]
108
- break
109
- end
99
+ k = params["#{key.join('.')}"]
100
+ if k
101
+ k[:found_in].each do |i|
102
+ output += " # " + i[:file]
110
103
  end
111
104
  end
112
105
  output
@@ -1,15 +1,16 @@
1
1
  module Hieracles
2
2
  class Hiera
3
3
 
4
- def initialize
5
- raise IOError, "Hierafile #{Config.hierafile} not found." unless File.exist? Config.hierafile
6
- @hierafile = Config.hierafile
4
+ def initialize(config)
5
+ @config = config
6
+ raise IOError, "Hierafile #{@config.hierafile} not found." unless File.exist? @config.hierafile
7
+ @hierafile = @config.hierafile
7
8
  @loaded = YAML.load_file(@hierafile)
8
9
  end
9
10
 
10
11
  def datapath
11
12
  raise TypeError, "Sorry hieracles only knows yaml backend for now." unless @loaded[:yaml]
12
- parampath = File.expand_path(File.join(Config.basepath, datadir))
13
+ parampath = File.expand_path(File.join(@config.basepath, datadir))
13
14
  raise IOError, "Params dir #{parampath} not found." unless Dir.exist? parampath
14
15
  parampath
15
16
  end
@@ -10,21 +10,21 @@ module Hieracles
10
10
 
11
11
  attr_reader :hiera_params, :hiera, :facts, :notifications
12
12
 
13
- def initialize(fqdn, options)
13
+ def initialize(fqdn, config)
14
14
  @fqdn = fqdn
15
- Config.load(options)
16
- @hiera = Hieracles::Hiera.new
15
+ @config = config
16
+ @hiera = Hieracles::Hiera.new @config
17
17
  @hiera_params = { fqdn: @fqdn }.
18
18
  merge(get_hiera_params(@fqdn)).
19
- merge(Config.extraparams)
19
+ merge(@config.extraparams)
20
20
  @facts = deep_sort(@hiera_params.
21
- merge(Config.scope).
21
+ merge(@config.scope).
22
22
  merge(puppet_facts))
23
23
  end
24
24
 
25
25
  def get_hiera_params(fqdn)
26
- @__hiera_params ||= if File.exist?(File.join(Config.encpath, "#{fqdn}.yaml"))
27
- load = YAML.load_file(File.join(Config.encpath, "#{fqdn}.yaml"))
26
+ @__hiera_params ||= if File.exist?(File.join(@config.encpath, "#{fqdn}.yaml"))
27
+ load = YAML.load_file(File.join(@config.encpath, "#{fqdn}.yaml"))
28
28
  sym_keys(load['parameters']).merge({ classes: load['classes']})
29
29
  else
30
30
  raise "Node not found"
@@ -33,7 +33,7 @@ module Hieracles
33
33
 
34
34
  def files(without_common = true)
35
35
  @__files ||= @hiera.hierarchy.reduce([]) do |a, f|
36
- file = parse("#{f}.yaml", @facts, Config.interactive)
36
+ file = parse("#{f}.yaml", @facts, @config.interactive)
37
37
  if file &&
38
38
  File.exist?(File.join(@hiera.datapath, file)) &&
39
39
  (!without_common ||
@@ -45,25 +45,56 @@ module Hieracles
45
45
  end
46
46
 
47
47
  def paths(without_common = true)
48
- files(without_common).map { |p| File.join(Config.basepath, p) }
48
+ files(without_common).map { |p| File.join(@config.basepath, p) }
49
49
  end
50
50
 
51
- def params(without_common = true)
51
+ def params_old(without_common = true)
52
52
  params = {}
53
53
  files(without_common).reverse.each do |f|
54
- data = YAML.load_file(File.join(Config.basepath, f))
54
+ data = YAML.load_file(File.join(@config.basepath, f))
55
55
  if data
56
56
  s = to_shallow_hash(data)
57
57
  s.each do |k,v|
58
58
  params[k] ||= []
59
- # f needs interpolation
60
- params[k] << { value: v, file: f, merged: merge_value(params[k], v) }
59
+ params[k] << { value: v, file: f }.merge(merge_value(params[k], v))
61
60
  end
62
61
  end
63
62
  end
64
63
  params.sort
65
64
  end
66
65
 
66
+ def params(without_common = true)
67
+ params = {}
68
+ files(without_common).each do |f|
69
+ data = YAML.load_file(File.join(@config.basepath, f))
70
+ if data
71
+ s = to_shallow_hash(data)
72
+ s.each do |k,v|
73
+ if params[k]
74
+ case @hiera.merge_behavior
75
+ when :deeper
76
+ params[k] = { value: v }.deep_merge!(params[k])
77
+ when :deep
78
+ params[k].deep_merge({ value: v })
79
+ end
80
+ params[k][:file] = '-'
81
+ params[k][:overriden] = true
82
+ params[k][:found_in].push({ value: v, file: f })
83
+ else
84
+ params[k] = {
85
+ value: v,
86
+ file: f,
87
+ overriden: false,
88
+ found_in: [{ value: v, file: f }]
89
+ }
90
+
91
+ end
92
+ end
93
+ end
94
+ end
95
+ params.sort.to_h
96
+ end
97
+
67
98
  def params_tree(without_common = true)
68
99
  params = {}
69
100
  paths(without_common).reverse.each do |f|
@@ -99,7 +130,7 @@ module Hieracles
99
130
 
100
131
  def _get_info
101
132
  extra = {}
102
- if Config.usedb
133
+ if @config.usedb
103
134
  extra = puppetdb_info
104
135
  end
105
136
  @hiera_params.merge extra
@@ -107,12 +138,12 @@ module Hieracles
107
138
 
108
139
  def classfiles
109
140
  @hiera_params[:classes].map do |cl|
110
- format(Config.classpath, cl)
141
+ format(@config.classpath, cl)
111
142
  end
112
143
  end
113
144
 
114
145
  def modulepath(path)
115
- File.join(Config.modulepath, path)
146
+ File.join(@config.modulepath, path)
116
147
  end
117
148
 
118
149
  def add_modules(line, modules)
@@ -120,7 +151,7 @@ module Hieracles
120
151
  mod = $1
121
152
  mainmod = mod[/^[^:]*/]
122
153
  if Dir.exists? modulepath(mainmod)
123
- modules[mod] = File.join(Config.modulepath, mainmod)
154
+ modules[mod] = File.join(@config.modulepath, mainmod)
124
155
  else
125
156
  modules[mod] = nil
126
157
  end
@@ -133,7 +164,7 @@ module Hieracles
133
164
  end
134
165
 
135
166
  def puppet_facts
136
- if Config.usedb
167
+ if @config.usedb
137
168
  resp = request_db.node_facts(@fqdn)
138
169
  @notifications = resp.notifications
139
170
  if resp.total_records > 0
@@ -148,7 +179,7 @@ module Hieracles
148
179
  end
149
180
 
150
181
  def request_db
151
- @_request ||= Hieracles::Puppetdb::Request.new Config.puppetdb
182
+ @_request ||= Hieracles::Puppetdb::Request.new @config.puppetdb
152
183
  end
153
184
 
154
185
  def merge_trees(left, right)
@@ -165,21 +196,22 @@ module Hieracles
165
196
  def merge_value(previous, value)
166
197
  if value.is_a? Array
167
198
  if previous == []
168
- deep_sort(value)
199
+ { merged: deep_sort(value) }
169
200
  else
170
- left = previous.last[:merged]
201
+ left = { merged: previous.last[:merged] }
202
+ right = { merged: value }
171
203
  case @hiera.merge_behavior
172
204
  # TODO: handle the case where right is not an array
173
205
  when :deeper
174
- deep_sort(left | value)
206
+ deep_sort(left.deep_merge!(right))
175
207
  when :deep
176
- deep_sort(left | value)
208
+ deep_sort(left.deep_merge(right))
177
209
  else
178
- deep_sort(value)
210
+ deep_sort(right)
179
211
  end
180
212
  end
181
213
  else
182
- value
214
+ { merged: value }
183
215
  end
184
216
  end
185
217
 
@@ -4,17 +4,20 @@ module Hieracles
4
4
  extend self
5
5
 
6
6
  def farms(config)
7
- @_farms ||= Dir.glob(format(config.classpath, '*')).sort
7
+ Dir.glob(format(config.classpath, '*')).sort.map do |f|
8
+ sub = Regexp.new(".*#{config.classpath.sub(/%s/,'([^/]*)')}")
9
+ f.sub(sub, "\\1")
10
+ end
8
11
  end
9
12
 
10
13
  def nodes(config)
11
- @_nodes ||= Dir.glob(File.join(config.encpath, '*.yaml')).sort.map do |f|
14
+ Dir.glob(File.join(config.encpath, '*.yaml')).sort.map do |f|
12
15
  File.basename(f, '.yaml')
13
16
  end
14
17
  end
15
18
 
16
19
  def modules(config)
17
- @_modules ||= Dir.glob(File.join(config.modulepath, '*')).sort.map do |f|
20
+ Dir.glob(File.join(config.modulepath, '*')).sort.map do |f|
18
21
  File.basename(f)
19
22
  end
20
23
  end
@@ -29,6 +29,11 @@ module Hieracles
29
29
  hash1.merge!(hash2, &merger)
30
30
  end
31
31
 
32
+ def local_merge(hash1, hash2)
33
+ merger = proc { |key, v1, v2| v1.is_a?(Hash) && v2.is_a?(Hash) ? v1.merge(v2, &merger) : v2 }
34
+ hash1.merge(hash2, &merger)
35
+ end
36
+
32
37
  def deep_sort(object)
33
38
  if object.is_a?(Hash)
34
39
  res = {}
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Hieracles::Config do
4
- describe '.load' do
4
+ describe '.new' do
5
5
  context 'with an existing file' do
6
6
  let(:options) { { config: 'spec/files/config.yml' } }
7
7
  let(:expected) do
@@ -11,13 +11,13 @@ describe Hieracles::Config do
11
11
  hierafile: File.expand_path('spec/files/hiera.yaml')
12
12
  }
13
13
  end
14
- before { Hieracles::Config.load options }
14
+ let(:config) { Hieracles::Config.new options }
15
15
 
16
16
  it 'initialize config values' do
17
- expect(Hieracles::Config.classpath).to eq expected[:classpath]
18
- expect(Hieracles::Config.modulepath).to eq expected[:modulepath]
19
- expect(Hieracles::Config.hierafile).to eq expected[:hierafile]
20
- expect(Hieracles::Config.format).to eq 'Console'
17
+ expect(config.classpath).to eq expected[:classpath]
18
+ expect(config.modulepath).to eq expected[:modulepath]
19
+ expect(config.hierafile).to eq expected[:hierafile]
20
+ expect(config.format).to eq 'Console'
21
21
  end
22
22
  end
23
23
 
@@ -36,13 +36,13 @@ describe Hieracles::Config do
36
36
  hierafile: File.expand_path('spec/files/hiera.yaml')
37
37
  }
38
38
  end
39
- before { Hieracles::Config.load options }
39
+ let(:config) { Hieracles::Config.new options }
40
40
 
41
41
  it 'initialize config values' do
42
- expect(Hieracles::Config.classpath).to eq expected[:classpath]
43
- expect(Hieracles::Config.modulepath).to eq expected[:modulepath]
44
- expect(Hieracles::Config.hierafile).to eq expected[:hierafile]
45
- expect(Hieracles::Config.format).to eq 'Console'
42
+ expect(config.classpath).to eq expected[:classpath]
43
+ expect(config.modulepath).to eq expected[:modulepath]
44
+ expect(config.hierafile).to eq expected[:hierafile]
45
+ expect(config.format).to eq 'Console'
46
46
  end
47
47
  end
48
48
 
@@ -53,8 +53,8 @@ describe Hieracles::Config do
53
53
  config: 'spec/files/config_withdb.yml'
54
54
  }
55
55
  end
56
- before { Hieracles::Config.load options }
57
- it { expect(Hieracles::Config.usedb).to be true }
56
+ let(:config) { Hieracles::Config.new options }
57
+ it { expect(config.usedb).to be true }
58
58
  end
59
59
  context 'with nodb passed as param' do
60
60
  let(:options) do
@@ -63,8 +63,8 @@ describe Hieracles::Config do
63
63
  nodb: true
64
64
  }
65
65
  end
66
- before { Hieracles::Config.load options }
67
- it { expect(Hieracles::Config.usedb).to be false }
66
+ let(:config) { Hieracles::Config.new options }
67
+ it { expect(config.usedb).to be false }
68
68
  end
69
69
  end
70
70
 
@@ -76,8 +76,8 @@ describe Hieracles::Config do
76
76
  db: true
77
77
  }
78
78
  end
79
- before { Hieracles::Config.load options }
80
- it { expect(Hieracles::Config.usedb).to be true }
79
+ let(:config) { Hieracles::Config.new options }
80
+ it { expect(config.usedb).to be true }
81
81
  end
82
82
  end
83
83
 
@@ -89,30 +89,40 @@ describe Hieracles::Config do
89
89
  basepath: 'spec/files'
90
90
  }
91
91
  end
92
- before do
93
- FileUtils.rm(options[:config]) if File.exist? options[:config]
94
- Hieracles::Config.load options
95
- end
92
+ let(:config) { Hieracles::Config.new options }
96
93
  after { FileUtils.rm(options[:config]) if File.exist? options[:config] }
97
94
 
98
95
  it 'creates a default config file' do
96
+ config.classpath
99
97
  expect(File.exist? options[:config]).to be true
100
98
  end
101
99
 
102
100
  it 'initialize config values' do
103
- expect(Hieracles::Config.classpath).to eq File.expand_path('spec/files/manifests/classes/%s.pp')
101
+ expect(config.classpath).to eq File.expand_path('spec/files/manifests/classes/%s.pp')
104
102
  end
105
103
  end
106
104
  end
107
105
 
108
- describe '.defaultconfig' do
109
- it { expect(Hieracles::Config.defaultconfig).not_to eq nil }
110
- end
106
+ # describe '.defaultconfig' do
107
+ # let(:config) { Hieracles::Config.new Hash.new }
108
+ # before {
109
+ # allow(config).
110
+ # to receive(:defaultconfig).
111
+ # and_return('spec/files/config.yml')
112
+ # }
113
+ # it { expect(config.defaultconfig).not_to eq nil }
114
+ # end
111
115
 
112
116
  describe '.extract_params' do
117
+ let(:options) do
118
+ {
119
+ config: 'spec/files/config.yml'
120
+ }
121
+ end
113
122
  let(:str) { 'bla=blu;one=two' }
114
123
  let(:expected) { { bla: 'blu', one: 'two' } }
115
- it { expect(Hieracles::Config.extract_params(str)).to eq expected }
124
+ let(:config) { Hieracles::Config.new options }
125
+ it { expect(config.extract_params(str)).to eq expected }
116
126
  end
117
127
 
118
128
  describe '.scope' do
@@ -124,9 +134,9 @@ describe Hieracles::Config do
124
134
  }
125
135
  end
126
136
  let(:expected) { 'Debian' }
127
- before { Hieracles::Config.load options }
137
+ let(:config) { Hieracles::Config.new options }
128
138
 
129
- it { expect(Hieracles::Config.scope[:osfamily]).to eq expected }
139
+ it { expect(config.scope[:osfamily]).to eq expected }
130
140
  end
131
141
  context 'with a json file' do
132
142
  let(:options) do
@@ -136,21 +146,27 @@ describe Hieracles::Config do
136
146
  }
137
147
  end
138
148
  let(:expected) { 'Debian' }
139
- before { Hieracles::Config.load options }
149
+ let(:config) { Hieracles::Config.new options }
140
150
 
141
- it { expect(Hieracles::Config.scope[:osfamily]).to eq expected }
151
+ it { expect(config.scope[:osfamily]).to eq expected }
142
152
  end
143
153
  end
144
154
 
145
155
  describe '.resolve_path' do
156
+ let(:options) do
157
+ {
158
+ config: 'spec/files/config.yml'
159
+ }
160
+ end
161
+ let(:config) { Hieracles::Config.new options }
146
162
  context "when path is found" do
147
163
  let(:path) { 'README.md' }
148
164
  let(:expected) { File.expand_path('README.md') }
149
- it { expect(Hieracles::Config.resolve_path(path)).to eq expected }
165
+ it { expect(config.resolve_path(path)).to eq expected }
150
166
  end
151
167
  context "when path is not found anywhere" do
152
168
  let(:path) { 'README-NOT.md' }
153
- it { expect { Hieracles::Config.resolve_path(path) }.to raise_error(IOError) }
169
+ it { expect { config.resolve_path(path) }.to raise_error(IOError) }
154
170
  end
155
171
  end
156
172