From 65e6278b679c165c8ccc0bc690e3b86a447a4620 Mon Sep 17 00:00:00 2001 From: Ilion Beyst Date: Thu, 10 Sep 2015 14:04:36 +0200 Subject: [PATCH] set baby steps in the transactions query --- app/grids/transactions_query.rb | 47 +++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 app/grids/transactions_query.rb diff --git a/app/grids/transactions_query.rb b/app/grids/transactions_query.rb new file mode 100644 index 0000000..e7f0ed5 --- /dev/null +++ b/app/grids/transactions_query.rb @@ -0,0 +1,47 @@ +class TransactionsQuery + def initialize user + @user = user + @transactions = Arel::Table.new(:transactions) + end + + def arel + Arel::SelectManager.new(ActiveRecord::Base) + .from(transactions) + .project( + @transactions[:amount], + @transactions[:date], + @transactions[:peer_id], + @transactions[:issuer_id], + @transactions[:message] + ) + end + + def transactions + Arel::Nodes::UnionAll.new(outgoing, incoming) + end + + def outgoing + @transactions + .where(@transactions[:debtor_id].eq(@user.id)) + .project( + (@transactions[:amount]*Arel::Nodes::SqlLiteral.new("-1")).as('amount'), + @transactions[:creditor_id].as('peer_id'), + @transactions[:created_at].as('date'), + @transactions[:issuer_id], + @transactions[:issuer_type] + ) + end + + def incoming + @user.incoming_transactions.arel + @transactions + .where(@transactions[:debtor_id].eq(@user.id)) + .project( + @transactions[:amount], + @transactions[:debtor_id].as('peer_id'), + @transactions[:created_at].as('date'), + @transactions[:issuer_id], + @transactions[:issuer_type] + ) + end +end