Class: ResourceSearchService

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(search_query, model_klass, model_attributes) ⇒ ResourceSearchService

Returns a new instance of ResourceSearchService.



4
5
6
7
8
9
# File 'app/services/resource_search_service.rb', line 4

def initialize(search_query, model_klass, model_attributes)
  @search_query = search_query

  @model_klass = model_klass
  @model_attributes = model_attributes
end

Instance Attribute Details

#model_attributesObject (readonly)

Returns the value of attribute model_attributes.



2
3
4
# File 'app/services/resource_search_service.rb', line 2

def model_attributes
  @model_attributes
end

#model_klassObject (readonly)

Returns the value of attribute model_klass.



2
3
4
# File 'app/services/resource_search_service.rb', line 2

def model_klass
  @model_klass
end

#search_queryObject (readonly)

Returns the value of attribute search_query.



2
3
4
# File 'app/services/resource_search_service.rb', line 2

def search_query
  @search_query
end

Instance Method Details

#runObject



11
12
13
14
15
16
17
18
19
20
21
# File 'app/services/resource_search_service.rb', line 11

def run
  return [] if model_attributes.empty?

  query = model_attributes.map { |model_attribute| "#{model_attribute} LIKE ?" }.join(' OR ')
  query_arguments = model_attributes.map { "%#{search_query}%" }

  OpenStruct.new(
    resources: model_klass.where(query, *query_arguments),
    total: model_klass.where(query, *query_arguments).count
  )
end