arsi 0.4.3 → 1.0.0

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: 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