On Thu, Dec 31, 2009 at 2:05 PM, Phillip Koebbe <phillipkoe...@gmail.com>wrote:

> Hi David,
>
> First, thanks for the suggestion. I like that better.
>
> Second, my motivation for doing this was born out of not being able to
> do something I wanted to do in Remarkable. However, as I was trying to
> explain what it was I wanted to do, I just discovered how to do it in
> Remarkable. So, the immediate need for knowing how to call a private
> method is no longer valid, but I would like to go ahead and explain
> what I was trying to do to see if it is actually possible. I still
> have custom macros that I might need to refactor at some point.
>
> Here is the relevant code example:
>
> http://gist.github.com/266873


Ok - now I understand the problem :)

You'll see that even if you make the method public, it still won't work.
Here's why:

By default, the describe() method returns a class which is a subclass of
ExampleGroup. Any methods defined in the describe() block become class
methods on that subclass of ExampleGroup. The module is extending the
ExampleGroup class, so should_set_session and get_value_from_options are
both class methods.

The it() method (sort of) returns an _instance_ of the same class. It can
only access instance methods directly, _but_ because it is an instance of
the class that was extended with the module, you can
access get_value_from_options like this:

...
it "should set session[:#{key}]" do
  value = self.class. get_value_from_options(options)
  ...

Make sense?

Cheers,
David

[By the way, I didn't intend for the gist to be formatted quite like
> that. I am fond of 4 character tabs, but I realize that most people in
> the ruby community use 2 spaces, so I copied the code to a new
> textmate window, reformatted it, then copied and pasted into the gist.
> But it still come out like that, so I don't know what I'm supposed to
> do.]
>
> I was attempting to create my own should_set_session so I could use
> values from instance variables. I didn't see how to do that in
> Remarkable until just a few minutes ago. It can be accomplished by
> using :to => proc { @user.id }.
>
> I was experimenting with where to call get_value_from_options from.
> When I try inside the "it", I get the NoMethodError. When I call it
> from outside of the it, get_value_from_options gets called, but then I
> don't get the instance variable like I expect. I believe I understand
> why that is, though. The instance var is created in the before, which
> is more or less an it, so it has the same scope. So when called from
> outside of the it, there is no instance var @user.
>
> So my question now is simply: Can I even do what I want to do?
>
> Thanks,
> Phillip
>
_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users

Reply via email to