jsonapi-resources 0.10.6 → 0.11.0.beta2

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 (50) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.txt +1 -1
  3. data/README.md +39 -2
  4. data/lib/generators/jsonapi/controller_generator.rb +2 -0
  5. data/lib/generators/jsonapi/resource_generator.rb +2 -0
  6. data/lib/jsonapi/active_relation/adapters/join_left_active_record_adapter.rb +3 -2
  7. data/lib/jsonapi/active_relation/join_manager.rb +30 -18
  8. data/lib/jsonapi/active_relation/join_manager_v10.rb +305 -0
  9. data/lib/jsonapi/active_relation_retrieval.rb +885 -0
  10. data/lib/jsonapi/active_relation_retrieval_v09.rb +715 -0
  11. data/lib/jsonapi/{active_relation_resource.rb → active_relation_retrieval_v10.rb} +113 -135
  12. data/lib/jsonapi/acts_as_resource_controller.rb +49 -49
  13. data/lib/jsonapi/cached_response_fragment.rb +4 -2
  14. data/lib/jsonapi/callbacks.rb +2 -0
  15. data/lib/jsonapi/compiled_json.rb +2 -0
  16. data/lib/jsonapi/configuration.rb +35 -15
  17. data/lib/jsonapi/error.rb +2 -0
  18. data/lib/jsonapi/error_codes.rb +2 -0
  19. data/lib/jsonapi/exceptions.rb +2 -0
  20. data/lib/jsonapi/formatter.rb +2 -0
  21. data/lib/jsonapi/include_directives.rb +77 -19
  22. data/lib/jsonapi/link_builder.rb +2 -0
  23. data/lib/jsonapi/mime_types.rb +6 -10
  24. data/lib/jsonapi/naive_cache.rb +2 -0
  25. data/lib/jsonapi/operation.rb +2 -0
  26. data/lib/jsonapi/operation_result.rb +2 -0
  27. data/lib/jsonapi/paginator.rb +2 -0
  28. data/lib/jsonapi/path.rb +2 -0
  29. data/lib/jsonapi/path_segment.rb +4 -2
  30. data/lib/jsonapi/processor.rb +95 -140
  31. data/lib/jsonapi/relationship.rb +89 -35
  32. data/lib/jsonapi/{request_parser.rb → request.rb} +157 -164
  33. data/lib/jsonapi/resource.rb +7 -2
  34. data/lib/jsonapi/{basic_resource.rb → resource_common.rb} +187 -88
  35. data/lib/jsonapi/resource_controller.rb +2 -0
  36. data/lib/jsonapi/resource_controller_metal.rb +2 -0
  37. data/lib/jsonapi/resource_fragment.rb +17 -15
  38. data/lib/jsonapi/resource_identity.rb +6 -0
  39. data/lib/jsonapi/resource_serializer.rb +20 -4
  40. data/lib/jsonapi/resource_set.rb +36 -16
  41. data/lib/jsonapi/resource_tree.rb +191 -0
  42. data/lib/jsonapi/resources/railtie.rb +3 -1
  43. data/lib/jsonapi/resources/version.rb +3 -1
  44. data/lib/jsonapi/response_document.rb +4 -2
  45. data/lib/jsonapi/routing_ext.rb +4 -2
  46. data/lib/jsonapi/simple_resource.rb +13 -0
  47. data/lib/jsonapi-resources.rb +10 -4
  48. data/lib/tasks/check_upgrade.rake +3 -1
  49. metadata +47 -15
  50. data/lib/jsonapi/resource_id_tree.rb +0 -112
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module JSONAPI
2
4
  # Contains a hash of resource types which contain a hash of resources, relationships and primary status keyed by
3
5
  # resource id.
@@ -5,12 +7,24 @@ module JSONAPI
5
7
 
6
8
  attr_reader :resource_klasses, :populated
7
9
 
8
- def initialize(resource_id_tree = nil)
10
+ def initialize(source, include_related = nil, options = nil)
9
11
  @populated = false
