0
0
Fork 0

Add invite filter (#5862)

This commit is contained in:
Yamagishi Kazutoshi 2017-12-02 00:40:02 +09:00 committed by Eugen Rochko
parent eee3b32b77
commit 74320971e2
6 changed files with 59 additions and 2 deletions

View file

@ -17,6 +17,9 @@ class Invite < ApplicationRecord
belongs_to :user, required: true
has_many :users, inverse_of: :invite
scope :available, -> { where(expires_at: nil).or(where('expires_at >= ?', Time.now.utc)) }
scope :expired, -> { where.not(expires_at: nil).where('expires_at < ?', Time.now.utc) }
before_validation :set_code
attr_reader :expires_in

View file

@ -0,0 +1,32 @@
# frozen_string_literal: true
class InviteFilter
attr_reader :params
def initialize(params)
@params = params
end
def results
scope = Invite.order(created_at: :desc)
params.each do |key, value|
scope.merge!(scope_for(key, value)) if value.present?
end
scope
end
private
def scope_for(key, _value)
case key.to_s
when 'available'
Invite.available
when 'expired'
Invite.expired
else
raise "Unknown filter: #{key}"
end
end
end