Module: Shiboru::Controller

Defined in:
lib/shiboru/controller.rb

Instance Method Summary collapse

Instance Method Details

#api_index(model, params, serializer: nil, serializer_opts: {}) ⇒ Object

Usage: render json: api_index(User, params, serializer: UserSerializer)

Raises:

  • (ArgumentError)


6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/shiboru/controller.rb', line 6

def api_index(model, params, serializer: nil, serializer_opts: {})
  filter_klass = Shiboru::Registry.for_model(model)
  raise ArgumentError, "No FilterSet found for #{model.name} (expected #{model.name}Filter)" unless filter_klass

  payload = filter_klass.new(model.all, params).call
  records = payload["results"]

  payload["results"] =
    if serializer
      ActiveModelSerializers::SerializableResource.new(records, each_serializer: serializer,
                                                                **serializer_opts).as_json
    else
      records.as_json
    end

  payload
end