Class: Serializer::Collection

Inherits:
Object
  • Object
show all
Defined in:
app/lib/serializer/collection.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(records, includes: [], compound_opts: {}, **params) ⇒ Collection

Returns a new instance of Collection.



4
5
6
7
8
9
10
11
12
# File 'app/lib/serializer/collection.rb', line 4

def initialize(records, includes: [], compound_opts: {}, **params)
  @records = ::Serializer::Pagination.run(records: records, page: params[:page], per_page: params[:per_page], **params).result
  @records = ::Serializer::Sort.run(records: @records, sort: params[:sort], **params).result

  @includes = includes
  @compound_opts = compound_opts
  @format = params[:format]
  @current_controller = params[:current_controller]
end

Instance Attribute Details

#compound_optsObject

Returns the value of attribute compound_opts.



2
3
4
# File 'app/lib/serializer/collection.rb', line 2

def compound_opts
  @compound_opts
end

#current_controllerObject

Returns the value of attribute current_controller.



2
3
4
# File 'app/lib/serializer/collection.rb', line 2

def current_controller
  @current_controller
end

#formatObject

Returns the value of attribute format.



2
3
4
# File 'app/lib/serializer/collection.rb', line 2

def format
  @format
end

#includesObject

Returns the value of attribute includes.



2
3
4
# File 'app/lib/serializer/collection.rb', line 2

def includes
  @includes
end

#recordsObject

Returns the value of attribute records.



2
3
4
# File 'app/lib/serializer/collection.rb', line 2

def records
  @records
end

Instance Method Details

#as_jsonObject



14
15
16
# File 'app/lib/serializer/collection.rb', line 14

def as_json
  serializer_klass.new(records, include: relation_includes, format: format, current_controller: current_controller, **compound_opts).serializable_hash
end

#relation_includesObject



25
26
27
28
29
30
31
32
33
34
35
36
# File 'app/lib/serializer/collection.rb', line 25

def relation_includes
  relations = serializer_klass.default_includes

  @includes =
    if includes.is_a? String
      includes.split(",").map(&:underscore).map(&:to_sym)
    else
      Array(includes).map(&:to_sym)
    end

  relations.concat(includes.compact)
end

#serializer_klassObject



18
19
20
21
22
23
# File 'app/lib/serializer/collection.rb', line 18

def serializer_klass
  resource_klass = records.klass if records.is_a? ActiveRecord::Relation
  resource_klass = records.first.class if records.is_a? Array

  "#{resource_klass.name}Serializer".constantize
end