10
- @resource_klasses = resource_id_tree.nil? ? {} : flatten_resource_id_tree(resource_id_tree)
12
+ tree = if source.is_a?(JSONAPI::ResourceTree)
13
+ source
14
+ elsif source.class.include?(JSONAPI::ResourceCommon)
15
+ JSONAPI::PrimaryResourceTree.new(resource: source, include_related: include_related, options: options)
16
+ elsif source.is_a?(Array)
17
+ JSONAPI::PrimaryResourceTree.new(resources: source, include_related: include_related, options: options)
18
+ end
19
+
20
+ if tree
21
+ @resource_klasses = flatten_resource_tree(tree)
22
+ end
11
23
  end
12
24
 
13
- def populate!(serializer, context, find_options)
25
+ def populate!(serializer, context, options)
26
+ return if @populated
27
+
14
28
  # For each resource klass we want to generate the caching key
15
29
 
16
30
  # Hash for collecting types and ids
@@ -21,9 +35,9 @@ module JSONAPI
21
35
  # @type [Lookup[]]
22
36
  lookups = []
23
37
 
24
-
25
38
  # Step One collect all of the lookups for the cache, or keys that don't require cache access
26
39
  @resource_klasses.each_key do |resource_klass|
40
+ missed_resource_ids[resource_klass] ||= []
27
41
 
28
42
  serializer_config_key = serializer.config_key(resource_klass).gsub("/", "_")
29
43
  context_json = resource_klass.attribute_caching_context(context).to_json
@@ -47,7 +61,13 @@ module JSONAPI
47
61
  )
48
62
  )
49
63
  else
50
- missed_resource_ids[resource_klass] = @resource_klasses[resource_klass].keys
64
+ @resource_klasses[resource_klass].keys.each do |k|
65
+ if @resource_klasses[resource_klass][k][:resource].nil?
66
+ missed_resource_ids[resource_klass] << k
67
+ else
68
+ register_resource(resource_klass, @resource_klasses[resource_klass][k][:resource])
69
+ end
70
+ end
51
71
  end
52
72
  end
53
73
 
@@ -60,7 +80,6 @@ module JSONAPI
60
80
  found_resources = {}
61
81
  end
62
82
 
63
-
64
83
  # Step Three collect the results and collect hit/miss stats
65
84
  stats = {}
66
85
  found_resources.each do |resource_klass, resources|
@@ -72,7 +91,6 @@ module JSONAPI
72
91
  stats[resource_klass][:misses] += 1
73
92
 
74
93
  # Collect misses
75
- missed_resource_ids[resource_klass] ||= []
76
94
  missed_resource_ids[resource_klass].push(id)
77
95
  else
78
96
  stats[resource_klass][:hits] ||= 0
@@ -89,14 +107,15 @@ module JSONAPI
89
107
 
90
108
  # Step Four find any of the missing resources and join them into the result
91
109
  missed_resource_ids.each_pair do |resource_klass, ids|
92
- find_opts = {context: context, fields: find_options[:fields]}
110
+ next if ids.empty?
111
+
112
+ find_opts = {context: context, fields: options[:fields]}
93
113
  found_resources = resource_klass.find_to_populate_by_keys(ids, find_opts)
94
114
 
95
115
  found_resources.each do |resource|
96
116
  relationship_data = @resource_klasses[resource_klass][resource.id][:relationships]
97
117
 
98
118
  if resource_klass.caching?
99
-
100
119
  serializer_config_key = serializer.config_key(resource_klass).gsub("/", "_")
101
120
  context_json = resource_klass.attribute_caching_context(context).to_json
102
121
  context_b64 = JSONAPI.configuration.resource_cache_digest_function.call(context_json)
@@ -148,8 +167,8 @@ module JSONAPI
148
167
  end
149
168
  end
150
169
 
