Use class methods for multi-line scopes

Some of our team members don't like using `do...end` for scopes, and
some other team members don't like using `{ ... }` for multi-line
blocks, so we've agreed to use class methods instead.
This commit is contained in:
Javi Martín
2019-09-30 12:02:49 +02:00
parent 21f9d8e1b4
commit 657f8d129c
2 changed files with 19 additions and 7 deletions

View File

@@ -97,13 +97,22 @@ class Budget
scope :by_heading, ->(heading_id) { where(heading_id: heading_id) }
scope :by_admin, ->(admin_id) { where(administrator_id: admin_id) }
scope :by_tag, ->(tag_name) { tagged_with(tag_name) }
scope :by_valuator, ->(valuator_id) { where("budget_valuator_assignments.valuator_id = ?", valuator_id).joins(:valuator_assignments) }
scope :by_tracker, ->(tracker_id) { where("budget_tracker_assignments.tracker_id = ?",
tracker_id).joins(:tracker_assignments) }
scope :by_valuator_group, ->(valuator_group_id) { where("budget_valuator_group_assignments.valuator_group_id = ?", valuator_group_id).joins(:valuator_group_assignments) }
scope :for_render, -> { includes(:heading) }
def self.by_valuator(valuator_id)
where("budget_valuator_assignments.valuator_id = ?", valuator_id).joins(:valuator_assignments)
end
def self.by_tracker(tracker_id)
where("budget_tracker_assignments.tracker_id = ?", tracker_id).joins(:tracker_assignments)
end
def self.by_valuator_group(valuator_group_id)
joins(:valuator_group_assignments).
where("budget_valuator_group_assignments.valuator_group_id = ?", valuator_group_id)
end
before_create :set_original_heading_id
before_save :calculate_confidence_score
after_save :recalculate_heading_winners

View File

@@ -59,9 +59,12 @@ class Legislation::Process < ApplicationRecord
scope :past, -> { where("end_date < ?", Date.current) }
scope :published, -> { where(published: true) }
scope :not_in_draft, -> { where("draft_phase_enabled = false or (draft_start_date IS NOT NULL and
draft_end_date IS NOT NULL and (draft_start_date > ? or
draft_end_date < ?))", Date.current, Date.current) }
def self.not_in_draft
where("draft_phase_enabled = false or (draft_start_date IS NOT NULL and
draft_end_date IS NOT NULL and (draft_start_date > ? or
draft_end_date < ?))", Date.current, Date.current)
end
def past?
end_date < Date.current