simple_jsonapi 1.0.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.
Files changed (76) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +10 -0
  3. data/.rubocop.yml +131 -0
  4. data/CHANGELOG.md +2 -0
  5. data/Gemfile +5 -0
  6. data/Jenkinsfile +92 -0
  7. data/LICENSE.txt +22 -0
  8. data/README.md +532 -0
  9. data/Rakefile +10 -0
  10. data/lib/simple_jsonapi.rb +112 -0
  11. data/lib/simple_jsonapi/definition/attribute.rb +45 -0
  12. data/lib/simple_jsonapi/definition/base.rb +50 -0
  13. data/lib/simple_jsonapi/definition/concerns/has_links_object.rb +36 -0
  14. data/lib/simple_jsonapi/definition/concerns/has_meta_object.rb +36 -0
  15. data/lib/simple_jsonapi/definition/error.rb +70 -0
  16. data/lib/simple_jsonapi/definition/error_source.rb +29 -0
  17. data/lib/simple_jsonapi/definition/link.rb +27 -0
  18. data/lib/simple_jsonapi/definition/meta.rb +27 -0
  19. data/lib/simple_jsonapi/definition/relationship.rb +60 -0
  20. data/lib/simple_jsonapi/definition/resource.rb +104 -0
  21. data/lib/simple_jsonapi/error_serializer.rb +76 -0
  22. data/lib/simple_jsonapi/errors/bad_request.rb +11 -0
  23. data/lib/simple_jsonapi/errors/exception_serializer.rb +6 -0
  24. data/lib/simple_jsonapi/errors/wrapped_error.rb +35 -0
  25. data/lib/simple_jsonapi/errors/wrapped_error_serializer.rb +35 -0
  26. data/lib/simple_jsonapi/helpers/exceptions.rb +39 -0
  27. data/lib/simple_jsonapi/helpers/serializer_inferrer.rb +136 -0
  28. data/lib/simple_jsonapi/helpers/serializer_methods.rb +36 -0
  29. data/lib/simple_jsonapi/node/attributes.rb +51 -0
  30. data/lib/simple_jsonapi/node/base.rb +91 -0
  31. data/lib/simple_jsonapi/node/data/collection.rb +25 -0
  32. data/lib/simple_jsonapi/node/data/singular.rb +26 -0
  33. data/lib/simple_jsonapi/node/document/base.rb +62 -0
  34. data/lib/simple_jsonapi/node/document/collection.rb +17 -0
  35. data/lib/simple_jsonapi/node/document/errors.rb +17 -0
  36. data/lib/simple_jsonapi/node/document/singular.rb +17 -0
  37. data/lib/simple_jsonapi/node/error.rb +55 -0
  38. data/lib/simple_jsonapi/node/error_source.rb +40 -0
  39. data/lib/simple_jsonapi/node/errors.rb +28 -0
  40. data/lib/simple_jsonapi/node/included.rb +45 -0
  41. data/lib/simple_jsonapi/node/object_links.rb +40 -0
  42. data/lib/simple_jsonapi/node/object_meta.rb +40 -0
  43. data/lib/simple_jsonapi/node/relationship.rb +79 -0
  44. data/lib/simple_jsonapi/node/relationship_data/base.rb +53 -0
  45. data/lib/simple_jsonapi/node/relationship_data/collection.rb +32 -0
  46. data/lib/simple_jsonapi/node/relationship_data/singular.rb +33 -0
  47. data/lib/simple_jsonapi/node/relationships.rb +60 -0
  48. data/lib/simple_jsonapi/node/resource/base.rb +21 -0
  49. data/lib/simple_jsonapi/node/resource/full.rb +49 -0
  50. data/lib/simple_jsonapi/node/resource/linkage.rb +25 -0
  51. data/lib/simple_jsonapi/parameters/fields_spec.rb +45 -0
  52. data/lib/simple_jsonapi/parameters/include_spec.rb +57 -0
  53. data/lib/simple_jsonapi/parameters/sort_spec.rb +107 -0
  54. data/lib/simple_jsonapi/serializer.rb +89 -0
  55. data/lib/simple_jsonapi/version.rb +3 -0
  56. data/simple_jsonapi.gemspec +29 -0
  57. data/test/errors/bad_request_test.rb +34 -0
  58. data/test/errors/error_serializer_test.rb +229 -0
  59. data/test/errors/exception_serializer_test.rb +25 -0
  60. data/test/errors/wrapped_error_serializer_test.rb +91 -0
  61. data/test/errors/wrapped_error_test.rb +44 -0
  62. data/test/parameters/fields_spec_test.rb +56 -0
  63. data/test/parameters/include_spec_test.rb +58 -0
  64. data/test/parameters/sort_spec_test.rb +65 -0
  65. data/test/resources/attributes_test.rb +109 -0
  66. data/test/resources/extras_test.rb +70 -0
  67. data/test/resources/id_and_type_test.rb +76 -0
  68. data/test/resources/inclusion_test.rb +134 -0
  69. data/test/resources/links_test.rb +63 -0
  70. data/test/resources/meta_test.rb +49 -0
  71. data/test/resources/relationships_test.rb +262 -0
  72. data/test/resources/sorting_test.rb +79 -0
  73. data/test/resources/sparse_fieldset_test.rb +160 -0
  74. data/test/root_objects_test.rb +165 -0
  75. data/test/test_helper.rb +31 -0
  76. metadata +235 -0
