Class: Search::FilterService
- Inherits:
-
Object
- Object
- Search::FilterService
- Defined in:
- app/services/search/filter_service.rb
Instance Attribute Summary collapse
-
#collection ⇒ Object
readonly
Returns the value of attribute collection.
-
#creator ⇒ Object
readonly
Returns the value of attribute creator.
-
#owner ⇒ Object
readonly
Returns the value of attribute owner.
Instance Method Summary collapse
- #any? ⇒ Boolean
- #collections(scope) ⇒ Object
- #creators(creator_scope, models) ⇒ Object
- #filtering_by?(key) ⇒ Boolean
-
#initialize(params) ⇒ FilterService
constructor
Get list filters from URL.
- #models(scope) ⇒ Object
- #parameter(key) ⇒ Object
- #tags ⇒ Object
- #to_params(except: nil) ⇒ Object
Constructor Details
#initialize(params) ⇒ FilterService
Get list filters from URL
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# File 'app/services/search/filter_service.rb', line 7 def initialize(params) params = ActionController::Parameters.new(params) if params.is_a?(Hash) @filters = params.permit( :library, :collection, :q, :creator, :link, :missingtag, :owner, tag: [] ) @collection = Collection.find_param(parameter(:collection)) if parameter(:collection).present? @creator = Creator.find_param(parameter(:creator)) if parameter(:creator).present? @owner = User.find_param(parameter(:owner)) if parameter(:owner).present? end |
Instance Attribute Details
#collection ⇒ Object (readonly)
Returns the value of attribute collection.
2 3 4 |
# File 'app/services/search/filter_service.rb', line 2 def collection @collection end |
#creator ⇒ Object (readonly)
Returns the value of attribute creator.
3 4 5 |
# File 'app/services/search/filter_service.rb', line 3 def creator @creator end |
#owner ⇒ Object (readonly)
Returns the value of attribute owner.
4 5 6 |
# File 'app/services/search/filter_service.rb', line 4 def owner @owner end |
Instance Method Details
#any? ⇒ Boolean
24 25 26 |
# File 'app/services/search/filter_service.rb', line 24 def any? !@filters.empty? end |
#collections(scope) ⇒ Object
52 53 54 55 56 57 58 |
# File 'app/services/search/filter_service.rb', line 52 def collections(scope) scope = scope.includes(:creator) scope = filter_by_owner(scope) scope = filter_by_collection(scope) scope = filter_by_creator(scope) filter_by_search(scope) end |
#creators(creator_scope, models) ⇒ Object
60 61 62 63 64 |
# File 'app/services/search/filter_service.rb', line 60 def creators(creator_scope, models) creator_scope = creator_scope.where(id: models.pluck(:creator_id).uniq) # Apply second-pass owner filter filter_by_owner(creator_scope) end |
#filtering_by?(key) ⇒ Boolean
28 29 30 |
# File 'app/services/search/filter_service.rb', line 28 def filtering_by?(key) parameter(key).present? end |
#models(scope) ⇒ Object
40 41 42 43 44 45 46 47 48 49 50 |
# File 'app/services/search/filter_service.rb', line 40 def models(scope) scope = scope.all scope = filter_by_owner(scope) scope = filter_by_library(scope) scope = filter_by_missing_tag(scope) scope = filter_by_tag(scope) scope = filter_by_collection(scope) scope = filter_by_creator(scope) scope = filter_by_url(scope) filter_by_search(scope) end |
#parameter(key) ⇒ Object
32 33 34 |
# File 'app/services/search/filter_service.rb', line 32 def parameter(key) @filters[key] end |
#tags ⇒ Object
66 67 68 |
# File 'app/services/search/filter_service.rb', line 66 def ActsAsTaggableOn::Tag.named_any(parameter(:tag)) if filtering_by?(:tag) end |
#to_params(except: nil) ⇒ Object
36 37 38 |
# File 'app/services/search/filter_service.rb', line 36 def to_params(except: nil) @filters.except(except) end |