jsonapi_compliable 0.11.6 → 0.11.7

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 (60) hide show
  1. checksums.yaml +4 -4
  2. data/docs/Jsonapi/ResourceGenerator.html +1 -1
  3. data/docs/Jsonapi.html +1 -1
  4. data/docs/JsonapiCompliable/Adapters/Abstract.html +1 -1
  5. data/docs/JsonapiCompliable/Adapters/ActiveRecord.html +1 -1
  6. data/docs/JsonapiCompliable/Adapters/ActiveRecordSideloading.html +1 -1
  7. data/docs/JsonapiCompliable/Adapters/Null.html +1 -1
  8. data/docs/JsonapiCompliable/Adapters.html +1 -1
  9. data/docs/JsonapiCompliable/Base.html +1 -1
  10. data/docs/JsonapiCompliable/Configuration.html +100 -7
  11. data/docs/JsonapiCompliable/Deserializer.html +1 -1
  12. data/docs/JsonapiCompliable/Errors/BadFilter.html +1 -1
  13. data/docs/JsonapiCompliable/Errors/InvalidInclude.html +1 -1
  14. data/docs/JsonapiCompliable/Errors/RecordNotFound.html +1 -1
  15. data/docs/JsonapiCompliable/Errors/StatNotFound.html +1 -1
  16. data/docs/JsonapiCompliable/Errors/UnsupportedPageSize.html +1 -1
  17. data/docs/JsonapiCompliable/Errors/ValidationError.html +1 -1
  18. data/docs/JsonapiCompliable/Errors.html +1 -1
  19. data/docs/JsonapiCompliable/Extensions/BooleanAttribute/ClassMethods.html +1 -1
  20. data/docs/JsonapiCompliable/Extensions/BooleanAttribute.html +1 -1
  21. data/docs/JsonapiCompliable/Extensions/ExtraAttribute/ClassMethods.html +1 -1
  22. data/docs/JsonapiCompliable/Extensions/ExtraAttribute.html +1 -1
  23. data/docs/JsonapiCompliable/Extensions.html +1 -1
  24. data/docs/JsonapiCompliable/Query.html +1 -1
  25. data/docs/JsonapiCompliable/Rails.html +1 -1
  26. data/docs/JsonapiCompliable/Resource.html +1 -1
  27. data/docs/JsonapiCompliable/Scope.html +1 -1
  28. data/docs/JsonapiCompliable/Scoping/Base.html +1 -1
  29. data/docs/JsonapiCompliable/Scoping/DefaultFilter.html +1 -1
  30. data/docs/JsonapiCompliable/Scoping/ExtraFields.html +1 -1
  31. data/docs/JsonapiCompliable/Scoping/Filter.html +1 -1
  32. data/docs/JsonapiCompliable/Scoping/Filterable.html +1 -1
  33. data/docs/JsonapiCompliable/Scoping/Paginate.html +1 -1
  34. data/docs/JsonapiCompliable/Scoping/Sort.html +1 -1
  35. data/docs/JsonapiCompliable/Scoping.html +1 -1
  36. data/docs/JsonapiCompliable/SerializableTempId.html +1 -1
  37. data/docs/JsonapiCompliable/Sideload.html +1 -1
  38. data/docs/JsonapiCompliable/Stats/DSL.html +1 -1
  39. data/docs/JsonapiCompliable/Stats/Payload.html +1 -1
  40. data/docs/JsonapiCompliable/Stats.html +1 -1
  41. data/docs/JsonapiCompliable/Util/FieldParams.html +1 -1
  42. data/docs/JsonapiCompliable/Util/Hash.html +1 -1
  43. data/docs/JsonapiCompliable/Util/IncludeParams.html +1 -1
  44. data/docs/JsonapiCompliable/Util/Persistence.html +1 -1
  45. data/docs/JsonapiCompliable/Util/RelationshipPayload.html +1 -1
  46. data/docs/JsonapiCompliable/Util/RenderOptions.html +20 -4
  47. data/docs/JsonapiCompliable/Util/Sideload.html +1 -1
  48. data/docs/JsonapiCompliable/Util/ValidationResponse.html +1 -1
  49. data/docs/JsonapiCompliable/Util.html +1 -1
  50. data/docs/JsonapiCompliable.html +2 -2
  51. data/docs/_index.html +1 -1
  52. data/docs/file.README.html +1 -1
  53. data/docs/index.html +1 -1
  54. data/docs/method_list.html +266 -258
  55. data/docs/top-level-namespace.html +1 -1
  56. data/lib/jsonapi_compliable/configuration.rb +11 -0
  57. data/lib/jsonapi_compliable/scope.rb +22 -1
  58. data/lib/jsonapi_compliable/util/render_options.rb +1 -0
  59. data/lib/jsonapi_compliable/version.rb +1 -1
  60. metadata +2 -2
