File tree Expand file tree Collapse file tree 3 files changed +67
-3
lines changed Expand file tree Collapse file tree 3 files changed +67
-3
lines changed Original file line number Diff line number Diff line change 1+ require 'jsonapi/deserializable'
2+ require 'jsonapi/parser'
3+
4+ module JSONAPI
5+ module Rails
6+ module ActionController
7+ def self . included ( base )
8+ base . class_eval do
9+ extend ClassMethods
10+ prepend InstanceMethods
11+ end
12+ end
13+
14+ module ClassMethods
15+ def deserializable_resource ( key , klass = nil , &block )
16+ if klass . nil?
17+ klass = Class . new ( JSONAPI ::Deserializable ::Resource , &block )
18+ end
19+ @deserializable_key = key
20+ @deserializable_class = klass
21+ @deserializable_parser = JSONAPI ::Parser ::Resource
22+ end
23+
24+ def deserializable_relationship ( key , klass = nil , &block )
25+ if klass . nil?
26+ klass = Class . new ( JSONAPI ::Deserializable ::Relationship , &block )
27+ end
28+ @deserializable_key = key
29+ @deserializable_class = klass
30+ @deserializable_parser = JSONAPI ::Parser ::Relationship
31+ end
32+
33+ def deserializable_class
34+ @deserializable_class
35+ end
36+
37+ def deserializable_key
38+ @deserializable_key
39+ end
40+
41+ def deserializable_parser
42+ @deserializable_parser
43+ end
44+ end
45+
46+ module InstanceMethods
47+ def params
48+ params = super
49+ key = self . class . deserializable_key
50+ return params if body . key? ( key )
51+ parser = self . class . deserializable_parser
52+ return params unless parser
53+
54+ parser . parse! ( body )
55+ deserializable_class = self . class . deserializable_class
56+
57+ params . merge! ( key => deserializable_class . call ( params ) )
58+ end
59+ end
60+ end
61+ end
62+ end
Original file line number Diff line number Diff line change 1- require 'jsonapi/parser'
2-
31module JSONAPI
42 module Rails
53 module_function
64
75 def parser
86 lambda do |body |
97 data = JSON . parse ( body )
10- JSONAPI . parse_resource! ( body )
118 data = { _json : data } unless data . is_a? ( Hash )
129 data . with_indifferent_access
1310 end
Original file line number Diff line number Diff line change 11require 'rails/railtie'
22require 'action_controller'
33require 'action_controller/railtie'
4+ require 'active_support'
45
56require 'jsonapi/rails/parser'
67require 'jsonapi/rails/render'
@@ -36,3 +37,7 @@ class Railtie < ::Rails::Railtie
3637 end
3738 end
3839end
40+
41+ ActiveSupport . on_load ( :action_controller ) do
42+ include JSONAPI ::Rails ::ActionController
43+ end
You can’t perform that action at this time.
0 commit comments