jsonapi-resources 0.10.0 → 0.10.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: be0a26c90f490d3ce79ad0acbba2659a3bb76dd8a83c8d1ba1dbcd1cacb6f13e
4
- data.tar.gz: '069228b97bd90bb91adb6d2b0eb2271b91cd2a707ab6697b0c6b244e43309f5a'
3
+ metadata.gz: cb454d152ad0d4006c635c266ef12a4b5bc01d2d1f90768010545beb1c706509
4
+ data.tar.gz: 453cbec4004419cc4ed2f2cb9fd5b85879b6348dc1be033d44c19b8f7b6a74a7
5
5
  SHA512:
6
- metadata.gz: 9b423d0a8a991a22fcedcf9a4430629717d086f2ab26fa74a6b740240725b8cf10871c3e88b8b25b1253fa1517852794ec2e04382dac36c81df269e1e5056f1e
7
- data.tar.gz: a47a26887e61fe572fe2b4804dbebc4be42bea8bd0ae6a698125bb572c533f72b7a87b564d1ad8e290f8412ce3d7329df75c08b85ba6e7e1d6e15bbbd83be766
6
+ metadata.gz: 34d71bab88b0d790e160514373fda6d0328c405662995f9235663f648994f9e984f2f1327846e9713cb2777d66d4cc838401253cd842b96cc3485cf61e3cc776
7
+ data.tar.gz: e14d5b344c99beb03229c7f98800ea84de86fccc86fddb581df6341d210fc962669b83051a93c1ed4665c4019d5f76d96ca225844a4b0a53c34c212da08d656c
@@ -153,6 +153,11 @@ module JSONAPI
153
153
  pluck_fields << Arel.sql("#{concat_table_field(resource_table_alias, model_field[:name])} AS #{resource_table_alias}_#{model_field[:name]}")
154
154
  end
155
155
 
156
+ sort_fields = options.dig(:_relation_helper_options, :sort_fields)
157
+ sort_fields.try(:each) do |field|
158
+ pluck_fields << Arel.sql(field)
159
+ end
160
+
156
161
  fragments = {}
157
162
  rows = records.pluck(*pluck_fields)
158
163
  rows.each do |row|
@@ -445,6 +450,11 @@ module JSONAPI
445
450
  pluck_fields << Arel.sql("#{concat_table_field(resource_table_alias, model_field[:name])} AS #{resource_table_alias}_#{model_field[:name]}")
446
451
  end
447
452
 
453
+ sort_fields = options.dig(:_relation_helper_options, :sort_fields)
454
+ sort_fields.try(:each) do |field|
455
+ pluck_fields << Arel.sql(field)
456
+ end
457
+
448
458
  fragments = {}
449
459
  rows = records.distinct.pluck(*pluck_fields)
450
460
  rows.each do |row|
@@ -680,24 +690,23 @@ module JSONAPI
680
690
  paginator: nil,
681
691
  options: {})
682
692
 
683
- opts = options.dup
684
- records = resource_klass.apply_joins(records, join_manager, opts)
693
+ options[:_relation_helper_options] = { join_manager: join_manager, sort_fields: [] }
694
+
695
+ records = resource_klass.apply_joins(records, join_manager, options)
685
696
 
686
697
  if primary_keys
687
698
  records = records.where(_primary_key => primary_keys)
688
699
  end
689
700
 
690
- opts[:join_manager] = join_manager
691
-
692
701
  unless filters.empty?
693
- records = resource_klass.filter_records(records, filters, opts)
702
+ records = resource_klass.filter_records(records, filters, options)
694
703
  end
695
704
 
696
705
  if sort_primary
697
706
  records = records.order(_primary_key => :asc)
698
707
  else
699
708
  order_options = resource_klass.construct_order_options(sort_criteria)
700
- records = resource_klass.sort_records(records, order_options, opts)
709
+ records = resource_klass.sort_records(records, order_options, options)
701
710
  end
702
711
 
703
712
  if paginator
@@ -731,12 +740,16 @@ module JSONAPI
731
740
 
732
741
  strategy = _allowed_sort.fetch(field.to_sym, {})[:apply]
733
742
 
743
+ options[:_relation_helper_options] ||= {}
744
+ options[:_relation_helper_options][:sort_fields] ||= []
745
+
734
746
  if strategy
735
747
  records = call_method_or_proc(strategy, records, direction, context)
736
748
  else
737
- join_manager = options[:join_manager]
738
-
739
- records = records.order(Arel.sql("#{get_aliased_field(field, join_manager)} #{direction}"))
749
+ join_manager = options.dig(:_relation_helper_options, :join_manager)
750
+ sort_field = join_manager ? get_aliased_field(field, join_manager) : field
751
+ options[:_relation_helper_options][:sort_fields].push("#{sort_field}")
752
+ records = records.order(Arel.sql("#{sort_field} #{direction}"))
740
753
  end
741
754
  records
742
755
  end
@@ -825,8 +838,9 @@ module JSONAPI
825
838
  if strategy
826
839
  records = call_method_or_proc(strategy, records, value, options)
827
840
  else
828
- join_manager = options[:join_manager]
829
- records = records.where(Arel.sql(get_aliased_field(filter, join_manager)) => value)
841
+ join_manager = options.dig(:_relation_helper_options, :join_manager)
842
+ field = join_manager ? get_aliased_field(filter, join_manager) : filter
843
+ records = records.where(Arel.sql(field) => value)
830
844
  end
831
845
 
832
846
  records
@@ -1,5 +1,5 @@
1
1
  module JSONAPI
2
2
  module Resources
3
- VERSION = '0.10.0'
3
+ VERSION = '0.10.1'
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
4
+ version: 0.10.1
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-09-30 00:00:00.000000000 Z
12
+ date: 2019-10-30 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -247,7 +247,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
247
247
  - !ruby/object:Gem::Version
248
248
  version: '0'
249
249
  requirements: []
250
- rubygems_version: 3.0.3
250
+ rubyforge_project:
251
+ rubygems_version: 2.7.6.2
251
252
  signing_key:
252
253
  specification_version: 4
253
254
  summary: Easily support JSON API in Rails.