Class: Search::FilterService

Inherits:
Object
  • Object
show all
Defined in:
app/services/search/filter_service.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

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

Returns:

  • (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

Returns:

  • (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 tags
  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