+1
On Mar 17, 2009, at 1:52 PM, Peter Meier wrote:
>
> 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.
>
> This behavior change requires that we drop one test, which have
> become anyway deprecated.
> ---
> lib/facter/util/confine.rb | 24 ++++++++++----------
> lib/facter/util/values.rb | 13 +++++++++++
> spec/unit/util/confine.rb | 51 +++++++++++++++++++++++++++++++++++
> ++++----
> 3 files changed, 71 insertions(+), 17 deletions(-)
> create mode 100644 lib/facter/util/values.rb
>
> diff --git a/lib/facter/util/confine.rb b/lib/facter/util/confine.rb
> index a430bbe..4cbb32c 100644
> --- a/lib/facter/util/confine.rb
> +++ b/lib/facter/util/confine.rb
> @@ -1,22 +1,20 @@
> # A restricting tag for fact resolution mechanisms. The tag must be
> true
> # for the resolution mechanism to be suitable.
> +
> +require 'facter/util/values'
> +
> class Facter::Util::Confine
> attr_accessor :fact, :values
>
> + include Facter::Util::Values
> +
> # 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
> + @values = values
> end
>
> def to_s
> @@ -29,13 +27,15 @@ class Facter::Util::Confine
> Facter.debug "No fact for %s" % @fact
> return false
> end
> - value = fact.value
> + value = convert(fact.value)
>
> return false if value.nil?
>
> - @values.each { |v|
> - return true if value.downcase == v.downcase
> - }
> + @values.each do |v|
> + v = convert(v)
> + next unless v.class == value.class
> + return true if value == v
> + end
> return false
> end
> end
> diff --git a/lib/facter/util/values.rb b/lib/facter/util/values.rb
> new file mode 100644
> index 0000000..64346b7
> --- /dev/null
> +++ b/lib/facter/util/values.rb
> @@ -0,0 +1,13 @@
> +# A util module for facter containing helper methods
> +module Facter
> + module Util
> + module Values
> + module_function
> +
> + def convert(value)
> + value = value.to_s if value.is_a?(Symbol)
> + value
> + end
> + end
> + end
> +end
> diff --git a/spec/unit/util/confine.rb b/spec/unit/util/confine.rb
> index 5c1ce3b..819e2a4 100755
> --- a/spec/unit/util/confine.rb
> +++ b/spec/unit/util/confine.rb
> @@ -3,6 +3,9 @@
> require File.dirname(__FILE__) + '/../../spec_helper'
>
> require 'facter/util/confine'
> +require 'facter/util/values'
> +
> +include Facter::Util::Values
>
> describe Facter::Util::Confine do
> it "should require a fact name" do
> @@ -17,10 +20,6 @@ describe Facter::Util::Confine do
> Facter::Util::Confine.new("yay", "test",
> "other").values.should == ["test", "other"]
> end
>
> - it "should convert all values to strings" do
> - Facter::Util::Confine.new("yay", :test).values.should ==
> %w{test}
> - end
> -
> it "should fail if no fact name is provided" do
> lambda { Facter::Util::Confine.new(nil, :test) }.should
> raise_error(ArgumentError)
> end
> @@ -35,7 +34,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", :xy, true, 1, [3,4])
> @fact = mock 'fact'
> Facter.stubs(:[]).returns @fact
> end
> @@ -66,10 +65,52 @@ describe Facter::Util::Confine do
> @confine.true?.should be_true
> end
>
> + it "should return true if any of the provided symbol values
> matches the fact's value" do
> + @fact.stubs(:value).returns :xy
> +
> + @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.6.0.6
>
>
> >
--
The big thieves hang the little ones. -- Czech Proverb
---------------------------------------------------------------------
Luke Kanies | http://reductivelabs.com | http://madstop.com
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---