lib/fetcha.rb in fetcha-0.2.1 vs lib/fetcha.rb in fetcha-0.2.2

- old
+ new

@@ -16,13 +16,34 @@ results = process_scope(results, query_scope) if query_scope results = process_filtering(results, filters) if filters results = process_sorting(results, sorting) if sorting results = process_pagination!(results, pages) if pages results = process_search(results, search) if search - results + results.extending(PaginationTotalCount) end + module PaginationTotalCount + def reset + @total_count = nil + super + end + + def total_count(column_name = :all, _options = nil) + @total_count ||= + begin + c = except(:offset, :limit, :order) + c = c.count(column_name) + + if c.is_a?(Hash) || c.is_a?(ActiveSupport::OrderedHash) + c.count + else + c.respond_to?(:count) ? c.count(column_name) : c + end + end + end + end + private def fetchable_opts @fetchable_opts ||= { @@ -61,11 +82,10 @@ fetchable_opts[:pagination][k] = args[k] end end def process_scope(datasource, query_scope) - return datasource unless fetchable_opts[:scopes].include? query_scope - datasource.send(query_scope) + datasource.send(query_scope) if (fetchable_opts[:scopes].include? query_scope.to_sym) end def process_search(datasource, search) datasource.search_full_text(search) end