arsi 0.4.3 → 1.0.0

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: ea7a4a5e12e9e4a35319a230ebf3b4310db0e0d02582da4840d93c85d714cca6
4
- data.tar.gz: 22f1bda30e928de04e48ceea8de894e67cbd1e1c14d44d7b72c98cfc5c25a87c
3
+ metadata.gz: aea5ecd2b64166843083b97523f85c66b2c07246d291b2b44f6d4ed814ec6a42
4
+ data.tar.gz: 7810f158d8850861dfa9eafa974decf092b537503e82850269abbe67b7f415fc
5
5
  SHA512:
6
- metadata.gz: de787c78a923844c619250378ede3267f4b72e89b207dce90a1b085938c3f2d9ebb441d6780dc00321a71130064f28546f89278c8e00fb3e54122783d9749ae2
7
- data.tar.gz: ee136b4e0cc3cde3289679b3a487bd21982085e96c42e1964dc8bce66ff9367f3e2f4b4edebbf1b5534013c4e7e019af2934fc64157367d0c004aad68f5b6d01
6
+ metadata.gz: f16b52a751b60ed9d6fe42f8dfe1989bc52b6e48e791c541d6dbfab83d969579507a062e82aa01789e992dd883869dc77c112e9e3f6553c7fd80da56a159eeef
7
+ data.tar.gz: 6b4f455f599f1ce7e68d5518efb85d6b23bfdd800ab58fbab807573a288f78196ba340016926b4aeab2971e66a88cd2f5c79062b9f58907aaf6f956d3371adc6
@@ -2,28 +2,12 @@ require 'arel'
2
2
 
3
3
  module Arsi
4
4
  module ArelTreeManager
5
- AREL_WHERE_SQL_ARITY_1 = ::Arel::VERSION[0].to_i < 7
6
- AREL_WHERE_SQL_ENGINE_ACCESSOR = ::Arel::VERSION[0].to_i < 9
7
-
8
5
  # This is from Arel::SelectManager which inherits from Arel::TreeManager.
9
6
  # We need where_sql on both Arel::UpdateManager and Arel::DeleteManager so we add it to the parent class.
10
- def where_sql(provided_engine = :none)
7
+ def where_sql(engine = ::Arel::Table.engine)
11
8
  return if @ctx.wheres.empty?
12
9
 
13
- selected_engine = provided_engine
14
- if selected_engine == :none
15
- selected_engine = if AREL_WHERE_SQL_ENGINE_ACCESSOR
16
- self.engine || ::Arel::Table.engine
17
- else
18
- Arel::Table.engine
19
- end
20
- end
21
-
22
- viz = if AREL_WHERE_SQL_ARITY_1
23
- ::Arel::Visitors::WhereSql.new selected_engine.connection
24
- else
25
- ::Arel::Visitors::WhereSql.new(selected_engine.connection.visitor, selected_engine.connection)
26
- end
10
+ viz = ::Arel::Visitors::WhereSql.new(engine.connection.visitor, engine.connection)
27
11
  ::Arel::Nodes::SqlLiteral.new viz.accept(@ctx, ::Arel::Collectors::SQLString.new).value
28
12
  end
29
13
  end
data/lib/arsi/relation.rb CHANGED
@@ -18,23 +18,22 @@ module Arsi
18
18
  !arsi_scopeable?
19
19
  end
20
20
 
21
+ def _update_record(*)
22
+ with_relation_in_connection { super }
23
+ end
24
+
21
25
  def delete_all(*)
22
26
  with_relation_in_connection { super }
23
27
  end
24
28
 
25
- def self.prepended(base)
26
- base.class_eval do
27
- alias_method :update_all_without_arsi, :update_all
28
- def update_all(*args)
29
- with_relation_in_connection { update_all_without_arsi(*args) }
30
- end
31
- end
29
+ def update_all(*)
30
+ with_relation_in_connection { super }
32
31
  end
33
32
 
34
33
  private
35
34
 
36
35
  def arsi_scopeable?
37
- @klass.columns.any? { |c| c.name =~ Arsi::SCOPEABLE_REGEX }
36
+ @klass.columns.any? { |c| Arsi::SCOPEABLE_REGEX.match?(c.name) }
38
37
  end
