app/services/carnival/query_service.rb in carnival-0.2.7 vs app/services/carnival/query_service.rb in carnival-0.2.8

- old
+ new

@@ -1,9 +1,9 @@ module Carnival class QueryService - attr_accessor :total_records + def initialize(model, presenter, query_form) @model = model @presenter = presenter @query_form = query_form @total_records = 0 @@ -16,62 +16,54 @@ end def records_without_pagination_and_scope records = @model records = date_period_query(records) - records = search_query(records) records = advanced_search_query(records) records = order_query(records) includes_relations(records) end + def page_count + (total_records / @presenter.items_per_page.to_f).ceil + end + def records_without_pagination scope_query records_without_pagination_and_scope end def total_records records_without_pagination.size end def scopes_number records = records_without_pagination_and_scope - scopes = {} - @presenter.scopes.each do |key, index| - scopes[key] = scope_query(records, key).size - end - scopes + + Hash[@presenter.scopes.keys.map do |key| + [key, scope_query(records, key).size] + end] end def scope_query(records, scope = @query_form.scope) - if(scope.present? && scope.to_sym != :all) - records = records.send(scope) + if scope.present? && scope.to_sym != :all + records.send(scope) else records end end def date_period_query(records) date_filter_field = @presenter.date_filter_field - if(date_filter_field.present? && @query_form.date_period_from.present? && @query_form.date_period_from != "" && @query_form.date_period_to.present? && @query_form.date_period_to != "") - records.where("#{@presenter.table_name}.#{date_filter_field.name} between ? and ?", "#{@query_form.date_period_from} 00:00:00", "#{@query_form.date_period_to} 23:59:59") + if date_filter_field.present? && @query_form.date_period_from.present? && @query_form.date_period_from != "" && @query_form.date_period_to.present? && @query_form.date_period_to != "" + from = DateTime.parse(@query_form.date_period_from).beginning_of_day + to = DateTime.parse(@query_form.date_period_to).end_of_day + records.where(@presenter.date_filter_field.name.to_sym => [from..to]) else records end end - def search_query(records) - if @query_form.search_term.present? and @presenter.searchable_fields.size > 0 - filters = @presenter.searchable_fields.map do |key, field| - " #{key.to_s} like :search" - end - records = includes_relations(records) if @should_include_relation - records.where(filters.join(" or "), search: "%#{@query_form.search_term}%") - else - records - end - end - def advanced_search_query(records) if @query_form.advanced_search.present? @presenter.parse_advanced_search(records, @query_form.advanced_search) else records @@ -101,8 +93,7 @@ end def sort_direction @query_form.sort_direction end - end end