class Apia::RequestEnvironment
Attributes
request[R]
response[R]
Public Class Methods
new(request, response)
click to toggle source
# File lib/apia/request_environment.rb, line 14 def initialize(request, response) @request = request @response = response end
Public Instance Methods
call(*args, &block)
click to toggle source
# File lib/apia/request_environment.rb, line 19 def call(*args, &block) return unless block_given? instance_exec(@request, @response, *args, &block) rescue ::StandardError => e raise_exception(e) end
helper(name, *args)
click to toggle source
Call a helper
@param name [Symbol] @return [Object, nil]
# File lib/apia/request_environment.rb, line 31 def helper(name, *args) helper = @request.controller.definition.helpers[name.to_sym] if helper.nil? raise InvalidHelperError, "No helper found with name #{name}" end instance_exec(*args, &helper) end
paginate(set, potentially_large_set: false)
click to toggle source
Set appropriate pagination for the given set based on the configuration specified for the endpoint
@param set [#limit, count, page, per, to_a, total_pages, current_page, without_count] @param large_set [Boolean] whether or not this is expected to be a large set @return [void]
# File lib/apia/request_environment.rb, line 46 def paginate(set, potentially_large_set: false) paginated_field = @request.endpoint.definition.paginated_field if paginated_field.nil? raise Apia::RuntimeError, 'Could not paginate response because no pagination has been configured for the endpoint' end paginated = set.page(@request.arguments[:page] || 1) paginated = paginated.per(@request.arguments[:per_page] || 30) large_set = false if potentially_large_set total_count = set.limit(1001).count if total_count > 1000 large_set = true paginated = paginated.without_count end end @response.add_field paginated_field, paginated.to_a pagination_info = {} pagination_info[:current_page] = paginated.current_page pagination_info[:per_page] = paginated.limit_value pagination_info[:large_set] = large_set unless large_set pagination_info[:total] = paginated.total_count pagination_info[:total_pages] = paginated.total_pages end @response.add_field :pagination, pagination_info end
Private Instance Methods
potential_error_sources()
click to toggle source
# File lib/apia/request_environment.rb, line 79 def potential_error_sources [@request.endpoint, @request.authenticator].compact end