On Feb 10, 2010, at 10:53 AM, Brice Figureau wrote:
On 10/02/10 01:56, Luke Kanies wrote:
+0.9, with one comment.
On Feb 9, 2010, at 1:26 PM, Brice Figureau wrote:
Signed-off-by: Brice Figureau <[email protected]>
---
lib/puppet/parser/functions/require.rb | 7 +++++++
spec/unit/parser/functions/require.rb | 11 +++++++++++
2 files changed, 18 insertions(+), 0 deletions(-)
diff --git a/lib/puppet/parser/functions/require.rb
b/lib/puppet/parser/functions/require.rb
index d72169a..3e79619 100644
--- a/lib/puppet/parser/functions/require.rb
+++ b/lib/puppet/parser/functions/require.rb
@@ -37,6 +37,13 @@ fail if used with earlier clients.
vals = [vals] unless vals.is_a?(Array)
vals.each do |klass|
+ # lookup the class in the scopes
+ if classobj = find_hostclass(klass)
+ klass = classobj.classname
+ else
+ raise Puppet::ParseError, "Could not find class
%s" %
klass
+ end
+
# This is a bit hackish, in some ways, but it's the
only way
# to configure a dependency that will make it to the
client.
# The 'obvious' way is just to add an edge in the
catalog,
diff --git a/spec/unit/parser/functions/require.rb
b/spec/unit/parser/functions/require.rb
index 577a52a..532c069 100755
--- a/spec/unit/parser/functions/require.rb
+++ b/spec/unit/parser/functions/require.rb
@@ -13,6 +13,8 @@ describe "the require function" do
@scope.stubs(:resource).returns @resource
@scope.stubs(:findresource)
@scope.stubs(:compiler).returns(@compiler)
+ @klass = stub 'class', :classname => "myclass"
+ @scope.stubs(:find_hostclass).returns(@klass)
end
it "should exist" do
@@ -45,4 +47,13 @@ describe "the require function" do
@scope.function_require("myclass")
end
+
+ it "should lookup the absolute class path" do
+ @scope.stubs(:function_include)
+
+
@scope.expects(:find_hostclass).with("myclass").returns(@klass)
+ @klass.expects(:classname).returns("myclass")
+
+ @scope.function_require("myclass")
+ end
end
I've been trying to use real classes in these tests, rather than
mocks,
because it's often actually easier and does a better job of testing.
In this case, you should be able to do something like:
@parser.newclass "my::class"
@scope.search "my"
Hmm, is the Scope#search a master only method?
I'm fixing the bug in 0.25.x, what would be the equivalent?
Heh, I guess it doesn't actually exist. There's a 'function_search'
method, but I think '@scope.add_namespace("my")' is actually what I
meant.
Basically I'd like to replicate the bug manifest in ruby code (without
the bell and whistles of the ruby DSL which is not in 0.25.x):
class one {
}
class two::one {
require ::one
}
What I have difficulties is to create or retrieve the scope of
two::one,
so that I can function_require in there.
Any idea?
There's a 'class_scope' method which should retrieve a given class's
scope. But really... I'd just do a minimal, what you think best patch
here. I've entirely refactored this code, so none of these tests will
port well anyway.
@scope.expects(:function_include).with("my::class")
@scope.function_require("my::class")
That shows you're actually looking up qualified variables, in a way
that's more resilient to internal changes.
--
Brice Figureau
My Blog: http://www.masterzen.fr/
--
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
.
--
I respect faith, but doubt is what gets you an education.
-- Wilson Mizner
---------------------------------------------------------------------
Luke Kanies -|- http://reductivelabs.com -|- +1(615)594-8199
--
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.