jsonapi-resources 0.1.0 → 0.1.1

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
  SHA1:
3
- metadata.gz: 9857d701e9136cba9b504cc0439b43e939722565
4
- data.tar.gz: 5696329e4c5865e17b7b3bb0f6a40d4840a06f16
3
+ metadata.gz: e3cc147ec7ed0dc456d04b86c715a7e9a13f47dd
4
+ data.tar.gz: 77d151a254fa986e93ba80fd06775ed0bd3753c1
5
5
  SHA512:
6
- metadata.gz: 00981170f6a4d0743a298cc8478c9cf2e8d7cd07153a204fc878188a07aaeb79d3ed45529a2f3cc5a84dde326d2697b0faa880c619a9554e4689d0d60fb8f4c8
7
- data.tar.gz: 8b42c9bdc12fc6b40aaec0e18b73d2871899047ce86ef77d8edf28e5775872337de9f83b4bc883d647fa4f563330a0987046c59ac4bf41f051d8f2f97a416e1e
6
+ metadata.gz: e3349452f04356593d52125551ed57049a91f2b89a66010587d562c12d1fd47ffab5896b8078434bd733a7a931c772478d8615afa30240e66b60b9a9f10ae14f
7
+ data.tar.gz: 4c75390e027e8af857d049f883836af04e6258ccd57209de458e0d63b809039684febc28720d3a3973e2a65c2068b70775f439b575e33a74b108a7da738bcc9c
@@ -2,4 +2,5 @@ require 'jsonapi/resource'
2
2
  require 'jsonapi/resources/version'
3
3
  require 'jsonapi/configuration'
4
4
  require 'jsonapi/formatter'
5
- require 'jsonapi/routing_ext'
5
+ require 'jsonapi/routing_ext'
6
+ require 'jsonapi/mime_types'
@@ -38,4 +38,4 @@ module JSONAPI
38
38
  def self.configure
39
39
  yield(@configuration)
40
40
  end
41
- end
41
+ end
@@ -15,5 +15,6 @@ module JSONAPI
15
15
  INVALID_SORT_PARAM = 114
16
16
 
17
17
  RECORD_NOT_FOUND = 404
18
+ UNSUPPORTED_MEDIA_TYPE = 415
18
19
  LOCKED = 423
19
20
  end
@@ -30,6 +30,20 @@ module JSONAPI
30
30
  end
31
31
  end
32
32
 
33
+ class UnsupportedMediaTypeError < Error
34
+ attr_accessor :media_type
35
+ def initialize(media_type)
36
+ @media_type = media_type
37
+ end
38
+
39
+ def errors
40
+ [JSONAPI::Error.new(code: JSONAPI::UNSUPPORTED_MEDIA_TYPE,
41
+ status: :unsupported_media_type,
42
+ title: 'Unsupported media type',
43
+ detail: "All requests that create or update resources must use the '#{JSONAPI::MEDIA_TYPE}' Content-Type. This request specified '#{media_type}.'")]
44
+ end
45
+ end
46
+
33
47
  class HasManyRelationExists < Error
34
48
  attr_accessor :id
35
49
  def initialize(id)
@@ -0,0 +1,9 @@
1
+ module JSONAPI
2
+ MEDIA_TYPE = "application/vnd.api+json"
3
+ end
4
+
5
+ Mime::Type.register JSONAPI::MEDIA_TYPE, :api_json
6
+
7
+ ActionDispatch::ParamsParser::DEFAULT_PARSERS[Mime::Type.lookup(JSONAPI::MEDIA_TYPE)]=lambda do |body|
8
+ JSON.parse(body)
9
+ end
@@ -117,7 +117,7 @@ module JSONAPI
117
117
  def _save
118
118
  @model.save!
119
119
  @save_needed = false
120
- rescue ActiveRecord::RecordInvalid => e
120
+ rescue ActiveRecord::RecordInvalid, ActiveRecord::RecordNotSaved => e
121
121
  raise JSONAPI::Exceptions::ValidationErrors.new(e.record.errors.messages)
122
122
  end
123
123
 
@@ -13,7 +13,9 @@ module JSONAPI
13
13
  class ResourceController < ActionController::Base
14
14
  include ResourceFor
15
15
 
16
+ before_filter :ensure_correct_media_type, only: [:create, :update, :create_association, :update_association]
16
17
  before_filter :setup_request
18
+ after_filter :setup_response
17
19
 
18
20
  def index
