jsonapi-resources 0.4.4 → 0.5.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 +4 -4
- data/.travis.yml +1 -0
- data/README.md +73 -39
- data/lib/jsonapi-resources.rb +2 -1
- data/lib/jsonapi/acts_as_resource_controller.rb +5 -5
- data/lib/jsonapi/configuration.rb +13 -1
- data/lib/jsonapi/error.rb +2 -2
- data/lib/jsonapi/exceptions.rb +32 -20
- data/lib/jsonapi/link_builder.rb +141 -0
- data/lib/jsonapi/operation.rb +34 -34
- data/lib/jsonapi/operation_result.rb +3 -3
- data/lib/jsonapi/operations_processor.rb +7 -7
- data/lib/jsonapi/{association.rb → relationship.rb} +12 -4
- data/lib/jsonapi/request.rb +85 -85
- data/lib/jsonapi/resource.rb +153 -121
- data/lib/jsonapi/resource_serializer.rb +89 -92
- data/lib/jsonapi/resources/version.rb +1 -1
- data/lib/jsonapi/response_document.rb +1 -1
- data/lib/jsonapi/routing_ext.rb +42 -42
- data/test/controllers/controller_test.rb +90 -100
- data/test/fixtures/active_record.rb +38 -5
- data/test/fixtures/author_details.yml +9 -0
- data/test/fixtures/vehicles.yml +10 -2
- data/test/integration/requests/request_test.rb +17 -17
- data/test/integration/routes/routes_test.rb +20 -20
- data/test/test_helper.rb +18 -1
- data/test/unit/jsonapi_request/jsonapi_request_test.rb +1 -1
- data/test/unit/operation/operations_processor_test.rb +21 -21
- data/test/unit/resource/resource_test.rb +13 -13
- data/test/unit/serializer/link_builder_test.rb +183 -0
- data/test/unit/serializer/polymorphic_serializer_test.rb +73 -74
- data/test/unit/serializer/serializer_test.rb +342 -91
- metadata +8 -3
@@ -18,6 +18,11 @@ ActiveRecord::Schema.define do
|
|
18
18
|
t.timestamps null: false
|
19
19
|
end
|
20
20
|
|
21
|
+
create_table :author_details, force: true do |t|
|
22
|
+
t.integer :person_id
|
23
|
+
t.string :author_stuff
|
24
|
+
end
|
25
|
+
|
21
26
|
create_table :posts, force: true do |t|
|
22
27
|
t.string :title
|
23
28
|
t.text :body
|
@@ -190,6 +195,11 @@ ActiveRecord::Schema.define do
|
|
190
195
|
|
191
196
|
create_table :vehicles, force: true do |t|
|
192
197
|
t.string :type
|
198
|
+
t.string :make
|
199
|
+
t.string :vehicle_model
|
200
|
+
t.string :length_at_water_line
|
201
|
+
t.string :drive_layout
|
202
|
+
t.string :serial_number
|
193
203
|
t.integer :person_id
|
194
204
|
end
|
195
205
|
end
|
@@ -202,12 +212,17 @@ class Person < ActiveRecord::Base
|
|
202
212
|
has_many :vehicles
|
203
213
|
belongs_to :preferences
|
204
214
|
belongs_to :hair_cut
|
215
|
+
has_one :author_detail
|
205
216
|
|
206
217
|
### Validations
|
207
218
|
validates :name, presence: true
|
208
219
|
validates :date_joined, presence: true
|
209
220
|
end
|
210
221
|
|
222
|
+
class AuthorDetail < ActiveRecord::Base
|
223
|
+
belongs_to :author, class_name: 'Person', foreign_key: 'person_id'
|
224
|
+
end
|
225
|
+
|
211
226
|
class Post < ActiveRecord::Base
|
212
227
|
belongs_to :author, class_name: 'Person', foreign_key: 'author_id'
|
213
228
|
belongs_to :writer, class_name: 'Person', foreign_key: 'author_id'
|
@@ -634,12 +649,15 @@ end
|
|
634
649
|
|
635
650
|
class VehicleResource < JSONAPI::Resource
|
636
651
|
has_one :person
|
652
|
+
attributes :make, :vehicle_model, :serial_number
|
637
653
|
end
|
638
654
|
|
639
655
|
class CarResource < VehicleResource
|
656
|
+
attributes :drive_layout
|
640
657
|
end
|
641
658
|
|
642
659
|
class BoatResource < VehicleResource
|
660
|
+
attributes :length_at_water_line
|
643
661
|
end
|
644
662
|
|
645
663
|
class CommentResource < JSONAPI::Resource
|
@@ -655,7 +673,7 @@ class TagResource < JSONAPI::Resource
|
|
655
673
|
attributes :name
|
656
674
|
|
657
675
|
has_many :posts
|
658
|
-
# Not including the planets
|
676
|
+
# Not including the planets relationship so they don't get output
|
659
677
|
#has_many :planets
|
660
678
|
end
|
661
679
|
|
@@ -673,6 +691,9 @@ class PostResource < JSONAPI::Resource
|
|
673
691
|
has_many :tags, acts_as_set: true
|
674
692
|
has_many :comments, acts_as_set: false
|
675
693
|
|
694
|
+
# Not needed - just for testing
|
695
|
+
primary_key :id
|
696
|
+
|
676
697
|
before_save do
|
677
698
|
msg = "Before save"
|
678
699
|
end
|
@@ -763,7 +784,6 @@ class HairCutResource < JSONAPI::Resource
|
|
763
784
|
end
|
764
785
|
|
765
786
|
class IsoCurrencyResource < JSONAPI::Resource
|
766
|
-
primary_key :code
|
767
787
|
attributes :name, :country_name, :minor_unit
|
768
788
|
|
769
789
|
filter :country_name
|
@@ -881,7 +901,7 @@ end
|
|
881
901
|
|
882
902
|
class ProductResource < JSONAPI::Resource
|
883
903
|
attribute :name
|
884
|
-
has_one :picture
|
904
|
+
has_one :picture, always_include_linkage_data: true
|
885
905
|
|
886
906
|
def picture_id
|
887
907
|
model.picture.id
|
@@ -1080,7 +1100,8 @@ module Api
|
|
1080
1100
|
class AuthorResource < JSONAPI::Resource
|
1081
1101
|
attributes :name, :email
|
1082
1102
|
model_name 'Person'
|
1083
|
-
|
1103
|
+
relationship :posts, to: :many
|
1104
|
+
relationship :author_detail, to: :one, foreign_key_on: :related
|
1084
1105
|
|
1085
1106
|
filter :name
|
1086
1107
|
|
@@ -1100,6 +1121,10 @@ module Api
|
|
1100
1121
|
end
|
1101
1122
|
end
|
1102
1123
|
|
1124
|
+
class AuthorDetailResource < JSONAPI::Resource
|
1125
|
+
attributes :author_stuff
|
1126
|
+
end
|
1127
|
+
|
1103
1128
|
PersonResource = PersonResource.dup
|
1104
1129
|
PostResource = PostResource.dup
|
1105
1130
|
ExpenseEntryResource = ExpenseEntryResource.dup
|
@@ -1164,11 +1189,19 @@ module Api
|
|
1164
1189
|
end
|
1165
1190
|
end
|
1166
1191
|
|
1192
|
+
module MyEngine
|
1193
|
+
module Api
|
1194
|
+
module V1
|
1195
|
+
class PersonResource < JSONAPI::Resource
|
1196
|
+
end
|
1197
|
+
end
|
1198
|
+
end
|
1199
|
+
end
|
1200
|
+
|
1167
1201
|
warn 'start testing Name Collisions'
|
1168
1202
|
# The name collisions only emmit warnings. Exceptions would change the flow of the tests
|
1169
1203
|
|
1170
1204
|
class LinksResource < JSONAPI::Resource
|
1171
|
-
|
1172
1205
|
end
|
1173
1206
|
|
1174
1207
|
class BadlyNamedAttributesResource < JSONAPI::Resource
|
data/test/fixtures/vehicles.yml
CHANGED
@@ -1,8 +1,16 @@
|
|
1
|
-
|
1
|
+
Miata:
|
2
2
|
id: 1
|
3
3
|
type: Car
|
4
|
+
make: Mazda
|
5
|
+
vehicle_model: Miata MX5
|
6
|
+
drive_layout: Front Engine RWD
|
7
|
+
serial_number: 32432adfsfdysua
|
4
8
|
person_id: 1
|
5
|
-
|
9
|
+
Launch20:
|
6
10
|
id: 2
|
7
11
|
type: Boat
|
12
|
+
make: Chris-Craft
|
13
|
+
vehicle_model: Launch 20
|
14
|
+
length_at_water_line: 15.5ft
|
15
|
+
serial_number: 434253JJJSD
|
8
16
|
person_id: 1
|
@@ -22,18 +22,18 @@ class RequestTest < ActionDispatch::IntegrationTest
|
|
22
22
|
assert_equal 200, status
|
23
23
|
end
|
24
24
|
|
25
|
-
def
|
25
|
+
def test_get_nested_to_one
|
26
26
|
get '/posts/1/author'
|
27
27
|
assert_equal 200, status
|
28
28
|
end
|
29
29
|
|
30
|
-
def
|
30
|
+
def test_get_nested_to_many
|
31
31
|
get '/posts/1/comments'
|
32
32
|
assert_equal 200, status
|
33
33
|
end
|
34
34
|
|
35
|
-
def
|
36
|
-
get '/posts/1/comments?
|
35
|
+
def test_get_nested_to_many_bad_param
|
36
|
+
get '/posts/1/comments?relationship=books'
|
37
37
|
assert_equal 200, status
|
38
38
|
end
|
39
39
|
|
@@ -204,28 +204,28 @@ class RequestTest < ActionDispatch::IntegrationTest
|
|
204
204
|
assert_equal 422, status
|
205
205
|
end
|
206
206
|
|
207
|
-
def
|
207
|
+
def test_update_relationship_without_content_type
|
208
208
|
ruby = Section.find_by(name: 'ruby')
|
209
209
|
patch '/posts/3/relationships/section', { 'data' => {type: 'sections', id: ruby.id.to_s }}.to_json
|
210
210
|
|
211
211
|
assert_equal 415, status
|
212
212
|
end
|
213
213
|
|
214
|
-
def
|
214
|
+
def test_patch_update_relationship_to_one
|
215
215
|
ruby = Section.find_by(name: 'ruby')
|
216
216
|
patch '/posts/3/relationships/section', { 'data' => {type: 'sections', id: ruby.id.to_s }}.to_json, "CONTENT_TYPE" => JSONAPI::MEDIA_TYPE
|
217
217
|
|
218
218
|
assert_equal 204, status
|
219
219
|
end
|
220
220
|
|
221
|
-
def
|
221
|
+
def test_put_update_relationship_to_one
|
222
222
|
ruby = Section.find_by(name: 'ruby')
|
223
223
|
put '/posts/3/relationships/section', { 'data' => {type: 'sections', id: ruby.id.to_s }}.to_json, "CONTENT_TYPE" => JSONAPI::MEDIA_TYPE
|
224
224
|
|
225
225
|
assert_equal 204, status
|
226
226
|
end
|
227
227
|
|
228
|
-
def
|
228
|
+
def test_patch_update_relationship_to_many_acts_as_set
|
229
229
|
# Comments are acts_as_set=false so PUT/PATCH should respond with 403
|
230
230
|
|
231
231
|
rogue = Comment.find_by(body: 'Rogue Comment Here')
|
@@ -234,14 +234,14 @@ class RequestTest < ActionDispatch::IntegrationTest
|
|
234
234
|
assert_equal 403, status
|
235
235
|
end
|
236
236
|
|
237
|
-
def
|
237
|
+
def test_post_update_relationship_to_many
|
238
238
|
rogue = Comment.find_by(body: 'Rogue Comment Here')
|
239
239
|
post '/posts/5/relationships/comments', { 'data' => [{type: 'comments', id: rogue.id.to_s }]}.to_json, "CONTENT_TYPE" => JSONAPI::MEDIA_TYPE
|
240
240
|
|
241
241
|
assert_equal 204, status
|
242
242
|
end
|
243
243
|
|
244
|
-
def
|
244
|
+
def test_put_update_relationship_to_many_acts_as_set
|
245
245
|
# Comments are acts_as_set=false so PUT/PATCH should respond with 403. Note: JR currently treats PUT and PATCH as equivalent
|
246
246
|
|
247
247
|
rogue = Comment.find_by(body: 'Rogue Comment Here')
|
@@ -418,7 +418,7 @@ class RequestTest < ActionDispatch::IntegrationTest
|
|
418
418
|
assert_hash_equals post_1, json_response['data']
|
419
419
|
end
|
420
420
|
|
421
|
-
def
|
421
|
+
def test_flow_link_to_one_self_link
|
422
422
|
get '/posts'
|
423
423
|
assert_equal 200, status
|
424
424
|
post_1 = json_response['data'][0]
|
@@ -434,7 +434,7 @@ class RequestTest < ActionDispatch::IntegrationTest
|
|
434
434
|
})
|
435
435
|
end
|
436
436
|
|
437
|
-
def
|
437
|
+
def test_flow_link_to_many_self_link
|
438
438
|
get '/posts'
|
439
439
|
assert_equal 200, status
|
440
440
|
post_1 = json_response['data'][0]
|
@@ -455,7 +455,7 @@ class RequestTest < ActionDispatch::IntegrationTest
|
|
455
455
|
})
|
456
456
|
end
|
457
457
|
|
458
|
-
def
|
458
|
+
def test_flow_link_to_many_self_link_put
|
459
459
|
get '/posts'
|
460
460
|
assert_equal 200, status
|
461
461
|
post_1 = json_response['data'][4]
|
@@ -624,7 +624,7 @@ class RequestTest < ActionDispatch::IntegrationTest
|
|
624
624
|
assert_equal 200, status
|
625
625
|
end
|
626
626
|
|
627
|
-
def
|
627
|
+
def test_patch_formatted_dasherized_replace_to_many
|
628
628
|
JSONAPI.configuration.route_format = :dasherized_route
|
629
629
|
JSONAPI.configuration.json_key_format = :dasherized_key
|
630
630
|
patch '/api/v6/purchase-orders/2?include=line-items,order-flags',
|
@@ -652,7 +652,7 @@ class RequestTest < ActionDispatch::IntegrationTest
|
|
652
652
|
assert_equal 200, status
|
653
653
|
end
|
654
654
|
|
655
|
-
def
|
655
|
+
def test_post_to_many_link
|
656
656
|
JSONAPI.configuration.route_format = :dasherized_route
|
657
657
|
JSONAPI.configuration.json_key_format = :dasherized_key
|
658
658
|
post '/api/v6/purchase-orders/3/relationships/line-items',
|
@@ -666,7 +666,7 @@ class RequestTest < ActionDispatch::IntegrationTest
|
|
666
666
|
assert_equal 204, status
|
667
667
|
end
|
668
668
|
|
669
|
-
def
|
669
|
+
def test_patch_to_many_link
|
670
670
|
JSONAPI.configuration.route_format = :dasherized_route
|
671
671
|
JSONAPI.configuration.json_key_format = :dasherized_key
|
672
672
|
patch '/api/v6/purchase-orders/3/relationships/order-flags',
|
@@ -680,7 +680,7 @@ class RequestTest < ActionDispatch::IntegrationTest
|
|
680
680
|
assert_equal 204, status
|
681
681
|
end
|
682
682
|
|
683
|
-
def
|
683
|
+
def test_patch_to_one
|
684
684
|
JSONAPI.configuration.route_format = :dasherized_route
|
685
685
|
JSONAPI.configuration.json_key_format = :dasherized_key
|
686
686
|
patch '/api/v6/line-items/5/relationships/purchase-order',
|
@@ -19,37 +19,37 @@ class RoutesTest < ActionDispatch::IntegrationTest
|
|
19
19
|
|
20
20
|
def test_routing_posts_links_author_show
|
21
21
|
assert_routing({path: '/posts/1/relationships/author', method: :get},
|
22
|
-
{controller: 'posts', action: '
|
22
|
+
{controller: 'posts', action: 'show_relationship', post_id: '1', relationship: 'author'})
|
23
23
|
end
|
24
24
|
|
25
25
|
def test_routing_posts_links_author_destroy
|
26
26
|
assert_routing({path: '/posts/1/relationships/author', method: :delete},
|
27
|
-
{controller: 'posts', action: '
|
27
|
+
{controller: 'posts', action: 'destroy_relationship', post_id: '1', relationship: 'author'})
|
28
28
|
end
|
29
29
|
|
30
30
|
def test_routing_posts_links_author_update
|
31
31
|
assert_routing({path: '/posts/1/relationships/author', method: :patch},
|
32
|
-
{controller: 'posts', action: '
|
32
|
+
{controller: 'posts', action: 'update_relationship', post_id: '1', relationship: 'author'})
|
33
33
|
end
|
34
34
|
|
35
35
|
def test_routing_posts_links_tags_show
|
36
36
|
assert_routing({path: '/posts/1/relationships/tags', method: :get},
|
37
|
-
{controller: 'posts', action: '
|
37
|
+
{controller: 'posts', action: 'show_relationship', post_id: '1', relationship: 'tags'})
|
38
38
|
end
|
39
39
|
|
40
40
|
def test_routing_posts_links_tags_destroy
|
41
41
|
assert_routing({path: '/posts/1/relationships/tags/1,2', method: :delete},
|
42
|
-
{controller: 'posts', action: '
|
42
|
+
{controller: 'posts', action: 'destroy_relationship', post_id: '1', keys: '1,2', relationship: 'tags'})
|
43
43
|
end
|
44
44
|
|
45
45
|
def test_routing_posts_links_tags_create
|
46
46
|
assert_routing({path: '/posts/1/relationships/tags', method: :post},
|
47
|
-
{controller: 'posts', action: '
|
47
|
+
{controller: 'posts', action: 'create_relationship', post_id: '1', relationship: 'tags'})
|
48
48
|
end
|
49
49
|
|
50
50
|
def test_routing_posts_links_tags_update_acts_as_set
|
51
51
|
assert_routing({path: '/posts/1/relationships/tags', method: :patch},
|
52
|
-
{controller: 'posts', action: '
|
52
|
+
{controller: 'posts', action: 'update_relationship', post_id: '1', relationship: 'tags'})
|
53
53
|
end
|
54
54
|
|
55
55
|
# Polymorphic
|
@@ -60,7 +60,7 @@ class RoutesTest < ActionDispatch::IntegrationTest
|
|
60
60
|
method: :get
|
61
61
|
},
|
62
62
|
{
|
63
|
-
|
63
|
+
relationship: 'imageable',
|
64
64
|
source: 'pictures',
|
65
65
|
controller: 'imageables',
|
66
66
|
action: 'get_related_resource',
|
@@ -76,9 +76,9 @@ class RoutesTest < ActionDispatch::IntegrationTest
|
|
76
76
|
method: :patch
|
77
77
|
},
|
78
78
|
{
|
79
|
-
|
79
|
+
relationship: 'imageable',
|
80
80
|
controller: 'pictures',
|
81
|
-
action: '
|
81
|
+
action: 'update_relationship',
|
82
82
|
picture_id: '1'
|
83
83
|
}
|
84
84
|
)
|
@@ -91,9 +91,9 @@ class RoutesTest < ActionDispatch::IntegrationTest
|
|
91
91
|
method: :delete
|
92
92
|
},
|
93
93
|
{
|
94
|
-
|
94
|
+
relationship: 'imageable',
|
95
95
|
controller: 'pictures',
|
96
|
-
action: '
|
96
|
+
action: 'destroy_relationship',
|
97
97
|
picture_id: '1'
|
98
98
|
}
|
99
99
|
)
|
@@ -112,13 +112,13 @@ class RoutesTest < ActionDispatch::IntegrationTest
|
|
112
112
|
|
113
113
|
def test_routing_v1_posts_links_writer_show
|
114
114
|
assert_routing({path: '/api/v1/posts/1/relationships/writer', method: :get},
|
115
|
-
{controller: 'api/v1/posts', action: '
|
115
|
+
{controller: 'api/v1/posts', action: 'show_relationship', post_id: '1', relationship: 'writer'})
|
116
116
|
end
|
117
117
|
|
118
118
|
# V2
|
119
119
|
def test_routing_v2_posts_links_author_show
|
120
120
|
assert_routing({path: '/api/v2/posts/1/relationships/author', method: :get},
|
121
|
-
{controller: 'api/v2/posts', action: '
|
121
|
+
{controller: 'api/v2/posts', action: 'show_relationship', post_id: '1', relationship: 'author'})
|
122
122
|
end
|
123
123
|
|
124
124
|
def test_routing_v2_preferences_show
|
@@ -148,7 +148,7 @@ class RoutesTest < ActionDispatch::IntegrationTest
|
|
148
148
|
{action: 'show', controller: 'api/v4/expense_entries', id: '1'})
|
149
149
|
|
150
150
|
assert_routing({path: '/api/v4/expenseEntries/1/relationships/isoCurrency', method: :get},
|
151
|
-
{controller: 'api/v4/expense_entries', action: '
|
151
|
+
{controller: 'api/v4/expense_entries', action: 'show_relationship', expense_entry_id: '1', relationship: 'iso_currency'})
|
152
152
|
end
|
153
153
|
|
154
154
|
# V5 dasherized
|
@@ -167,7 +167,7 @@ class RoutesTest < ActionDispatch::IntegrationTest
|
|
167
167
|
{action: 'show', controller: 'api/v5/expense_entries', id: '1'})
|
168
168
|
|
169
169
|
assert_routing({path: '/api/v5/expense-entries/1/relationships/iso-currency', method: :get},
|
170
|
-
{controller: 'api/v5/expense_entries', action: '
|
170
|
+
{controller: 'api/v5/expense_entries', action: 'show_relationship', expense_entry_id: '1', relationship: 'iso_currency'})
|
171
171
|
end
|
172
172
|
|
173
173
|
def test_routing_authors_show
|
@@ -177,7 +177,7 @@ class RoutesTest < ActionDispatch::IntegrationTest
|
|
177
177
|
|
178
178
|
def test_routing_author_links_posts_create_not_acts_as_set
|
179
179
|
assert_routing({path: '/api/v5/authors/1/relationships/posts', method: :post},
|
180
|
-
{controller: 'api/v5/authors', action: '
|
180
|
+
{controller: 'api/v5/authors', action: 'create_relationship', author_id: '1', relationship: 'posts'})
|
181
181
|
end
|
182
182
|
|
183
183
|
#primary_key
|
@@ -194,14 +194,14 @@ class RoutesTest < ActionDispatch::IntegrationTest
|
|
194
194
|
|
195
195
|
# def test_routing_posts_links_author_except_destroy
|
196
196
|
# assert_routing({ path: '/api/v3/posts/1/relationships/author', method: :delete },
|
197
|
-
# { controller: 'api/v3/posts', action: '
|
197
|
+
# { controller: 'api/v3/posts', action: 'destroy_relationship', post_id: '1', relationship: 'author' })
|
198
198
|
# end
|
199
199
|
#
|
200
200
|
# def test_routing_posts_links_tags_only_create_show
|
201
201
|
# assert_routing({ path: '/api/v3/posts/1/relationships/tags/1,2', method: :delete },
|
202
|
-
# { controller: 'api/v3/posts', action: '
|
202
|
+
# { controller: 'api/v3/posts', action: 'destroy_relationship', post_id: '1', keys: '1,2', relationship: 'tags' })
|
203
203
|
# end
|
204
204
|
|
205
|
-
# Test that non acts as set
|
205
|
+
# Test that non acts as set to_many relationship update route is not created
|
206
206
|
|
207
207
|
end
|
data/test/test_helper.rb
CHANGED
@@ -14,6 +14,7 @@ require 'rails/all'
|
|
14
14
|
require 'rails/test_help'
|
15
15
|
require 'minitest/mock'
|
16
16
|
require 'jsonapi-resources'
|
17
|
+
require 'pry'
|
17
18
|
|
18
19
|
require File.expand_path('../helpers/value_matchers', __FILE__)
|
19
20
|
require File.expand_path('../helpers/assertions', __FILE__)
|
@@ -43,6 +44,12 @@ class TestApp < Rails::Application
|
|
43
44
|
ActiveSupport::JSON::Encoding.time_precision = 0 if Rails::VERSION::MAJOR >= 4 && Rails::VERSION::MINOR >= 1
|
44
45
|
end
|
45
46
|
|
47
|
+
module MyEngine
|
48
|
+
class Engine < ::Rails::Engine
|
49
|
+
isolate_namespace MyEngine
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
46
53
|
# Patch RAILS 4.0 to not use millisecond precision
|
47
54
|
if Rails::VERSION::MAJOR >= 4 && Rails::VERSION::MINOR < 1
|
48
55
|
module ActiveSupport
|
@@ -141,7 +148,7 @@ TestApp.routes.draw do
|
|
141
148
|
|
142
149
|
namespace :v3 do
|
143
150
|
jsonapi_resource :preferences do
|
144
|
-
# Intentionally empty block to skip
|
151
|
+
# Intentionally empty block to skip relationship urls
|
145
152
|
end
|
146
153
|
|
147
154
|
jsonapi_resources :posts, except: [:destroy] do
|
@@ -198,6 +205,16 @@ TestApp.routes.draw do
|
|
198
205
|
jsonapi_resources :numeros_telefone
|
199
206
|
end
|
200
207
|
end
|
208
|
+
|
209
|
+
mount MyEngine::Engine => "/boomshaka", as: :my_engine
|
210
|
+
end
|
211
|
+
|
212
|
+
MyEngine::Engine.routes.draw do
|
213
|
+
namespace :api do
|
214
|
+
namespace :v1 do
|
215
|
+
jsonapi_resources :people
|
216
|
+
end
|
217
|
+
end
|
201
218
|
end
|
202
219
|
|
203
220
|
# Ensure backward compatibility with Minitest 4
|