Class: ResourcesService
- Inherits:
-
Object
- Object
- ResourcesService
- Defined in:
- app/services/resources_service.rb
Instance Attribute Summary collapse
-
#model_fields ⇒ Object
readonly
Returns the value of attribute model_fields.
-
#model_klass ⇒ Object
readonly
Returns the value of attribute model_klass.
Instance Method Summary collapse
- #index_action(per_page, page, sort, query, model_attributes, reflection_tables, reflection_columns) ⇒ Object
-
#initialize(model_klass_name, model_fields) ⇒ ResourcesService
constructor
A new instance of ResourcesService.
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_fields ⇒ Object (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_klass ⇒ Object (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 |