Gem conflict with RSpec::Rails and Sunspot

Hi All

I was wondering if someone could perhaps point me to where in
RSpec::Rails
is the Rails ActionController being subclassed by an Object instance?
My
ruby-fu is not high enough to work out what’s really going on with
RSpec::Rails with this.

The problem I am having (and I have a code example in the github link
below
if you want to see, just clone and run rake spec) is that Sunspot is
adding
an after filter to already loaded subclasses of ActionController::Base.

loaded_controllers =
[base].concat(base.subclasses.map { |subclass|
subclass.constantize })

But that map is returning:

[“ActionView::TestCase::TestController”, “ApplicationController”,
“#Class:0x1022e1168”,
“Spec::Rails::Example::ViewExampleGroupController”,
“Spec::Rails::Example::HelperExampleGroupController”]

So I am trying to find what #Class:0x1022e1168 is and where it’s
subclassing ActionController.

If I comment out config.gem “rspec-rails” in the environment.rb the
problem
goes away, but that is not a solution as I have boiled this issue down
to
what I have here from a project that is actually using bundler and so
these
gems are being specified and required.

As I do not know what in RSpec::Rails is actually causing the issue I
cannot
raise this as an issue with Sunspot with an example of possibly what
they
should be excluding in their code, if that is the solution to move to.

So if anyone could help me out in any way?? I’m happy to do more “leg
work”
if you could give me some pointers.

Cheers
Shane

git repo showing issue:

using ruby 1.8.7
ruby -v
ruby 1.8.7 (2009-06-12 patchlevel 174) [universal-darwin10.0]

Seems to be related to the line ‘tests
Class.new(ActionController::Base)’

module Spec
module Rails
module Example

  class RoutingExampleGroup < ActionController::TestCase
    tests Class.new(ActionController::Base)

    Spec::Example::ExampleGroupFactory.register(:routing, self)
  end

end

end
end

On Jul 18, 2010, at 8:21 PM, Shane M. wrote:

But that map is returning:
So if anyone could help me out in any way?? I’m happy to do more “leg work” if you could give me some pointers.

Cheers
Shane

git repo showing issue:
GitHub - smingins/rspec-sunspot-conflict: example of rspec-sunsport conflict

  end

end

end
end

Yeah - that looks like it.

Given that Class.new(BaseClass) is a common Ruby metaprogramming idiom,
this strikes me as a sunspot issue. WDYT?

On Jul 18, 2010, at 8:29 PM, Shane M. wrote:

Seems it’s being called incorrectly from RoutingExampleGroup, is that right?
Class.new(ActionController::Base) is standard Ruby for an anonymous
subclass. Nothing incorrect about it, but there’s no significant value
in having it be anonymous, so I’d be OK changing it to a named subclass
(i.e. RoutingExampleGroupController < ActionController::Base). Wanna
make a patch?

And so …

  # Sets the controller class name. Useful if the name can't be 

inferred
from test class.
# Expects +controller_class+ as a constant. Example: tests
WidgetController.
def tests(controller_class)
self.controller_class = controller_class
end

But RoutingExampleGroup is: tests Class.new(ActionController::Base)

Seems it’s being called incorrectly from RoutingExampleGroup, is that
right?

On Jul 18, 2010, at 9:03 PM, Shane M. wrote:

Does Class.new(ActionController::Base) pass it to tests as a constant though? Reading comment # Expects +controller_class+ as a constant. Example: tests WidgetController. This is just me wondering if I am missing something with that Class.new(ActionController::Base) idiom.

Patch would just be a revert of anonymity · dchelimsky/rspec-rails@b488f3c · GitHub though right?

I can do that and put it on lighthouse if you want … and it goes up here Lighthouse - Beautifully Simple Issue Tracking ??

Yep - didn’t realize it was just a revert (nice research!) but feel free
to patch and post it.

FYI - I have no plans to do a 1.3.3 release any time soon - too much
going on with Rails 3 and RSpec 2 right now.

David

Does Class.new(ActionController::Base) pass it to tests as a constant
though? Reading comment # Expects +controller_class+ as a constant.
Example: tests WidgetController. This is just me wondering if
I
am missing something with that Class.new(ActionController::Base) idiom.

Patch would just be a revert of
http://github.com/dchelimsky/rspec-rails/commit/b488f3c9bd70011f1288f23b55490810b1fc693dthough
right?

I can do that and put it on lighthouse if you want … and it goes up
here
Lighthouse - Beautifully Simple Issue Tracking ??

And thanks for replying on Sunday :slight_smile:

Cheers
Shane