jsonapi_compliable 0.11.34 → 1.0.alpha.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (73) hide show
  1. checksums.yaml +5 -5
  2. data/.ruby-version +1 -1
  3. data/.travis.yml +1 -2
  4. data/Rakefile +7 -3
  5. data/jsonapi_compliable.gemspec +7 -3
  6. data/lib/generators/jsonapi/resource_generator.rb +8 -79
  7. data/lib/generators/jsonapi/templates/application_resource.rb.erb +2 -1
  8. data/lib/generators/jsonapi/templates/controller.rb.erb +19 -64
  9. data/lib/generators/jsonapi/templates/resource.rb.erb +5 -47
  10. data/lib/generators/jsonapi/templates/resource_reads_spec.rb.erb +62 -0
  11. data/lib/generators/jsonapi/templates/resource_writes_spec.rb.erb +63 -0
  12. data/lib/jsonapi_compliable.rb +87 -18
  13. data/lib/jsonapi_compliable/adapters/abstract.rb +202 -45
  14. data/lib/jsonapi_compliable/adapters/active_record.rb +6 -130
  15. data/lib/jsonapi_compliable/adapters/active_record/base.rb +247 -0
  16. data/lib/jsonapi_compliable/adapters/active_record/belongs_to_sideload.rb +17 -0
  17. data/lib/jsonapi_compliable/adapters/active_record/has_many_sideload.rb +17 -0
  18. data/lib/jsonapi_compliable/adapters/active_record/has_one_sideload.rb +17 -0
  19. data/lib/jsonapi_compliable/adapters/active_record/inferrence.rb +12 -0
  20. data/lib/jsonapi_compliable/adapters/active_record/many_to_many_sideload.rb +30 -0
  21. data/lib/jsonapi_compliable/adapters/null.rb +177 -6
  22. data/lib/jsonapi_compliable/base.rb +33 -320
  23. data/lib/jsonapi_compliable/context.rb +16 -0
  24. data/lib/jsonapi_compliable/deserializer.rb +14 -39
  25. data/lib/jsonapi_compliable/errors.rb +227 -24
  26. data/lib/jsonapi_compliable/extensions/extra_attribute.rb +3 -1
  27. data/lib/jsonapi_compliable/filter_operators.rb +25 -0
  28. data/lib/jsonapi_compliable/hash_renderer.rb +57 -0
  29. data/lib/jsonapi_compliable/query.rb +190 -202
  30. data/lib/jsonapi_compliable/rails.rb +12 -6
  31. data/lib/jsonapi_compliable/railtie.rb +64 -0
  32. data/lib/jsonapi_compliable/renderer.rb +60 -0
  33. data/lib/jsonapi_compliable/resource.rb +35 -663
  34. data/lib/jsonapi_compliable/resource/configuration.rb +239 -0
  35. data/lib/jsonapi_compliable/resource/dsl.rb +138 -0
  36. data/lib/jsonapi_compliable/resource/interface.rb +32 -0
  37. data/lib/jsonapi_compliable/resource/polymorphism.rb +68 -0
  38. data/lib/jsonapi_compliable/resource/sideloading.rb +102 -0
  39. data/lib/jsonapi_compliable/resource_proxy.rb +127 -0
  40. data/lib/jsonapi_compliable/responders.rb +19 -0
  41. data/lib/jsonapi_compliable/runner.rb +25 -0
  42. data/lib/jsonapi_compliable/scope.rb +37 -79
  43. data/lib/jsonapi_compliable/scoping/extra_attributes.rb +29 -0
  44. data/lib/jsonapi_compliable/scoping/filter.rb +39 -58
  45. data/lib/jsonapi_compliable/scoping/filterable.rb +9 -14
  46. data/lib/jsonapi_compliable/scoping/paginate.rb +9 -3
  47. data/lib/jsonapi_compliable/scoping/sort.rb +16 -4
  48. data/lib/jsonapi_compliable/sideload.rb +221 -347
  49. data/lib/jsonapi_compliable/sideload/belongs_to.rb +34 -0
  50. data/lib/jsonapi_compliable/sideload/has_many.rb +16 -0
  51. data/lib/jsonapi_compliable/sideload/has_one.rb +9 -0
  52. data/lib/jsonapi_compliable/sideload/many_to_many.rb +24 -0
  53. data/lib/jsonapi_compliable/sideload/polymorphic_belongs_to.rb +108 -0
  54. data/lib/jsonapi_compliable/stats/payload.rb +4 -8
  55. data/lib/jsonapi_compliable/types.rb +172 -0
  56. data/lib/jsonapi_compliable/util/attribute_check.rb +88 -0
  57. data/lib/jsonapi_compliable/util/persistence.rb +29 -7
  58. data/lib/jsonapi_compliable/util/relationship_payload.rb +4 -4
  59. data/lib/jsonapi_compliable/util/render_options.rb +4 -32
  60. data/lib/jsonapi_compliable/util/serializer_attributes.rb +98 -0
  61. data/lib/jsonapi_compliable/util/validation_response.rb +15 -9
  62. data/lib/jsonapi_compliable/version.rb +1 -1
  63. metadata +105 -24
  64. data/lib/generators/jsonapi/field_generator.rb +0 -0
  65. data/lib/generators/jsonapi/templates/create_request_spec.rb.erb +0 -29
  66. data/lib/generators/jsonapi/templates/destroy_request_spec.rb.erb +0 -20
  67. data/lib/generators/jsonapi/templates/index_request_spec.rb.erb +0 -22
  68. data/lib/generators/jsonapi/templates/payload.rb.erb +0 -39
  69. data/lib/generators/jsonapi/templates/serializer.rb.erb +0 -25
  70. data/lib/generators/jsonapi/templates/show_request_spec.rb.erb +0 -19
  71. data/lib/generators/jsonapi/templates/update_request_spec.rb.erb +0 -33
  72. data/lib/jsonapi_compliable/adapters/active_record_sideloading.rb +0 -152
  73. data/lib/jsonapi_compliable/scoping/extra_fields.rb +0 -58
