yaks 0.4.2 → 0.4.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/CHANGELOG.md +65 -5
- data/README.md +38 -8
- data/Rakefile +33 -0
- data/lib/yaks/breaking_changes.rb +22 -0
- data/lib/yaks/collection_mapper.rb +18 -21
- data/lib/yaks/collection_resource.rb +19 -5
- data/lib/yaks/config/dsl.rb +78 -0
- data/lib/yaks/config.rb +37 -63
- data/lib/yaks/default_policy.rb +27 -9
- data/lib/yaks/{serializer → format}/collection_json.rb +7 -3
- data/lib/yaks/{serializer → format}/hal.rb +14 -4
- data/lib/yaks/{serializer → format}/json_api.rb +22 -4
- data/lib/yaks/{serializer.rb → format.rb} +5 -5
- data/lib/yaks/fp/hash_updatable.rb +17 -0
- data/lib/yaks/fp/updatable.rb +15 -0
- data/lib/yaks/mapper/association.rb +24 -21
- data/lib/yaks/mapper/association_mapper.rb +42 -0
- data/lib/yaks/mapper/attribute.rb +17 -0
- data/lib/yaks/mapper/class_methods.rb +0 -1
- data/lib/yaks/mapper/config.rb +8 -28
- data/lib/yaks/mapper/has_many.rb +8 -3
- data/lib/yaks/mapper/has_one.rb +1 -1
- data/lib/yaks/mapper/link.rb +13 -13
- data/lib/yaks/mapper.rb +28 -32
- data/lib/yaks/null_resource.rb +1 -0
- data/lib/yaks/resource.rb +15 -5
- data/lib/yaks/version.rb +1 -1
- data/lib/yaks.rb +16 -10
- data/spec/acceptance/acceptance_spec.rb +16 -17
- data/spec/acceptance/json_shared_examples.rb +8 -0
- data/spec/acceptance/models.rb +2 -2
- data/spec/integration/map_to_resource_spec.rb +3 -3
- data/spec/json/confucius.collection.json +39 -0
- data/spec/json/confucius.hal.json +7 -4
- data/spec/json/confucius.json_api.json +1 -1
- data/spec/spec_helper.rb +6 -0
- data/spec/support/classes_for_policy_testing.rb +36 -0
- data/spec/support/shared_contexts.rb +1 -1
- data/spec/unit/yaks/collection_mapper_spec.rb +34 -9
- data/spec/unit/yaks/collection_resource_spec.rb +4 -4
- data/spec/unit/yaks/config/dsl_spec.rb +91 -0
- data/spec/unit/yaks/config_spec.rb +10 -6
- data/spec/unit/yaks/default_policy/derive_mapper_from_object_spec.rb +80 -0
- data/spec/unit/yaks/default_policy_spec.rb +50 -0
- data/spec/unit/yaks/{serializer → format}/hal_spec.rb +1 -1
- data/spec/unit/yaks/format/json_api_spec.rb +42 -0
- data/spec/unit/yaks/format_spec.rb +12 -0
- data/spec/unit/yaks/fp/hash_updatable_spec.rb +22 -0
- data/spec/unit/yaks/fp/updatable_spec.rb +22 -0
- data/spec/unit/yaks/mapper/association_mapper_spec.rb +60 -0
- data/spec/unit/yaks/mapper/association_spec.rb +96 -41
- data/spec/unit/yaks/mapper/attribute_spec.rb +20 -0
- data/spec/unit/yaks/mapper/class_methods_spec.rb +49 -10
- data/spec/unit/yaks/mapper/config_spec.rb +25 -50
- data/spec/unit/yaks/mapper/has_many_spec.rb +33 -5
- data/spec/unit/yaks/mapper/has_one_spec.rb +32 -17
- data/spec/unit/yaks/mapper/link_spec.rb +44 -12
- data/spec/unit/yaks/mapper_spec.rb +45 -17
- data/spec/unit/yaks/resource_spec.rb +41 -7
- data/yaks.gemspec +7 -1
- metadata +72 -21
- data/examples/hal01.rb +0 -126
- data/examples/jsonapi01.rb +0 -68
- data/examples/jsonapi02.rb +0 -62
- data/examples/jsonapi03.rb +0 -86
- data/spec/support/serializers.rb +0 -14
- data/spec/unit/yaks/serializer_spec.rb +0 -12
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: yaks
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Arne Brasseur
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-08-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: inflection
|
@@ -94,6 +94,20 @@ dependencies:
|
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '2.99'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: bogus
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
97
111
|
- !ruby/object:Gem::Dependency
|
98
112
|
name: rake
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -126,16 +140,16 @@ dependencies:
|
|
126
140
|
name: mutant
|
127
141
|
requirement: !ruby/object:Gem::Requirement
|
128
142
|
requirements:
|
129
|
-
- -
|
143
|
+
- - ">="
|
130
144
|
- !ruby/object:Gem::Version
|
131
|
-
version: 0
|
145
|
+
version: '0'
|
132
146
|
type: :development
|
133
147
|
prerelease: false
|
134
148
|
version_requirements: !ruby/object:Gem::Requirement
|
135
149
|
requirements:
|
136
|
-
- -
|
150
|
+
- - ">="
|
137
151
|
- !ruby/object:Gem::Version
|
138
|
-
version: 0
|
152
|
+
version: '0'
|
139
153
|
- !ruby/object:Gem::Dependency
|
140
154
|
name: rspec-its
|
141
155
|
requirement: !ruby/object:Gem::Requirement
|
@@ -182,18 +196,24 @@ files:
|
|
182
196
|
- README.md
|
183
197
|
- Rakefile
|
184
198
|
- bench/bench.rb
|
185
|
-
- examples/hal01.rb
|
186
|
-
- examples/jsonapi01.rb
|
187
|
-
- examples/jsonapi02.rb
|
188
|
-
- examples/jsonapi03.rb
|
189
199
|
- lib/yaks.rb
|
200
|
+
- lib/yaks/breaking_changes.rb
|
190
201
|
- lib/yaks/collection_mapper.rb
|
191
202
|
- lib/yaks/collection_resource.rb
|
192
203
|
- lib/yaks/config.rb
|
204
|
+
- lib/yaks/config/dsl.rb
|
193
205
|
- lib/yaks/default_policy.rb
|
206
|
+
- lib/yaks/format.rb
|
207
|
+
- lib/yaks/format/collection_json.rb
|
208
|
+
- lib/yaks/format/hal.rb
|
209
|
+
- lib/yaks/format/json_api.rb
|
194
210
|
- lib/yaks/fp.rb
|
211
|
+
- lib/yaks/fp/hash_updatable.rb
|
212
|
+
- lib/yaks/fp/updatable.rb
|
195
213
|
- lib/yaks/mapper.rb
|
196
214
|
- lib/yaks/mapper/association.rb
|
215
|
+
- lib/yaks/mapper/association_mapper.rb
|
216
|
+
- lib/yaks/mapper/attribute.rb
|
197
217
|
- lib/yaks/mapper/class_methods.rb
|
198
218
|
- lib/yaks/mapper/config.rb
|
199
219
|
- lib/yaks/mapper/has_many.rb
|
@@ -203,38 +223,46 @@ files:
|
|
203
223
|
- lib/yaks/primitivize.rb
|
204
224
|
- lib/yaks/resource.rb
|
205
225
|
- lib/yaks/resource/link.rb
|
206
|
-
- lib/yaks/serializer.rb
|
207
|
-
- lib/yaks/serializer/collection_json.rb
|
208
|
-
- lib/yaks/serializer/hal.rb
|
209
|
-
- lib/yaks/serializer/json_api.rb
|
210
226
|
- lib/yaks/util.rb
|
211
227
|
- lib/yaks/version.rb
|
212
228
|
- notes.org
|
213
229
|
- shaved_yak.gif
|
214
230
|
- spec/acceptance/acceptance_spec.rb
|
231
|
+
- spec/acceptance/json_shared_examples.rb
|
215
232
|
- spec/acceptance/models.rb
|
216
233
|
- spec/fixture_helpers.rb
|
217
234
|
- spec/integration/map_to_resource_spec.rb
|
235
|
+
- spec/json/confucius.collection.json
|
218
236
|
- spec/json/confucius.hal.json
|
219
237
|
- spec/json/confucius.json_api.json
|
220
238
|
- spec/json/hal_plant_collection.json
|
221
239
|
- spec/json/john.hal.json
|
222
240
|
- spec/json/youtypeitwepostit.collection.json
|
223
241
|
- spec/spec_helper.rb
|
242
|
+
- spec/support/classes_for_policy_testing.rb
|
224
243
|
- spec/support/deep_eql.rb
|
225
244
|
- spec/support/fixtures.rb
|
226
245
|
- spec/support/friends_mapper.rb
|
227
246
|
- spec/support/models.rb
|
228
247
|
- spec/support/pet_mapper.rb
|
229
248
|
- spec/support/pet_peeve_mapper.rb
|
230
|
-
- spec/support/serializers.rb
|
231
249
|
- spec/support/shared_contexts.rb
|
232
250
|
- spec/support/youtypeit_models_mappers.rb
|
233
251
|
- spec/unit/yaks/collection_mapper_spec.rb
|
234
252
|
- spec/unit/yaks/collection_resource_spec.rb
|
253
|
+
- spec/unit/yaks/config/dsl_spec.rb
|
235
254
|
- spec/unit/yaks/config_spec.rb
|
255
|
+
- spec/unit/yaks/default_policy/derive_mapper_from_object_spec.rb
|
256
|
+
- spec/unit/yaks/default_policy_spec.rb
|
257
|
+
- spec/unit/yaks/format/hal_spec.rb
|
258
|
+
- spec/unit/yaks/format/json_api_spec.rb
|
259
|
+
- spec/unit/yaks/format_spec.rb
|
260
|
+
- spec/unit/yaks/fp/hash_updatable_spec.rb
|
261
|
+
- spec/unit/yaks/fp/updatable_spec.rb
|
236
262
|
- spec/unit/yaks/fp_spec.rb
|
263
|
+
- spec/unit/yaks/mapper/association_mapper_spec.rb
|
237
264
|
- spec/unit/yaks/mapper/association_spec.rb
|
265
|
+
- spec/unit/yaks/mapper/attribute_spec.rb
|
238
266
|
- spec/unit/yaks/mapper/class_methods_spec.rb
|
239
267
|
- spec/unit/yaks/mapper/config_spec.rb
|
240
268
|
- spec/unit/yaks/mapper/has_many_spec.rb
|
@@ -245,8 +273,6 @@ files:
|
|
245
273
|
- spec/unit/yaks/primitivize_spec.rb
|
246
274
|
- spec/unit/yaks/resource/link_spec.rb
|
247
275
|
- spec/unit/yaks/resource_spec.rb
|
248
|
-
- spec/unit/yaks/serializer/hal_spec.rb
|
249
|
-
- spec/unit/yaks/serializer_spec.rb
|
250
276
|
- spec/unit/yaks/util_spec.rb
|
251
277
|
- spec/yaml/confucius.yaml
|
252
278
|
- spec/yaml/youtypeitwepostit.yaml
|
@@ -255,7 +281,22 @@ homepage: https://github.com/plexus/yaks
|
|
255
281
|
licenses:
|
256
282
|
- MIT
|
257
283
|
metadata: {}
|
258
|
-
post_install_message:
|
284
|
+
post_install_message: |2+
|
285
|
+
|
286
|
+
|
287
|
+
Breaking Changes in Yaks 0.4.3
|
288
|
+
==============================
|
289
|
+
|
290
|
+
Yaks::Mapper#filter was removed, if you override this method in your
|
291
|
+
mappers to conditionally filter attributes or associations, you will
|
292
|
+
have to override #attributes or #associations instead.
|
293
|
+
|
294
|
+
When specifying a rel_template, now a single {rel} placeholder is
|
295
|
+
expected instead of {src} and {dest}.
|
296
|
+
|
297
|
+
There are other internal changes. See the CHANGELOG and README for full
|
298
|
+
documentation.
|
299
|
+
|
259
300
|
rdoc_options: []
|
260
301
|
require_paths:
|
261
302
|
- lib
|
@@ -277,29 +318,41 @@ specification_version: 4
|
|
277
318
|
summary: Serialize to hypermedia. HAL, JSON-API, etc.
|
278
319
|
test_files:
|
279
320
|
- spec/acceptance/acceptance_spec.rb
|
321
|
+
- spec/acceptance/json_shared_examples.rb
|
280
322
|
- spec/acceptance/models.rb
|
281
323
|
- spec/fixture_helpers.rb
|
282
324
|
- spec/integration/map_to_resource_spec.rb
|
325
|
+
- spec/json/confucius.collection.json
|
283
326
|
- spec/json/confucius.hal.json
|
284
327
|
- spec/json/confucius.json_api.json
|
285
328
|
- spec/json/hal_plant_collection.json
|
286
329
|
- spec/json/john.hal.json
|
287
330
|
- spec/json/youtypeitwepostit.collection.json
|
288
331
|
- spec/spec_helper.rb
|
332
|
+
- spec/support/classes_for_policy_testing.rb
|
289
333
|
- spec/support/deep_eql.rb
|
290
334
|
- spec/support/fixtures.rb
|
291
335
|
- spec/support/friends_mapper.rb
|
292
336
|
- spec/support/models.rb
|
293
337
|
- spec/support/pet_mapper.rb
|
294
338
|
- spec/support/pet_peeve_mapper.rb
|
295
|
-
- spec/support/serializers.rb
|
296
339
|
- spec/support/shared_contexts.rb
|
297
340
|
- spec/support/youtypeit_models_mappers.rb
|
298
341
|
- spec/unit/yaks/collection_mapper_spec.rb
|
299
342
|
- spec/unit/yaks/collection_resource_spec.rb
|
343
|
+
- spec/unit/yaks/config/dsl_spec.rb
|
300
344
|
- spec/unit/yaks/config_spec.rb
|
345
|
+
- spec/unit/yaks/default_policy/derive_mapper_from_object_spec.rb
|
346
|
+
- spec/unit/yaks/default_policy_spec.rb
|
347
|
+
- spec/unit/yaks/format/hal_spec.rb
|
348
|
+
- spec/unit/yaks/format/json_api_spec.rb
|
349
|
+
- spec/unit/yaks/format_spec.rb
|
350
|
+
- spec/unit/yaks/fp/hash_updatable_spec.rb
|
351
|
+
- spec/unit/yaks/fp/updatable_spec.rb
|
301
352
|
- spec/unit/yaks/fp_spec.rb
|
353
|
+
- spec/unit/yaks/mapper/association_mapper_spec.rb
|
302
354
|
- spec/unit/yaks/mapper/association_spec.rb
|
355
|
+
- spec/unit/yaks/mapper/attribute_spec.rb
|
303
356
|
- spec/unit/yaks/mapper/class_methods_spec.rb
|
304
357
|
- spec/unit/yaks/mapper/config_spec.rb
|
305
358
|
- spec/unit/yaks/mapper/has_many_spec.rb
|
@@ -310,8 +363,6 @@ test_files:
|
|
310
363
|
- spec/unit/yaks/primitivize_spec.rb
|
311
364
|
- spec/unit/yaks/resource/link_spec.rb
|
312
365
|
- spec/unit/yaks/resource_spec.rb
|
313
|
-
- spec/unit/yaks/serializer/hal_spec.rb
|
314
|
-
- spec/unit/yaks/serializer_spec.rb
|
315
366
|
- spec/unit/yaks/util_spec.rb
|
316
367
|
- spec/yaml/confucius.yaml
|
317
368
|
- spec/yaml/youtypeitwepostit.yaml
|
data/examples/hal01.rb
DELETED
@@ -1,126 +0,0 @@
|
|
1
|
-
# http://stateless.co/hal_specification.html
|
2
|
-
|
3
|
-
# There are still some affordances missing to support all of HAL, in particular
|
4
|
-
# for this example to ability to generate links based on composite content
|
5
|
-
# (ea:admin) is not implemented, neither is explicit support for CURIEs (compact
|
6
|
-
# URI shorthand syntax), although this examples works around that by manually
|
7
|
-
# encoding the CURIE prefixes.
|
8
|
-
|
9
|
-
# The 'next' link from the example below is also ommitted, pagination is an aspect
|
10
|
-
# that will be implemented generically
|
11
|
-
|
12
|
-
# Example from the specification, approximated with Yaks below
|
13
|
-
|
14
|
-
# {
|
15
|
-
# "_links": {
|
16
|
-
# "self": { "href": "/orders" },
|
17
|
-
# "curies": [{ "name": "ea", "href": "http://example.com/docs/rels/{rel}", "templated": true }],
|
18
|
-
# "next": { "href": "/orders?page=2" },
|
19
|
-
# "ea:find": { "href": "/orders{?id}", "templated": true },
|
20
|
-
# "ea:admin": [{
|
21
|
-
# "href": "/admins/2",
|
22
|
-
# "title": "Fred"
|
23
|
-
# }, {
|
24
|
-
# "href": "/admins/5",
|
25
|
-
# "title": "Kate"
|
26
|
-
# }]
|
27
|
-
# },
|
28
|
-
# "currentlyProcessing": 14,
|
29
|
-
# "shippedToday": 20,
|
30
|
-
# "_embedded": {
|
31
|
-
# "ea:order": [{
|
32
|
-
# "_links": {
|
33
|
-
# "self": { "href": "/orders/123" },
|
34
|
-
# "ea:basket": { "href": "/baskets/98712" },
|
35
|
-
# "ea:customer": { "href": "/customers/7809" }
|
36
|
-
# },
|
37
|
-
# "total": 30.00,
|
38
|
-
# "currency": "USD",
|
39
|
-
# "status": "shipped"
|
40
|
-
# }, {
|
41
|
-
# "_links": {
|
42
|
-
# "self": { "href": "/orders/124" },
|
43
|
-
# "ea:basket": { "href": "/baskets/97213" },
|
44
|
-
# "ea:customer": { "href": "/customers/12369" }
|
45
|
-
# },
|
46
|
-
# "total": 20.00,
|
47
|
-
# "currency": "USD",
|
48
|
-
# "status": "processing"
|
49
|
-
# }]
|
50
|
-
# }
|
51
|
-
# }
|
52
|
-
|
53
|
-
require 'virtus'
|
54
|
-
require 'yaks'
|
55
|
-
require 'json'
|
56
|
-
|
57
|
-
class Order
|
58
|
-
include Virtus.model
|
59
|
-
attribute :id, Integer
|
60
|
-
attribute :basket_id, Integer
|
61
|
-
attribute :customer_id, Integer
|
62
|
-
attribute :total, Numeric
|
63
|
-
attribute :currency, String
|
64
|
-
attribute :status, String
|
65
|
-
end
|
66
|
-
|
67
|
-
class OrderSet
|
68
|
-
include Virtus.model
|
69
|
-
attribute :currently_processing, Integer
|
70
|
-
attribute :shipped_today, Integer
|
71
|
-
attribute :orders, Array[Order]
|
72
|
-
end
|
73
|
-
|
74
|
-
class OrderMapper < Yaks::Mapper
|
75
|
-
link :self, '/orders/{id}'
|
76
|
-
link :"ea:basket", '/baskets/{basket_id}'
|
77
|
-
link :"ea:customer", '/customers/{customer_id}'
|
78
|
-
|
79
|
-
attributes :total, :currency, :status
|
80
|
-
end
|
81
|
-
|
82
|
-
class OrderSetMapper < Yaks::Mapper
|
83
|
-
link :self, '/orders'
|
84
|
-
link :curies, 'http://example.com/docs/rels/{rel}', name: "ea", expand: false
|
85
|
-
link :"ea:find", "/orders{?id}", expand: false
|
86
|
-
|
87
|
-
attributes :currentlyProcessing, :shippedToday
|
88
|
-
|
89
|
-
has_many :orders, as: :"ea:order", mapper: OrderMapper
|
90
|
-
|
91
|
-
# Having the attributes be encoded in CamelCase is such a common
|
92
|
-
# use case we might have to make this a setting
|
93
|
-
|
94
|
-
def load_attribute(name)
|
95
|
-
super(Yaks::Util.underscore(name.to_s))
|
96
|
-
end
|
97
|
-
end
|
98
|
-
|
99
|
-
order_set = OrderSet.new(
|
100
|
-
currently_processing: 14,
|
101
|
-
shipped_today: 20,
|
102
|
-
orders: [
|
103
|
-
Order.new(
|
104
|
-
id: 123,
|
105
|
-
basket_id: 98712,
|
106
|
-
customer_id: 7809,
|
107
|
-
total: 30.00,
|
108
|
-
currency: "USD",
|
109
|
-
status: "shipped"
|
110
|
-
),
|
111
|
-
Order.new(
|
112
|
-
id: 124,
|
113
|
-
basket_id: 97213,
|
114
|
-
customer_id: 12369,
|
115
|
-
total: 20.00,
|
116
|
-
currency: "USD",
|
117
|
-
status: "processing"
|
118
|
-
)
|
119
|
-
]
|
120
|
-
)
|
121
|
-
|
122
|
-
resource = OrderSetMapper.new(order_set).to_resource
|
123
|
-
|
124
|
-
hal = Yaks::HalSerializer.new(resource, singular_links: [:self, :"ea:find", :"ea:basket", :"ea:customer"]).to_hal
|
125
|
-
|
126
|
-
puts JSON.dump(hal)
|
data/examples/jsonapi01.rb
DELETED
@@ -1,68 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
|
3
|
-
require 'virtus'
|
4
|
-
require 'yaks'
|
5
|
-
require 'json'
|
6
|
-
|
7
|
-
Example = JSON.parse %q<
|
8
|
-
{
|
9
|
-
"posts": [{
|
10
|
-
"id": "1",
|
11
|
-
"title": "Rails is Omakase",
|
12
|
-
"links": {
|
13
|
-
"author": "9",
|
14
|
-
"comments": [ "5", "12", "17", "20" ]
|
15
|
-
}
|
16
|
-
}]
|
17
|
-
}
|
18
|
-
>
|
19
|
-
|
20
|
-
class Author
|
21
|
-
include Virtus.model
|
22
|
-
attribute :id, String
|
23
|
-
end
|
24
|
-
|
25
|
-
class Comment
|
26
|
-
include Virtus.model
|
27
|
-
attribute :id, String
|
28
|
-
end
|
29
|
-
|
30
|
-
class Post
|
31
|
-
include Virtus.model
|
32
|
-
attribute :id, String
|
33
|
-
attribute :title, String
|
34
|
-
attribute :author, Author
|
35
|
-
attribute :comments, Array[Comment]
|
36
|
-
end
|
37
|
-
|
38
|
-
class AuthorMapper < Yaks::Mapper
|
39
|
-
attributes :id
|
40
|
-
end
|
41
|
-
|
42
|
-
class CommentMapper < Yaks::Mapper
|
43
|
-
attributes :id
|
44
|
-
end
|
45
|
-
|
46
|
-
class PostMapper < Yaks::Mapper
|
47
|
-
attributes :id, :title, :links
|
48
|
-
|
49
|
-
has_one :author, mapper: AuthorMapper
|
50
|
-
has_many :comments, mapper: CommentMapper
|
51
|
-
end
|
52
|
-
|
53
|
-
post = Post.new(
|
54
|
-
id: 1,
|
55
|
-
title: "Rails is Omakase",
|
56
|
-
author: Author.new(id: "9"),
|
57
|
-
comments: [5, 12, 17, 20].map {|id| Comment.new(id: id.to_s)}
|
58
|
-
)
|
59
|
-
|
60
|
-
resource = PostMapper.new(post).to_resource
|
61
|
-
json_api = Yaks::JsonApiSerializer.new(resource).to_json_api
|
62
|
-
|
63
|
-
gem 'minitest'
|
64
|
-
require 'minitest/autorun'
|
65
|
-
|
66
|
-
describe('json-api') {
|
67
|
-
specify { assert_equal Example, json_api }
|
68
|
-
}
|
data/examples/jsonapi02.rb
DELETED
@@ -1,62 +0,0 @@
|
|
1
|
-
require 'virtus'
|
2
|
-
require 'yaks'
|
3
|
-
require 'json'
|
4
|
-
|
5
|
-
Example = JSON.parse %q<
|
6
|
-
{
|
7
|
-
"posts": [{
|
8
|
-
"id": "1",
|
9
|
-
"title": "Rails is Omakase",
|
10
|
-
"links": {
|
11
|
-
"author": "9"
|
12
|
-
}
|
13
|
-
}],
|
14
|
-
"linked": {
|
15
|
-
"people": [{
|
16
|
-
"id": "9",
|
17
|
-
"name": "@d2h"
|
18
|
-
}]
|
19
|
-
}
|
20
|
-
}
|
21
|
-
>
|
22
|
-
|
23
|
-
|
24
|
-
class Person
|
25
|
-
include Virtus.model
|
26
|
-
attribute :id, String
|
27
|
-
attribute :name, String
|
28
|
-
end
|
29
|
-
|
30
|
-
class Post
|
31
|
-
include Virtus.model
|
32
|
-
attribute :id, String
|
33
|
-
attribute :title, String
|
34
|
-
attribute :author, Person
|
35
|
-
end
|
36
|
-
|
37
|
-
class PersonMapper < Yaks::Mapper
|
38
|
-
attributes :id, :name
|
39
|
-
end
|
40
|
-
|
41
|
-
class PostMapper < Yaks::Mapper
|
42
|
-
attributes :id, :title, :links
|
43
|
-
|
44
|
-
has_one :author, mapper: PersonMapper
|
45
|
-
end
|
46
|
-
|
47
|
-
post = Post.new(
|
48
|
-
id: 1,
|
49
|
-
title: "Rails is Omakase",
|
50
|
-
author: Person.new(id: "9", name: "@d2h"),
|
51
|
-
)
|
52
|
-
|
53
|
-
resource = PostMapper.new(post).to_resource
|
54
|
-
|
55
|
-
json_api = Yaks::JsonApiSerializer.new(resource, embed: :resources).to_json_api
|
56
|
-
|
57
|
-
gem 'minitest'
|
58
|
-
require 'minitest/autorun'
|
59
|
-
|
60
|
-
describe('json-api') {
|
61
|
-
specify { assert_equal Example, json_api }
|
62
|
-
}
|
data/examples/jsonapi03.rb
DELETED
@@ -1,86 +0,0 @@
|
|
1
|
-
require 'virtus'
|
2
|
-
require 'yaks'
|
3
|
-
require 'json'
|
4
|
-
|
5
|
-
Example = JSON.parse %q<
|
6
|
-
{
|
7
|
-
"posts": [{
|
8
|
-
"id": "1",
|
9
|
-
"title": "Rails is Omakase",
|
10
|
-
"links": {
|
11
|
-
"author": "http://example.com/people/1",
|
12
|
-
"comments": "http://example.com/comments/5,12,17,20"
|
13
|
-
}
|
14
|
-
}]
|
15
|
-
}
|
16
|
-
>
|
17
|
-
|
18
|
-
|
19
|
-
class Person
|
20
|
-
include Virtus.model
|
21
|
-
attribute :id, String
|
22
|
-
attribute :name, String
|
23
|
-
end
|
24
|
-
|
25
|
-
|
26
|
-
class Comment
|
27
|
-
include Virtus.model
|
28
|
-
attribute :id, String
|
29
|
-
end
|
30
|
-
|
31
|
-
class Post
|
32
|
-
include Virtus.model
|
33
|
-
attribute :id, String
|
34
|
-
attribute :title, String
|
35
|
-
attribute :author, Person
|
36
|
-
attribute :comments, Array[Comment]
|
37
|
-
end
|
38
|
-
|
39
|
-
class BaseMapper < Yaks::Mapper
|
40
|
-
link :self, 'http://example.com/{plural_profile_type}/{id}'
|
41
|
-
|
42
|
-
def plural_profile_type
|
43
|
-
pluralize(profile_type.to_s)
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
class CollectionMapper < Yaks::CollectionMapper
|
48
|
-
link :self, 'http://example.com/{plural_profile_type}/{id*}'
|
49
|
-
|
50
|
-
def plural_profile_type
|
51
|
-
pluralize(profile_type.to_s)
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
class CommentMapper < BaseMapper
|
56
|
-
attributes :id
|
57
|
-
end
|
58
|
-
|
59
|
-
class PersonMapper < BaseMapper
|
60
|
-
attributes :id, :name
|
61
|
-
end
|
62
|
-
|
63
|
-
class PostMapper < BaseMapper
|
64
|
-
attributes :id, :title
|
65
|
-
|
66
|
-
has_one :author, mapper: PersonMapper
|
67
|
-
has_many :comments, mapper: CommentMapper, collection_mapper: CollectionMapper
|
68
|
-
end
|
69
|
-
|
70
|
-
post = Post.new(
|
71
|
-
id: 1,
|
72
|
-
title: "Rails is Omakase",
|
73
|
-
author: Person.new(id: "1", name: "@d2h"),
|
74
|
-
comments: [5, 12, 17, 20].map {|id| Comment.new(id: id.to_s)}
|
75
|
-
)
|
76
|
-
|
77
|
-
resource = PostMapper.new(post).to_resource
|
78
|
-
|
79
|
-
json_api = Yaks::JsonApiSerializer.new(resource, embed: :links).to_json_api
|
80
|
-
|
81
|
-
gem 'minitest'
|
82
|
-
require 'minitest/autorun'
|
83
|
-
|
84
|
-
describe('json-api') {
|
85
|
-
specify { assert_equal Example, json_api }
|
86
|
-
}
|
data/spec/support/serializers.rb
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
# class FriendSerializer < Yaks::Mapper
|
2
|
-
# attributes :id, :name
|
3
|
-
|
4
|
-
# has_many :pets
|
5
|
-
# has_one :pet_peeve
|
6
|
-
# end
|
7
|
-
|
8
|
-
# class PetSerializer < Yaks::Mapper
|
9
|
-
# attributes :id, :name, :species
|
10
|
-
# end
|
11
|
-
|
12
|
-
# class PetPeeveSerializer < Yaks::Mapper
|
13
|
-
# attributes :id, :type
|
14
|
-
# end
|
@@ -1,12 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
RSpec.describe Yaks::Serializer do
|
4
|
-
describe '.by_name' do
|
5
|
-
specify { expect(Yaks::Serializer.by_name(:hal)).to eql Yaks::Serializer::Hal }
|
6
|
-
specify { expect(Yaks::Serializer.by_name(:json_api)).to eql Yaks::Serializer::JsonApi }
|
7
|
-
end
|
8
|
-
|
9
|
-
describe '.by_mime_type' do
|
10
|
-
specify { expect(Yaks::Serializer.by_mime_type('application/hal+json')).to eql Yaks::Serializer::Hal }
|
11
|
-
end
|
12
|
-
end
|