passive_columns 0.2.3 → 0.3.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: 4c17e42bdf1a6871eb67811732872bfb4d4c280c91d2b6f4a76442efbf1379f5
4
- data.tar.gz: dd7937cad9f31dabf925cd15dbf051b06682483bbfeb884a713c113281bce613
3
+ metadata.gz: 3c37d7d720dab3e13b2084d7f6277a35b1d99de88b75eae8ef67b89d67472172
4
+ data.tar.gz: 5ada8404f4509e694764d732892c2833d71c94c959c7ae45c080266781473e7e
5
5
  SHA512:
6
- metadata.gz: 8c40fdcc4543ea47e4e945819a3e03328203d7157f17c0b2170cddadf45024b5dbafe7e6bf5fa8045678cf4f63b28b667f63fe49f3217ff9abffd9b2c0c9a4ef
7
- data.tar.gz: 8d13c82243de48de75116e986ba12c96949c5ad9151801dcecc9fd2da0f6f6d8ecef5cad7c23125e98571c77af582771ed9e2cbba43d63a293fdbc4f030d8fb1
6
+ metadata.gz: b0ed4cbe6220e1752cb6f98e7b555f31bd178db3941f4a8c2e2d5fb022b3e00eb9abffc71a90cdb29f23fad14cc004e573850d51f9b18b1df3e0e05f4747d32e
7
+ data.tar.gz: c73cf064d995e5c9705f609319e4f0609616d346cc17d1a41a8f4efe98cd5cbd934008ca6c0b7a3226d9a9967323038b0bf0fcf9e33f9c5b6ac3d199f86635f2
@@ -4,11 +4,16 @@ module PassiveColumns
4
4
  # ActiveRecordRelationExtension is a module that extends ActiveRecord::Relation
5
5
  # to automatically select all columns except passive columns if no columns are selected.
6
6
  module ActiveRecordRelationExtension
7
- def exec_main_query(**args)
8
- if klass.try(:_passive_columns).present? && select_values.blank?
9
- self.select_values = klass.column_names - klass._passive_columns
7
+ if ActiveRecord::VERSION::MAJOR >= 7
8
+ def exec_main_query(...)
9
+ PassiveColumns.apply_select_scope_to(self)
10
+ super
11
+ end
12
+ else
13
+ def exec_queries(...)
14
+ PassiveColumns.apply_select_scope_to(self)
15
+ super
10
16
  end
11
- super
12
17
  end
13
18
 
14
19
  def to_sql
@@ -17,10 +22,7 @@ module PassiveColumns
17
22
  # @see ActiveRecord::QueryMethods::assert_mutability!
18
23
  return super if @loaded || (defined?(@arel) && @arel)
19
24
 
20
- if klass.try(:_passive_columns).present? && select_values.blank?
21
- self.select_values = klass.column_names - klass._passive_columns
22
- end
23
-
25
+ PassiveColumns.apply_select_scope_to(self)
24
26
  super
25
27
  end
26
28
  end
@@ -5,7 +5,7 @@ module PassiveColumns
5
5
  class Loader
6
6
  attr_reader :passive_columns, :model
7
7
 
8
- # @param [LazyColumns] model
8
+ # @param [ActiveRecord::Base] model
9
9
  # @param [Array<Symbol>] passive_columns
10
10
  def initialize(model, passive_columns)
11
11
  @model = model
@@ -35,8 +35,16 @@ module PassiveColumns
35
35
  model.class.unscoped.where(identity_constraints).pick(column)
36
36
  end
37
37
 
38
- def identity_constraints
39
- @identity_constraints ||= model.send(:_query_constraints_hash)
38
+ if ActiveRecord::VERSION::MAJOR >= 7
39
+ def identity_constraints
40
+ @identity_constraints ||= model.send(:_query_constraints_hash)
41
+ end
42
+ else
43
+ def identity_constraints
44
+ @identity_constraints ||= {
45
+ model.instance_variable_get(:@primary_key) => model.id_in_database
46
+ }
47
+ end
40
48
  end
41
49
  end
42
50
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module PassiveColumns
4
- VERSION = '0.2.3'
4
+ VERSION = '0.3.1'
5
5
  end
@@ -93,6 +93,28 @@ module PassiveColumns
93
93
  end
94
94
  super(name, *filter_list, opts, &block)
95
95
  end
96
+
97
+ def cached_find_by_statement(key, &block)
98
+ cache = @find_by_statement_cache[connection.prepared_statements]
99
+ cache.compute_if_absent(key) do
100
+ ActiveRecord::StatementCache.create(connection) do |params|
101
+ relation = block.call params
102
+ PassiveColumns.apply_select_scope_to(relation)
103
+ relation
104
+ end
105
+ end
106
+ end
107
+ end
108
+
109
+ # This method is used to apply the select scope to the relation.
110
+ # It is used to automatically select all columns except passive columns if no columns are selected.
111
+ # @param [ActiveRecord::Relation] relation
112
+ # @return [void]
113
+ def self.apply_select_scope_to(relation)
114
+ return if relation.klass.try(:_passive_columns).blank?
115
+ return if relation.select_values.present?
116
+
117
+ relation.select_values = relation.klass.column_names - relation.klass._passive_columns
96
118
  end
97
119
 
98
120
  # This method loads a column value, if not already loaded, from the database
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: passive_columns
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dmitry Golovin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-06-22 00:00:00.000000000 Z
11
+ date: 2024-11-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '7.0'
19
+ version: '6.1'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '7.0'
26
+ version: '6.1'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: activesupport
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '7.0'
33
+ version: '6.1'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '7.0'
40
+ version: '6.1'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -115,7 +115,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
115
115
  - !ruby/object:Gem::Version
116
116
  version: '0'
117
117
  requirements: []
118
- rubygems_version: 3.3.26
118
+ rubygems_version: 3.1.6
119
119
  signing_key:
120
120
  specification_version: 4
121
121
  summary: A gem that extends Active Record to retrieve columns from a db on demand