this ensures we can compare all kind of objects and
not only instances of strings.
introducing this behavior required that we introduce
a convert util method, to ensure that we convert the value
correctly. Introduced this method in other places as well.
---
lib/facter/util.rb | 11 +++++++++++
lib/facter/util/confine.rb | 26 ++++++++++++++------------
spec/unit/util/confine.rb | 38 +++++++++++++++++++++++++++++++++++++-
3 files changed, 62 insertions(+), 13 deletions(-)
create mode 100644 lib/facter/util.rb
diff --git a/lib/facter/util.rb b/lib/facter/util.rb
new file mode 100644
index 0000000..ebd2646
--- /dev/null
+++ b/lib/facter/util.rb
@@ -0,0 +1,11 @@
+# A util module for facter containing helper methods
+module Facter
+ module Util
+ module_function
+
+ def convert(value)
+ value = value.to_s if value.is_a?(Symbol)
+ value
+ end
+ end
+end
diff --git a/lib/facter/util/confine.rb b/lib/facter/util/confine.rb
index a430bbe..7412123 100644
--- a/lib/facter/util/confine.rb
+++ b/lib/facter/util/confine.rb
@@ -1,22 +1,22 @@
# A restricting tag for fact resolution mechanisms. The tag must be true
# for the resolution mechanism to be suitable.
+
+require 'facter/util'
+
class Facter::Util::Confine
attr_accessor :fact, :values
+ include Facter::Util
+
# Add the restriction. Requires the fact name, an operator, and the value
# we're comparing to.
def initialize(fact, *values)
raise ArgumentError, "The fact name must be provided" unless fact
raise ArgumentError, "One or more values must be provided" if
values.empty?
- fact = fact.to_s if fact.is_a? Symbol
- @fact = fact
- @values = values.collect do |value|
- if value.is_a? String
- value
- else
- value.to_s
- end
- end
+ @fact = convert(fact)
+ @values = values.collect { |value|
+ convert(value)
+ }
end
def to_s
@@ -33,9 +33,11 @@ class Facter::Util::Confine
return false if value.nil?
- @values.each { |v|
- return true if value.downcase == v.downcase
- }
+ @values.each do |v|
+ next unless v.class == value.class
+ return true if v.is_a?(String) and v.downcase == value.downcase
+ return true if v == value
+ end
return false
end
end
diff --git a/spec/unit/util/confine.rb b/spec/unit/util/confine.rb
index 5c1ce3b..5bf6536 100755
--- a/spec/unit/util/confine.rb
+++ b/spec/unit/util/confine.rb
@@ -35,7 +35,7 @@ describe Facter::Util::Confine do
describe "when evaluating" do
before do
- @confine = Facter::Util::Confine.new("yay", "one", "two")
+ @confine = Facter::Util::Confine.new("yay", "one", "two", true, 1,
[3,4])
@fact = mock 'fact'
Facter.stubs(:[]).returns @fact
end
@@ -66,10 +66,46 @@ describe Facter::Util::Confine do
@confine.true?.should be_true
end
+ it "should return true if any of the provided integer values matches
the fact's value" do
+ @fact.stubs(:value).returns 1
+
+ @confine.true?.should be_true
+ end
+
+ it "should return true if any of the provided boolan values matches
the fact's value" do
+ @fact.stubs(:value).returns true
+
+ @confine.true?.should be_true
+ end
+
+ it "should return true if any of the provided array values matches the
fact's value" do
+ @fact.stubs(:value).returns [3,4]
+
+ @confine.true?.should be_true
+ end
+
it "should return false if none of the provided values matches the
fact's value" do
@fact.stubs(:value).returns "three"
@confine.true?.should be_false
end
+
+ it "should return false if none of the provided integer values matches
the fact's value" do
+ @fact.stubs(:value).returns 2
+
+ @confine.true?.should be_false
+ end
+
+ it "should return false if none of the provided boolan values matches
the fact's value" do
+ @fact.stubs(:value).returns false
+
+ @confine.true?.should be_false
+ end
+
+ it "should return false if none of the provided array values matches
the fact's value" do
+ @fact.stubs(:value).returns [1,2]
+
+ @confine.true?.should be_false
+ end
end
end
--
1.5.6.3
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Puppet Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/puppet-dev?hl=en
-~----------~----~----~----~------~----~------~--~---