151
- def flatten_resource_id_tree(resource_id_tree, flattened_tree = {})
152
- resource_id_tree.fragments.each_pair do |resource_rid, fragment|
170
+ def flatten_resource_tree(resource_tree, flattened_tree = {})
171
+ resource_tree.fragments.each_pair do |resource_rid, fragment|
153
172
 
154
173
  resource_klass = resource_rid.resource_klass
155
174
  id = resource_rid.id
@@ -157,17 +176,18 @@ module JSONAPI
157
176
  flattened_tree[resource_klass] ||= {}
158
177
 
159
178
  flattened_tree[resource_klass][id] ||= {primary: fragment.primary, relationships: {}}
160
- flattened_tree[resource_klass][id][:cache_id] ||= fragment.cache
179
+ flattened_tree[resource_klass][id][:cache_id] ||= fragment.cache if fragment.cache
180
+ flattened_tree[resource_klass][id][:resource] ||= fragment.resource if fragment.resource
161
181
 
162
182
  fragment.related.try(:each_pair) do |relationship_name, related_rids|
163
- flattened_tree[resource_klass][id][:relationships][relationship_name] ||= Set.new
183
+ flattened_tree[resource_klass][id][:relationships][relationship_name] ||= SortedSet.new
164
184
  flattened_tree[resource_klass][id][:relationships][relationship_name].merge(related_rids)
165
185
  end
166
186
  end
167
187
 
168
- related_resource_id_trees = resource_id_tree.related_resource_id_trees
169
- related_resource_id_trees.try(:each_value) do |related_resource_id_tree|
170
- flatten_resource_id_tree(related_resource_id_tree, flattened_tree)
188
+ related_resource_trees = resource_tree.related_resource_trees
189
+ related_resource_trees.try(:each_value) do |related_resource_tree|
190
+ flatten_resource_tree(related_resource_tree, flattened_tree)
171
191
  end
172
192
 
173
193
  flattened_tree
