Hi there, I''m trying to create a mock controller to test the use of UrlHelper in ActionMailer. I''m trying this: require ''d:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.11.0/lib/action_controller'' # Re-raise errors caught by the controller. #class DiscussionsController; def rescue_action(e) raise e end; end class MockController < ActionController::Base def initialize @url = UrlRewriter.new(ActionController::TestRequest.new, nil) super end end because if I just do require ''action_controller'' I get a no such file error. Problem with this mock is that I get a recursive error: SystemStackError: stack level too deep d:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.11.0/lib/action_controller/helpers.rb:112:in `inherited_without_api'' d:/ruby/lib/ruby/gems/1.8/gems/actionwebservice-0.9.3/lib/action_web_service/container/action_controller_container.rb:86:in `inherited_without_action_controller'' but I''m not enough of a rails hack to understand why this fails. Many thanks in advance. CHEERS> SAM
Well I''m still stumped by this one. I tried moving the MockController into the rails app/controller directory: class MockController < ApplicationController def initialize @url ActionController::UrlRewriter.new(ActionController::TestRequest.new, nil) super end end but I still get an error: MissingSourceFile: No such file to load -- url_rewriter d:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:18:in `require__'' d:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:18:in `require'' d:/ruby/lib/ruby/gems/1.8/gems/activesupport-1.2.3/lib/active_support/dependencies.rb:214:in `require'' d:/ruby/lib/ruby/gems/1.8/gems/activesupport-1.2.3/lib/active_support/dependencies.rb:39:in `require_or_load'' d:/ruby/lib/ruby/gems/1.8/gems/activesupport-1.2.3/lib/active_support/dependencies.rb:22:in `depend_on'' d:/ruby/lib/ruby/gems/1.8/gems/activesupport-1.2.3/lib/active_support/dependencies.rb:178:in `require_dependency'' d:/ruby/lib/ruby/gems/1.8/gems/activesupport-1.2.3/lib/active_support/dependencies.rb:178:in `require_dependency'' d:/ruby/lib/ruby/gems/1.8/gems/activesupport-1.2.3/lib/active_support/dependencies.rb:194:in `const_missing'' D:/User/Code/ruby/prometheus/config/../app/controllers/mock_controller.rb:3: in `initialize'' I can''t see anything in the UrlRewriter code to suggest that it is protected or private. Is it a standard thing in ruby that a modules subclasses can only be accessed from within classes of that module? CHEERS> SAM Sam Joseph wrote:>Hi there, > >I''m trying to create a mock controller to test the use of UrlHelper in >ActionMailer. I''m trying this: > >require >''d:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.11.0/lib/action_controller'' > ># Re-raise errors caught by the controller. >#class DiscussionsController; def rescue_action(e) raise e end; end > >class MockController < ActionController::Base >def initialize >@url = UrlRewriter.new(ActionController::TestRequest.new, nil) >super >end >end > >because if I just do require ''action_controller'' I get a no such file error. > >Problem with this mock is that I get a recursive error: > >SystemStackError: stack level too deep >d:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.11.0/lib/action_controller/helpers.rb:112:in >`inherited_without_api'' >d:/ruby/lib/ruby/gems/1.8/gems/actionwebservice-0.9.3/lib/action_web_service/container/action_controller_container.rb:86:in >`inherited_without_action_controller'' > >but I''m not enough of a rails hack to understand why this fails. > >Many thanks in advance. > >CHEERS> SAM >_______________________________________________ >Rails mailing list >Rails@lists.rubyonrails.org >http://lists.rubyonrails.org/mailman/listinfo/rails > > > >
Hmm,
So I have come up with a partial solution by hacking up the url_for
method in ActionController:Base
def url_for(options = {}, *parameters_for_method_reference) #:doc:
case options
when String then options
when Symbol then send(options, *parameters_for_method_reference)
when Hash then begin
@url.rewrite(rewrite_options(options))
rescue
@url = UrlRewriter.new(TestRequest.new, nil)
@url.rewrite(rewrite_options(options))
end
end
end
maybe I''ll submit that as a patch.
CHEERS> SAM
Sam Joseph wrote:
>Hi there,
>
>I''m trying to create a mock controller to test the use of UrlHelper
in
>ActionMailer. I''m trying this:
>
>require
>''d:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.11.0/lib/action_controller''
>
># Re-raise errors caught by the controller.
>#class DiscussionsController; def rescue_action(e) raise e end; end
>
>class MockController < ActionController::Base
>def initialize
>@url = UrlRewriter.new(ActionController::TestRequest.new, nil)
>super
>end
>end
>
>because if I just do require ''action_controller'' I get a
no such file error.
>
>Problem with this mock is that I get a recursive error:
>
>SystemStackError: stack level too deep
>d:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.11.0/lib/action_controller/helpers.rb:112:in
>`inherited_without_api''
>d:/ruby/lib/ruby/gems/1.8/gems/actionwebservice-0.9.3/lib/action_web_service/container/action_controller_container.rb:86:in
>`inherited_without_action_controller''
>
>but I''m not enough of a rails hack to understand why this fails.
>
>Many thanks in advance.
>
>CHEERS> SAM
>_______________________________________________
>Rails mailing list
>Rails@lists.rubyonrails.org
>http://lists.rubyonrails.org/mailman/listinfo/rails
>
>
>
>
Sam Joseph wrote:> Hi there,.. snip> because if I just do require ''action_controller'' I get a no such file > error.Hi, RailsN00b here, for my own learning, I''m just wondering why not the following?: # ============ code ========== require ''rubygems'' require_gem ''actionpack'' class MockController < ActionController::Base def initialize yada.yada.yada end end # ============ /code ========== I tried this and got no error (osx10.4/1.8.2/1.0.0), just trying to understand why this approach is not useable in your particular situation. -Amr -- Posted via http://www.ruby-forum.com/.
Hi Amr,
Thanks for your input. I tried this, but it generated an error:
NameError: uninitialized constant UrlRewriter
d:/ruby/lib/ruby/gems/1.8/gems/activesupport-1.2.5/lib/active_support/depend
encies.rb:200:in `const_missing''
The problem I have is not that I can''t use the ActionController::Base,
but that I can''t seem to use the ActionController::UrlRewriter class,
as
indicated by the error above. I have tried all the following
combinations to no avail:
require ''rubygems''
require_gem ''actionpack''
class MockController < ActionController::Base
@url = UrlRewriter.new(ActionController::TestRequest.new, nil)
end
require ''rubygems''
require_gem ''actionpack''
class MockController < ActionController::Base
@url =
ActionController::UrlRewriter.new(ActionController::TestRequest.new, nil)
end
require ''rubygems''
require_gem ''actionpack''
class MockController < ApplicationController
@url = UrlRewriter.new(ActionController::TestRequest.new, nil)
end
I really don''t understand what it takes to pull in a subclass. However
I
seem to be able to work around this by patching the
ActionController::Base class so it can still do rewrites despite @url
being null.
CHEERS> SAM
Amr Malik wrote:
>Sam Joseph wrote:
>
>
>>Hi there,
>>
>>
>.. snip
>
>
>>because if I just do require ''action_controller'' I get
a no such file
>>error.
>>
>>
>
>Hi, RailsN00b here, for my own learning, I''m just wondering why not
the
>following?:
>
># ============ code ==========>
>require ''rubygems''
>require_gem ''actionpack''
>
>class MockController < ActionController::Base
>
> def initialize
> yada.yada.yada
> end
>
>end
>
># ============ /code ==========>
>I tried this and got no error (osx10.4/1.8.2/1.0.0), just trying to
>understand why this approach is not useable in your particular
>situation.
>
>-Amr
>
>
>