Module: JSONAPI::ActsAsResourceController
- Included in:
- ResourceController, YourModelsController
- Defined in:
- lib/jsonapi/acts_as_resource_controller.rb
Defined Under Namespace
Modules: ClassMethods
Constant Summary collapse
- MEDIA_TYPE_MATCHER =
/.+".+"[^,]*|[^,]+/
- ALL_MEDIA_TYPES =
'*/*'
Instance Attribute Summary collapse
-
#jsonapi_request ⇒ Object
readonly
Returns the value of attribute jsonapi_request.
-
#response_document ⇒ Object
readonly
Returns the value of attribute response_document.
Class Method Summary collapse
Instance Method Summary collapse
- #create ⇒ Object
- #create_relationship ⇒ Object
- #destroy ⇒ Object
- #destroy_relationship ⇒ Object
- #execute_request ⇒ Object
- #get_related_resource ⇒ Object
- #get_related_resources ⇒ Object
- #index ⇒ Object
- #index_related_resources ⇒ Object
- #parse_request ⇒ Object
- #process_operation(operation) ⇒ Object
- #process_operations(transactional) ⇒ Object
- #process_request ⇒ Object
- #setup_response_document ⇒ Object
- #show ⇒ Object
- #show_related_resource ⇒ Object
- #show_relationship ⇒ Object
- #update ⇒ Object
- #update_relationship ⇒ Object
Instance Attribute Details
#jsonapi_request ⇒ Object (readonly)
Returns the value of attribute jsonapi_request.
18 19 20 |
# File 'lib/jsonapi/acts_as_resource_controller.rb', line 18 def jsonapi_request @jsonapi_request end |
#response_document ⇒ Object (readonly)
Returns the value of attribute response_document.
18 19 20 |
# File 'lib/jsonapi/acts_as_resource_controller.rb', line 18 def response_document @response_document end |
Class Method Details
.included(base) ⇒ Object
10 11 12 13 14 15 16 |
# File 'lib/jsonapi/acts_as_resource_controller.rb', line 10 def self.included(base) base.extend ClassMethods base.include Callbacks base.cattr_reader :server_error_callbacks base.define_jsonapi_resources_callbacks :process_operations, :transaction end |
Instance Method Details
#create ⇒ Object
32 33 34 |
# File 'lib/jsonapi/acts_as_resource_controller.rb', line 32 def create process_request end |
#create_relationship ⇒ Object
36 37 38 |
# File 'lib/jsonapi/acts_as_resource_controller.rb', line 36 def create_relationship process_request end |
#destroy ⇒ Object
48 49 50 |
# File 'lib/jsonapi/acts_as_resource_controller.rb', line 48 def destroy process_request end |
#destroy_relationship ⇒ Object
52 53 54 |
# File 'lib/jsonapi/acts_as_resource_controller.rb', line 52 def destroy_relationship process_request end |
#execute_request ⇒ Object
106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 |
# File 'lib/jsonapi/acts_as_resource_controller.rb', line 106 def execute_request process_operations(jsonapi_request.transactional?) do run_callbacks :process_operations do jsonapi_request.operations.each do |op| op.[:serializer] = resource_serializer_klass.new( op.resource_klass, include_directives: op.[:include_directives], fields: op.[:fields], base_url: base_url, key_formatter: key_formatter, route_formatter: route_formatter, serialization_options: , controller: self ) op.[:cache_serializer_output] = !JSONAPI.configuration.resource_cache.nil? process_operation(op) end end if response_document.has_errors? raise ActiveRecord::Rollback end end end |
#get_related_resource ⇒ Object
64 65 66 67 68 69 70 |
# File 'lib/jsonapi/acts_as_resource_controller.rb', line 64 def # :nocov: JSONAPI::CompatibilityHelper.deprecation_warn("In #{self.class.name} you exposed a `get_related_resource`"\ " action. Please use `show_related_resource` instead.") # :nocov: end |
#get_related_resources ⇒ Object
72 73 74 75 76 77 78 |
# File 'lib/jsonapi/acts_as_resource_controller.rb', line 72 def # :nocov: JSONAPI::CompatibilityHelper.deprecation_warn("In #{self.class.name} you exposed a `get_related_resources`"\ " action. Please use `index_related_resources` instead.") # :nocov: end |
#index ⇒ Object
20 21 22 |
# File 'lib/jsonapi/acts_as_resource_controller.rb', line 20 def index process_request end |
#index_related_resources ⇒ Object
60 61 62 |
# File 'lib/jsonapi/acts_as_resource_controller.rb', line 60 def process_request end |
#parse_request ⇒ Object
97 98 99 100 101 102 103 104 |
# File 'lib/jsonapi/acts_as_resource_controller.rb', line 97 def parse_request @jsonapi_request = JSONAPI::Request.new( params, context: context, key_formatter: key_formatter, server_error_callbacks: (self.class.server_error_callbacks || [])) fail JSONAPI::Exceptions::Errors.new(@jsonapi_request.errors) if @jsonapi_request.errors.any? end |
#process_operation(operation) ⇒ Object
147 148 149 150 |
# File 'lib/jsonapi/acts_as_resource_controller.rb', line 147 def process_operation(operation) result = operation.process response_document.add_result(result, operation) end |
#process_operations(transactional) ⇒ Object
131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 |
# File 'lib/jsonapi/acts_as_resource_controller.rb', line 131 def process_operations(transactional) if transactional run_callbacks :transaction do ActiveRecord::Base.transaction do yield end end else begin yield rescue ActiveRecord::Rollback # Can't rollback without transaction, so just ignore it end end end |
#process_request ⇒ Object
80 81 82 83 84 85 86 87 88 89 90 91 |
# File 'lib/jsonapi/acts_as_resource_controller.rb', line 80 def process_request begin setup_response_document verify_content_type_header verify_accept_header parse_request execute_request rescue => e handle_exceptions(e) end render_response_document end |
#setup_response_document ⇒ Object
93 94 95 |
# File 'lib/jsonapi/acts_as_resource_controller.rb', line 93 def setup_response_document @response_document = create_response_document end |
#show ⇒ Object
24 25 26 |
# File 'lib/jsonapi/acts_as_resource_controller.rb', line 24 def show process_request end |
#show_related_resource ⇒ Object
56 57 58 |
# File 'lib/jsonapi/acts_as_resource_controller.rb', line 56 def process_request end |
#show_relationship ⇒ Object
28 29 30 |
# File 'lib/jsonapi/acts_as_resource_controller.rb', line 28 def show_relationship process_request end |
#update ⇒ Object
44 45 46 |
# File 'lib/jsonapi/acts_as_resource_controller.rb', line 44 def update process_request end |
#update_relationship ⇒ Object
40 41 42 |
# File 'lib/jsonapi/acts_as_resource_controller.rb', line 40 def update_relationship process_request end |