jsonapi-resources 0.10.0.beta7 → 0.10.0.beta8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 600d53bfd0a54392487da779289e4c6296ca68b39429863c0f49e2a740236311
4
- data.tar.gz: 7c04975340f8632e652e022888500db99fdea792000df8450a59a83c2c780ded
3
+ metadata.gz: c8058151c97ec20cfa1d8d1606c19a0c24094fb7f70e27970772d5e0df5cc96b
4
+ data.tar.gz: 24604b487e967e5e24260e5d30d8a3f5891c6bf3fd1b1d8554a2f4eced9f503f
5
5
  SHA512:
6
- metadata.gz: 903579db17ede3765982689be35254ed7315e1877bbf4f15c4f00a94a5829dbaeddb99326e617244233e2249b7fe3d6ba89d89c1a8902e2b03a88b3d18c65fe6
7
- data.tar.gz: a905f778a2ab6c7a64ea32f218f53b70bab84a087af8e86c09234800172a693dab199ffcd9a724afe3c0d3b88eb368b7cfc6edc8ef66f1fa7f01dd54bbcc6a7b
6
+ metadata.gz: 9f486e212c1a44a440d4dad9b94c822a72e4080eca619e3838e8f4d1237223c882abf7f19c35cfa98af90a30d5f5799f79272f4393b0d8453134f7942fb14333
7
+ data.tar.gz: 299ed1970270e8d69deea9a5a4fe6f67909a915c0c76f1d0608b3ce0ff3d82dbe1676a74082677e65ff9f0cbfa4ba97dc4be88ef46ffe52bac8e42b36810fedf
@@ -154,13 +154,13 @@ module JSONAPI
154
154
  next
155
155
  end
156
156
 
