module Rails::Surrender::ControllerAdditions

Additions to the Rails ActionController to allow surrender's rendering.

Public Class Methods

new(*args) click to toggle source
Calls superclass method
# File lib/rails/surrender/controller_additions.rb, line 12
def initialize(*args)
  @will_paginate = true
  super
end

Public Instance Methods

surrender(resource, status: 200, reload: true, include: [], exclude: []) { |data| ... } click to toggle source
# File lib/rails/surrender/controller_additions.rb, line 17
def surrender(resource, status: 200, reload: true, include: [], exclude: [])
  resource = filter resource if parsed_query_params.filter?

  if parsed_query_params.sort?
    resource = sort resource
    response.headers['X-Sort'] = parsed_query_params.sort.request
  end

  if paginate?(resource)
    resource = paginate resource
    response.headers['X-Pagination'] = pagination_headers(resource)
  end

  surrender_response = if parsed_query_params.count?
                         Render::Count.new(resource).parse
                       elsif parsed_query_params.ids?
                         Render::Ids.new(resource).parse
                       else
                         config = Render::Configuration.new(
                           resource_class: resource_class(resource),
                           reload_resource: reload,
                           user_exclude: parsed_query_params.exclude,
                           user_include: parsed_query_params.include,
                           ctrl_exclude: exclude,
                           ctrl_include: include
                         )

                         Render::Resource.new(resource: resource,
                                              ability: ability,
                                              config: config).parse
                       end

  # Allows the calling method to decorate the response data before returning the result
  surrender_response.data = yield surrender_response.data if block_given?

  render(json: surrender_response.json_data, status: status)
end

Private Instance Methods

ability() click to toggle source
# File lib/rails/surrender/controller_additions.rb, line 57
def ability
  return current_ability if respond_to?(:current_ability)

  DefaultAbility.new
end
filter(resource) click to toggle source
# File lib/rails/surrender/controller_additions.rb, line 71
def filter(resource)
  FilterBuilder.new(resource: resource, filter: parsed_query_params.filter).build!
end
paginate(resource) click to toggle source
# File lib/rails/surrender/controller_additions.rb, line 79
def paginate(resource)
  pagination(resource).build!
end
paginate?(resource) click to toggle source
# File lib/rails/surrender/controller_additions.rb, line 75
def paginate?(resource)
  pagination(resource).paginatable? && @will_paginate
end
pagination(resource) click to toggle source
# File lib/rails/surrender/controller_additions.rb, line 83
def pagination(resource)
  PaginationBuilder.new(resource: resource, pagination: parsed_query_params.pagination)
end
pagination_headers(resource) click to toggle source
# File lib/rails/surrender/controller_additions.rb, line 87
def pagination_headers(resource)
  {
    total: resource.total_count,
    page_total: resource.count,
    page: resource.current_page,
    previous_page: resource.prev_page,
    next_page: resource.next_page,
    last_page: resource.total_pages,
    per_page: parsed_query_params.pagination.per,
    offset: resource.offset_value
  }.to_json
end
parsed_query_params() click to toggle source
# File lib/rails/surrender/controller_additions.rb, line 104
def parsed_query_params
  @parsed_query_params ||= QueryParamParser.new(request.query_parameters.symbolize_keys)
end
resource_class(resource) click to toggle source
# File lib/rails/surrender/controller_additions.rb, line 63
def resource_class(resource)
  resource.try(:klass) || resource.class
end
skip_pagination() click to toggle source
# File lib/rails/surrender/controller_additions.rb, line 67
def skip_pagination
  @will_paginate = false
end
sort(resource) click to toggle source
# File lib/rails/surrender/controller_additions.rb, line 100
def sort(resource)
  SortBuilder.new(resource: resource, sort: parsed_query_params.sort).build!
end