lib/fetcha.rb in fetcha-0.1.1 vs lib/fetcha.rb in fetcha-0.1.2
- old
+ new
@@ -32,10 +32,15 @@
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 } }
+ end
+
def filterable_on(*fields)
fields.each do |field|
fetchable_opts[:filtering][field.to_s] = nil
end
end
@@ -57,11 +62,23 @@
def process_scope(datasource, query_scope)
datasource.send(query_scope) if (fetchable_opts[:scopes].include? query_scope.to_sym)
end
- def process_filtering(datasource, filters = {})
+ def process_filtering(datasource, filters)
+ if filters.is_a?(String)
+ full_text_filtering(datasource, filters)
+ else
+ hash_filtering(datasource, filters)
+ end
+ end
+
+ def full_text_filtering(datasource, filter)
+ datasource.search_full_text(filter)
+ end
+
+ def hash_filtering(datasource, filters = {})
filter_opts = fetchable_opts[:filtering]
includes = Set.new()
real_filters = filters.select do |k|
next unless filter_opts.keys.include? k
@@ -114,10 +131,9 @@
end
def contains_filter(datasource, field, value)
datasource.where("#{field} ilike ?", "%#{value}%")
end
-
def starts_with_filter(datasource, field, value)
datasource.where("#{field} ilike ?", "#{value}%")
end