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