19
21
  render json: JSONAPI::ResourceSerializer.new(resource_klass).serialize_to_hash(
@@ -107,6 +109,16 @@ module JSONAPI
107
109
  @resource_klass_name ||= "#{self.class.name.sub(/Controller$/, '').singularize}Resource"
108
110
  end
109
111
 
112
+ def ensure_correct_media_type
113
+ unless request.content_type == JSONAPI::MEDIA_TYPE
114
+ raise JSONAPI::Exceptions::UnsupportedMediaTypeError.new(request.content_type)
115
+ end
116
+ rescue => e
117
+ # :nocov:
118
+ handle_exceptions(e)
119
+ # :nocov:
120
+ end
121
+
110
122
  def setup_request
111
123
  @request = JSONAPI::Request.new(params, {
112
124
  context: context,
@@ -119,6 +131,12 @@ module JSONAPI
119
131
  # :nocov:
120
132
  end
121
133
 
134
+ def setup_response
135
+ if response.body.size > 0
136
+ response.headers['Content-Type'] = JSONAPI::MEDIA_TYPE
137
+ end
138
+ end
139
+
122
140
  def parse_key_array(raw)
123
141
  keys = raw.nil? || raw.empty? ? [] : raw.split(',')
124
142
  resource_klass.verify_keys(keys, context)
@@ -1,5 +1,5 @@
1
1
  module JSONAPI
2
2
  module Resources
3
- VERSION = "0.1.0"
3
+ VERSION = "0.1.1"
4
4
  end
5
5
  end
@@ -1,6 +1,10 @@
1
1
  require File.expand_path('../../test_helper', __FILE__)
2
2
  require File.expand_path('../../fixtures/active_record', __FILE__)
3
3
 
4
+ def set_content_type_header!
5
+ @request.headers['Content-Type'] = JSONAPI::MEDIA_TYPE
6
+ end
7
+
4
8
  class PostsControllerTest < ActionController::TestCase
5
9
  def test_index
6
10
  get :index
@@ -262,6 +266,7 @@ class PostsControllerTest < ActionController::TestCase
262
266
  end
263
267
 
264
268
  def test_create_simple
269
+ set_content_type_header!
265
270
  post :create,
266
271
  {
267
272
  posts: {
@@ -281,6 +286,7 @@ class PostsControllerTest < ActionController::TestCase
281
286
  end
282
287
 
283
288
  def test_create_link_to_missing_object
289
+ set_content_type_header!
284
290
  post :create,
285
291
  {
286
292
  posts: {
@@ -298,6 +304,7 @@ class PostsControllerTest < ActionController::TestCase
298
304
  end
299
305
 
300
306
  def test_create_extra_param
307
+ set_content_type_header!
301
308
  post :create,
302
309
  {
303
310
  posts: {
@@ -315,6 +322,7 @@ class PostsControllerTest < ActionController::TestCase
315
322
  end
316
323
 
317
324
  def test_create_with_invalid_data
325
+ set_content_type_header!
318
326
  post :create,
319
327
  {
320
328
  posts: {
@@ -338,6 +346,7 @@ class PostsControllerTest < ActionController::TestCase
338
346
  end
339
347
 
340
348
  def test_create_multiple
349
+ set_content_type_header!
341
350
  post :create,
342
351
  {
343
352
  posts: [
@@ -367,6 +376,7 @@ class PostsControllerTest < ActionController::TestCase
367
376
  end
368
377
 
369
378
  def test_create_multiple_wrong_case
379
+ set_content_type_header!
370
380
  post :create,
371
381
  {
372
382
  posts: [
@@ -392,6 +402,7 @@ class PostsControllerTest < ActionController::TestCase
392
402
  end
393
403
 
394
404
  def test_create_simple_missing_posts
405
+ set_content_type_header!
395
406
  post :create,
396
407
  {
397
408
  posts_spelled_wrong: {
@@ -408,6 +419,7 @@ class PostsControllerTest < ActionController::TestCase
408
419
  end
409
420
 
410
421
  def test_create_simple_unpermitted_attributes
422
+ set_content_type_header!
411
423
  post :create,
412
424
  {
413
425
  posts: {
@@ -424,6 +436,7 @@ class PostsControllerTest < ActionController::TestCase
424
436
  end
425
437
 
426
438
  def test_create_with_links
439
+ set_content_type_header!
427
440
  post :create,
428
441
  {
429
442
  posts: {
@@ -445,6 +458,7 @@ class PostsControllerTest < ActionController::TestCase
445
458
  end
446
459
 
447
460
  def test_create_with_links_include_and_fields
461
+ set_content_type_header!
448
462
  post :create,
449
463
  {
450
464
  posts: {
@@ -471,6 +485,7 @@ class PostsControllerTest < ActionController::TestCase
471
485
  end
472
486
 
473
487
  def test_update_with_links
488
+ set_content_type_header!
474
489
  javascript = Section.find_by(name: 'javascript')
475
490
 
476
491
  put :update,
@@ -495,6 +510,7 @@ class PostsControllerTest < ActionController::TestCase
495
510
  end
496
511
 
497
512
  def test_update_remove_links
513
+ set_content_type_header!
498
514
  put :update,
499
515
  {
500
516
  id: 3,
@@ -517,6 +533,7 @@ class PostsControllerTest < ActionController::TestCase
517
533
  end
518
534
 
519
535
  def test_update_relationship_has_one
536
+ set_content_type_header!
520
537
  ruby = Section.find_by(name: 'ruby')
521
538
  post_object = Post.find(3)
522
539
  assert_not_equal ruby.id, post_object.section_id
@@ -529,6 +546,7 @@ class PostsControllerTest < ActionController::TestCase
529
546
  end
530
547
 
531
548
  def test_update_relationship_has_one_singular_param
549
+ set_content_type_header!
532
550
  ruby = Section.find_by(name: 'ruby')
533
551
  post_object = Post.find(3)
534
552
 
@@ -538,6 +556,7 @@ class PostsControllerTest < ActionController::TestCase
538
556
  end
539
557
 
540
558
  def test_update_relationship_has_one_singular_param_relation_nil
559
+ set_content_type_header!
541
560
  ruby = Section.find_by(name: 'ruby')
542
561
  post_object = Post.find(3)
543
562
  post_object.section_id = nil
@@ -551,6 +570,7 @@ class PostsControllerTest < ActionController::TestCase
551
570
  end
552
571
 
553
572
  def test_create_relationship_has_one_singular_param_relation_nil
573
+ set_content_type_header!
554
574
  ruby = Section.find_by(name: 'ruby')
555
575
  post_object = Post.find(3)
556
576
  post_object.section_id = nil
@@ -564,6 +584,7 @@ class PostsControllerTest < ActionController::TestCase
564
584
  end
565
585
 
566
586
  def test_create_relationship_has_one_singular_param_relation_not_nil
587
+ set_content_type_header!
567
588
  ruby = Section.find_by(name: 'ruby')
568
589
  js = Section.find_by(name: 'javascript')
569
590
  post_object = Post.find(3)
@@ -579,6 +600,7 @@ class PostsControllerTest < ActionController::TestCase
579
600
  end
580
601
 
581
602
  def test_update_relationship_has_many_join_table_single
603
+ set_content_type_header!
582
604
  put :update_association, {post_id: 3, association: 'tags', tags: []}
583
605
  assert_response :no_content
584
606
 
@@ -601,6 +623,7 @@ class PostsControllerTest < ActionController::TestCase
601
623
  end
602
624
 
603
625
  def test_update_relationship_has_many_join_table
626
+ set_content_type_header!
604
627
  put :update_association, {post_id: 3, association: 'tags', tags: [2, 3]}
605
628
 
606
629
  assert_response :no_content
@@ -610,6 +633,7 @@ class PostsControllerTest < ActionController::TestCase
610
633
  end
611
634
 
612
635
  def test_create_relationship_has_many_join_table
636
+ set_content_type_header!
613
637
  put :update_association, {post_id: 3, association: 'tags', tags: [2, 3]}
614
638
 
615
639
  assert_response :no_content
@@ -626,6 +650,7 @@ class PostsControllerTest < ActionController::TestCase
626
650
  end
627
651
 
628
652
  def test_create_relationship_has_many_missing_tags
653
+ set_content_type_header!
629
654
  post :create_association, {post_id: 3, association: 'tags'}
630
655
 
631
656
  assert_response :bad_request
@@ -633,6 +658,7 @@ class PostsControllerTest < ActionController::TestCase
633
658
  end
634
659
 
635
660
  def test_create_relationship_has_many_join_table_record_exists
661
+ set_content_type_header!
636
662
  put :update_association, {post_id: 3, association: 'tags', tags: [2, 3]}
637
663
 
638
664
  assert_response :no_content
@@ -647,6 +673,7 @@ class PostsControllerTest < ActionController::TestCase
647
673
  end
648
674
 
649
675
  def test_update_relationship_has_one_mismatch_params
676
+ set_content_type_header!
650
677
  post :create_association, {post_id: 3, association: 'section', authors: 1}
651
678
 
652
679
  assert_response :bad_request
@@ -654,6 +681,7 @@ class PostsControllerTest < ActionController::TestCase
654
681
  end
655
682
 
656
683
  def test_update_relationship_has_many_missing_tags
684
+ set_content_type_header!
657
685
  put :update_association, {post_id: 3, association: 'tags'}
658
686
 
659
687
  assert_response :bad_request
@@ -661,6 +689,7 @@ class PostsControllerTest < ActionController::TestCase
661
689
  end
662
690
 
663
691
  def test_delete_relationship_has_one
692
+ set_content_type_header!
664
693
  ruby = Section.find_by(name: 'ruby')
665
694
 
666
695
  post :create_association, {post_id: 9, association: 'section', sections: ruby.id}
@@ -675,6 +704,7 @@ class PostsControllerTest < ActionController::TestCase
675
704
  end
676
705
 
677
706
  def test_delete_relationship_has_many
707
+ set_content_type_header!
678
708
  put :update_association, {post_id: 9, association: 'tags', tags: [2, 3]}
679
709
  assert_response :no_content
680
710
  p = Post.find(9)
@@ -688,6 +718,7 @@ class PostsControllerTest < ActionController::TestCase
688
718
  end
689
719
 
690
720
  def test_delete_relationship_has_many_does_not_exist
721
+ set_content_type_header!
691
722
  put :update_association, {post_id: 9, association: 'tags', tags: [2, 3]}
692
723
  assert_response :no_content
693
724
  p = Post.find(9)
@@ -701,6 +732,7 @@ class PostsControllerTest < ActionController::TestCase
701
732
  end
702
733
 
703
734
  def test_update_mismatched_keys
735
+ set_content_type_header!
704
736
  javascript = Section.find_by(name: 'javascript')
705
737
 
706
738
  put :update,
@@ -721,6 +753,7 @@ class PostsControllerTest < ActionController::TestCase
721
753
  end
722
754
 
723
755
  def test_update_extra_param
756
+ set_content_type_header!
724
757
  javascript = Section.find_by(name: 'javascript')
725
758
 
726
759
  put :update,
@@ -741,6 +774,7 @@ class PostsControllerTest < ActionController::TestCase
741
774
  end
742
775
 
743
776
  def test_update_extra_param_in_links
777
+ set_content_type_header!
744
778
  javascript = Section.find_by(name: 'javascript')
745
779
 
746
780
  put :update,
@@ -761,6 +795,7 @@ class PostsControllerTest < ActionController::TestCase
761
795
  end
762
796
 
763
797
  def test_update_missing_param
798
+ set_content_type_header!
764
799
  javascript = Section.find_by(name: 'javascript')
765
800
 
766
801
  put :update,
@@ -780,6 +815,7 @@ class PostsControllerTest < ActionController::TestCase
780
815
  end
781
816
 
782
817
  def test_update_multiple
818
+ set_content_type_header!
783
819
  javascript = Section.find_by(name: 'javascript')
784
820
 
785
821
  put :update,
@@ -820,6 +856,7 @@ class PostsControllerTest < ActionController::TestCase
820
856
  end
821
857
 
822
858
  def test_update_multiple_missing_keys
859
+ set_content_type_header!
823
860
  javascript = Section.find_by(name: 'javascript')
824
861
 
825
862
  put :update,
@@ -847,6 +884,7 @@ class PostsControllerTest < ActionController::TestCase
847
884
  end
848
885
 
849
886
  def test_update_mismatch_keys
887
+ set_content_type_header!
850
888
  javascript = Section.find_by(name: 'javascript')
851
889
 
852
890
  put :update,
@@ -876,6 +914,7 @@ class PostsControllerTest < ActionController::TestCase
876
914
  end
877
915
 
878
916
  def test_update_multiple_count_mismatch
917
+ set_content_type_header!
879
918
  javascript = Section.find_by(name: 'javascript')
880
919
 
881
920
  put :update,
@@ -905,6 +944,7 @@ class PostsControllerTest < ActionController::TestCase
905
944
  end
906
945
 
907
946
  def test_update_unpermitted_attributes
947
+ set_content_type_header!
908
948
  put :update,
909
949
  {
910
950
  id: 3,
@@ -923,6 +963,7 @@ class PostsControllerTest < ActionController::TestCase
923
963
  end
924
964
 
925
965
  def test_update_bad_attributes
966
+ set_content_type_header!
926
967
  put :update,
927
968
  {
928
969
  id: 3,
@@ -1086,6 +1127,7 @@ class ExpenseEntriesControllerTest < ActionController::TestCase
1086
1127
  end
1087
1128
 
1088
1129
  def test_create_expense_entries_underscored
1130
+ set_content_type_header!
1089
1131
  JSONAPI.configuration.json_key_format = :underscored_key
1090
1132
 
1091
1133
  post :create,
@@ -1113,6 +1155,7 @@ class ExpenseEntriesControllerTest < ActionController::TestCase
1113
1155
  end
1114
1156
 
1115
1157
  def test_create_expense_entries_camelized_key
1158
+ set_content_type_header!
1116
1159
  JSONAPI.configuration.json_key_format = :camelized_key
1117
1160
 
1118
1161
  post :create,
@@ -1140,6 +1183,7 @@ class ExpenseEntriesControllerTest < ActionController::TestCase
1140
1183
  end
1141
1184
 
1142
1185
  def test_create_expense_entries_dasherized_key
1186
+ set_content_type_header!
1143
1187
  JSONAPI.configuration.json_key_format = :dasherized_key
1144
1188
 
1145
1189
  post :create,
@@ -1287,6 +1331,7 @@ end
1287
1331
 
1288
1332
  class PeopleControllerTest < ActionController::TestCase
1289
1333
  def test_create_validations
1334
+ set_content_type_header!
1290
1335
  post :create,
1291
1336
  {
1292
1337
  people: {
@@ -1300,6 +1345,7 @@ class PeopleControllerTest < ActionController::TestCase
1300
1345
  end
1301
1346
 
1302
1347
  def test_create_validations_missing_attribute
1348
+ set_content_type_header!
1303
1349
  post :create,
1304
1350
  {
1305
1351
  people: {
@@ -1316,6 +1362,7 @@ class PeopleControllerTest < ActionController::TestCase
1316
1362
  end
1317
1363
 
1318
1364
  def test_update_validations_missing_attribute
1365
+ set_content_type_header!
1319
1366
  put :update,
1320
1367
  {
1321
1368
  id: 3,
@@ -1404,6 +1451,7 @@ class BreedsControllerTest < ActionController::TestCase
1404
1451
  end
1405
1452
 
1406
1453
  def test_poro_create_simple
1454
+ set_content_type_header!
1407
1455
  post :create,
1408
1456
  {
1409
1457
  breeds: {
@@ -1417,6 +1465,7 @@ class BreedsControllerTest < ActionController::TestCase
1417
1465
  end
1418
1466
 
1419
1467
  def test_poro_create_update
1468
+ set_content_type_header!
1420
1469
  post :create,
1421
1470
  {
1422
1471
  breeds: {
@@ -1500,6 +1549,7 @@ class Api::V1::PostsControllerTest < ActionController::TestCase
1500
1549
  end
1501
1550
 
1502
1551
  def test_create_simple_namespaced
1552
+ set_content_type_header!
1503
1553
  post :create,
1504
1554
  {
1505
1555
  posts: {
@@ -45,6 +45,21 @@ class RequestTest < ActionDispatch::IntegrationTest
45
45
  assert_equal 'USD', json_response['isoCurrency']
46
46
  end
47
47
 
48
+ def test_put_single_without_content_type
49
+ put '/posts/3',
50
+ {
51
+ 'posts' => {
52
+ 'id' => '3',
53
+ 'title' => 'A great new Post',
54
+ 'links' => {
55
+ 'tags' => [3, 4]
56
+ }
57
+ }
58
+ }.to_json, "CONTENT_TYPE" => "application/json"
59
+
60
+ assert_equal 415, status
61
+ end
62
+
48
63
  def test_put_single
49
64
  put '/posts/3',
50
65
  {
@@ -55,13 +70,97 @@ class RequestTest < ActionDispatch::IntegrationTest
55
70
  'tags' => [3, 4]
56
71
  }
57
72
  }
58
- }
73
+ }.to_json, "CONTENT_TYPE" => JSONAPI::MEDIA_TYPE
74
+
59
75
  assert_equal 200, status
60
76
  end
61
77
 
78
+ def test_post_single_without_content_type
79
+ post '/posts',
80
+ {
81
+ 'posts' => {
82
+ 'title' => 'A great new Post',
83
+ 'links' => {
84
+ 'tags' => [3, 4]
85
+ }
86
+ }
87
+ }.to_json, "CONTENT_TYPE" => "application/json"
88
+
89
+ assert_equal 415, status
90
+ end
91
+
92
+ def test_post_single
93
+ post '/posts',
94
+ {
95
+ 'posts' => {
96
+ 'title' => 'A great new Post',
97
+ 'body' => 'JSONAPIResources is the greatest thing since unsliced bread.',
98
+ 'links' => {
99
+ 'author' => '3'
100
+ }
101
+ }
102
+ }.to_json, "CONTENT_TYPE" => JSONAPI::MEDIA_TYPE
103
+
104
+ assert_equal 201, status
105
+ end
106
+
107
+ def test_create_association_without_content_type
108
+ ruby = Section.find_by(name: 'ruby')
109
+ put '/posts/3/links/section', { 'sections' => ruby.id.to_s }.to_json
110
+
111
+ assert_equal 415, status
112
+ end
113
+
114
+ def test_create_association
115
+ ruby = Section.find_by(name: 'ruby')
116
+ put '/posts/3/links/section', { 'sections' => ruby.id.to_s }.to_json, "CONTENT_TYPE" => JSONAPI::MEDIA_TYPE
117
+
118
+ assert_equal 204, status
119
+ end
120
+
121
+ def test_index_content_type
122
+ get '/posts'
123
+ assert_match JSONAPI::MEDIA_TYPE, headers['Content-Type']
124
+ end
125
+
126
+ def test_get_content_type
127
+ get '/posts/3'
128
+ assert_match JSONAPI::MEDIA_TYPE, headers['Content-Type']
129
+ end
130
+
131
+ def test_put_content_type
132
+ put '/posts/3',
133
+ {
134
+ 'posts' => {
135
+ 'id' => '3',
136
+ 'title' => 'A great new Post',
137
+ 'links' => {
138
+ 'tags' => [3, 4]
139
+ }
140
+ }
141
+ }.to_json, "CONTENT_TYPE" => JSONAPI::MEDIA_TYPE
142
+
143
+ assert_match JSONAPI::MEDIA_TYPE, headers['Content-Type']
144
+ end
145
+
146
+ def test_post_correct_content_type
147
+ post '/posts',
148
+ {
149
+ 'posts' => {
150
+ 'title' => 'A great new Post',
151
+ 'links' => {
152
+ 'author' => '3'
153
+ }
154
+ }
155
+ }.to_json, "CONTENT_TYPE" => JSONAPI::MEDIA_TYPE
156
+
157
+ assert_match JSONAPI::MEDIA_TYPE, headers['Content-Type']
158
+ end
159
+
62
160
  def test_destroy_single
63
161
  delete '/posts/7'
64
162
  assert_equal 204, status
163
+ assert_nil headers['Content-Type']
65
164
  end
66
165
 
67
166
  def test_destroy_multiple
data/test/test_helper.rb CHANGED
@@ -14,6 +14,7 @@ require 'rails/all'
14
14
  require 'jsonapi/routing_ext'
15
15
  require 'jsonapi/configuration'
16
16
  require 'jsonapi/formatter'
17
+ require 'jsonapi/mime_types'
17
18
 
18
19
  require File.expand_path('../helpers/value_matchers', __FILE__)
19
20
  require File.expand_path('../helpers/hash_helpers', __FILE__)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jsonapi-resources
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dan Gebhardt
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-01-23 00:00:00.000000000 Z
12
+ date: 2015-01-31 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -134,6 +134,7 @@ files:
134
134
  - lib/jsonapi/error_codes.rb
135
135
  - lib/jsonapi/exceptions.rb
136
136
  - lib/jsonapi/formatter.rb
137
+ - lib/jsonapi/mime_types.rb
137
138
  - lib/jsonapi/operation.rb
138
139
  - lib/jsonapi/operation_result.rb
139
140
  - lib/jsonapi/operations_processor.rb
@@ -177,7 +178,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
177
178
  version: '0'
178
179
  requirements: []
179
180
  rubyforge_project:
180
- rubygems_version: 2.2.2
181
+ rubygems_version: 2.4.5
181
182
  signing_key:
182
183
  specification_version: 4
183
184
  summary: Easily support JSON API in Rails.