jsonapi-rails 0.1.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +7 -1
- data/lib/jsonapi/rails/action_controller.rb +11 -3
- data/lib/jsonapi/rails/active_record.rb +0 -0
- data/lib/jsonapi/rails/railtie.rb +3 -3
- data/lib/jsonapi/rails/renderer.rb +24 -4
- data/lib/jsonapi/rails/serializable_active_record_error.rb +0 -0
- metadata +8 -6
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: e4738972836e05a1bc9efcc9c19ceabd4ce9af7a
|
|
4
|
+
data.tar.gz: 800b0f6bb491c2e4863e8e824d081d311753e08c
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 06bd1dc83d80fae68fd62cadb624ddb9ab2028a0892ae6bfe763934e8e05660108121ddee9dbefb55a7f7c316d6bf5ce7c41fc2e862b3124fcf43a0c5a83e71d
|
|
7
|
+
data.tar.gz: 4ba8bebdf11e2cf0b455307e78ed0d70bcc950ca5d0b0e1c72f041c5ff35b41fb0e7bcc2266077a46ed849e757e0570520ff4fc7c76891daaa429934e3778c26
|
data/README.md
CHANGED
|
@@ -4,9 +4,15 @@ Rails integration for [jsonapi-rb](http://jsonapi-rb.org).
|
|
|
4
4
|
## Status
|
|
5
5
|
|
|
6
6
|
[](https://badge.fury.io/rb/jsonapi-rails)
|
|
7
|
-
[](http://travis-ci.org/jsonapi-rb/rails?branch=master)
|
|
7
|
+
[](http://travis-ci.org/jsonapi-rb/jsonapi-rails?branch=master)
|
|
8
8
|
[](https://gitter.im/jsonapi-rb/Lobby)
|
|
9
9
|
|
|
10
|
+
## Resources
|
|
11
|
+
|
|
12
|
+
* Chat: [gitter](http://gitter.im/jsonapi-rb)
|
|
13
|
+
* Twitter: [@jsonapirb](http://twitter.com/jsonapirb)
|
|
14
|
+
* Docs: [jsonapi-rb.org](http://jsonapi-rb.org)
|
|
15
|
+
|
|
10
16
|
## Installation
|
|
11
17
|
|
|
12
18
|
Add the following to your application's Gemfile:
|
|
@@ -4,12 +4,19 @@ require 'jsonapi/parser'
|
|
|
4
4
|
module JSONAPI
|
|
5
5
|
module Rails
|
|
6
6
|
module ActionController
|
|
7
|
-
|
|
7
|
+
REVERSE_MAPPING_KEY = 'jsonapi_deserializable.reverse_mapping'.freeze
|
|
8
|
+
|
|
9
|
+
def self.prepended(base)
|
|
8
10
|
base.class_eval do
|
|
9
11
|
extend ClassMethods
|
|
10
12
|
end
|
|
11
13
|
end
|
|
12
14
|
|
|
15
|
+
# def render(options = {})
|
|
16
|
+
# reverse_mapping = request.env[REVERSE_MAPPING_KEY]
|
|
17
|
+
# super(options.merge(_reverse_mapping: reverse_mapping))
|
|
18
|
+
# end
|
|
19
|
+
|
|
13
20
|
module ClassMethods
|
|
14
21
|
def deserializable_resource(key, options = {}, &block)
|
|
15
22
|
_deserializable(key, options,
|
|
@@ -41,9 +48,10 @@ module JSONAPI
|
|
|
41
48
|
def call(env)
|
|
42
49
|
request = Rack::Request.new(env)
|
|
43
50
|
body = JSON.parse(request.body.read)
|
|
44
|
-
|
|
51
|
+
deserializable = @deserializable_class.new(body)
|
|
52
|
+
env[REVERSE_MAPPING_KEY] = deserializable.reverse_mapping
|
|
45
53
|
(env[REQUEST_PARAMETERS_KEY] ||= {}).tap do |request_parameters|
|
|
46
|
-
request_parameters[@deserializable_key] =
|
|
54
|
+
request_parameters[@deserializable_key] = deserializable.to_hash
|
|
47
55
|
end
|
|
48
56
|
|
|
49
57
|
@app.call(env)
|
|
File without changes
|
|
@@ -11,14 +11,14 @@ module JSONAPI
|
|
|
11
11
|
MEDIA_TYPE = 'application/vnd.api+json'.freeze
|
|
12
12
|
PARSER = JSONAPI::Rails.parser
|
|
13
13
|
RENDERERS = {
|
|
14
|
-
jsonapi:
|
|
15
|
-
|
|
14
|
+
jsonapi: JSONAPI::Rails.rails_renderer(SuccessRenderer),
|
|
15
|
+
jsonapi_errors: JSONAPI::Rails.rails_renderer(ErrorRenderer)
|
|
16
16
|
}.freeze
|
|
17
17
|
|
|
18
18
|
initializer 'jsonapi-rails.action_controller' do
|
|
19
19
|
ActiveSupport.on_load(:action_controller) do
|
|
20
20
|
require 'jsonapi/rails/action_controller'
|
|
21
|
-
|
|
21
|
+
prepend ::JSONAPI::Rails::ActionController
|
|
22
22
|
|
|
23
23
|
Mime::Type.register MEDIA_TYPE, :jsonapi
|
|
24
24
|
|
|
@@ -1,9 +1,21 @@
|
|
|
1
1
|
require 'jsonapi/serializable/renderer'
|
|
2
2
|
|
|
3
|
+
module Serializable
|
|
4
|
+
class ActiveModelError < JSONAPI::Serializable::Error
|
|
5
|
+
title do
|
|
6
|
+
@message
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
source do
|
|
10
|
+
pointer @pointer
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
3
15
|
module JSONAPI
|
|
4
16
|
module Rails
|
|
5
17
|
class SuccessRenderer
|
|
6
|
-
def self.render(resources, options)
|
|
18
|
+
def self.render(resources, options, _request)
|
|
7
19
|
opts = options.dup
|
|
8
20
|
# TODO(beauby): Move this to a global configuration.
|
|
9
21
|
default_exposures = {
|
|
@@ -17,8 +29,16 @@ module JSONAPI
|
|
|
17
29
|
end
|
|
18
30
|
|
|
19
31
|
class ErrorRenderer
|
|
20
|
-
def self.render(errors, options)
|
|
21
|
-
|
|
32
|
+
def self.render(errors, options, request)
|
|
33
|
+
reverse_mapping =
|
|
34
|
+
request.env['jsonapi_deserializable.reverse_mapping']
|
|
35
|
+
if errors.is_a?(ActiveModel::Errors)
|
|
36
|
+
errors = errors.messages.map do |attr, message|
|
|
37
|
+
pointer = reverse_mapping[attr]
|
|
38
|
+
::Serializable::ActiveModelError.new(message: message,
|
|
39
|
+
pointer: pointer)
|
|
40
|
+
end
|
|
41
|
+
end
|
|
22
42
|
JSONAPI::Serializable::ErrorRenderer.render(errors, options)
|
|
23
43
|
end
|
|
24
44
|
end
|
|
@@ -28,7 +48,7 @@ module JSONAPI
|
|
|
28
48
|
# @api private
|
|
29
49
|
def rails_renderer(renderer)
|
|
30
50
|
proc do |json, options|
|
|
31
|
-
json = renderer.render(json, options) unless json.is_a?(String)
|
|
51
|
+
json = renderer.render(json, options, request) unless json.is_a?(String)
|
|
32
52
|
self.content_type ||= Mime[:jsonapi]
|
|
33
53
|
self.response_body = json
|
|
34
54
|
end
|
|
File without changes
|
metadata
CHANGED
|
@@ -1,29 +1,29 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: jsonapi-rails
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Lucas Hosseini
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2017-02-23 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: jsonapi-rb
|
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
|
16
16
|
requirements:
|
|
17
|
-
- -
|
|
17
|
+
- - "~>"
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: 0.1
|
|
19
|
+
version: '0.1'
|
|
20
20
|
type: :runtime
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
|
-
- -
|
|
24
|
+
- - "~>"
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: 0.1
|
|
26
|
+
version: '0.1'
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
28
|
name: rails
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -107,9 +107,11 @@ files:
|
|
|
107
107
|
- lib/generators/jsonapi/serializable/templates/serializable.rb.erb
|
|
108
108
|
- lib/jsonapi/rails.rb
|
|
109
109
|
- lib/jsonapi/rails/action_controller.rb
|
|
110
|
+
- lib/jsonapi/rails/active_record.rb
|
|
110
111
|
- lib/jsonapi/rails/parser.rb
|
|
111
112
|
- lib/jsonapi/rails/railtie.rb
|
|
112
113
|
- lib/jsonapi/rails/renderer.rb
|
|
114
|
+
- lib/jsonapi/rails/serializable_active_record_error.rb
|
|
113
115
|
homepage: https://github.com/jsonapi-rb/jsonapi-rails
|
|
114
116
|
licenses:
|
|
115
117
|
- MIT
|