class Statements::Search

Attributes

input[R]

Public Class Methods

new(input) click to toggle source
# File lib/statements/search.rb, line 8
def initialize(input)
  @input = input
end

Public Instance Methods

credits() click to toggle source
# File lib/statements/search.rb, line 20
def credits
  transactions.select { |t| t.amount > 0 }
end
debits() click to toggle source
# File lib/statements/search.rb, line 16
def debits
  transactions.select { |t| t.amount < 0 }
end
total(collection = :transactions) click to toggle source
# File lib/statements/search.rb, line 24
def total(collection = :transactions)
  __send__(collection).inject(0) { |sum, t| sum + t.amount }
end
transactions() click to toggle source
# File lib/statements/search.rb, line 12
def transactions
  @transactions ||= query.all
end

Private Instance Methods

query() click to toggle source
# File lib/statements/search.rb, line 30
def query
  query = Transaction.order(input['order'])
  query = query.where(account_id: input['accounts'])
  query = query.where('posted_at > ? and posted_at < ?',
                      Time.parse(input['date_start']),
                      Time.parse(input['date_end']))
  query = query.where('amount < 0') if input['type'] == 'debits'
  query = query.where('amount > 0') if input['type'] == 'credits'
  query = query.where(colour: input['colours'])
  text = input['search'].strip.downcase
  unless text.empty?
    words = text.split(/\s+/)
    query = query.where('lower(description) like ?', "%#{words.join '%'}%")
  end
  query
end