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