Here's a quick-and-dirty patch to ambitious-activerecord to do exactly
this
> 3. I'm currently using the fact that association navigation implicitly
> adds scoping to queries so that I can have a method such as
> Student.current which is implement using ambition and then do
> something like: School.first.students.current to return a list of
> current students for a particular school. This only works however, as
> long as I make Student.current also invoke a kicker. I wondering if
> there's any chance the query builder could take into account any
> current with_scope? Then I wouldn't need to explicitly call the
> kicker.
Index: ambitious-activerecord-0.1.0/lib/ambition/adapters/
active_record/association_collection.rb
===================================================================
--- ambitious-activerecord-0.1.0/lib/ambition/adapters/active_record/
association_collection.rb (revision 0)
+++ ambitious-activerecord-0.1.0/lib/ambition/adapters/active_record/
association_collection.rb (revision 0)
@@ -0,0 +1,31 @@
+module Ambition
+ module Adapters
+ module ActiveRecord
+ module AssociationCollection
+ def self.included(base)
+ base.class_eval do
+ alias :method_missing_without_ambition :method_missing
+ alias :method_missing :method_missing_with_ambition
+ end
+ end
+
+ protected
+
+ def method_missing_with_ambition(method, *args, &block)
+ result = method_missing_without_ambition(method, *args,
&block)
+ if result.is_a? Ambition::Context then
+ scope = construct_scope
+ find = scope[:find]
+ conditions = find[:conditions]
+ (result.clauses[:select] ||= []) << conditions unless
conditions.nil?
+ order = find[:order]
+ (result.clauses[:sort] ||= []) << order unless order.nil?
+ limit = find[:limit]
+ (result.clauses[:slice] ||= []) << limit unless
limit.nil?
+ end
+ result
+ end
+ end
+ end
+ end
+end
Index: ambitious-activerecord-0.1.0/lib/ambition/adapters/
active_record.rb
===================================================================
--- ambitious-activerecord-0.1.0/lib/ambition/adapters/
active_record.rb (revision 37)
+++ ambitious-activerecord-0.1.0/lib/ambition/adapters/
active_record.rb (working copy)
@@ -1,5 +1,6 @@
require 'ambition'
require 'active_record'
+require 'ambition/adapters/active_record/association_collection'
require 'ambition/adapters/active_record/query'
require 'ambition/adapters/active_record/base'
require 'ambition/adapters/active_record/select'
@@ -9,3 +10,4 @@
ActiveRecord::Base.extend Ambition::API
ActiveRecord::Base.ambition_adapter =
Ambition::Adapters::ActiveRecord
+ActiveRecord::Associations::AssociationCollection.send :include,
Ambition::Adapters::ActiveRecord::AssociationCollection