Forum: RSpec Cucumber: The Mysteries of Before(), After(), World() etc

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Matt W. (Guest)
on 2008-11-12 15:14
(Received via mailing list)
My use case is that I want to be able to use a Logging::Logger[1]
within my scenario code.

I can create the logger explicitly within the step block, but this is
a hackaround.

I think I could monkey-patch Cucumber::Rails::World to include my
logger, but that also feels dirty.

Is there a nice clean way I can use on of the above (AFAIK
undocumented) methods to help me?

Better, is there some documentation / a blog post I can be pointed to
so I can help myself? I have had a pretty thorough read of the code
but I'm not quite there yet with my Ruby to make sufficient sense of it.

cheers,
Matt
aslak hellesoy (Guest)
on 2008-11-12 15:52
(Received via mailing list)
On Wed, Nov 12, 2008 at 2:12 PM, Matt W. <removed_email_address@domain.invalid> 
wrote:
> methods to help me?
>

Try this:

World do
  world = Object.new
  world.extend(Logging::Logger)
  world
end

Aslak
David C. (Guest)
on 2008-11-12 15:59
(Received via mailing list)
On Wed, Nov 12, 2008 at 7:30 AM, aslak hellesoy
<removed_email_address@domain.invalid> wrote:
>> Is there a nice clean way I can use on of the above (AFAIK undocumented)
>> methods to help me?
>>
>
> Try this:
>
> World do
>  world = Object.new
>  world.extend(Logging::Logger)
>  world
> end

Or, since you're using Rails here:

World do
  returning Cucumber::Rails::World do |world|
    world.extend(Logging::Logger)
  end
end

David
Peter J. (Guest)
on 2008-11-13 17:01
(Received via mailing list)
On Wed, Nov 12, 2008 at 8:59 AM, David C. <removed_email_address@domain.invalid>
wrote:
>    world.extend(Logging::Logger)
>  end
> end

It would be really nice to be able to do:

World do |world|
 returning world do |w|
   w.extend(Logging::Logger)
  end
end

This way steps files could extend the world by adding to a chain,
agnostic of the nature of the original world object.

Peter
David C. (Guest)
on 2008-11-13 17:03
(Received via mailing list)
On Thu, Nov 13, 2008 at 8:59 AM, Peter J. <removed_email_address@domain.invalid>
wrote:
>>  returning Cucumber::Rails::World do |world|
> end
>
> This way steps files could extend the world by adding to a chain,
> agnostic of the nature of the original world object.

That's a cool idea - can you put a feature request in lighthouse?

http://rspec.lighthouseapp.com/projects/16211-cucu...

Cheers,
David
Matt W. (Guest)
on 2008-11-13 17:17
(Received via mailing list)
On 13 Nov 2008, at 15:01, David C. wrote:
>>>> end
>> returning world do |w|
>
> Cheers,
> David

That's how I'd originally expected it to work, TBH. When I looked at
the source and it didn't, I got scared :)

cheers,
Matt
aslak hellesoy (Guest)
on 2008-11-13 17:30
(Received via mailing list)
On Thu, Nov 13, 2008 at 3:59 PM, Peter J. <removed_email_address@domain.invalid>
wrote:
>>  returning Cucumber::Rails::World do |world|
> end
>
> This way steps files could extend the world by adding to a chain,
> agnostic of the nature of the original world object.
>

You *may* want to be in control over the world type (class). For
example, in Rails the world instance is a
ActionController::Integration::Session instance (off the top of my
head) and in vanilla Cucumber it is Object. what if you want to change
that?

Maybe Cucumber could send in a world instance it *thinks* is the one
you want (allowing what you suggest (and allow the user to instantiate
a different class if they want to).

# I'm happy with the suggested type
World do |world|
  returning world do |w|
    w.extend(Logging::Logger)
  end
end

# I want my own type!
World do
  world = MyType.new
  returning world do |w|
    w.extend(Logging::Logger)
  end
end

I didn't see a ticket yet, so please add my comment or link to mail
archive for this thread when you create the ticket.

Cheers,
Aslak
Peter J. (Guest)
on 2008-11-13 18:06
(Received via mailing list)
On Thu, Nov 13, 2008 at 10:01 AM, David C. 
<removed_email_address@domain.invalid>
wrote:

> That's a cool idea - can you put a feature request in lighthouse?

Done:
http://rspec.lighthouseapp.com/projects/16211-cucu...

Peter
This topic is locked and can not be replied to.