@@ -0,0 +1,191 @@
1
+ # frozen_string_literal: true
2
+
3
+ module JSONAPI
4
+
5
+ # A tree structure representing the resource structure of the requested resource(s). This is an intermediate structure
6
+ # used to keep track of the resources, by identity, found at different included relationships. It will be flattened and
7
+ # the resource instances will be fetched from the cache or the record store.
8
+ class ResourceTree
9
+
10
+ attr_reader :fragments, :related_resource_trees
11
+
12
+ # Gets the related Resource Id Tree for a relationship, and creates it first if it does not exist
13
+ #
14
+ # @param relationship [JSONAPI::Relationship]
15
+ #
16
+ # @return [JSONAPI::RelatedResourceTree] the new or existing resource id tree for the requested relationship
17
+ def get_related_resource_tree(relationship)
18
+ relationship_name = relationship.name.to_sym
19
+ @related_resource_trees[relationship_name] ||= RelatedResourceTree.new(relationship, self)
20
+ end
21
+
22
+ # Adds each Resource Fragment to the Resources hash
23
+ #
24
+ # @param fragments [Hash]
25
+ # @param include_related [Hash]
26
+ #
27
+ # @return [null]
28
+ def add_resource_fragments(fragments, include_related)
29
+ fragments.each_value do |fragment|
30
+ add_resource_fragment(fragment, include_related)
31
+ end
32
+ end
33
+
34
+ # Adds a Resource Fragment to the fragments hash
35
+ #
36
+ # @param fragment [JSONAPI::ResourceFragment]
37
+ # @param include_related [Hash]
38
+ #
39
+ # @return [null]
40
+ def add_resource_fragment(fragment, include_related)
41
+ init_included_relationships(fragment, include_related)
42
+
43
+ @fragments[fragment.identity] = fragment
44
+ end
45
+
46
+ # Adds each Resource to the fragments hash
47
+ #
48
+ # @param resource [Hash]
49
+ # @param include_related [Hash]
50
+ #
51
+ # @return [null]
52
+ def add_resources(resources, include_related)
53
+ resources.each do |resource|
54
+ add_resource_fragment(JSONAPI::ResourceFragment.new(resource.identity, resource: resource), include_related)
55
+ end
56
+ end
57
+
58
+ # Adds a Resource to the fragments hash
59
+ #
60
+ # @param fragment [JSONAPI::ResourceFragment]
61
+ # @param include_related [Hash]
62
+ #
63
+ # @return [null]
64
+ def add_resource(resource, include_related)
65
+ add_resource_fragment(JSONAPI::ResourceFragment.new(resource.identity, resource: resource), include_related)
66
+ end
67
+
68
+ private
69
+
70
+ def init_included_relationships(fragment, include_related)
71
+ include_related && include_related.each_key do |relationship_name|
72
+ fragment.initialize_related(relationship_name)
73
+ end
74
+ end
75
+
76
+ def load_included(resource_klass, source_resource_tree, include_related, options)
77
+ include_related.try(:each_key) do |key|
78
+ relationship = resource_klass._relationship(key)
79
+ relationship_name = relationship.name.to_sym
80
+
81
+ find_related_resource_options = options.except(:filters, :sort_criteria, :paginator)
82
+ find_related_resource_options[:sort_criteria] = relationship.resource_klass.default_sort
83
+ find_related_resource_options[:cache] = resource_klass.caching?
84
+
85
+ related_fragments = resource_klass.find_included_fragments(source_resource_tree.fragments.values,
86
+ relationship,
87
+ find_related_resource_options)
88
+
89
+ related_resource_tree = source_resource_tree.get_related_resource_tree(relationship)
90
+ related_resource_tree.add_resource_fragments(related_fragments, include_related[key][:include_related])
91
+
92
+ # Now recursively get the related resources for the currently found resources
93
+ load_included(relationship.resource_klass,
94
+ related_resource_tree,
95
+ include_related[relationship_name][:include_related],
96
+ options)
97
+ end
98
+ end
99
+ end
100
+
101
+ class PrimaryResourceTree < ResourceTree
102
+
103
+ # Creates a PrimaryResourceTree with no resources and no related ResourceTrees
104
+ def initialize(fragments: nil, resources: nil, resource: nil, include_related: nil, options: nil)
105
+ @fragments ||= {}
106
+ @related_resource_trees ||= {}
107
+ if fragments || resources || resource
108
+ if fragments
109
+ add_resource_fragments(fragments, include_related)
110
+ end
111
+
112
+ if resources
113
+ add_resources(resources, include_related)
114
+ end
115
+
116
+ if resource
117
+ add_resource(resource, include_related)
118
+ end
119
+
120
+ complete_includes!(include_related, options)
121
+ end
122
+ end
123
+
124
+ # Adds a Resource Fragment to the fragments hash
125
+ #
126
+ # @param fragment [JSONAPI::ResourceFragment]
127
+ # @param include_related [Hash]
128
+ #
129
+ # @return [null]
130
+ def add_resource_fragment(fragment, include_related)
131
+ fragment.primary = true
132
+ super(fragment, include_related)
133
+ end
134
+
135
+ def complete_includes!(include_related, options)
136
+ # ToDo: can we skip if more than one resource_klass found?
137
+ resource_klasses = Set.new
138
+ @fragments.each_key { |identity| resource_klasses << identity.resource_klass }
139
+
140
+ resource_klasses.each { |resource_klass| load_included(resource_klass, self, include_related, options) }
141
+
142
+ self
143
+ end
144
+ end
145
+
146
+ class RelatedResourceTree < ResourceTree
147
+
148
+ attr_reader :parent_relationship, :source_resource_tree
149
+
150
+ # Creates a RelatedResourceTree with no resources and no related ResourceTrees. A connection to the parent
151
+ # ResourceTree is maintained.
152
+ #
153
+ # @param parent_relationship [JSONAPI::Relationship]
154
+ # @param source_resource_tree [JSONAPI::ResourceTree]
155
+ #
156
+ # @return [JSONAPI::RelatedResourceTree] the new or existing resource id tree for the requested relationship
157
+ def initialize(parent_relationship, source_resource_tree)
158
+ @fragments ||= {}
159
+ @related_resource_trees ||= {}
160
+
161
+ @parent_relationship = parent_relationship
162
+ @parent_relationship_name = parent_relationship.name.to_sym
163
+ @source_resource_tree = source_resource_tree
164
+ end
165
+
166
+ # Adds a Resource Fragment to the fragments hash
167
+ #
168
+ # @param fragment [JSONAPI::ResourceFragment]
169
+ # @param include_related [Hash]
170
+ #
171
+ # @return [null]
172
+ def add_resource_fragment(fragment, include_related)
173
+ init_included_relationships(fragment, include_related)
174
+
175
+ fragment.related_from.each do |rid|
176
+ @source_resource_tree.fragments[rid].add_related_identity(parent_relationship.name, fragment.identity)
177
+ end
178
+
179
+ if @fragments[fragment.identity]
180
+ @fragments[fragment.identity].related_from.merge(fragment.related_from)
181
+ fragment.related.each_pair do |relationship_name, rids|
182
+ if rids
183
+ @fragments[fragment.identity].merge_related_identities(relationship_name, rids)
184
+ end
185
+ end
186
+ else
187
+ @fragments[fragment.identity] = fragment
188
+ end
189
+ end
190
+ end
191
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module JSONAPI
2
4
  module Resources
