fqdn_facts 0.2.0 → 0.3.0

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: 37772163234e2641a79f0961962983973d326c04
4
- data.tar.gz: 2c232820195afc81d2b6635d38b681389c30822f
3
+ metadata.gz: 59d547e6241c5963958b2de19fd71bfe41556a91
4
+ data.tar.gz: 113337231cca3023d9f1a4078c9395e2a0a3269e
5
5
  SHA512:
6
- metadata.gz: 02d5404556ad9b9ca9e13ad6952da6c6baaf276797c9fa0739a3d545be8b264f9e0b41118443864bb6b48182899da561b4e7da7fac2483a40408d5414db46c06
7
- data.tar.gz: 6de0e4d9597ec6b5ee6677727d9d0e9f970c33f3026974b4b79ecd4e34a1d85c725e5d2cedd254320cb5d406b0fb4a59bb7def57b8bd3bbc6b37a4e8c57b1b1c
6
+ metadata.gz: 8ab809b6c1096f6da64166e840b32ec79141d158cb309adb40c6ed4f097858e3789dcf49e1f3d3aa8e4ff98a1b826a29b62224dad8993b234ed5ab730aca452b
7
+ data.tar.gz: 748ba5ab9d238fba1b8e46d4b9fb787711cb563784dc72969d25ae86b97fa54da80e7cfacb48c938dd8ace0726f6d403fb0682c2fb930eb120736a1deaabc9f3
data/.rubocop.yml ADDED
@@ -0,0 +1,218 @@
1
+ AllCops:
2
+ Include:
3
+ - Rakefile
4
+ Exclude:
5
+ - test.rb
6
+ - bin/**
7
+
8
+ Style/Tab:
9
+ Enabled: false
10
+
11
+ Style/IndentationWidth:
12
+ Enabled: false
13
+
14
+ SpecialGlobalVars:
15
+ Enabled: false
16
+
17
+ BlockComments:
18
+ Enabled: false
19
+
20
+ Encoding:
21
+ Enabled: false
22
+
23
+ RegexpLiteral:
24
+ Enabled: false
25
+
26
+ # dots at the end of lines are okay
27
+ DotPosition:
28
+ Enabled: false
29
+
30
+ CollectionMethods:
31
+ PreferredMethods:
32
+ map: 'collect'
33
+ map!: 'collect!'
34
+ reduce: 'inject'
35
+ detect: 'find'
36
+ find_all: 'select'
37
+
38
+ CaseIndentation:
39
+ IndentWhenRelativeTo: end
40
+ IndentOneStep: true
41
+
42
+ LineLength:
43
+ Enabled: false
44
+
45
+ # Personally, I prefer to outdent public/protected/private, as it makes
46
+ # it easier to see the different sections of code.
47
+ AccessModifierIndentation:
48
+ EnforcedStyle: outdent
49
+
50
+ EmptyLinesAroundAccessModifier:
51
+ Enabled: true
52
+
53
+ EndAlignment:
54
+ AlignWith: variable
55
+
56
+ SpaceInsideBrackets:
57
+ Enabled: false
58
+
59
+ Style/ClassAndModuleChildren:
60
+ Enabled: false
61
+
62
+ Style/CommandLiteral:
63
+ Enabled: false
64
+
65
+ # Relaxed.Ruby.Style
66
+
67
+ Style/Alias:
68
+ Enabled: false
69
+ StyleGuide: http://relaxed.ruby.style/#stylealias
70
+
71
+ Style/BeginBlock:
72
+ Enabled: false
73
+ StyleGuide: http://relaxed.ruby.style/#stylebeginblock
74
+
75
+ Style/BlockDelimiters:
76
+ Enabled: false
77
+ StyleGuide: http://relaxed.ruby.style/#styleblockdelimiters
78
+
79
+ Style/Documentation:
80
+ Enabled: false
81
+ StyleGuide: http://relaxed.ruby.style/#styledocumentation
82
+
83
+ Style/DotPosition:
84
+ Enabled: false
85
+ StyleGuide: http://relaxed.ruby.style/#styledotposition
86
+
87
+ Style/DoubleNegation:
88
+ Enabled: false
89
+ StyleGuide: http://relaxed.ruby.style/#styledoublenegation
90
+
91
+ Style/EndBlock:
92
+ Enabled: false
93
+ StyleGuide: http://relaxed.ruby.style/#styleendblock
94
+
95
+ Style/FormatString:
96
+ Enabled: false
97
+ StyleGuide: http://relaxed.ruby.style/#styleformatstring
98
+
99
+ Style/IfUnlessModifier:
100
+ Enabled: false
101
+ StyleGuide: http://relaxed.ruby.style/#styleifunlessmodifier
102
+
103
+ Style/Lambda:
104
+ Enabled: false
105
+ StyleGuide: http://relaxed.ruby.style/#stylelambda
106
+
107
+ Style/ModuleFunction:
108
+ Enabled: false
109
+ StyleGuide: http://relaxed.ruby.style/#stylemodulefunction
110
+
111
+ Style/MultilineBlockChain:
112
+ Enabled: false
113
+ StyleGuide: http://relaxed.ruby.style/#stylemultilineblockchain
114
+
115
+ Style/NegatedIf:
116
+ Enabled: false
117
+ StyleGuide: http://relaxed.ruby.style/#stylenegatedif
118
+
119
+ Style/NegatedWhile:
120
+ Enabled: false
121
+ StyleGuide: http://relaxed.ruby.style/#stylenegatedwhile
122
+
123
+ Style/ParallelAssignment:
124
+ Enabled: false
125
+ StyleGuide: http://relaxed.ruby.style/#styleparallelassignment
126
+
127
+ Style/PercentLiteralDelimiters:
128
+ Enabled: false
129
+ StyleGuide: http://relaxed.ruby.style/#stylepercentliteraldelimiters
130
+
131
+ Style/PerlBackrefs:
132
+ Enabled: false
133
+ StyleGuide: http://relaxed.ruby.style/#styleperlbackrefs
134
+
135
+ Style/Semicolon:
136
+ Enabled: false
137
+ StyleGuide: http://relaxed.ruby.style/#stylesemicolon
138
+
139
+ Style/SignalException:
140
+ Enabled: false
141
+ StyleGuide: http://relaxed.ruby.style/#stylesignalexception
142
+
143
+ Style/SingleLineBlockParams:
144
+ Enabled: false
145
+ StyleGuide: http://relaxed.ruby.style/#stylesinglelineblockparams
146
+
147
+ Style/SingleLineMethods:
148
+ Enabled: false
149
+ StyleGuide: http://relaxed.ruby.style/#stylesinglelinemethods
150
+
151
+ Style/SpaceBeforeBlockBraces:
152
+ Enabled: false
153
+ StyleGuide: http://relaxed.ruby.style/#stylespacebeforeblockbraces
154
+
155
+ Style/SpaceInsideParens:
156
+ Enabled: false
157
+ StyleGuide: http://relaxed.ruby.style/#stylespaceinsideparens
158
+
159
+ Style/SpecialGlobalVars:
160
+ Enabled: false
161
+ StyleGuide: http://relaxed.ruby.style/#stylespecialglobalvars
162
+
163
+ Style/StringLiterals:
164
+ Enabled: false
165
+ StyleGuide: http://relaxed.ruby.style/#stylestringliterals
166
+
167
+ Style/TrailingComma:
168
+ Enabled: false
169
+ StyleGuide: http://relaxed.ruby.style/#styletrailingcomma
170
+
171
+ Style/TrailingCommaInLiteral:
172
+ Enabled: false
173
+ StyleGuide: http://relaxed.ruby.style/#styletrailingcomma
174
+
175
+ Style/TrailingCommaInArguments:
176
+ Enabled: false
177
+ StyleGuide: http://relaxed.ruby.style/#styletrailingcomma
178
+
179
+ Style/WhileUntilModifier:
180
+ Enabled: false
181
+ StyleGuide: http://relaxed.ruby.style/#stylewhileuntilmodifier
182
+
183
+ Lint/AmbiguousRegexpLiteral:
184
+ Enabled: false
185
+ StyleGuide: http://relaxed.ruby.style/#lintambiguousregexpliteral
186
+
187
+ Lint/AssignmentInCondition:
188
+ Enabled: false
189
+ StyleGuide: http://relaxed.ruby.style/#lintassignmentincondition
190
+
191
+ Metrics/AbcSize:
192
+ Enabled: false
193
+
194
+ Metrics/BlockNesting:
195
+ Enabled: false
196
+
197
+ Metrics/ClassLength:
198
+ Enabled: false
199
+
200
+ Metrics/ModuleLength:
201
+ Enabled: false
202
+
203
+ Metrics/CyclomaticComplexity:
204
+ Enabled: false
205
+
206
+ Metrics/LineLength:
207
+ Enabled: false
208
+
209
+ Metrics/MethodLength:
210
+ Enabled: false
211
+
212
+ Metrics/ParameterLists:
213
+ Enabled: false
214
+
215
+ Metrics/PerceivedComplexity:
216
+ Enabled: false
217
+
218
+
data/fqdn_facts.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
3
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
2
+ $LOAD_PATH.unshift File.expand_path('../lib', __FILE__)
3
+
4
4
  require 'fqdn_facts/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
@@ -8,8 +8,11 @@ Gem::Specification.new do |spec|
8
8
  spec.version = FqdnFacts::VERSION
9
9
  spec.authors = ["Carl P. Corliss"]
10
10
  spec.email = ["rabbitt@gmail.com"]
11
- spec.summary = %q{Provides a DSL for generating FQDN specific facts that can be used with Facter}
12
- spec.description = %q{FqdnFacts allows you to create fact handlers for different FQDN formats. This is primarily intended for use with Puppet/Facter to facilitate dynamic fact generation based on FQDNs.}
11
+ spec.summary = 'Provides a DSL for generating FQDN specific facts that can be used with Facter'
12
+ spec.description = <<-'EOF'
13
+ FqdnFacts allows you to create fact handlers for different FQDN formats. This is primarily intended for
14
+ use with Puppet/Facter to facilitate dynamic fact generation based on FQDNs.
15
+ EOF
13
16
  spec.homepage = "https://github.com/rabbitt/fqdn_facts/"
14
17
  spec.license = "GPLv2"
15
18
 
@@ -18,7 +21,17 @@ Gem::Specification.new do |spec|
18
21
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
22
  spec.require_paths = ["lib"]
20
23
 
21
- spec.add_development_dependency "bundler", "~> 1.6"
22
- spec.add_development_dependency "rake"
23
- spec.add_development_dependency "rspec"
24
+ spec.add_development_dependency "rake", '~> 10.5.0'
25
+ spec.add_development_dependency "rack", '~> 1.6.4'
26
+ spec.add_development_dependency "rspec", '~> 3.4.0'
27
+ spec.add_development_dependency "rspec-its", '~> 1.2.0'
28
+ spec.add_development_dependency "rspec-collection_matchers", '~> 1.1.2'
29
+ spec.add_development_dependency "guard-rspec", '~> 4.6.4'
30
+
31
+ # optional dependencies
32
+ unless RUBY_ENGINE == 'jruby'
33
+ spec.add_development_dependency "pry", '~> 0.10.3'
34
+ spec.add_development_dependency "pry-nav", '~> 0.2.4'
35
+ spec.add_development_dependency 'rabbitt-githooks', '~> 1.6.1'
36
+ end
24
37
  end
data/lib/fqdn_facts.rb CHANGED
@@ -59,7 +59,6 @@ module FqdnFacts
59
59
  @registry[klass.to_sym] = Handler.const_get(klass_const).new
60
60
  end
61
61
 
62
-
63
62
  if block.arity == 1
64
63
  yield @registry[klass.to_sym]
65
64
  else
@@ -23,7 +23,7 @@ class Object
23
23
  #
24
24
  # @return [false]
25
25
  def empty?
26
- return false
26
+ false
27
27
  end
28
28
 
29
29
  # returns true if the object "contains" data
@@ -41,11 +41,9 @@ class Object
41
41
  #
42
42
  # @return the result of the method call, if the method exists, or nil if it doesn't
43
43
  def try(method, *args, &block)
44
- begin
45
- self.public_send(method, *args, &block)
46
- rescue NoMethodError
47
- nil
48
- end
44
+ public_send(method, *args, &block)
45
+ rescue NoMethodError
46
+ nil
49
47
  end
50
48
  end
51
49
 
@@ -67,34 +65,32 @@ class String
67
65
  # converts a camelized string to underscored
68
66
  # @return String
69
67
  def underscore
70
- self.split(/([A-Z][a-z0-9]+)/).reject(&:empty?).collect(&:downcase).join('_')
68
+ split(/([A-Z][a-z0-9]+)/).reject(&:empty?).collect(&:downcase).join('_')
71
69
  end
72
70
 
73
71
  # converts an underscored string to a camelized one
74
72
  # @return String
75
73
  def camelize
76
- self.split('_').collect(&:capitalize).join
74
+ split('_').collect(&:capitalize).join
77
75
  end
78
76
 
79
77
  # Attempts to transform string into a class constant
80
- def constantize(base=Object)
81
- self.split('/')
82
- .collect(&:camelize)
83
- .inject(base) { |obj,klass| obj.const_get(klass) }
78
+ def constantize(base = Object)
79
+ split('/')
80
+ .collect(&:camelize)
81
+ .inject(base) { |obj, klass| obj.const_get(klass) }
84
82
  end
85
83
  end
86
84
 
87
85
  class Proc
88
86
  # @see http://stackoverflow.com/a/10059209/988225
89
87
  def call_with_vars(vars, *args)
90
- begin
91
- Struct.new(*vars.keys).new(*vars.values).instance_exec(*args, &self)
92
- rescue NameError => e
93
- # don't error out - just warn
94
- file, line = e.backtrace.first.split(':')
95
- name = e.message.split(/[`']/)[1]
96
- warn "Couldn't find value for key '#{name}' at #{file}:#{line}"
97
- end
88
+ Struct.new(*vars.keys).new(*vars.values).instance_exec(*args, &self)
89
+ rescue NameError
90
+ # don't error out - just warn
91
+ file, line = $!.backtrace.first.split(':')
92
+ name = $!.message.split(/[`']/)[1]
93
+ warn "Couldn't find value for key '#{name}' at #{file}:#{line}"
98
94
  end
99
95
  end
100
96
 
@@ -110,4 +106,4 @@ class Symbol
110
106
  def split(*args)
111
107
  to_s.split(*args)
112
108
  end
113
- end
109
+ end
@@ -54,12 +54,14 @@ module FqdnFacts
54
54
  # @option data [Array] :order sets the initial order of components
55
55
  # @option data [Hash] :facts sets the initial set of facts
56
56
  def initialize(data = {})
57
- @priority = data.delete(:priority) || 1
58
- @conversions = data.delete(:conversions) || {}
59
- @components = data.delete(:components) || DEFAULT_COMPONENTS.dup
60
- @order = data.delete(:order) || DEFAULT_COMPONENTS.keys
61
- @facts = data.delete(:facts) || {}
57
+ # rubocop:disable Style/SpaceAroundOperators
58
+ @priority = data.delete(:priority) || 1
59
+ @conversions = data.delete(:conversions) || {}
60
+ @components = data.delete(:components) || DEFAULT_COMPONENTS.dup
61
+ @order = data.delete(:order) || DEFAULT_COMPONENTS.keys
62
+ @facts = data.delete(:facts) || {}
62
63
  @fqdn = ''
64
+ # rubocop:enable Style/SpaceAroundOperators
63
65
 
64
66
  add_fact(:fqdn) { fqdn }
65
67
  add_fact(:handler_class, self.class.to_s)
@@ -108,8 +110,8 @@ module FqdnFacts
108
110
  #
109
111
  # @param component <Symbol> the name of the component to set validation for
110
112
  # @param validate [Hash{Symbol=>Symbol,Hash,Array,Scalar}] validation to perform for component
111
- def component(component, validate=:any)
112
- v = case validate
113
+ def component(component, validate = :any)
114
+ value = case validate
113
115
  when :any then %r:(.+):
114
116
  when Hash then
115
117
  if @components[component.to_sym].is_a?(Hash)
@@ -136,12 +138,12 @@ module FqdnFacts
136
138
 
137
139
  if @components[component.to_sym]
138
140
  # if their not the same class, then remove any conversions
139
- unless @components[component.to_sym].is_a?(v.class)
141
+ unless @components[component.to_sym].is_a?(value.class)
140
142
  @conversions.delete(component.to_sym)
141
143
  end
142
144
  end
143
145
 
144
- @components[component.to_sym] = v
146
+ @components[component.to_sym] = value
145
147
  end
146
148
 
147
149
  # Defines a conversion rule for a given component.
@@ -151,16 +153,16 @@ module FqdnFacts
151
153
  # @param conversion [Hash,Proc] optional conversion hash, proc/lambda
152
154
  # @param block [Proc] optional block
153
155
  # @raise [ArgumentError] if conversion isn't Hash, Proc or Block
154
- def convert(component, conversion=nil, &block)
156
+ def convert(component, conversion = nil, &block)
155
157
  unless [Proc, Hash].any? { |klass| conversion.is_a?(klass) } || block_given?
156
158
  raise ArgumentError, 'expected Hash, Proc or Block'
157
159
  end
158
160
 
159
161
  component = component.to_sym
160
- conversion = conversion || block
162
+ conversion ||= block
161
163
 
162
164
  conversion = if conversion.is_a? Hash
163
- (@conversions[component]||={}).merge(conversion)
165
+ (@conversions[component] ||= {}).merge(conversion)
164
166
  else
165
167
  conversion
166
168
  end
@@ -180,7 +182,7 @@ module FqdnFacts
180
182
  #
181
183
  # @param name <String> Symbol name of the fact to add
182
184
  # @param value <Scalar,Array,Hash,Proc> value of the fact
183
- def add_fact(name, value=nil, &block)
185
+ def add_fact(name, value = nil, &block)
184
186
  value = block if block_given?
185
187
  facts[name.to_sym] = value
186
188
  end
@@ -201,17 +203,16 @@ module FqdnFacts
201
203
  # @option options [Array<Symbol>] :only a list of specific facts to retrieve
202
204
  #
203
205
  # @return [Hash{Symbol=><Scalar,Hash,Array>}]
204
- def retrieve(options={})
206
+ def retrieve(options = {})
205
207
  prefix = options.delete(:prefix)
206
208
  only = (o = options.delete(:only)).empty? ? nil : o.collect(&:to_sym)
207
209
 
208
210
  assemble.dup.tap do |facts|
209
211
  facts.replace(
210
- Hash[facts.inject({}) do |hash, (fact, value)|
211
- next hash unless only.empty? || only.include?(fact)
212
+ Hash[facts.each_with_object({}) do |(fact, value), hash|
213
+ next unless only.empty? || only.include?(fact)
212
214
  key = prefix.empty? ? fact : "#{prefix}_#{fact}"
213
215
  hash[key] = value
214
- hash
215
216
  end.sort]
216
217
  )
217
218
  end
@@ -265,7 +266,7 @@ module FqdnFacts
265
266
  debug " #{validation.class} -> #{value.inspect} == #{validation.inspect} == #{r.inspect}"
266
267
  }
267
268
  end
268
- end.tap { |r| debug " ---> validation #{r ? 'successful' : 'failed'} for #{self.class}"}
269
+ end.tap { |r| debug " ---> validation #{r ? 'successful' : 'failed'} for #{self.class}" }
269
270
  end
270
271
 
271
272
  # Compares the priority of this handler to another handler
@@ -273,34 +274,33 @@ module FqdnFacts
273
274
  # @param other <Handler> the handler to compare against
274
275
  # @return [-1, 0, 1] if other is <=, =, or >= self
275
276
  def <=>(other)
276
- self.priority <=> other.priority
277
+ priority <=> other.priority
277
278
  end
278
279
 
279
280
  # Exports the internal state as a hash
280
281
  # @api private
281
282
  def export
282
- instance_variables.inject({}) do |exports, name|
283
+ instance_variables.each_with_object({}) do |name, exports|
283
284
  varname = name.to_s.tr('@', '').to_sym
284
285
  exports[varname] = begin
285
286
  Marshal.load(Marshal.dump(instance_variable_get(name)))
286
287
  rescue TypeError
287
288
  instance_variable_get(name).dup
288
289
  end
289
- exports
290
290
  end
291
291
  end
292
292
 
293
- private
293
+ private
294
294
 
295
295
  # Assemble facts from gathered data
296
296
  # @return [self]
297
297
  # @api private
298
298
  def assemble
299
- { }.tap do |data|
299
+ {}.tap do |data|
300
300
  data.merge!(facts.merge(Hash[fqdn_components]))
301
301
 
302
302
  # expand subtypes
303
- @components.each do |name, value|
303
+ @components.select { |k, _| @order.include? k }.each do |name, value|
304
304
  # components are converted explicitly during expansino, and solely
305
305
  # based on their value
306
306
  conversion = @conversions[name]
@@ -316,17 +316,26 @@ module FqdnFacts
316
316
  end
317
317
  end
318
318
 
319
+ finished = false
320
+
319
321
  # handle any remaining runtime generated facts
320
- data.each do |fact, value|
321
- case value
322
- when Proc then value = convert_value(data, value)
323
- when Symbol then value
324
- else next
322
+ until finished
323
+ finished = true
324
+ data.each do |fact, value|
325
+ case value
326
+ when Proc then
327
+ finished = false
328
+ value = convert_value(data, value)
329
+ when Symbol then
330
+ value
331
+ else
332
+ next
333
+ end
334
+ data[fact] = value.is_a?(Symbol) ? value.to_s : value
325
335
  end
326
- data[fact] = value.is_a?(Symbol) ? value.to_s : value
327
336
  end
328
337
 
329
- data.reject! { |fact, value| value.empty? }
338
+ data.reject! { |_, value| value.empty? }
330
339
  end
331
340
  end
332
341
 
@@ -334,12 +343,12 @@ module FqdnFacts
334
343
  case converter
335
344
  when Proc then
336
345
  bind_data = value.is_a?(Hash) ? value.dup : { value: value }
337
- bind_data.merge!({
346
+ bind_data.merge!(
338
347
  fqdn: fqdn,
339
348
  components: Hash[fqdn_components],
340
349
  priority: priority,
341
350
  handler_class: self.class.name
342
- })
351
+ )
343
352
 
344
353
  value = if converter.arity == 1
345
354
  converter.call_with_vars(bind_data, value)
@@ -369,9 +378,7 @@ module FqdnFacts
369
378
 
370
379
  # @api private
371
380
  def debug(message)
372
- if ENV.keys.collect(&:downcase).include? 'debug'
373
- STDERR.puts message
374
- end
381
+ STDERR.puts message if ENV.keys.collect(&:downcase).include? 'debug'
375
382
  end
376
383
  end
377
384
  end
@@ -17,6 +17,10 @@
17
17
  =end
18
18
 
19
19
  module FqdnFacts
20
- # The current FqdnFacts version
21
- VERSION = "0.2.0"
20
+ MAJOR = 0
21
+ MINOR = 3
22
+ PATCH = 0
23
+
24
+ VERSION = "%d.%d.%d" % [ MAJOR, MINOR, PATCH ]
25
+ GEM_VERSION = Gem::Version.new(VERSION)
22
26
  end
@@ -7,17 +7,22 @@ describe FqdnFacts do
7
7
 
8
8
  components :host, :sub, :tld
9
9
 
10
- component :host, { type: %r'^([^\d]+)', id: %r'(\d+)', subtype: %r'([ms]?)'}
10
+ component :host, type: %r'^([^\d]+)', id: %r'(\d+)', subtype: %r'([ms]?)'
11
11
  component :tld, 'example.com'
12
12
 
13
- convert :host, {
14
- subtype: ->(v) { v == 'm' ? 'master' : 'slave' },
15
- id: ->(v) { v.to_i }
16
- }
13
+ convert :host,
14
+ subtype: ->(v) { v == 'm' ? 'master' : 'slave' },
15
+ id: ->(v) { v.to_i }
17
16
 
17
+ add_fact :hname, ->(f) { f[:hostname] }
18
18
  add_fact :hostname, ->(f) { f[:host] }
19
19
  add_fact :domain, ->(f) { [f[:sub], f[:tld]].join('.') }
20
20
  end
21
+
22
+ FqdnFacts.register(:foo, copy: :baseline) do
23
+ priority 15
24
+ components :sub, :tld
25
+ end
21
26
  end
22
27
 
23
28
  it 'has a version number' do
@@ -28,7 +33,44 @@ describe FqdnFacts do
28
33
  expect(FqdnFacts.registry).to include(:baseline)
29
34
  end
30
35
 
31
- context 'with fqdn "foo01m.bar.example.com"' do
36
+ context 'with fqdn set to "bar.example.com"' do
37
+ before do
38
+ @fqdn = 'bar.example.com'
39
+ @handler = FqdnFacts.handler(@fqdn)
40
+ end
41
+
42
+ it 'returns a valid hash' do
43
+ expect(@handler.retrieve_facts).to be_a Hash
44
+ end
45
+
46
+ describe 'has fact' do
47
+ let(:facts) { @handler.retrieve_facts }
48
+ {
49
+ sub: 'bar',
50
+ domain: 'bar.example.com',
51
+ fqdn: 'bar.example.com',
52
+ handler_name: 'foo'
53
+ }.each do |key, value|
54
+ it "#{key.inspect} equal to #{value.inspect}" do
55
+ expect(facts).to include(key)
56
+ expect(facts[key]).to eq(value)
57
+ end
58
+ end
59
+ end
60
+
61
+ describe "doesn't have fact" do
62
+ let(:facts) { @handler.retrieve_facts }
63
+ [
64
+ :hname, :host, :host_type, :host_id, :host_subtype, :hostname
65
+ ].each do |key, value|
66
+ it "#{key.inspect}" do
67
+ expect(facts).not_to include(key)
68
+ end
69
+ end
70
+ end
71
+ end
72
+
73
+ context 'with fqdn set to "foo01m.bar.example.com"' do
32
74
  before do
33
75
  @fqdn = 'foo01m.bar.example.com'
34
76
  @handler = FqdnFacts.handler(@fqdn)
@@ -38,20 +80,21 @@ describe FqdnFacts do
38
80
  expect(@handler.retrieve_facts).to be_a Hash
39
81
  end
40
82
 
41
- describe 'facts' do
83
+ describe 'has fact' do
42
84
  let(:facts) { @handler.retrieve_facts }
43
85
  {
44
- :host => 'foo01m',
45
- :host_type => 'foo',
46
- :host_id => 1,
47
- :host_subtype => 'master',
48
- :hostname => 'foo01m',
49
- :sub => 'bar',
50
- :domain => 'bar.example.com',
51
- :fqdn => 'foo01m.bar.example.com',
52
- :handler_name => 'baseline'
86
+ hname: 'foo01m',
87
+ host: 'foo01m',
88
+ host_type: 'foo',
89
+ host_id: 1,
90
+ host_subtype: 'master',
91
+ hostname: 'foo01m',
92
+ sub: 'bar',
93
+ domain: 'bar.example.com',
94
+ fqdn: 'foo01m.bar.example.com',
95
+ handler_name: 'baseline'
53
96
  }.each do |key, value|
54
- it "sets #{key.inspect} to #{value.inspect}" do
97
+ it "#{key.inspect} equal to #{value.inspect}" do
55
98
  expect(facts).to include(key)
56
99
  expect(facts[key]).to eq(value)
57
100
  end
metadata CHANGED
@@ -1,60 +1,144 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fqdn_facts
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Carl P. Corliss
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-03-21 00:00:00.000000000 Z
11
+ date: 2016-04-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: bundler
14
+ name: rake
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.6'
19
+ version: 10.5.0
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.6'
26
+ version: 10.5.0
27
27
  - !ruby/object:Gem::Dependency
28
- name: rake
28
+ name: rack
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0'
33
+ version: 1.6.4
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: '0'
40
+ version: 1.6.4
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 3.4.0
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 3.4.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec-its
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 1.2.0
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 1.2.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec-collection_matchers
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 1.1.2
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 1.1.2
83
+ - !ruby/object:Gem::Dependency
84
+ name: guard-rspec
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 4.6.4
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: 4.6.4
97
+ - !ruby/object:Gem::Dependency
98
+ name: pry
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 0.10.3
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 0.10.3
111
+ - !ruby/object:Gem::Dependency
112
+ name: pry-nav
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: 0.2.4
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: 0.2.4
125
+ - !ruby/object:Gem::Dependency
126
+ name: rabbitt-githooks
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
46
130
  - !ruby/object:Gem::Version
47
- version: '0'
131
+ version: 1.6.1
48
132
  type: :development
49
133
  prerelease: false
50
134
  version_requirements: !ruby/object:Gem::Requirement
51
135
  requirements:
52
- - - ">="
136
+ - - "~>"
53
137
  - !ruby/object:Gem::Version
54
- version: '0'
55
- description: FqdnFacts allows you to create fact handlers for different FQDN formats.
56
- This is primarily intended for use with Puppet/Facter to facilitate dynamic fact
57
- generation based on FQDNs.
138
+ version: 1.6.1
139
+ description: |2
140
+ FqdnFacts allows you to create fact handlers for different FQDN formats. This is primarily intended for
141
+ use with Puppet/Facter to facilitate dynamic fact generation based on FQDNs.
58
142
  email:
59
143
  - rabbitt@gmail.com
60
144
  executables: []
@@ -63,6 +147,7 @@ extra_rdoc_files: []
63
147
  files:
64
148
  - ".gitignore"
65
149
  - ".rspec"
150
+ - ".rubocop.yml"
66
151
  - ".travis.yml"
67
152
  - Gemfile
68
153
  - LICENSE.txt
@@ -96,7 +181,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
96
181
  version: '0'
97
182
  requirements: []
98
183
  rubyforge_project:
99
- rubygems_version: 2.2.2
184
+ rubygems_version: 2.4.3
100
185
  signing_key:
101
186
  specification_version: 4
102
187
  summary: Provides a DSL for generating FQDN specific facts that can be used with Facter