Class: Apes::Controller

Inherits:
ActionController::API
  • Object
show all
Includes:
ActionController::ImplicitRender, ActionView::Layouts, Apes::Concerns::Errors, Apes::Concerns::Pagination, Apes::Concerns::Request, Apes::Concerns::Response
Defined in:
lib/apes/controller.rb

Overview

A ready to use controller for JSON API applications.

Constant Summary

Constant Summary

Constants included from Apes::Concerns::Errors

Apes::Concerns::Errors::ERROR_HANDLERS

Constants included from Apes::Concerns::Request

Apes::Concerns::Request::CONTENT_TYPE

Instance Attribute Summary (collapse)

Attributes included from Apes::Concerns::Response

#included

Instance Method Summary (collapse)

Methods included from Apes::Concerns::Errors

#error_handle_bad_request, #error_handle_debug, #error_handle_exception, #error_handle_fordidden, #error_handle_general, #error_handle_invalid_data, #error_handle_missing_data, #error_handle_not_found, #error_handle_others, #error_handle_unknown_attribute, #error_handle_validation, #fail_request!

Methods included from Apes::Concerns::Pagination

#paginate, #pagination_field, #pagination_skip?, #pagination_supported?, #pagination_url

Methods included from Apes::Concerns::Response

#response_data, #response_include, #response_included, #response_links, #response_meta, #response_template_for, #response_timestamp

Methods included from Apes::Concerns::Request

#request_cast_attributes, #request_extract_model, #request_handle_cors, #request_source_host, #request_valid_content_type, #request_validate

Instance Attribute Details

- (Object) current_account (readonly)

Returns The current account making the request

Returns:

  • (Object)

    The current account making the request



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/apes/controller.rb', line 15

class Controller < ActionController::API
  include ActionController::ImplicitRender
  include ActionView::Layouts
  include Apes::Concerns::Request
  include Apes::Concerns::Response
  include Apes::Concerns::Pagination
  include Apes::Concerns::Errors

  layout "general"
  before_filter :request_handle_cors
  before_filter :request_validate

  attr_reader :current_account, :cursor, :request_cursor

  # Exception handling
  rescue_from Exception, with: :error_handle_exception
  # This allows to avoid to declare all the views
  rescue_from ActionView::MissingTemplate, with: :render_default_views

  # Returns the default URL options for this request.
  # It ensures that the host is always included and that is set properly in development mode.
  #
  # @return [Hash] Default URL options for the request.
  def default_url_options
    rv = {only_path: false}
    rv = {host: request_source_host} if Apes::RuntimeConfiguration.development?
    rv
  end

  # Tiny handle to handle CORS OPTIONS requests. It just renders nothing as headers are handle in Apes::Concerns::Response module.
  #
  # To enable this route, add the following to the routes.rb:
  #
  #     # This is to enable AJAX cross domain
  #     match '*path', to: 'application#handle_cors', via: :options
  def handle_cors
    render(nothing: true, status: :no_content)
  end

  # Default handler to render errors.
  #
  # @param status [Symbol|Fixnum] The HTTP error code to return.
  # @param errors [Array] The list of occurred errors.
  def render_error(status, errors)
    @errors = errors
    status_code = status.is_a?(Fixnum) ? status : Rack::Utils::SYMBOL_TO_STATUS_CODE.fetch(status.to_sym, 500)
    render("errors/#{status_code}", status: status)
  end

  private

  # :nodoc:
  def render_default_views(exception)
    if defined?(@objects)
      render "/collection"
    elsif defined?(@object)
      render "/object"
    else
      error_handle_exception(exception)
    end
  end
end

- (Apes::PaginationCursor) cursor (readonly)

Returns The pagination cursor for this request.

Returns:



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/apes/controller.rb', line 15