3
5
  class Railtie < Rails::Railtie
@@ -6,4 +8,4 @@ module JSONAPI
6
8
  end
7
9
  end
8
10
  end
9
- end
11
+ end
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module JSONAPI
2
4
  module Resources
3
- VERSION = '0.10.6'
5
+ VERSION = '0.11.0.beta2'
4
6
  end
5
7
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module JSONAPI
2
4
  class ResponseDocument
3
5
  attr_reader :serialized_results
@@ -17,7 +19,7 @@ module JSONAPI
17
19
  end
18
20
 
19
21
  def has_errors?
20
- @error_results.length > 0 || @global_errors.length > 0
22
+ @error_results.length.positive? || @global_errors.length.positive?
21
23
  end
22
24
 
23
25
  def add_result(result, operation)
@@ -117,7 +119,7 @@ module JSONAPI
117
119
 
118
120
  result.pagination_params.each_pair do |link_name, params|
119
121
  if result.is_a?(JSONAPI::RelatedResourcesSetOperationResult)
120
- relationship = result.source_resource.class._relationships[result._type.to_sym]
122
+ relationship = result.source_resource.class._relationship(result._type)
121
123
  unless relationship.exclude_link?(link_name)
122
124
  link = serializer.link_builder.relationships_related_link(result.source_resource, relationship, query_params(params))
123
125
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ActionDispatch
2
4
  module Routing
3
5
  class Mapper
@@ -222,7 +224,7 @@ module ActionDispatch
222
224
  options = relationship.extract_options!.dup
223
225
 
224
226
  relationship_name = relationship.first
225
- relationship = source._relationships[relationship_name]
227
+ relationship = source._relationship(relationship_name)
226
228
 
227
229
  relationship._routed = true
228
230
 
@@ -246,7 +248,7 @@ module ActionDispatch
246
248
  options = relationship.extract_options!.dup
247
249
 
248
250
  relationship_name = relationship.first
249
- relationship = source._relationships[relationship_name]
251
+ relationship = source._relationship(relationship_name)
250
252
 
251
253
  relationship._routed = true
252
254
 
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'jsonapi/callbacks'
4
+ require 'jsonapi/configuration'
5
+
6
+ module JSONAPI
7
+ class SimpleResource
8
+ include ResourceCommon
9
+ root_resource
10
+ abstract
11
+ immutable
12
+ end
13
+ end
@@ -1,9 +1,14 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'jsonapi/resources/railtie'
2
4
  require 'jsonapi/naive_cache'
3
5
  require 'jsonapi/compiled_json'