39
38
 
40
39
  def with_relation_in_connection
data/lib/arsi/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Arsi
2
- VERSION = '0.4.3'
2
+ VERSION = '1.0.0'
3
3
  end
data/lib/arsi.rb CHANGED
@@ -6,9 +6,9 @@ require 'active_record/connection_adapters/mysql2_adapter'
6
6
 
7
7
  module Arsi
8
8
  class UnscopedSQL < StandardError; end
9
- Arel::TreeManager.send(:include, ArelTreeManager)
10
- ActiveRecord::ConnectionAdapters::Mysql2Adapter.send(:prepend, Mysql2Adapter)
11
- ActiveRecord::Relation.send(:prepend, Relation)
9
+ Arel::TreeManager.include(ArelTreeManager)
10
+ ActiveRecord::ConnectionAdapters::Mysql2Adapter.prepend(Mysql2Adapter)
11
+ ActiveRecord::Relation.prepend(Relation)
12
12
  ActiveRecord::Querying.delegate(:without_arsi, :to => :relation)
13
13
 
14
14
  @enabled = true
@@ -24,15 +24,12 @@ module Arsi
24
24
  attr_reader :enabled
25
25
  attr_accessor :violation_callback
26
26
 
27
- def sql_check!(sql, relation)
28
- return if !@enabled || relation.try(:without_arsi?)
29
- return if sql =~ SQL_MATCHER
30
- report_violation(sql, relation)
31
- end
32
-
33
27
  def arel_check!(arel, relation)
34
28
  return unless @enabled
35
- sql = arel.respond_to?(:ast) ? arel.where_sql : arel.to_s
29
+ return if relation && relation.without_arsi?
30
+
31
+ # ::Arel::TreeManager, String, nil or ... ?
32
+ sql = arel.respond_to?(:where_sql) ? arel_where_sql(arel, relation) : arel.to_s
36
33
  sql_check!(sql, relation)
37
34
  end
38
35
 
@@ -54,6 +51,18 @@ module Arsi
54
51
 
55
52
  private
56
53
 
54
+ def arel_where_sql(arel, relation)
55
+ return arel.where_sql if relation.nil?
56
+ return arel.where_sql unless relation.model.respond_to?(:arel_engine)
57
+
58
+ arel.where_sql(relation.model.arel_engine)
59
+ end
60
+
61
+ def sql_check!(sql, relation)
62
+ return if SQL_MATCHER.match?(sql)
63
+ report_violation(sql, relation)
64
+ end
65
+
57
66
  def run_with_arsi(with_arsi)
58
67
  previous, @enabled = @enabled, with_arsi
59
68
  yield
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: arsi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.3
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Christopher Kintner
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-02-28 00:00:00.000000000 Z
11
+ date: 2022-03-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: arel
@@ -87,21 +87,7 @@ dependencies:
87
87
  - !ruby/object:Gem::Version
88
88
  version: '0'
89
89
  - !ruby/object:Gem::Dependency
90
- name: minitest
91
- requirement: !ruby/object:Gem::Requirement
92
- requirements:
93
- - - ">="
94
- - !ruby/object:Gem::Version
95
- version: '0'
96
- type: :development
97
- prerelease: false
98
- version_requirements: !ruby/object:Gem::Requirement
99
- requirements:
100
- - - ">="
101
- - !ruby/object:Gem::Version
102
- version: '0'
103
- - !ruby/object:Gem::Dependency
104
- name: minitest-rg
90
+ name: maxitest
105
91
  requirement: !ruby/object:Gem::Requirement
106
92
  requirements:
107
93
  - - ">="
@@ -167,14 +153,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
167
153
  requirements:
168
154
  - - ">="
169
155
  - !ruby/object:Gem::Version
170
- version: '0'
156
+ version: 2.5.0
171
157
  required_rubygems_version: !ruby/object:Gem::Requirement
172
158
  requirements:
173
159
  - - ">="
174
160
  - !ruby/object:Gem::Version
175
161
  version: '0'
176
162
  requirements: []
177
- rubygems_version: 3.3.8
163
+ rubygems_version: 3.3.5
178
164
  signing_key:
179
165
  specification_version: 4
180
166
  summary: ActiveRecord SQL Inspector