Class: Activity::ResourceList::ResourceRetriever
- Inherits:
-
Object
- Object
- Activity::ResourceList::ResourceRetriever
- Defined in:
- app/services/activity/resource_list.rb
Overview
Service object: resource retriever.
Direct Known Subclasses
CreditMemoRetriever, InvoiceRetriever, OpportunityRetriever, OrderRetriever, PurchaseOrderRetriever, QuoteRetriever, RmaRetriever, RoomConfigurationRetriever, SupportCaseRetriever
Instance Attribute Summary collapse
-
#page ⇒ Object
readonly
Returns the value of attribute page.
-
#party ⇒ Object
readonly
Returns the value of attribute party.
-
#per_page ⇒ Object
readonly
Returns the value of attribute per_page.
-
#query ⇒ Object
readonly
Returns the value of attribute query.
Class Method Summary collapse
-
.build(resource_type, party:, query: nil, page: nil, per_page: nil) ⇒ ResourceRetriever
Instantiates the retriever subclass matching a resource type.
Instance Method Summary collapse
-
#filter_results(_record_class, records) ⇒ ActiveRecord::Relation
Applies total-count capture, newest-first ordering, and pagination.
- #initialize(party:, query: nil, page: nil, per_page: nil) ⇒ void constructor
-
#resources ⇒ ActiveRecord::Relation
Paginated resources for the party.
-
#total_count ⇒ Integer
Total matching resources before pagination was applied.
Constructor Details
#initialize(party:, query: nil, page: nil, per_page: nil) ⇒ void
79 80 81 82 83 84 85 86 87 |
# File 'app/services/activity/resource_list.rb', line 79 def initialize(party:, query: nil, page: nil, per_page: nil) @party = party @query = query @page = page.to_i @page = 1 if @page < 1 @per_page = (per_page || 20).to_i @per_page = 20 if @per_page < 1 @total_count = nil end |
Instance Attribute Details
#page ⇒ Object (readonly)
Returns the value of attribute page.
72 73 74 |
# File 'app/services/activity/resource_list.rb', line 72 def page @page end |
#party ⇒ Object (readonly)
Returns the value of attribute party.
72 73 74 |
# File 'app/services/activity/resource_list.rb', line 72 def party @party end |
#per_page ⇒ Object (readonly)
Returns the value of attribute per_page.
72 73 74 |
# File 'app/services/activity/resource_list.rb', line 72 def per_page @per_page end |
#query ⇒ Object (readonly)
Returns the value of attribute query.
72 73 74 |
# File 'app/services/activity/resource_list.rb', line 72 def query @query end |
Class Method Details
.build(resource_type, party:, query: nil, page: nil, per_page: nil) ⇒ ResourceRetriever
Instantiates the retriever subclass matching a resource type.
96 97 98 99 |
# File 'app/services/activity/resource_list.rb', line 96 def self.build(resource_type, party:, query: nil, page: nil, per_page: nil) retriever_class = "Activity::ResourceList::#{resource_type.to_s.classify}Retriever".constantize retriever_class.new(party: party, query: query, page: page, per_page: per_page) end |
Instance Method Details
#filter_results(_record_class, records) ⇒ ActiveRecord::Relation
Applies total-count capture, newest-first ordering, and pagination.
118 119 120 121 122 123 124 |
# File 'app/services/activity/resource_list.rb', line 118 def filter_results(_record_class, records) # Store the total count before applying pagination @total_count = records.count records.order(created_at: :desc) .limit(per_page) .offset((page - 1) * per_page) end |
#resources ⇒ ActiveRecord::Relation
Paginated resources for the party. Subclasses implement this.
104 105 106 |
# File 'app/services/activity/resource_list.rb', line 104 def resources raise 'Not Implemented' end |
#total_count ⇒ Integer
Total matching resources before pagination was applied.
110 111 112 |
# File 'app/services/activity/resource_list.rb', line 110 def total_count @total_count || 0 end |