4
- require 'jsonapi/basic_resource'
5
- require 'jsonapi/active_relation_resource'
6
+ require 'jsonapi/active_relation_retrieval'
7
+ require 'jsonapi/active_relation_retrieval_v09'
8
+ require 'jsonapi/active_relation_retrieval_v10'
9
+ require 'jsonapi/resource_common'
6
10
  require 'jsonapi/resource'
11
+ require 'jsonapi/simple_resource'
7
12
  require 'jsonapi/cached_response_fragment'
8
13
  require 'jsonapi/response_document'
9
14
  require 'jsonapi/acts_as_resource_controller'
@@ -25,7 +30,7 @@ require 'jsonapi/resource_serializer'
25
30
  require 'jsonapi/exceptions'
26
31
  require 'jsonapi/error'
27
32
  require 'jsonapi/error_codes'
28
- require 'jsonapi/request_parser'
33
+ require 'jsonapi/request'
29
34
  require 'jsonapi/processor'
30
35
  require 'jsonapi/relationship'
31
36
  require 'jsonapi/include_directives'
@@ -35,9 +40,10 @@ require 'jsonapi/callbacks'
35
40
  require 'jsonapi/link_builder'
36
41
  require 'jsonapi/active_relation/adapters/join_left_active_record_adapter'
37
42
  require 'jsonapi/active_relation/join_manager'
43
+ require 'jsonapi/active_relation/join_manager_v10'
38
44
  require 'jsonapi/resource_identity'
39
45
  require 'jsonapi/resource_fragment'
40
- require 'jsonapi/resource_id_tree'
46
+ require 'jsonapi/resource_tree'
41
47
  require 'jsonapi/resource_set'
42
48
  require 'jsonapi/path'
43
49
  require 'jsonapi/path_segment'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'rake'
2
4
  require 'jsonapi-resources'
3
5
 
@@ -7,7 +9,7 @@ namespace :jsonapi do
7
9
  task :check_upgrade => :environment do
8
10
  Rails.application.eager_load!
9
11
 
10
- resource_klasses = ObjectSpace.each_object(Class).select { |klass| klass < JSONAPI::Resource}
12
+ resource_klasses = ObjectSpace.each_object(Class).select { |klass| klass.include?(JSONAPI::ResourceCommon)}
11
13
 
12
14
  puts "Checking #{resource_klasses.count} resources"
13
15
 
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jsonapi-resources
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.6
4
+ version: 0.11.0.beta2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dan Gebhardt
8
8
  - Larry Gebhardt
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2022-02-07 00:00:00.000000000 Z
12
+ date: 2023-09-26 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -129,34 +129,48 @@ dependencies:
129
129
  - - ">="
130
130
  - !ruby/object:Gem::Version
131
131
  version: '0'
132
+ - !ruby/object:Gem::Dependency
133
+ name: hashie
134
+ requirement: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ type: :development
140
+ prerelease: false
141
+ version_requirements: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
132
146
  - !ruby/object:Gem::Dependency
133
147
  name: activerecord
134
148
  requirement: !ruby/object:Gem::Requirement
135
149
  requirements:
136
150
  - - ">="
137
151
  - !ruby/object:Gem::Version
138
- version: '4.1'
152
+ version: '5.1'
139
153
  type: :runtime
140
154
  prerelease: false
141
155
  version_requirements: !ruby/object:Gem::Requirement
142
156
  requirements:
143
157
  - - ">="
144
158
  - !ruby/object:Gem::Version
145
- version: '4.1'
159
+ version: '5.1'
146
160
  - !ruby/object:Gem::Dependency
147
161
  name: railties
148
162
  requirement: !ruby/object:Gem::Requirement
149
163
  requirements:
150
164
  - - ">="
151
165
  - !ruby/object:Gem::Version
152
- version: '4.1'
166
+ version: '5.1'
153
167
  type: :runtime
154
168
  prerelease: false
155
169
  version_requirements: !ruby/object:Gem::Requirement
156
170
  requirements:
157
171
  - - ">="
