Module: SearchCop::ClassMethods
- Defined in:
- lib/search_cop.rb
Instance Method Summary collapse
- #search_cop(query, scope_name) ⇒ Object
- #search_reflection(scope_name) ⇒ Object
- #search_scope(name, &block) ⇒ Object
- #unsafe_search_cop(query, scope_name) ⇒ Object
Instance Method Details
#search_cop(query, scope_name) ⇒ Object
52 53 54 55 56 |
# File 'lib/search_cop.rb', line 52 def search_cop(query, scope_name) unsafe_search_cop query, scope_name rescue SearchCop::RuntimeError respond_to?(:none) ? none : where("1 = 0") end |
#search_reflection(scope_name) ⇒ Object
48 49 50 |
# File 'lib/search_cop.rb', line 48 def search_reflection(scope_name) search_scopes[scope_name].reflection end |
#search_scope(name, &block) ⇒ Object
38 39 40 41 42 43 44 45 46 |
# File 'lib/search_cop.rb', line 38 def search_scope(name, &block) self.search_scopes = search_scopes.dup search_scopes[name] = SearchScope.new(name, self) search_scopes[name].instance_exec(&block) self.class.send(:define_method, name) { |query| search_cop query, name } self.class.send(:define_method, "unsafe_#{name}") { |query| unsafe_search_cop query, name } end |
#unsafe_search_cop(query, scope_name) ⇒ Object
58 59 60 61 62 63 64 65 66 67 |
# File 'lib/search_cop.rb', line 58 def unsafe_search_cop(query, scope_name) return respond_to?(:scoped) ? scoped : all if query.blank? query_builder = QueryBuilder.new(self, query, search_scopes[scope_name]) scope = instance_exec(&search_scopes[scope_name].reflection.scope) if search_scopes[scope_name].reflection.scope scope ||= eager_load(query_builder.associations) if query_builder.associations.any? (scope || self).where(query_builder.sql) end |