157
- records, join_node = self.class.get_join_arel_node(records, options) {|records, options|
158
- records = related_resource_klass.join_relationship(
159
- records: records,
160
- resource_type: related_resource_klass._type,
161
- join_type: join_type,
162
- relationship: relationship,
163
- options: options)
157
+ records, join_node = self.class.get_join_arel_node(records, options) {|records, options|
158
+ related_resource_klass.join_relationship(
159
+ records: records,
160
+ resource_type: related_resource_klass._type,
161
+ join_type: join_type,
162
+ relationship: relationship,
163
+ options: options)
164
164
  }
165
165
 
166
166
  details = {alias: self.class.alias_from_arel_node(join_node), join_type: join_type}
@@ -155,7 +155,7 @@ module JSONAPI
155
155
 
156
156
  fragments = {}
157
157
  rows = records.pluck(*pluck_fields)
158
- rows.collect do |row|
158
+ rows.each do |row|
159
159
  rid = JSONAPI::ResourceIdentity.new(resource_klass, pluck_fields.length == 1 ? row : row[0])
160
160
 
161
161
  fragments[rid] ||= JSONAPI::ResourceFragment.new(rid)
@@ -181,6 +181,10 @@ module JSONAPI
181
181
  end
182
182
  end
183
183
 
184
+ if JSONAPI.configuration.warn_on_performance_issues && (rows.length > fragments.length)
185
+ warn "Performance issue detected: `#{self.name.to_s}.records` returned non-normalized results in `#{self.name.to_s}.find_fragments`."
186
+ end
187
+
184
188
  fragments
185
189
  end
186
190
 
@@ -453,6 +453,9 @@ module JSONAPI
453
453
 
454
454
  subclass._routed = false
455
455
  subclass._warned_missing_route = false
456
+
457
+ subclass._clear_cached_attribute_options
458
+ subclass._clear_fields_cache
456
459
  end
457
460
 
458
461
  def rebuild_relationships(relationships)
@@ -527,6 +530,9 @@ module JSONAPI
527
530
  end
528
531
 
529
532
  def attribute(attribute_name, options = {})
533
+ _clear_cached_attribute_options
534
+ _clear_fields_cache
535
+
530
536
  attr = attribute_name.to_sym
531
537
 
532
538
  check_reserved_attribute_name(attr)
@@ -693,7 +699,7 @@ module JSONAPI
693
699
  end
694
700
 
695
701
  def fields
696
- _relationships.keys | _attributes.keys
702
+ @_fields_cache ||= _relationships.keys | _attributes.keys
697
703
  end
698
704
 
699
705
  def resources_for(records, context)
@@ -826,7 +832,7 @@ module JSONAPI
826
832
 
827
833
  # quasi private class methods
828
834
  def _attribute_options(attr)
829
- default_attribute_options.merge(@_attributes[attr])
835
+ @_cached_attribute_options[attr] ||= default_attribute_options.merge(@_attributes[attr])
830
836
  end
831
837
 
832
838
  def _attribute_delegated_name(attr)
@@ -1063,6 +1069,8 @@ module JSONAPI
1063
1069
  end
1064
1070
 
1065
1071
  def _add_relationship(klass, *attrs)
1072
+ _clear_fields_cache
1073
+
1066
1074
  options = attrs.extract_options!
1067
1075
  options[:parent_resource] = self
1068
1076
 
@@ -1107,6 +1115,14 @@ module JSONAPI
1107
1115
  @_relationships[name] = relationship_object
1108
1116
  end
1109
1117
 
1118
+ def _clear_cached_attribute_options
1119
+ @_cached_attribute_options = {}
1120
+ end
1121
+
1122
+ def _clear_fields_cache
1123
+ @_fields_cache = nil
1124
+ end
1125
+
1110
1126
  private
1111
1127
 
1112
1128
  def check_reserved_resource_name(type, name)
@@ -10,6 +10,7 @@ module JSONAPI
10
10
  :raise_if_parameters_not_allowed,
11
11
  :warn_on_route_setup_issues,
12
12
  :warn_on_missing_routes,
13
+ :warn_on_performance_issues,
13
14
  :default_allow_include_to_one,
14
15
  :default_allow_include_to_many,
15
16
  :allow_sort,
@@ -60,6 +61,7 @@ module JSONAPI
60
61
 
61
62
  self.warn_on_route_setup_issues = true
62
63
  self.warn_on_missing_routes = true
64
+ self.warn_on_performance_issues = true
63
65
 
64
66
  # :none, :offset, :paged, or a custom paginator name
65
67
  self.default_paginator = :none
@@ -272,6 +274,8 @@ module JSONAPI
272
274
 
273
275
  attr_writer :warn_on_missing_routes
274
276
 
277
+ attr_writer :warn_on_performance_issues
278
+
275
279
  attr_writer :use_relationship_reflection
276
280
 
277
281
  attr_writer :resource_cache
@@ -123,16 +123,16 @@ module JSONAPI
123
123
  end
124
124
 
125
125
  def resources_path(source_klass)
126
- formatted_module_path_from_class(source_klass) + format_route(source_klass._type.to_s)
126
+ @_resources_path ||= {}
127
+ @_resources_path[source_klass] ||= formatted_module_path_from_class(source_klass) + format_route(source_klass._type.to_s)
127
128
  end
128
129
 
129
130
  def resource_path(source)
130
- url = "#{resources_path(source.class)}"
131
-
132
- unless source.class.singleton?
133
- url = "#{url}/#{source.id}"
131
+ if source.class.singleton?
132
+ resources_path(source.class)
133
+ else
134
+ "#{resources_path(source.class)}/#{source.id}"
134
135
  end
135
- url
136
136
  end
137
137
 
138
138
  def resource_url(source)
@@ -230,7 +230,7 @@ module JSONAPI
230
230
  end
231
231
 
232
232
  def custom_generation_options
233
- {
233
+ @_custom_generation_options ||= {
234
234
  serializer: self,
235
235
  serialization_options: @serialization_options
236
236
  }
@@ -1,5 +1,5 @@
1
1
  module JSONAPI
2
2
  module Resources
3
- VERSION = '0.10.0.beta7'
3
+ VERSION = '0.10.0.beta8'
4
4
  end
5
5
  end
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.10.0.beta7
4
+ version: 0.10.0.beta8
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: 2019-07-11 00:00:00.000000000 Z
12
+ date: 2019-07-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler