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?
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?
> @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.