On Sun, Apr 19, 2009 at 6:41 PM, Michael Schuerig <mich...@schuerig.de> wrote: > On Sunday 19 April 2009, Zach Dennis wrote: >> On Sun, Apr 19, 2009 at 2:09 PM, Michael Schuerig > <mich...@schuerig.de> wrote: >> > On Sunday 19 April 2009, Zach Dennis wrote: >> >> On Sun, Apr 19, 2009 at 12:27 PM, Michael Schuerig >> > >> > <mich...@schuerig.de> wrote: >> >> > In a Rails controller I set the scope on a model class in an >> >> > around filter. I have defined expectations on the model classes, >> >> > and ideally, I would add a further expectation for the scope. Is >> >> > this already possible in some way? How would I go about adding >> >> > support a scope expectation? >> >> >> >> How are you setting the said scope? >> > >> > In an around filter. However, I don't want to test the around >> > filter mechanism, it might as well be rack middleware instead. >> >> Sorry, I don't know what scope means to you in your app. Can you >> share your around_filter? > > Oops, sorry, I assumed the concept from ActiveRecord would be familiar. > If you know ActiveRecord::Base#with_scope that's really all there is. A > scope, within a block or through a proxy, defines options that are > merged with the arguments to #find et al. This merging happens behind > the scenes, therefore the scoped options are effective, but don't show > up as arguments anywhere. > > I'm using this in conjunction with a generic query representation > (inspired by JSON Query) that is map through a combination of Rack > middleware and generated around_filters, see below for a glimpse. > > Michael > > > class PeopleController < ApplicationController > include QueryScope > > query_scope :only => :index do > # Only allow to filter and order by the > # virtual name attribute. > # This attribute is mapped onto the real > # firstname and lastname attributes. > allow :name > condition :name => > "LOWER(firstname || ' ' || lastname) :op LOWER(?)" > order :name => "lastname :dir, firstname :dir" > end > ... > > Somewhere in QueryScope > > def query_scope(options = {}, &config_block) > model_class = extract_resource!(options) > builder = QueryScopeBuilder.new(config_block) > around_filter(options) do |controller, action| > req = builder.build_request_conditioner(controller.request) > controller.instance_variable_set(:@offset_limit, req.offset_limit) > model_class.send(:with_scope, :find => req.find_options, &action) > end > end
In your original post you asked: "How would I go about adding support a scope expectation?" Given the code you've shown it is not clear exactly what you are expecting. Do you just want to be able to expect that you call model_class.send(:with_scope) with the appropriate arguments? I'm sorry if I seem dense, but you have a very clear idea of what you want to accomplish, but it's coming out very piece meal across multiple emails and it's quite difficult to pick up on, -- Zach Dennis http://www.continuousthinking.com http://www.mutuallyhuman.com _______________________________________________ rspec-users mailing list rspec-users@rubyforge.org http://rubyforge.org/mailman/listinfo/rspec-users