@@ -11,6 +11,10 @@ class JsonapiCompliable::Util::Persistence
11
11
  @attributes = attributes
12
12
  @relationships = relationships
13
13
  @caller_model = caller_model
14
+
15
+ @attributes.each_pair do |key, value|
16
+ @attributes[key] = @resource.typecast(key, value, :writable)
17
+ end
14
18
  end
15
19
 
16
20
  # Perform the actual save logic.
@@ -37,6 +41,7 @@ class JsonapiCompliable::Util::Persistence
37
41
  update_foreign_key_for_parents(parents)
38
42
 
39
43
  persisted = persist_object(@meta[:method], @attributes)
44
+ persisted.instance_variable_set(:@__serializer_klass, @resource.serializer)
40
45
  assign_temp_id(persisted, @meta[:temp_id])
41
46
 
42
47
  associate_parents(persisted, parents)
@@ -65,7 +70,7 @@ class JsonapiCompliable::Util::Persistence
65
70
  #
66
71
  # This is not the case for HABTM, whose "foreign key" is a join table
67
72
  def update_foreign_key(parent_object, attrs, x)
68
- return if x[:sideload].type == :habtm
73
+ return if x[:sideload].type == :many_to_many
69
74
 
70
75
  if [:destroy, :disassociate].include?(x[:meta][:method])
71
76
  attrs[x[:foreign_key]] = nil
@@ -77,8 +82,8 @@ class JsonapiCompliable::Util::Persistence
77
82
  end
78
83
 
79
84
  def update_foreign_type(attrs, x, null: false)
80
- grouping_field = x[:sideload].parent.grouping_field
81
- attrs[grouping_field] = null ? nil : x[:sideload].name
85
+ grouping_field = x[:sideload].parent.grouper.column_name
86
+ attrs[grouping_field] = null ? nil : x[:sideload].group_name
82
87
  end
83
88
 
84
89
  def update_foreign_key_for_parents(parents)
@@ -94,9 +99,21 @@ class JsonapiCompliable::Util::Persistence
94
99
  parents.each do |x|
95
100
  if x[:object] && object
96
101
  if x[:meta][:method] == :disassociate
