Module: JSONAPI::ActsAsResourceController

Included in:
ResourceController
Defined in:
lib/jsonapi/acts_as_resource_controller.rb

Defined Under Namespace

Modules: ClassMethods

Constant Summary collapse

MEDIA_TYPE_MATCHER =
/.+".+"[^,]*|[^,]+/
ALL_MEDIA_TYPES =
'*/*'

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(base) ⇒ Object



8
9
10
11
12
13
# File 'lib/jsonapi/acts_as_resource_controller.rb', line 8

def self.included(base)
  base.extend ClassMethods
  base.include Callbacks
  base.cattr_reader :server_error_callbacks
  base.define_jsonapi_resources_callbacks :process_operations
end

Instance Method Details

#createObject



27
28
29
30
# File 'lib/jsonapi/acts_as_resource_controller.rb', line 27

def create
  return unless verify_content_type_header
  process_request
end

#create_relationshipObject



32
33
34
35
# File 'lib/jsonapi/acts_as_resource_controller.rb', line 32

def create_relationship
  return unless verify_content_type_header
  process_request
end

#destroyObject



47
48
49
# File 'lib/jsonapi/acts_as_resource_controller.rb', line 47

def destroy
  process_request
end

#destroy_relationshipObject



51
52
53
# File 'lib/jsonapi/acts_as_resource_controller.rb', line 51

def destroy_relationship
  process_request
end


55
56
57
# File 'lib/jsonapi/acts_as_resource_controller.rb', line 55

def get_related_resource
  process_request
end


59
60
61
# File 'lib/jsonapi/acts_as_resource_controller.rb', line 59

def get_related_resources
  process_request
end

#indexObject



15
16
17
# File 'lib/jsonapi/acts_as_resource_controller.rb', line 15

def index
  process_request
end

#operation_dispatcherObject



104
105
106
107
108
# File 'lib/jsonapi/acts_as_resource_controller.rb', line 104

def operation_dispatcher
  @operation_dispatcher ||= JSONAPI::OperationDispatcher.new(transaction: transaction,
                                                             rollback: rollback,
                                                             server_error_callbacks: @request.server_error_callbacks)
end

#process_operations(operations) ⇒ Object



84
85
86
87
88
# File 'lib/jsonapi/acts_as_resource_controller.rb', line 84

def process_operations(operations)
  run_callbacks :process_operations do
    operation_dispatcher.process(operations)
  end
end

#process_requestObject



63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/jsonapi/acts_as_resource_controller.rb', line 63

def process_request
  return unless verify_accept_header

  @request = JSONAPI::RequestParser.new(params, context: context,
                                        key_formatter: key_formatter,
                                        server_error_callbacks: (self.class.server_error_callbacks || []))

  unless @request.errors.empty?
    render_errors(@request.errors)
  else
    operations = @request.operations
    unless JSONAPI.configuration.resource_cache.nil?
      operations.each {|op| op.options[:cache_serializer] = resource_serializer }
    end
    results = process_operations(operations)
    render_results(results)
  end
rescue => e
  handle_exceptions(e)
end

#rollbackObject



98
99
100
101
102
# File 'lib/jsonapi/acts_as_resource_controller.rb', line 98

def rollback
  lambda {
    fail ActiveRecord::Rollback
  }
end

#showObject



19
20
21
# File 'lib/jsonapi/acts_as_resource_controller.rb', line 19

def show
  process_request
end

#show_relationshipObject



23
24
25
# File 'lib/jsonapi/acts_as_resource_controller.rb', line 23

def show_relationship
  process_request
end

#transactionObject



90
91
92
93
94
95
96
# File 'lib/jsonapi/acts_as_resource_controller.rb', line 90

def transaction
  lambda { |&block|
    ActiveRecord::Base.transaction do
      block.yield
    end
  }
end

#updateObject



42
43
44
45
# File 'lib/jsonapi/acts_as_resource_controller.rb', line 42

def update
  return unless verify_content_type_header
  process_request
end

#update_relationshipObject



37
38
39
40
# File 'lib/jsonapi/acts_as_resource_controller.rb', line 37

def update_relationship
  return unless verify_content_type_header
  process_request
end