@@ -100,7 +100,7 @@
100
100
  </div>
101
101
 
102
102
  <div id="footer">
103
- Generated on Thu May 3 15:52:17 2018 by
103
+ Generated on Mon May 7 09:24:11 2018 by
104
104
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
105
105
  0.9.9 (ruby-2.3.0).
106
106
  </div>
@@ -4,11 +4,22 @@ module JsonapiCompliable
4
4
  # @return [Boolean] Should we raise when the client requests a relationship not defined on the server?
5
5
  # Defaults to true.
6
6
  attr_accessor :raise_on_missing_sideload
7
+ # @return [Boolean] Concurrently fetch sideloads? This is *experimental* and may be removed.
8
+ # Defaults to false
9
+ attr_accessor :experimental_concurrency
7
10
 
8
11
  # Set defaults
9
12
  # @api private
10
13
  def initialize
11
14
  @raise_on_missing_sideload = true
15
+ @experimental_concurrency = false
16
+ end
17
+
18
+ # @api private
19
+ def experimental_concurrency=(val)
20
+ if val && !defined?(Concurrent::Promise)
21
+ raise "You must add the concurrent-ruby gem to opt-in to experimental concurrency"
22
+ end
12
23
  end
13
24
  end
14
25
  end
@@ -81,6 +81,9 @@ module JsonapiCompliable
81
81
  def sideload(results, includes)
82
82
  return if results == []
83
83
 
84
+ concurrent = ::JsonapiCompliable.config.experimental_concurrency
85
+ promises = []
86
+
84
87
  includes.each_pair do |name, nested|
85
88
  sideload = @resource.sideload(name)
86
89
 
@@ -91,7 +94,25 @@ module JsonapiCompliable
91
94
  end
92
95
  else
93
96
  namespace = Util::Sideload.namespace(@namespace, sideload.name)
94
- sideload.resolve(results, @query, namespace)
97
+ resolve_sideload = -> { sideload.resolve(results, @query, namespace) }
98
+ if concurrent
99
+ promises << Concurrent::Promise.execute(&resolve_sideload)
100
+ else
101
+ resolve_sideload.call
102
+ end
103
+ end
104
+ end
105
+
106
+ if concurrent
107
+ # Wait for all promises to finish
108
+ while !promises.all? { |p| p.fulfilled? || p.rejected? }
109
+ sleep 0.01
110
+ end
111
+ # Re-raise the error with correct stacktrace
112
+ # OPTION** to avoid failing here?? if so need serializable patch
113
+ # to avoid loading data when association not loaded
114
+ if rejected = promises.find(&:rejected?)
115
+ raise rejected.reason
95
116
  end
96
117
  end
97
118
  end
@@ -15,6 +15,7 @@ module JsonapiCompliable
15
15
  fields = query_hash[:fields].dup
16
16
  extra_fields = query_hash[:extra_fields]
17
17
 
18
+ # Ensure fields doesnt clobber extra fields
18
19
  if extra_fields.any? && fields.any?
19
20
  extra_fields.each { |k,v| fields[k] = fields[k].to_a + v }
20
21
  end
@@ -1,3 +1,3 @@
1
1
  module JsonapiCompliable
2
- VERSION = "0.11.6"
2
+ VERSION = "0.11.7"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jsonapi_compliable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.6
4
+ version: 0.11.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lee Richmond
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2018-05-04 00:00:00.000000000 Z
12
+ date: 2018-05-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: jsonapi-serializable