class Controller < ActionController::API
  include ActionController::ImplicitRender
  include ActionView::Layouts
  include Apes::Concerns::Request
  include Apes::Concerns::Response
  include Apes::Concerns::Pagination
  include Apes::Concerns::Errors

  layout "general"
  before_filter :request_handle_cors
  before_filter :request_validate

  attr_reader :current_account, :cursor, :request_cursor

  # Exception handling
  rescue_from Exception, with: :error_handle_exception
  # This allows to avoid to declare all the views
  rescue_from ActionView::MissingTemplate, with: :render_default_views

  # Returns the default URL options for this request.
  # It ensures that the host is always included and that is set properly in development mode.
  #
  # @return [Hash] Default URL options for the request.
  def default_url_options
    rv = {only_path: false}
    rv = {host: request_source_host} if Apes::RuntimeConfiguration.development?
    rv
  end

  # Tiny handle to handle CORS OPTIONS requests. It just renders nothing as headers are handle in Apes::Concerns::Response module.
  #
  # To enable this route, add the following to the routes.rb:
  #
  #     # This is to enable AJAX cross domain
  #     match '*path', to: 'application#handle_cors', via: :options
  def handle_cors
    render(nothing: true, status: :no_content)
  end

  # Default handler to render errors.
  #
  # @param status [Symbol|Fixnum] The HTTP error code to return.
  # @param errors [Array] The list of occurred errors.
  def render_error(status, errors)
    @errors = errors
    status_code = status.is_a?(Fixnum) ? status : Rack::Utils::SYMBOL_TO_STATUS_CODE.fetch(status.to_sym, 500)
    render("errors/#{status_code}", status: status)
  end

  private

  # :nodoc:
  def render_default_views(exception)
    if defined?(@objects)
      render "/collection"
    elsif defined?(@object)
      render "/object"
    else
      error_handle_exception(exception)
    end
  end
end

- (Apes::PaginationCursor) request_cursor (readonly)

Returns The original pagination cursor sent from the client.

Returns:



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/apes/controller.rb', line 15

class Controller < ActionController::API
  include ActionController::ImplicitRender
  include ActionView::Layouts
  include Apes::Concerns::Request
  include Apes::Concerns::Response
  include Apes::Concerns::Pagination
  include Apes::Concerns::Errors

  layout "general"
  before_filter :request_handle_cors
  before_filter :request_validate

  attr_reader :current_account, :cursor, :request_cursor

  # Exception handling
  rescue_from Exception, with: :error_handle_exception
  # This allows to avoid to declare all the views
  rescue_from ActionView::MissingTemplate, with: :render_default_views

  # Returns the default URL options for this request.
  # It ensures that the host is always included and that is set properly in development mode.
  #
  # @return [Hash] Default URL options for the request.
  def default_url_options
    rv = {only_path: false}
    rv = {host: request_source_host} if Apes::RuntimeConfiguration.development?
    rv
  end

  # Tiny handle to handle CORS OPTIONS requests. It just renders nothing as headers are handle in Apes::Concerns::Response module.
  #
  # To enable this route, add the following to the routes.rb:
  #
  #     # This is to enable AJAX cross domain
  #     match '*path', to: 'application#handle_cors', via: :options
  def handle_cors
    render(nothing: true, status: :no_content)
  end

  # Default handler to render errors.
  #
  # @param status [Symbol|Fixnum] The HTTP error code to return.
  # @param errors [Array] The list of occurred errors.
  def render_error(status, errors)
    @errors = errors
    status_code = status.is_a?(Fixnum) ? status : Rack::Utils::SYMBOL_TO_STATUS_CODE.fetch(status.to_sym, 500)
    render("errors/#{status_code}", status: status)
  end

  private

  # :nodoc:
  def render_default_views(exception)
    if defined?(@objects)
      render "/collection"
    elsif defined?(@object)
      render "/object"
    else
      error_handle_exception(exception)
    end
  end
end

Instance Method Details

- (Hash) default_url_options

Returns the default URL options for this request. It ensures that the host is always included and that is set properly in development mode.

Returns:

  • (Hash)

    Default URL options for the request.



38
39
40
41
42
# File 'lib/apes/controller.rb', line 38

def default_url_options
  rv = {only_path: false}
  rv = {host: request_source_host} if Apes::RuntimeConfiguration.development?
  rv
end

- (Object) handle_cors

Tiny handle to handle CORS OPTIONS requests. It just renders nothing as headers are handle in Apes::Concerns::Response module.

To enable this route, add the following to the routes.rb:

# This is to enable AJAX cross domain
match '*path', to: 'application#handle_cors', via: :options


50
51
52
# File 'lib/apes/controller.rb', line 50

def handle_cors
  render(nothing: true, status: :no_content)
end

- (Object) render_error(status, errors)

Default handler to render errors.

Parameters:

  • status (Symbol|Fixnum)

    The HTTP error code to return.

  • errors (Array)

    The list of occurred errors.



58
59
60
61
62
# File 'lib/apes/controller.rb', line 58

def render_error(status, errors)
  @errors = errors
  status_code = status.is_a?(Fixnum) ? status : Rack::Utils::SYMBOL_TO_STATUS_CODE.fetch(status.to_sym, 500)
  render("errors/#{status_code}", status: status)
end