Noosfero/noosfero

View on GitHub
app/concerns/find_by_contents.rb

Summary

Maintainability
A
2 hrs
Test Coverage
module FindByContents
  def find_by_contents(asset, context, scope, query, paginate_options = { page: 1 }, options = {})
    scope = scope.with_templates(options[:template_id]) unless options[:template_id].blank?
    scope = scope.tagged_with(options[:tag]) unless options[:tag].blank?
    search = plugins.dispatch_first(:find_by_contents, asset, scope, query, paginate_options, options)
    register_search_term(query, scope.count, search[:results].count, context, asset)
    search
  end

  def autocomplete(asset, scope, query, paginate_options = { page: 1 }, options = { field: "name" })
    plugins.dispatch_first(:autocomplete, asset, scope, query, paginate_options, options) ||
      fallback_autocomplete(asset, scope, query, paginate_options, options)
  end

  def fallback_autocomplete(asset, scope, query, paginate_options, options)
    field = options[:field]
    query = query.downcase
    scope.where([
                  "LOWER(#{field}) ILIKE ? OR #{field}) ILIKE ?", "#{query}%", "% #{query}%"
                ])
    { results: scope.paginate(paginate_options) }
  end

  def load_filters(filters)
    selected_filters = {}
    filters.each do |key, value|
      if value.is_a?(Hash)
        result = load_filters value
        selected_filters[key] = result unless result.empty?
      else
        if value.present? && value != "0" && value != ""
          selected_filters[key] = value
        end
      end
    end
    selected_filters
  end
end