97
- x[:sideload].disassociate(x[:object], object)
102
+ if x[:sideload].type == :belongs_to
103
+ x[:sideload].disassociate(object, x[:object])
104
+ else
105
+ x[:sideload].disassociate(x[:object], object)
106
+ end
98
107
  else
99
- x[:sideload].associate(x[:object], object)
108
+ if x[:sideload].type == :belongs_to
109
+ x[:sideload].associate(object, x[:object])
110
+ else
111
+ if [:has_many, :many_to_many].include?(x[:sideload].type)
112
+ x[:sideload].associate_all(object, Array(x[:object]))
113
+ else
114
+ x[:sideload].associate(x[:object], object)
115
+ end
116
+ end
100
117
  end
101
118
  end
102
119
  end
@@ -108,11 +125,15 @@ class JsonapiCompliable::Util::Persistence
108
125
  if x[:meta][:method] == :disassociate
109
126
  x[:sideload].disassociate(object, x[:object])
110
127
  elsif x[:meta][:method] == :destroy
111
- if x[:sideload].type == :habtm
128
+ if x[:sideload].type == :many_to_many
112
129
  x[:sideload].disassociate(object, x[:object])
113
130
  end # otherwise, no need to disassociate destroyed objects
114
131
  else
115
- x[:sideload].associate(object, x[:object])
132
+ if [:has_many, :many_to_many].include?(x[:sideload].type)
133
+ x[:sideload].associate_all(object, Array(x[:object]))
134
+ else
135
+ x[:sideload].associate(object, x[:object])
136
+ end
116
137
  end
117
138
  end
118
139
  end
@@ -133,6 +154,7 @@ class JsonapiCompliable::Util::Persistence
133
154
  [].tap do |processed|
134
155
  iterate(except: [:polymorphic_belongs_to, :belongs_to]) do |x|
135
156
  yield x
157
+
136
158
  x[:object] = x[:sideload].resource
137
159
  .persist_with_relationships(x[:meta], x[:attributes], x[:relationships], caller_model)
138
160
  processed << x
@@ -21,7 +21,7 @@ module JsonapiCompliable
21
21
 
22
22
  def iterate
23
23
  payload.each_pair do |relationship_name, relationship_payload|
24
- if sl = resource.sideload(relationship_name.to_sym)
24
+ if sl = resource.class.sideload(relationship_name.to_sym)
25
25
  if should_yield?(sl.type)
26
26
  if relationship_payload.is_a?(Array)
27
27
  relationship_payload.each do |rp|
@@ -43,15 +43,15 @@ module JsonapiCompliable
43
43
  end
44
44
 
45
45
  def payload_for(sideload, relationship_payload)
46
- if sideload.polymorphic?
46
+ if sideload.polymorphic_parent?
47
47
  type = relationship_payload[:meta][:jsonapi_type]
48
- sideload = sideload.polymorphic_child_for_type(type)
48
+ sideload = sideload.child_for_type(type.to_sym)
49
49
  end
50
50
  relationship_payload[:meta][:method] ||= :update
51
51
 
