jsonapi-object-mapper 0.3.0 → 0.4.0
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
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 35390dfcd2da06f3fadc628d41986b07891efa2590a4271896a9717ed44ed7b6
|
4
|
+
data.tar.gz: eb48c0ab5e7409c53ba03828704adcef9e27377443498b4f5a97430cde8cd5ad
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 96a5b2682366e3d45ff87b768c1ace3463847721293a0237b7661fe4c0d19b2049ed2f1616b73f9d47eea4a62b69d7fb359e1e86753ff1123388c171a7f62e97
|
7
|
+
data.tar.gz: 5d75d3a36a2cd47ef118dcd4e51f31129e5f7cd8e8e7b0daaa93077e8d809551261f52a2ef321e4c20a30a8a82d75dad2344056413e95d740234978b45d6fe72
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -33,8 +33,9 @@ class User < JsonAPIObjectMapper::Deserializer::Resource
|
|
33
33
|
# Embedding with another Resource class, will deserialize the `included` resource with the given class
|
34
34
|
has_one :photo, embed_with: Photo
|
35
35
|
|
36
|
-
# By default the value will be assigned whatever
|
37
|
-
#
|
36
|
+
# By default the value will be assigned whatever is located in the `included` selection.
|
37
|
+
# Otherwise basic relationship resource information will be added.
|
38
|
+
# - IE: { "type" = "friend", "id" = "10" }
|
38
39
|
has_one :friend
|
39
40
|
|
40
41
|
# This will accept the default value
|
@@ -45,8 +46,7 @@ class User < JsonAPIObjectMapper::Deserializer::Resource
|
|
45
46
|
attr_value.upcase
|
46
47
|
end
|
47
48
|
|
48
|
-
# You can mass
|
49
|
-
|
49
|
+
# You can mass-assign attributes using the `attributes` method instead if blocks don't matter
|
50
50
|
attributes :ssn, :passport, :more_person_info
|
51
51
|
end
|
52
52
|
|
@@ -54,7 +54,7 @@ end
|
|
54
54
|
User.call_collection(json_payload) #=> [<#User:123>, <#User:432>]
|
55
55
|
user = User.call(json_payload) #=> <#User:123>
|
56
56
|
|
57
|
-
user.first_name #=> "
|
57
|
+
user.first_name #=> "FOOER"
|
58
58
|
user.last_name #=> "Bar"
|
59
59
|
|
60
60
|
```
|
@@ -16,10 +16,12 @@ module JsonAPIObjectMapper
|
|
16
16
|
|
17
17
|
def id(&block)
|
18
18
|
self.id_block = block || DEFAULT_ID_BLOCK
|
19
|
+
define_method(:id) { fetch_attribute(:id) }
|
19
20
|
end
|
20
21
|
|
21
22
|
def type(&block)
|
22
23
|
self.type_block = block || DEFAULT_TYPE_BLOCK
|
24
|
+
define_method(:type) { fetch_attribute(:type) }
|
23
25
|
end
|
24
26
|
|
25
27
|
def attribute(attribute_name, &block)
|
@@ -9,7 +9,7 @@ module JsonAPIObjectMapper
|
|
9
9
|
extend DSL
|
10
10
|
|
11
11
|
class << self
|
12
|
-
attr_accessor :rel_blocks, :rel_options, :attr_blocks
|
12
|
+
attr_accessor :rel_blocks, :rel_options, :attr_blocks, :id_block, :type_block
|
13
13
|
end
|
14
14
|
instance_variable_set("@attr_blocks", {})
|
15
15
|
instance_variable_set("@rel_blocks", {})
|
@@ -20,6 +20,8 @@ module JsonAPIObjectMapper
|
|
20
20
|
klass.instance_variable_set("@attr_blocks", attr_blocks.dup)
|
21
21
|
klass.instance_variable_set("@rel_blocks", rel_blocks.dup)
|
22
22
|
klass.instance_variable_set("@rel_options", rel_options.dup)
|
23
|
+
klass.instance_variable_set("@id_block", id_block)
|
24
|
+
klass.instance_variable_set("@type_block", type_block)
|
23
25
|
end
|
24
26
|
|
25
27
|
def self.call_collection(document)
|
@@ -41,6 +43,8 @@ module JsonAPIObjectMapper
|
|
41
43
|
def initialize(payload = nil, included = nil)
|
42
44
|
super()
|
43
45
|
data = payload || {}
|
46
|
+
@id = data["id"]
|
47
|
+
@type = data["type"]
|
44
48
|
@attributes = data["attributes"] || {}
|
45
49
|
@relationships = data["relationships"] || {}
|
46
50
|
@includes = IncludedResources.load(included)
|
@@ -52,10 +56,16 @@ module JsonAPIObjectMapper
|
|
52
56
|
private
|
53
57
|
|
54
58
|
def deserialize!
|
59
|
+
deserialize_id_type!
|
55
60
|
deserialize_attributes!
|
56
61
|
deserialize_relationships!
|
57
62
|
end
|
58
63
|
|
64
|
+
def deserialize_id_type!
|
65
|
+
assign_attribute("id", self.class.id_block&.call(@id))
|
66
|
+
assign_attribute("type", self.class.type_block&.call(@id))
|
67
|
+
end
|
68
|
+
|
59
69
|
def deserialize_attributes!
|
60
70
|
return if @attributes.empty?
|
61
71
|
@attributes.each_pair(&method(:initialize_attribute))
|