43 lines
1.1 KiB
Ruby
43 lines
1.1 KiB
Ruby
|
|
module DataTable
|
|
extend ActiveSupport::Concern
|
|
|
|
def apply_filter(user, params)
|
|
p AjaxRequest.new(params)
|
|
selection_to_json(user, user.transactions)
|
|
end
|
|
|
|
private
|
|
|
|
class AjaxRequest
|
|
|
|
def initialize(params)
|
|
# Parsing according to https://datatables.net/manual/server-side
|
|
@draw = params.require(:draw).to_i
|
|
@start = params.require(:start).to_i
|
|
@length = params.require(:length).to_i
|
|
@columns = Hash.new
|
|
params.require(:columns).each do |i, column|
|
|
@columns[column.require(:data).to_sym] = {
|
|
name: column[:name],
|
|
searchable: column[:searchable] == 'true',
|
|
orderable: column[:orderable] == 'true',
|
|
search_value: column.require(:search)[:value]
|
|
}
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
def selection_to_json(user, selection)
|
|
{ data: selection.map { |transaction| {
|
|
amount: transaction.signed_amount_for(user),
|
|
origin: transaction.origin,
|
|
message: transaction.message,
|
|
peer: transaction.peer_of(user).try(:name),
|
|
time: transaction.created_at
|
|
} }
|
|
}
|
|
end
|
|
end
|
|
|