pattern icon indicating copy to clipboard operation
pattern copied to clipboard

Using Query object as `scope` doesn't seem to allow composition

Open perezperret opened this issue 5 years ago • 1 comments

To be clear, I'm using your implementation as a reference and not importing it directly, so it's likely I'm missing something!

If I use a query object like this:

module Transactions
  class AcceptedQuery < Patterns::Query
    queries Transaction

    private

    def query
      relation.active.where(accepted_at: 5.days.ago..DateTime.current)
    end
  end
end
class Transaction < ActiveRecord::Base
  scope :latest, -> { order(created_at: :desc) }
  scope :query_object_scope, Transactions::AcceptedQuery
end

If I try to compose the scopes:

Transaction.latest.accepted

Transactions::AcceptedQuery.call will not receive Transaction.latest as the scope argument, but rather it's base_relation ie: Transaction.all. Am I looking at this right? Is there a workaround for this other than using a class method?

I like the elegance of scope :accepted, Transactions::AcceptedQuery but I can't get it to work.

Thank you for your time and energy! I've learned a lot from this Repo already!

perezperret avatar Jun 23 '20 15:06 perezperret

Hi! Sorry for the noise! After doing a bit more research I now understand that scopes are chained correctly with some Rails magic using scoping. This article (although somewhat old) helped me find this code. I leave those for reference. Feel free to close!

perezperret avatar Jun 24 '20 20:06 perezperret