Class: ResourcesService

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(model_klass_name, model_fields) ⇒ ResourcesService

Returns a new instance of ResourcesService.



4
5
6
7
# File 'app/services/resources_service.rb', line 4

def initialize(model_klass_name, model_fields)
  @model_klass  = model_klass_name.constantize
  @model_fields = model_fields.map { |field_attributes| field_attributes[:field_name] }
end

Instance Attribute Details

#model_fieldsObject (readonly)

Returns the value of attribute model_fields.



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

def model_fields
  @model_fields
end

#model_klassObject (readonly)

Returns the value of attribute model_klass.



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

def model_klass
  @model_klass
end

Instance Method Details

#index_action(per_page, page, sort, query, model_attributes, reflection_tables, reflection_columns) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'app/services/resources_service.rb', line 9

def index_action(per_page, page, sort, query, model_attributes, reflection_tables, reflection_columns)
  per_page = per_page.to_i
  page     = page.to_i if page.present?

  total = model_klass.count

  resources = model_klass.limit(per_page)

  if reflection_tables.present?
    resources = resources.includes(reflection_tables)
    model_fields.push(*reflection_columns)
  end

  if query.present?
    search_result = search(query, model_klass, model_attributes)

    resources = search_result[:resources]
    total     = search_result[:total]
  end

  resources = resources.offset((per_page * page) - per_page) if page.present?

  resources = if sort.present?
    resources.order(sort[:column_name] => sort[:order])
              else
    resources.order(id: :asc)
              end

  OpenStruct.new(
    resources: resources.pluck(*model_fields).map { |resource| model_fields.zip(resource).to_h },
    total: total
  )
end