[chef] Re: Re: Re: Re: Re: Re: Custom LWRP undefined local variable or method `new_resource'


Chronological Thread 
  • From: AJ Christensen < >
  • To:
  • Subject: [chef] Re: Re: Re: Re: Re: Re: Custom LWRP undefined local variable or method `new_resource'
  • Date: Fri, 6 Jan 2012 10:11:05 +1300

Have a look at this, sounds like you are re-implementing some of the
stuff that I did for the MiniTest cookbook:

https://github.com/fujin/minitest-cookbook/blob/develop/cookbooks/minitest/providers/unit_testcase.rb#L38-48

Cheers,

AJ

On 6 January 2012 10:07, Bryan Baugher 
< >
 wrote:
> I am using a ruby_block because I don't want the rspec require or testing to
> occur before the 'run_context.include_recipe "rspec"' as that will ensure
> that rspec is installed.
>
> That helped me get pointed in the right direction, but didn't quite work for
> me since I could not turn my proc into ruby code.
>
> I found doing this works almost works,
>
> block = new_resource.it
> should = new_resource.should
>
> describe new_resource.name do
>   it should do
>     Rspec.class_exec{ block.call }
>   end
> end
>
> But the block still doesn't know about Rspec, giving a 'undefined method
> exception for raise_error' a Rspec method.
>
> On Thu, Jan 5, 2012 at 8:20 AM, Andiabes 
> < >
>  wrote:
>>
>> Why use a ruby block in your action? The action code already executes in
>> the converge phase. You could try to use ruby's ' eval' method directly to
>> call into rspec
>>
>>
>> On Jan 4, 2012, at 5:16 PM, Bryan Baugher 
>> < >
>>  wrote:
>>
>> Yes, you are right. 'puts self.inspect' gives '#<Class:0x2b2aba647728>'
>> inside the describe block, where as outside 'put self.inspect' gives a 
>> large
>> blob of chef info.
>>
>> I am still pretty new to ruby, is there a way to pass new_resource into
>> this block?
>>
>> On Wed, Jan 4, 2012 at 4:05 PM, Daniel DeLeo 
>> < >
>>  wrote:
>>>
>>>
>>>
>>> On Wednesday, January 4, 2012 at 12:35 PM, andi abes wrote:
>>>
>>> > try @new_resource ... it's an instance variable.
>>> >
>>> > On Wed, Jan 4, 2012 at 12:45 PM, 
>>> > <
>>> > (mailto: )>
>>> >  wrote:
>>> > > I created a custom resource that tries to mimic ruby_block's block.
>>> > > This
>>> > > resource was for Rspec and I wanted to follow the typical style of
>>> > > writing
>>> > > rspec with the format,
>>> > >
>>> > > rspec "myApp" do
>>> > > it "should ..." do
>>> > > ...
>>> > > end
>>> > > end
>>> > >
>>> > > So I have written my resource as follows,
>>> > >
>>> > > //
>>> > >
>>> > > def initialize(*args)
>>> > > super
>>> > > @action = :describe
>>> > > end
>>> > >
>>> > > def it(s, &it)
>>> > > if s
>>> > > should(s)
>>> > > end
>>> > >
>>> > > if block_given? and it
>>> > > @it = it
>>> > > else
>>> > > @it
>>> > > end
>>> > > end
>>> > >
>>> > > actions :describe
>>> > >
>>> > > attribute :name, :kind_of => String, :name_attribute => true
>>> > > attribute :should, :kind_of => String, :default => "RSpec Test"
>>> > >
>>> > > \\
>>> > >
>>> > > And my provider as,
>>> > >
>>> > > //
>>> > >
>>> > > action :describe do
>>> > > run_context.include_recipe "rspec"
>>> > >
>>> > > ruby_block "Rspec:#{new_resource.name (http://new_resource.name)}" do
>>> > > block do
>>> > > require 'rspec/autorun'
>>> > >
>>> > > describe new_resource.name (http://new_resource.name) do
>>> > > it new_resource.should do
>>> > > new_resource.it.call
>>> > > end
>>> > > end
>>> > > end
>>> > > end
>>> > >
>>> > > new_resource.updated_by_last_action(true)
>>> > > end
>>> > >
>>> > > \\
>>> > >
>>> > > Chef is telling me that new_resource is undefined in my provider at,
>>> > >
>>> > > 'it new_resource.should do'
>>> > >
>>> > > Any thoughts?
>>>
>>> Probably RSpec is changing the execution context. Throw a `puts
>>> self.inspect` in there to see.
>>>
>>> --
>>> Dan DeLeo
>>>
>>
>>
>>
>> --
>> -Bryan
>
>
>
>
> --
> -Bryan



Archive powered by MHonArc 2.6.16.

§