@@ -0,0 +1,160 @@
1
+ require 'test_helper'
2
+
3
+ class SparseFieldsetTest < Minitest::Spec
4
+ class Order < TestModel
5
+ attr_accessor :customer_name, :description
6
+ attr_writer :line_items
7
+
8
+ def line_items
9
+ @line_items ||= []
10
+ end
11
+ end
12
+
13
+ class LineItem < TestModel
14
+ attr_accessor :order_id, :product, :quantity
15
+ end
16
+
17
+ class Product < TestModel
18
+ attr_accessor :name, :price
19
+ end
20
+
21
+ class OrderSerializer < SimpleJsonapi::Serializer
22
+ attribute :customer_name
23
+ attribute :description
24
+ has_many :line_items do
25
+ data(&:line_items)
26
+ end
27
+ has_many :products do
28
+ data { |o| o.line_items.flat_map(&:product).compact.uniq }
29
+ end
30
+ end
31
+
32
+ class LineItemSerializer < SimpleJsonapi::Serializer
33
+ attribute :order_id
34
+ attribute :quantity
35
+ has_one :product do
36
+ data(&:product)
37
+ end
38
+ end
39
+
40
+ class ProductSerializer < SimpleJsonapi::Serializer
41
+ attribute :name
42
+ end
43
+
44
+ let(:order) do
45
+ Order.new(id: 1, customer_name: "Miguel", description: "10 things", line_items: [line_item])
46
+ end
47
+ let(:line_item) do
48
+ LineItem.new(id: 11, order_id: 1, product: product, quantity: 10)
49
+ end
50
+ let(:product) do
51
+ Product.new(id: 21, name: "Thing", price: 5.99)
52
+ end
53
+
54
+ let(:attributes) { serialized.dig(:data, :attributes) }
55
+ let(:relationships) { serialized.dig(:data, :relationships) }
56
+
57
+ describe "Sparse fieldsets" do
58
+ describe "for the base resources" do
59
+ describe "without a fields parameter" do
60
+ let(:serialized) { SimpleJsonapi.render_resource(order) }
61
+
62
+ it "renders all the attributes" do
63
+ assert_equal [:customer_name, :description], attributes.keys
64
+ end
65
+
66
+ it "renders all the relationships" do
67
+ assert_equal [:line_items, :products], relationships.keys
68
+ end
69
+ end
70
+
71
+ describe "with fields specified" do
72
+ let(:serialized) { SimpleJsonapi.render_resource(order, fields: { orders: "customer_name,products" }) }
73
+
74
+ it "renders only the requested attributes" do
75
+ assert_equal [:customer_name], attributes.keys
76
+ end
77
+
78
+ it "renders only the requested relationships" do
79
+ assert_equal [:products], relationships.keys
80
+ end
81
+ end
82
+
83
+ describe "with an empty list" do
84
+ let(:serialized) { SimpleJsonapi.render_resource(order, fields: { orders: "" }) }
85
+
86
+ it "renders none of the attributes" do
87
+ refute serialized[:data].key?(:attributes)
88
+ end
89
+
90
+ it "renders none of the relationships" do
91
+ refute serialized[:data].key?(:relationships)
92
+ end
93
+ end
94
+ end
95
+
96
+ describe "for related resources" do
97
+ let(:included_line_item) do
98
+ serialized[:included].find { |res| res[:type] == "line_items" }
99
+ end
100
+ let(:included_product) do
101
+ serialized[:included].find { |res| res[:type] == "products" }
102
+ end
103
+
104
+ describe "without a fields parameter" do
105
+ let(:serialized) do
106
+ SimpleJsonapi.render_resource(
107
+ order,
108
+ include: "line_items,line_items.product",
109
+ )
110
+ end
111
+
112
+ it "renders all the attributes" do
113
+ assert_equal [:order_id, :quantity], included_line_item[:attributes].keys
114
+ end
115
+
116
+ it "renders all the relationships" do
117
+ assert_equal [:product], included_line_item[:relationships].keys
118
+ end
119
+ end
120
+
121
+ describe "with fields specified" do
122
+ let(:serialized) do
123
+ SimpleJsonapi.render_resource(
124
+ order,
125
+ include: "line_items,line_items.product",
126
+ fields: { line_items: "order_id,product", products: "name" },
127
+ )
128
+ end
129
+
130
+ it "renders only the requested attributes" do
131
+ assert_equal [:order_id], included_line_item[:attributes].keys
132
+ assert_equal [:name], included_product[:attributes].keys
133
+ end
134
+
135
+ it "renders only the requested relationships" do
136
+ assert_equal [:product], included_line_item[:relationships].keys
137
+ end
138
+ end
139
+
140
+ describe "with an empty list" do
141
+ let(:serialized) do
142
+ SimpleJsonapi.render_resource(
143
+ order,
144
+ include: "line_items,products",
145
+ fields: { line_items: "", products: "" },
146
+ )
147
+ end
148
+
149
+ it "renders none of the attributes" do
150
+ refute included_line_item.key?(:attributes)
151
+ refute included_product.key?(:attributes)
152
+ end
153
+
154
+ it "renders none of the relationships" do
155
+ refute included_line_item.key?(:relationships)
156
+ end
157
+ end
158
+ end
159
+ end
160
+ end
@@ -0,0 +1,165 @@
1
+ require_relative 'test_helper'
2
+
3
+ class RootObjectsTest < Minitest::Spec
4
+ class Order < TestModel
5
+ end
6
+
7
+ class OrderSerializer < SimpleJsonapi::Serializer
8
+ end
9
+
10
+ describe "Root data object" do
11
+ describe "for a singular resource" do
12
+ it "is nil when given nil" do
13
+ serialized = SimpleJsonapi.render_resource(nil)
14
+ assert_includes serialized.keys, :data
15
+ assert_nil serialized[:data]
16
+ end
17
+
18
+ it "is an object when given a single object" do
19
+ serialized = SimpleJsonapi.render_resource(Order.new)
20
+ assert_instance_of Hash, serialized[:data]
21
+ end
22
+
23
+ it "raises an error when given an array" do
24
+ ex = assert_raises(SimpleJsonapi::SerializerInferenceError) do
25
+ SimpleJsonapi.render_resource([Order.new])
26
+ end
27
+ assert_match(/Unable to infer serializer for Array/, ex.message)
28
+ end
29
+ end
30
+
31
+ describe "for a collection of resources" do
32
+ it "is an array when given an empty array" do
33
+ serialized = SimpleJsonapi.render_resources([])
34
+ assert_instance_of Array, serialized[:data]
35
+ assert_equal 0, serialized[:data].size
36
+ end
37
+
38
+ it "is an array when given a single object" do
39
+ serialized = SimpleJsonapi.render_resources(Order.new)
40
+ assert_instance_of Array, serialized[:data]
41
+ assert_equal 1, serialized[:data].size
42
+ end
43
+
44
+ it "is an array when given a one-element array" do
45
+ serialized = SimpleJsonapi.render_resources([Order.new])
46
+ assert_instance_of Array, serialized[:data]
47
+ assert_equal 1, serialized[:data].size
48
+ end
49
+
50
+ it "is an array when given a multiple-element array" do
51
+ serialized = SimpleJsonapi.render_resources([Order.new, Order.new])
52
+ assert_instance_of Array, serialized[:data]
53
+ assert_equal 2, serialized[:data].size
54
+ end
55
+ end
56
+
57
+ describe "when rendering errors" do
58
+ it "is omitted" do
59
+ serialized = SimpleJsonapi.render_errors([])
60
+ refute_includes serialized.keys, :data
61
+ end
62
+ end
63
+ end
64
+
65
+ describe "Root errors object" do
66
+ it "is omitted when given an empty array" do
67
+ serialized = SimpleJsonapi.render_errors([])
68
+ refute serialized.key?(:errors)
69
+ end
70
+
71
+ it "is an array when given a single error" do
72
+ serialized = SimpleJsonapi.render_errors(StandardError.new)
73
+ assert_instance_of Array, serialized[:errors]
74
+ assert_equal 1, serialized[:errors].size
75
+ end
76
+
77
+ it "is an array when given an array of errors" do
78
+ serialized = SimpleJsonapi.render_errors([StandardError.new, StandardError.new])
79
+ assert_instance_of Array, serialized[:errors]
80
+ assert_equal 2, serialized[:errors].size
81
+ end
82
+
83
+ it "is omitted when rendering resources" do
84
+ serialized = SimpleJsonapi.render_resources([])
85
+ refute serialized.key?(:errors)
86
+ end
87
+ end
88
+
89
+ describe "Root links object" do
90
+ it "renders links on the document root" do
91
+ serialized = SimpleJsonapi.render_resource(
92
+ Order.new,
93
+ links: {
94
+ self: {
95
+ href: "http://www.example.com/api",
96
+ meta: { count: 10 },
97
+ },
98
+ about: "http://www.example.com/about",
99
+ },
100
+ )
101
+
102
+ assert_equal %i[self about], serialized[:links].keys
103
+ assert_equal "http://www.example.com/api", serialized.dig(:links, :self, :href)
104
+ assert_equal 10, serialized.dig(:links, :self, :meta, :count)
105
+ assert_equal "http://www.example.com/about", serialized.dig(:links, :about)
106
+ end
107
+
108
+ it "omits the links object by default" do
109
+ serialized = SimpleJsonapi.render_resource(Order.new)
110
+ refute_includes serialized.keys, :links
111
+ end
112
+
113
+ it "omits the links object if the links param is empty" do
114
+ serialized = SimpleJsonapi.render_resource(Order.new, links: {})
115
+ refute_includes serialized.keys, :links
116
+ end
117
+
118
+ it "raises an error if the provided links are not a Hash" do
119
+ ex = assert_raises(ArgumentError) do
120
+ SimpleJsonapi.render_resource(Order.new, links: "not a hash")
121
+ end
122
+ assert_match(/Expected links to be NilClass or Hash/, ex.message)
123
+ end
124
+ end
125
+
126
+ describe "Root meta object" do
127
+ it "renders meta properties on the document root" do
128
+ serialized = SimpleJsonapi.render_resource(
129
+ Order.new,
130
+ meta: {
131
+ scalar: "hello world",
132
+ array: %w[one two three],
133
+ },
134
+ )
135
+
136
+ assert_equal %i[scalar array], serialized[:meta].keys
137
+ assert_equal "hello world", serialized.dig(:meta, :scalar)
138
+ assert_equal %w[one two three], serialized.dig(:meta, :array)
139
+ end
140
+
141
+ it "omits the meta object by default" do
142
+ serialized = SimpleJsonapi.render_resource(Order.new)
143
+ refute_includes serialized.keys, :meta
144
+ end
145
+
146
+ it "omits the meta object if the meta param is empty" do
147
+ serialized = SimpleJsonapi.render_resource(Order.new, meta: {})
148
+ refute_includes serialized.keys, :meta
149
+ end
150
+
151
+ it "raises an error if the provided meta is not a Hash" do
152
+ ex = assert_raises(ArgumentError) do
153
+ SimpleJsonapi.render_resource(Order.new, meta: "not a hash")
154
+ end
155
+ assert_match(/Expected meta to be NilClass or Hash/, ex.message)
156
+ end
157
+ end
158
+
159
+ describe "Root jsonapi object" do
160
+ it "is not present" do
161
+ serialized = SimpleJsonapi.render_resource(Order.new)
162
+ refute_includes serialized.keys, :jsonapi
163
+ end
164
+ end
165
+ end
@@ -0,0 +1,31 @@
1
+ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
2
+
3
+ require 'active_support'
4
+ ActiveSupport::TestCase.test_order = :random # if we don't set this, active_support gives a warning
5
+
6
+ require 'minitest/autorun'
7
+ require 'minitest/spec'
8
+ require 'minitest/reporters'
9
+ require 'mocha/minitest'
10
+ require 'pry'
11
+ require 'pp'
12
+
13
+ require 'simple_jsonapi'
14
+
15
+ if ENV['BUILD_NUMBER']
16
+ Minitest::Reporters.use!(
17
+ [MiniTest::Reporters::DefaultReporter.new, MiniTest::Reporters::JUnitReporter.new('test/reports')],
18
+ ENV,
19
+ Minitest.backtrace_filter,
20
+ )
21
+ else
22
+ Minitest::Reporters.use!(Minitest::Reporters::SpecReporter.new, ENV, Minitest.backtrace_filter)
23
+ end
24
+
25
+ class TestModel
26
+ attr_accessor :id
27
+
28
+ def initialize(attrs = {})
29
+ attrs.each { |k, v| send("#{k}=", v) }
30
+ end
31
+ end
metadata ADDED
@@ -0,0 +1,235 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: simple_jsonapi
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - PatientsLikeMe
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-04-23 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activesupport
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '5.1'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '5.1'
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.10'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.10'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '10.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '10.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: minitest
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: minitest-reporters
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: pry
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: mocha
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'
111
+ description: A library for building JSONAPI documents in Ruby.
112
+ email:
113
+ - engineers@patientslikeme.com
114
+ executables: []
115
+ extensions: []
116
+ extra_rdoc_files: []
117
+ files:
118
+ - ".gitignore"
119
+ - ".rubocop.yml"
120
+ - CHANGELOG.md
121
+ - Gemfile
122
+ - Jenkinsfile
123
+ - LICENSE.txt
124
+ - README.md
125
+ - Rakefile
126
+ - lib/simple_jsonapi.rb
127
+ - lib/simple_jsonapi/definition/attribute.rb
128
+ - lib/simple_jsonapi/definition/base.rb
129
+ - lib/simple_jsonapi/definition/concerns/has_links_object.rb
130
+ - lib/simple_jsonapi/definition/concerns/has_meta_object.rb
131
+ - lib/simple_jsonapi/definition/error.rb
132
+ - lib/simple_jsonapi/definition/error_source.rb
133
+ - lib/simple_jsonapi/definition/link.rb
134
+ - lib/simple_jsonapi/definition/meta.rb
135
+ - lib/simple_jsonapi/definition/relationship.rb
136
+ - lib/simple_jsonapi/definition/resource.rb
137
+ - lib/simple_jsonapi/error_serializer.rb
138
+ - lib/simple_jsonapi/errors/bad_request.rb
139
+ - lib/simple_jsonapi/errors/exception_serializer.rb
140
+ - lib/simple_jsonapi/errors/wrapped_error.rb
141
+ - lib/simple_jsonapi/errors/wrapped_error_serializer.rb
142
+ - lib/simple_jsonapi/helpers/exceptions.rb
143
+ - lib/simple_jsonapi/helpers/serializer_inferrer.rb
144
+ - lib/simple_jsonapi/helpers/serializer_methods.rb
145
+ - lib/simple_jsonapi/node/attributes.rb
146
+ - lib/simple_jsonapi/node/base.rb
147
+ - lib/simple_jsonapi/node/data/collection.rb
148
+ - lib/simple_jsonapi/node/data/singular.rb
149
+ - lib/simple_jsonapi/node/document/base.rb
150
+ - lib/simple_jsonapi/node/document/collection.rb
151
+ - lib/simple_jsonapi/node/document/errors.rb
152
+ - lib/simple_jsonapi/node/document/singular.rb
153
+ - lib/simple_jsonapi/node/error.rb
154
+ - lib/simple_jsonapi/node/error_source.rb
155
+ - lib/simple_jsonapi/node/errors.rb
156
+ - lib/simple_jsonapi/node/included.rb
157
+ - lib/simple_jsonapi/node/object_links.rb
158
+ - lib/simple_jsonapi/node/object_meta.rb
159
+ - lib/simple_jsonapi/node/relationship.rb
160
+ - lib/simple_jsonapi/node/relationship_data/base.rb
161
+ - lib/simple_jsonapi/node/relationship_data/collection.rb
162
+ - lib/simple_jsonapi/node/relationship_data/singular.rb
163
+ - lib/simple_jsonapi/node/relationships.rb
164
+ - lib/simple_jsonapi/node/resource/base.rb
165
+ - lib/simple_jsonapi/node/resource/full.rb
166
+ - lib/simple_jsonapi/node/resource/linkage.rb
167
+ - lib/simple_jsonapi/parameters/fields_spec.rb
168
+ - lib/simple_jsonapi/parameters/include_spec.rb
169
+ - lib/simple_jsonapi/parameters/sort_spec.rb
170
+ - lib/simple_jsonapi/serializer.rb
171
+ - lib/simple_jsonapi/version.rb
172
+ - simple_jsonapi.gemspec
173
+ - test/errors/bad_request_test.rb
174
+ - test/errors/error_serializer_test.rb
175
+ - test/errors/exception_serializer_test.rb
176
+ - test/errors/wrapped_error_serializer_test.rb
177
+ - test/errors/wrapped_error_test.rb
178
+ - test/parameters/fields_spec_test.rb
179
+ - test/parameters/include_spec_test.rb
180
+ - test/parameters/sort_spec_test.rb
181
+ - test/resources/attributes_test.rb
182
+ - test/resources/extras_test.rb
183
+ - test/resources/id_and_type_test.rb
184
+ - test/resources/inclusion_test.rb
185
+ - test/resources/links_test.rb
186
+ - test/resources/meta_test.rb
187
+ - test/resources/relationships_test.rb
188
+ - test/resources/sorting_test.rb
189
+ - test/resources/sparse_fieldset_test.rb
190
+ - test/root_objects_test.rb
191
+ - test/test_helper.rb
192
+ homepage: https://www.patientslikeme.com
193
+ licenses:
194
+ - MIT
195
+ metadata: {}
196
+ post_install_message:
197
+ rdoc_options: []
198
+ require_paths:
199
+ - lib
200
+ required_ruby_version: !ruby/object:Gem::Requirement
201
+ requirements:
202
+ - - ">="
203
+ - !ruby/object:Gem::Version
204
+ version: '0'
205
+ required_rubygems_version: !ruby/object:Gem::Requirement
206
+ requirements:
207
+ - - ">="
208
+ - !ruby/object:Gem::Version
209
+ version: '0'
210
+ requirements: []
211
+ rubyforge_project:
212
+ rubygems_version: 2.5.2
213
+ signing_key:
214
+ specification_version: 4
215
+ summary: A library for building JSONAPI documents in Ruby.
216
+ test_files:
217
+ - test/errors/bad_request_test.rb
218
+ - test/errors/error_serializer_test.rb
219
+ - test/errors/exception_serializer_test.rb
220
+ - test/errors/wrapped_error_serializer_test.rb
221
+ - test/errors/wrapped_error_test.rb
222
+ - test/parameters/fields_spec_test.rb
223
+ - test/parameters/include_spec_test.rb
224
+ - test/parameters/sort_spec_test.rb
225
+ - test/resources/attributes_test.rb
226
+ - test/resources/extras_test.rb
227
+ - test/resources/id_and_type_test.rb
228
+ - test/resources/inclusion_test.rb
229
+ - test/resources/links_test.rb
230
+ - test/resources/meta_test.rb
231
+ - test/resources/relationships_test.rb
232
+ - test/resources/sorting_test.rb
233
+ - test/resources/sparse_fieldset_test.rb
234
+ - test/root_objects_test.rb
235
+ - test/test_helper.rb