lib/fetcha.rb in fetcha-0.2.2 vs lib/fetcha.rb in fetcha-0.2.3
- old
+ new
@@ -1,15 +1,14 @@
-require "fetcha/version"
-require "active_support/concern"
+require 'fetcha/version'
+require 'active_support/concern'
module Fetcha
extend ActiveSupport::Concern
module ClassMethods
-
def fetch(params = {})
- results = self.all
+ results = all
query_scope = params['scope']
filters = params['filter']
sorting = params['sort']
pages = params['page']
search = params['search']
@@ -26,11 +25,11 @@
@total_count = nil
super
end
def total_count(column_name = :all, _options = nil)
- @total_count ||=
+ @total_count ||=
begin
c = except(:offset, :limit, :order)
c = c.count(column_name)
if c.is_a?(Hash) || c.is_a?(ActiveSupport::OrderedHash)
@@ -47,21 +46,21 @@
def fetchable_opts
@fetchable_opts ||=
{
filtering: {},
sorting: {},
- scopes: Set.new(),
+ scopes: Set.new,
pagination: {
default_size: 10,
max_size: 50
}
}
end
def fulltext_search_on(*fields)
include PgSearch
- self.pg_search_scope :search_full_text, against: fields, using: { trigram: { threshold: 0.1 }, tsearch: { prefix: true } }
+ pg_search_scope :search_full_text, against: fields, using: { trigram: { threshold: 0.1 }, tsearch: { prefix: true } }
end
def filterable_on(*fields)
fields.each do |field|
fetchable_opts[:filtering][field.to_s] = nil
@@ -82,31 +81,36 @@
fetchable_opts[:pagination][k] = args[k]
end
end
def process_scope(datasource, query_scope)
- datasource.send(query_scope) if (fetchable_opts[:scopes].include? query_scope.to_sym)
+ 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
def process_filtering(datasource, filters = {})
filter_opts = fetchable_opts[:filtering]
- includes = Set.new()
-
- real_filters = filters.select do |k|
+ includes = Set.new
+
+ real_filters = filters.select do |k|
next unless filter_opts.keys.include? k
values = k.split('.')
includes << values.first if values.second.present?
true
end
results = includes.empty? ? datasource : datasource.includes(includes.to_a)
real_filters.each do |key, value|
- results = process_operation(results, key, value)
+ v = if value =~ /,/
+ value.split(',')
+ else
+ value
+ end
+ results = process_operation(results, key, v)
end
results
end
def process_sorting(datasource, sorting)
@@ -120,11 +124,11 @@
if value.is_a? Hash
value.each do |operation, value|
results = send("#{operation}_filter", results, field, value)
end
else
- results = results.where({field => value})
+ results = results.where(field => value)
end
results
end
def process_pagination!(datasource, page = {})
@@ -156,11 +160,11 @@
def ends_with_filter(datasource, field, value)
datasource.where("#{field} ilike ?", "%#{value}")
end
def method_missing(name, *args, block)
- raise ForbiddenError if name.match /.*_filter$/
+ raise ForbiddenError if name =~ /.*_filter$/
super
end
end
module SortParams
@@ -182,9 +186,8 @@
hash[field] = :asc
end
end
end
end
-
class ForbiddenError < StandardError; end
end