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 +4 -4
- data/lib/arsi/arel_tree_manager.rb +2 -18
- data/lib/arsi/relation.rb +7 -8
- data/lib/arsi/version.rb +1 -1
- data/lib/arsi.rb +19 -10
- metadata +5 -19
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: aea5ecd2b64166843083b97523f85c66b2c07246d291b2b44f6d4ed814ec6a42
|
|
4
|
+
data.tar.gz: 7810f158d8850861dfa9eafa974decf092b537503e82850269abbe67b7f415fc
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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(
|
|
7
|
+
def where_sql(engine = ::Arel::Table.engine)
|
|
11
8
|
return if @ctx.wheres.empty?
|
|
12
9
|
|
|
13
|
-
|
|
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
|
|
26
|
-
|
|
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
|
|
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
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.
|
|
10
|
-
ActiveRecord::ConnectionAdapters::Mysql2Adapter.
|
|
11
|
-
ActiveRecord::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
|
-
|
|
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
|
+
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-
|
|
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:
|
|
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:
|
|
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.
|
|
163
|
+
rubygems_version: 3.3.5
|
|
178
164
|
signing_key:
|
|
179
165
|
specification_version: 4
|
|
180
166
|
summary: ActiveRecord SQL Inspector
|