158
172
  - !ruby/object:Gem::Version
159
- version: '4.1'
173
+ version: '5.1'
160
174
  - !ruby/object:Gem::Dependency
161
175
  name: concurrent-ruby
162
176
  requirement: !ruby/object:Gem::Requirement
@@ -171,6 +185,20 @@ dependencies:
171
185
  - - ">="
172
186
  - !ruby/object:Gem::Version
173
187
  version: '0'
188
+ - !ruby/object:Gem::Dependency
189
+ name: sorted_set
190
+ requirement: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - ">="
193
+ - !ruby/object:Gem::Version
194
+ version: '0'
195
+ type: :runtime
196
+ prerelease: false
197
+ version_requirements: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - ">="
200
+ - !ruby/object:Gem::Version
201
+ version: '0'
174
202
  description: A resource-centric approach to implementing the controllers, routes,
175
203
  and serializers needed to support the JSON API spec.
176
204
  email:
@@ -192,9 +220,11 @@ files:
192
220
  - lib/jsonapi-resources.rb
193
221
  - lib/jsonapi/active_relation/adapters/join_left_active_record_adapter.rb
194
222
  - lib/jsonapi/active_relation/join_manager.rb
195
- - lib/jsonapi/active_relation_resource.rb
223
+ - lib/jsonapi/active_relation/join_manager_v10.rb
224
+ - lib/jsonapi/active_relation_retrieval.rb
225
+ - lib/jsonapi/active_relation_retrieval_v09.rb
226
+ - lib/jsonapi/active_relation_retrieval_v10.rb
196
227
  - lib/jsonapi/acts_as_resource_controller.rb
197
- - lib/jsonapi/basic_resource.rb
198
228
  - lib/jsonapi/cached_response_fragment.rb
199
229
  - lib/jsonapi/callbacks.rb
200
230
  - lib/jsonapi/compiled_json.rb
@@ -214,25 +244,27 @@ files:
214
244
  - lib/jsonapi/path_segment.rb
215
245
  - lib/jsonapi/processor.rb
216
246
  - lib/jsonapi/relationship.rb
217
- - lib/jsonapi/request_parser.rb
247
+ - lib/jsonapi/request.rb
218
248
  - lib/jsonapi/resource.rb
249
+ - lib/jsonapi/resource_common.rb
219
250
  - lib/jsonapi/resource_controller.rb
220
251
  - lib/jsonapi/resource_controller_metal.rb
221
252
  - lib/jsonapi/resource_fragment.rb
222
- - lib/jsonapi/resource_id_tree.rb
223
253
  - lib/jsonapi/resource_identity.rb
224
254
  - lib/jsonapi/resource_serializer.rb
225
255
  - lib/jsonapi/resource_set.rb
256
+ - lib/jsonapi/resource_tree.rb
226
257
  - lib/jsonapi/resources/railtie.rb
227
258
  - lib/jsonapi/resources/version.rb
228
259
  - lib/jsonapi/response_document.rb
229
260
  - lib/jsonapi/routing_ext.rb
261
+ - lib/jsonapi/simple_resource.rb
230
262
  - lib/tasks/check_upgrade.rake
231
263
  homepage: https://github.com/cerebris/jsonapi-resources
232
264
  licenses:
233
265
  - MIT
234
266
  metadata: {}
235
- post_install_message:
267
+ post_install_message:
236
268
  rdoc_options: []
237
269
  require_paths:
238
270
  - lib
@@ -243,12 +275,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
243
275
  version: '2.3'
244
276
  required_rubygems_version: !ruby/object:Gem::Requirement
245
277
  requirements:
246
- - - ">="
278
+ - - ">"
247
279
  - !ruby/object:Gem::Version
248
- version: '0'
280
+ version: 1.3.1
249
281
  requirements: []
250
282
  rubygems_version: 3.1.6
251
- signing_key:
283
+ signing_key:
252
284
  specification_version: 4
253
285
  summary: Easily support JSON API in Rails.
254
286
  test_files: []