jsonapi-serializable 0.3.0 → 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/lib/jsonapi/serializable.rb +35 -3
- data/lib/jsonapi/serializable/relationship/dsl.rb +1 -12
- data/lib/jsonapi/serializable/renderer.rb +4 -20
- metadata +3 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: feba6e17728c898c35d2ec3983c5a7b635d8e1911680fae0805b7c6942cc3dc3
|
4
|
+
data.tar.gz: 4f1dcf29ad0f95e5b89046655f71749eadbabb99fa64be0a88b497c869412fd1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5f55e477c151d2db755ee4fe33f856c7610c57e7f9abbc3dfbdf889f02b60ae02d8d172fa662fbc1c0c1cbda6f5f4f03452170f751537133e3840cfb65ae2c09
|
7
|
+
data.tar.gz: bbc988fd88b92b4063871d69b5bfa076e3a302a7e0f2410826dd0f039cd5fc77756dee57998a71545afe4936f9acca463b5e3c78ee004a0072afb4bb5cc1386d
|
data/lib/jsonapi/serializable.rb
CHANGED
@@ -1,3 +1,35 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require 'jsonapi/serializable/
|
1
|
+
module JSONAPI
|
2
|
+
module Serializable
|
3
|
+
require 'jsonapi/serializable/error'
|
4
|
+
require 'jsonapi/serializable/resource'
|
5
|
+
require 'jsonapi/serializable/renderer'
|
6
|
+
|
7
|
+
# Error raised when there's no serializable class defined for resource.
|
8
|
+
class UndefinedSerializableClass < StandardError; end
|
9
|
+
|
10
|
+
# @api private
|
11
|
+
def self.resources_for(objects, options, inferrer)
|
12
|
+
return if objects.nil?
|
13
|
+
|
14
|
+
if objects.respond_to?(:to_ary)
|
15
|
+
Array(objects).map do |object|
|
16
|
+
resource_for(object, options, inferrer)
|
17
|
+
end
|
18
|
+
else
|
19
|
+
resource_for(objects, options, inferrer)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
# @api private
|
24
|
+
def self.resource_for(object, options, inferrer)
|
25
|
+
class_name = object.class.name.to_sym
|
26
|
+
|
27
|
+
serializable_klass = inferrer[class_name] || (
|
28
|
+
raise UndefinedSerializableClass,
|
29
|
+
"No serializable class defined for #{class_name}"
|
30
|
+
)
|
31
|
+
|
32
|
+
serializable_klass.new(options.merge(object: object))
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -14,18 +14,7 @@ module JSONAPI
|
|
14
14
|
# NOTE(beauby): Lazify computation since it is only needed when
|
15
15
|
# the corresponding relationship is included.
|
16
16
|
@_resources_block = proc do
|
17
|
-
|
18
|
-
if resources.nil?
|
19
|
-
nil
|
20
|
-
elsif resources.respond_to?(:to_ary)
|
21
|
-
Array(resources).map do |obj|
|
22
|
-
@_class[obj.class.name.to_sym]
|
23
|
-
.new(@_exposures.merge(object: obj))
|
24
|
-
end
|
25
|
-
else
|
26
|
-
@_class[resources.class.name.to_sym]
|
27
|
-
.new(@_exposures.merge(object: resources))
|
28
|
-
end
|
17
|
+
JSONAPI::Serializable.resources_for(yield, @_exposures, @_class)
|
29
18
|
end
|
30
19
|
end
|
31
20
|
|
@@ -41,7 +41,8 @@ module JSONAPI
|
|
41
41
|
exposures = options.delete(:expose) || {}
|
42
42
|
exposures = exposures.merge(_class: klass)
|
43
43
|
|
44
|
-
resources =
|
44
|
+
resources =
|
45
|
+
JSONAPI::Serializable.resources_for(resources, exposures, klass)
|
45
46
|
|
46
47
|
@renderer.render(options.merge(data: resources))
|
47
48
|
end
|
@@ -65,28 +66,11 @@ module JSONAPI
|
|
65
66
|
klass = options.delete(:class) || {}
|
66
67
|
exposures = options.delete(:expose) || {}
|
67
68
|
|
68
|
-
errors =
|
69
|
+
errors =
|
70
|
+
JSONAPI::Serializable.resources_for(errors, exposures, klass)
|
69
71
|
|
70
72
|
@renderer.render(options.merge(errors: errors))
|
71
73
|
end
|
72
|
-
|
73
|
-
private
|
74
|
-
|
75
|
-
# @api private
|
76
|
-
def build_resources(resources, exposures, klass)
|
77
|
-
if resources.nil?
|
78
|
-
nil
|
79
|
-
elsif resources.respond_to?(:to_ary)
|
80
|
-
Array(resources).map { |obj| _build(obj, exposures, klass) }
|
81
|
-
else
|
82
|
-
_build(resources, exposures, klass)
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
86
|
-
# @api private
|
87
|
-
def _build(object, exposures, klass)
|
88
|
-
klass[object.class.name.to_sym].new(exposures.merge(object: object))
|
89
|
-
end
|
90
74
|
end
|
91
75
|
end
|
92
76
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jsonapi-serializable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1
|
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: 2019-03-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: jsonapi-renderer
|
@@ -117,8 +117,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
117
117
|
- !ruby/object:Gem::Version
|
118
118
|
version: '0'
|
119
119
|
requirements: []
|
120
|
-
|
121
|
-
rubygems_version: 2.6.13
|
120
|
+
rubygems_version: 3.0.2
|
122
121
|
signing_key:
|
123
122
|
specification_version: 4
|
124
123
|
summary: Conveniently serialize JSON API resources.
|