52
52
  {
53
53
  sideload: sideload,
54
- is_polymorphic: !sideload.parent.nil?,
54
+ is_polymorphic: sideload.polymorphic_child?,
55
55
  primary_key: sideload.primary_key,
56
56
  foreign_key: sideload.foreign_key,
57
57
  attributes: relationship_payload[:attributes],
@@ -3,49 +3,21 @@ module JsonapiCompliable
3
3
  # Generate the options we end up passing to {{http://jsonapi-rb.org jsonapi-rb}}
4
4
  # @api private
5
5
  class RenderOptions
6
- def self.generate(object, query_hash, overrides = {})
7
- resolved = object.respond_to?(:resolve) ? object.resolve : object
6
+ def self.generate(overrides = {})
7
+
8
+
8
9
 
9
- fields = query_hash[:fields].dup
10
- extra_fields = query_hash[:extra_fields]
11
10
 
12
- # Ensure fields doesnt clobber extra fields
13
- extra_fields.each do |k,v|
14
- fields[k] = fields[k] + v if fields[k]
15
- end
16
11
 
17
12
  options = {}
18
- options[:class] = inferrer
19
- options[:include] = query_hash[:include]
20
- options[:jsonapi] = resolved
13
+ options[:include] = query.include_hash
21
14
  options[:fields] = fields
22
15
  options.merge!(overrides)
23
16
  options[:meta] ||= {}
24
17
  options[:expose] ||= {}
25
18
  options[:expose][:extra_fields] = extra_fields
26
-
27
- if object.respond_to?(:resolve_stats)
28
- stats = object.resolve_stats
29
- options[:meta][:stats] = stats unless stats.empty?
30
- end
31
-
32
19
  options
33
20
  end
34
-
35
- def self.inferrer
36
- ::Hash.new do |h, k|
37
- names = k.to_s.split('::')
38
- klass = names.pop
39
- serializer_name = [*names, "Serializable#{klass}"].join('::')
40
- serializer = serializer_name.safe_constantize
41
- if serializer
42
- h[k] = serializer
43
- else
44
- raise Errors::MissingSerializer.new(k, serializer_name)
45
- end
46
- end
47
- end
48
- private_class_method :inferrer
49
21
  end
50
22
  end
51
23
  end
@@ -0,0 +1,98 @@
1
+ module JsonapiCompliable
2
+ module Util
3
+ class SerializerAttribute
4
+ def initialize(name, attr, resource, serializer, extra)
5
+ @name = name
6
+ @attr = attr
7
+ @resource = resource
8
+ @serializer = serializer
9
+ @extra = extra
10
+ end
11
+
12
+ def apply
13
+ return unless readable?
14
+
15
+ if @name == :id
16
+ @serializer.id(&@attr[:proc]) if @attr[:proc]
17
+ elsif @attr[:proc]
18
+ @serializer.send(_method, @name, serializer_options, &proc)
19
+ else
20
+ if @serializer.attribute_blocks[@name].nil?
21
+ @serializer.send(_method, @name, serializer_options, &proc)
22
+ else
23
+ inner = @serializer.attribute_blocks.delete(@name)
24
+ wrapped = wrap_proc(inner)
25
+ @serializer.send(_method, @name, serializer_options, &wrapped)
26
+ end
27
+ end
28
+ end
29
+
30
+ private
31
+
32
+ def _method
33
+ extra? ? :extra_attribute : :attribute
34
+ end
35
+
36
+ def extra?
37
+ !!@extra
38
+ end
39
+
40
+ def readable?
41
+ !!@attr[:readable]
42
+ end
43
+
44
+ def guard
45
+ _method = @attr[:readable]
46
+ instance = @resource.new
47
+ -> { instance.instance_eval(&_method) }
48
+ end
49
+
50
+ def guard?
51
+ @attr[:readable] != true
52
+ end
53
+
54
+ def serializer_options
55
+ {}.tap do |opts|
56
+ opts[:if] = guard if guard?
57
+ end
58
+ end
59
+
60
+ def default_proc
61
+ type_name = @attr[:type]
62
+ _name = @name
63
+ _resource = @resource.new
64
+ ->(_) {
65
+ _resource.typecast(_name, @object.send(_name), :readable)
66
+ }
67
+ end
68
+
69
+ def wrap_proc(inner)
70
+ type_name = @attr[:type]
71
+ ->(serializer_instance = nil) {
72
+ type = JsonapiCompliable::Types[type_name]
73
+ type[:read][serializer_instance.instance_eval(&inner)]
74
+ }
75
+ end
76
+
77
+ def proc
78
+ @attr[:proc] ? wrap_proc(@attr[:proc]) : default_proc
79
+ end
80
+ end
81
+
82
+ class SerializerAttributes
83
+ def initialize(resource, attributes, extra = false)
84
+ @resource = resource
85
+ @serializer = resource.serializer
86
+ @attributes = attributes
87
+ @extra = extra
88
+ end
89
+
90
+ def apply
91
+ @attributes.each_pair do |name, attr|
92
+ SerializerAttribute
93
+ .new(name, attr, @resource, @serializer, @extra).apply
94
+ end
95
+ end
96
+ end
97
+ end
98
+ end
@@ -22,7 +22,7 @@ class JsonapiCompliable::Util::ValidationResponse
22
22
  # Check to ensure no validation errors.
23
23
  # @return [Boolean] did the persistence call succeed?
24
24
  def success?
25
- all_valid?(object, @deserialized_params.relationships)
25
+ all_valid?(object, relationships)
26
26
  end
27
27
 
28
28
  # @return [Array] the object and success state
@@ -39,34 +39,40 @@ class JsonapiCompliable::Util::ValidationResponse
39
39
 
40
40
  private
41
41
 
42
+ def relationships
43
+ if @deserialized_params
44
+ @deserialized_params.relationships
45
+ else
46
+ {}
47
+ end
48
+ end
49
+
42
50
  def valid_object?(object)
43
51
  !object.respond_to?(:errors) ||
44
52
  (object.respond_to?(:errors) && object.errors.blank?)
45
53
  end
46
54
 
47
55
  def all_valid?(model, deserialized_params)
48
- checks = []
49
- checks << valid_object?(model)
56
+ valid = true
57
+ return false unless valid_object?(model)
50
58
  deserialized_params.each_pair do |name, payload|
51
59
  if payload.is_a?(Array)
52
60
  related_objects = model.send(name)
53
- related_objects.each_with_index do |r, index|
61
+ related_objects.each do |r|
54
62
  valid = valid_object?(r)
55
- checks << valid
56
63
 
57
64
  if valid
58
- checks << all_valid?(r, payload[index][:relationships] || {})
65
+ valid = all_valid?(r, deserialized_params[:relationships] || {})
59
66
  end
60
67
  end
61
68
  else
62
69
  related_object = model.send(name)
63
70
  valid = valid_object?(related_object)
64
- checks << valid
65
71
  if valid
66
- checks << all_valid?(related_object, payload[:relationships] || {})
72
+ valid = all_valid?(related_object, deserialized_params[:relationships] || {})
67
73
  end
68
74
  end
69
75
  end
70
- checks.all? { |c| c == true }
76
+ valid
71
77
  end
72
78
  end
@@ -1,3 +1,3 @@
1
1
  module JsonapiCompliable
2
- VERSION = "0.11.34"
2
+ VERSION = "1.0.alpha.2"
3
3
  end
metadata CHANGED
@@ -1,15 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jsonapi_compliable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.34
4
+ version: 1.0.alpha.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lee Richmond
8
- - Venkata Pasupuleti
9
- autorequire:
8
+ autorequire:
10
9
  bindir: exe
11
10
  cert_chain: []
12
- date: 2020-11-24 00:00:00.000000000 Z
11
+ date: 2018-07-16 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: jsonapi-serializable
@@ -25,6 +24,34 @@ dependencies:
25
24
  - - "~>"
26
25
  - !ruby/object:Gem::Version
27
26
  version: 0.3.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: dry-types
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0.13'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0.13'
41
+ - !ruby/object:Gem::Dependency
42
+ name: jsonapi_errorable
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.9'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.9'
28
55
  - !ruby/object:Gem::Dependency
29
56
  name: activerecord
30
57
  requirement: !ruby/object:Gem::Requirement
@@ -65,14 +92,14 @@ dependencies:
65
92
  requirements:
66
93
  - - "~>"
67
94
  - !ruby/object:Gem::Version
68
- version: 2.1.4
95
+ version: '1.12'
69
96
  type: :development
70
97
  prerelease: false
71
98
  version_requirements: !ruby/object:Gem::Requirement
72
99
  requirements:
73
100
  - - "~>"
74
101
  - !ruby/object:Gem::Version
75
- version: 2.1.4
102
+ version: '1.12'
76
103
  - !ruby/object:Gem::Dependency
77
104
  name: rake
78
105
  requirement: !ruby/object:Gem::Requirement
@@ -115,10 +142,43 @@ dependencies:
115
142
  - - ">="
116
143
  - !ruby/object:Gem::Version
117
144
  version: '0'
118
- description:
145
+ - !ruby/object:Gem::Dependency
146
+ name: activemodel
147
+ requirement: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - ">="
150
+ - !ruby/object:Gem::Version
151
+ version: '4.1'
152
+ - - "<"
153
+ - !ruby/object:Gem::Version
154
+ version: '6'
155
+ type: :development
156
+ prerelease: false
157
+ version_requirements: !ruby/object:Gem::Requirement
158
+ requirements:
159
+ - - ">="
160
+ - !ruby/object:Gem::Version
161
+ version: '4.1'
162
+ - - "<"
163
+ - !ruby/object:Gem::Version
164
+ version: '6'
165
+ - !ruby/object:Gem::Dependency
166
+ name: jsonapi_spec_helpers
167
+ requirement: !ruby/object:Gem::Requirement
168
+ requirements:
169
+ - - ">="
170
+ - !ruby/object:Gem::Version
171
+ version: 1.0.alpha.1
172
+ type: :development
173
+ prerelease: false
174
+ version_requirements: !ruby/object:Gem::Requirement
175
+ requirements:
176
+ - - ">="
177
+ - !ruby/object:Gem::Version
178
+ version: 1.0.alpha.1
179
+ description:
119
180
  email:
120
181
  - richmolj@gmail.com
121
- - spasupuleti4@bloomberg.net
122
182
  executables: []
123
183
  extensions: []
124
184
  extra_rdoc_files: []
@@ -205,44 +265,63 @@ files:
205
265
  - gemfiles/rails_4.gemfile
206
266
  - gemfiles/rails_5.gemfile
207
267
  - jsonapi_compliable.gemspec
208
- - lib/generators/jsonapi/field_generator.rb
209
268
  - lib/generators/jsonapi/resource_generator.rb
210
269
  - lib/generators/jsonapi/templates/application_resource.rb.erb
211
270
  - lib/generators/jsonapi/templates/controller.rb.erb
212
- - lib/generators/jsonapi/templates/create_request_spec.rb.erb
213
- - lib/generators/jsonapi/templates/destroy_request_spec.rb.erb
214
- - lib/generators/jsonapi/templates/index_request_spec.rb.erb
215
- - lib/generators/jsonapi/templates/payload.rb.erb
216
271
  - lib/generators/jsonapi/templates/resource.rb.erb
217
- - lib/generators/jsonapi/templates/serializer.rb.erb
218
- - lib/generators/jsonapi/templates/show_request_spec.rb.erb
219
- - lib/generators/jsonapi/templates/update_request_spec.rb.erb
272
+ - lib/generators/jsonapi/templates/resource_reads_spec.rb.erb
273
+ - lib/generators/jsonapi/templates/resource_writes_spec.rb.erb
220
274
  - lib/jsonapi_compliable.rb
221
275
  - lib/jsonapi_compliable/adapters/abstract.rb
222
276
  - lib/jsonapi_compliable/adapters/active_record.rb
223
- - lib/jsonapi_compliable/adapters/active_record_sideloading.rb
277
+ - lib/jsonapi_compliable/adapters/active_record/base.rb
278
+ - lib/jsonapi_compliable/adapters/active_record/belongs_to_sideload.rb
279
+ - lib/jsonapi_compliable/adapters/active_record/has_many_sideload.rb
280
+ - lib/jsonapi_compliable/adapters/active_record/has_one_sideload.rb
281
+ - lib/jsonapi_compliable/adapters/active_record/inferrence.rb
282
+ - lib/jsonapi_compliable/adapters/active_record/many_to_many_sideload.rb
224
283
  - lib/jsonapi_compliable/adapters/null.rb
225
284
  - lib/jsonapi_compliable/base.rb
226
285
  - lib/jsonapi_compliable/configuration.rb
286
+ - lib/jsonapi_compliable/context.rb
227
287
  - lib/jsonapi_compliable/deserializer.rb
228
288
  - lib/jsonapi_compliable/errors.rb
229
289
  - lib/jsonapi_compliable/extensions/boolean_attribute.rb
230
290
  - lib/jsonapi_compliable/extensions/extra_attribute.rb
231
291
  - lib/jsonapi_compliable/extensions/temp_id.rb
292
+ - lib/jsonapi_compliable/filter_operators.rb
293
+ - lib/jsonapi_compliable/hash_renderer.rb
232
294
  - lib/jsonapi_compliable/query.rb
233
295
  - lib/jsonapi_compliable/rails.rb
296
+ - lib/jsonapi_compliable/railtie.rb
297
+ - lib/jsonapi_compliable/renderer.rb
234
298
  - lib/jsonapi_compliable/resource.rb
299
+ - lib/jsonapi_compliable/resource/configuration.rb
300
+ - lib/jsonapi_compliable/resource/dsl.rb
301
+ - lib/jsonapi_compliable/resource/interface.rb
302
+ - lib/jsonapi_compliable/resource/polymorphism.rb
303
+ - lib/jsonapi_compliable/resource/sideloading.rb
304
+ - lib/jsonapi_compliable/resource_proxy.rb
305
+ - lib/jsonapi_compliable/responders.rb
306
+ - lib/jsonapi_compliable/runner.rb
235
307
  - lib/jsonapi_compliable/scope.rb
236
308
  - lib/jsonapi_compliable/scoping/base.rb
237
309
  - lib/jsonapi_compliable/scoping/default_filter.rb
238
- - lib/jsonapi_compliable/scoping/extra_fields.rb
310
+ - lib/jsonapi_compliable/scoping/extra_attributes.rb
239
311
  - lib/jsonapi_compliable/scoping/filter.rb
240
312
  - lib/jsonapi_compliable/scoping/filterable.rb
241
313
  - lib/jsonapi_compliable/scoping/paginate.rb
242
314
  - lib/jsonapi_compliable/scoping/sort.rb
243
315
  - lib/jsonapi_compliable/sideload.rb
316
+ - lib/jsonapi_compliable/sideload/belongs_to.rb
317
+ - lib/jsonapi_compliable/sideload/has_many.rb
318
+ - lib/jsonapi_compliable/sideload/has_one.rb
319
+ - lib/jsonapi_compliable/sideload/many_to_many.rb
320
+ - lib/jsonapi_compliable/sideload/polymorphic_belongs_to.rb
244
321
  - lib/jsonapi_compliable/stats/dsl.rb
245
322
  - lib/jsonapi_compliable/stats/payload.rb
323
+ - lib/jsonapi_compliable/types.rb
324
+ - lib/jsonapi_compliable/util/attribute_check.rb
246
325
  - lib/jsonapi_compliable/util/field_params.rb
247
326
  - lib/jsonapi_compliable/util/hash.rb
248
327
  - lib/jsonapi_compliable/util/hooks.rb
@@ -250,14 +329,15 @@ files:
250
329
  - lib/jsonapi_compliable/util/persistence.rb
251
330
  - lib/jsonapi_compliable/util/relationship_payload.rb
252
331
  - lib/jsonapi_compliable/util/render_options.rb
332
+ - lib/jsonapi_compliable/util/serializer_attributes.rb
253
333
  - lib/jsonapi_compliable/util/sideload.rb
254
334
  - lib/jsonapi_compliable/util/validation_response.rb
255
335
  - lib/jsonapi_compliable/version.rb
256
- homepage:
336
+ homepage:
257
337
  licenses:
258
338
  - MIT
259
339
  metadata: {}
260
- post_install_message:
340
+ post_install_message:
261
341
  rdoc_options: []
262
342
  require_paths:
263
343
  - lib
@@ -268,12 +348,13 @@ required_ruby_version: !ruby/object:Gem::Requirement
268
348
  version: '0'
269
349
  required_rubygems_version: !ruby/object:Gem::Requirement
270
350
  requirements:
271
- - - ">="
351
+ - - ">"
272
352
  - !ruby/object:Gem::Version
273
- version: '0'
353
+ version: 1.3.1
274
354
  requirements: []
275
- rubygems_version: 3.0.6
276
- signing_key:
355
+ rubyforge_project:
356
+ rubygems_version: 2.6.11
357
+ signing_key:
277
358
  specification_version: 4
278
359
  summary: Easily build jsonapi.org-compatible APIs
279
360
  test_files: []