arsi 0.4.3 → 1.1.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: 4568758138c9d89d766860d327ee3233771f8a0e25924288b57513088a4894f8
4
+ data.tar.gz: 06c17d87d50c76db362a083a358c731828359ca0195db29062b1a1e8346feabf
5
5
  SHA512:
6
- metadata.gz: de787c78a923844c619250378ede3267f4b72e89b207dce90a1b085938c3f2d9ebb441d6780dc00321a71130064f28546f89278c8e00fb3e54122783d9749ae2
7
- data.tar.gz: ee136b4e0cc3cde3289679b3a487bd21982085e96c42e1964dc8bce66ff9367f3e2f4b4edebbf1b5534013c4e7e019af2934fc64157367d0c004aad68f5b6d01
6
+ metadata.gz: 38b1cdb07c23ac73a838702f89ecb5239e341cc9df2220def0a414dea33c946fe258606c0b0ef88dce980675ee87ba75407c115456a91b370f50312fc0638247
7
+ data.tar.gz: 4c603a0b1fdb9fca7ee7c9dd02869f9d29df4e127b7ba65a939ec4f0c42087275aad6be0b16189de22034e56fa679947d4427ead5ff80ff94ca39f528e556c0a
@@ -2,29 +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
5
+ # This is inspired from Arel::SelectManager, a subclass of Arel::TreeManager
6
+ # just like Arel::UpdateManager and Arel::DeleteManager.
7
+ def where_sql(engine = ::Arel::Table.engine)
8
+ return if @ast.wheres.empty?
7
9
 
8
- # This is from Arel::SelectManager which inherits from Arel::TreeManager.
9
- # 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)
11
- return if @ctx.wheres.empty?
12
-
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
27
- ::Arel::Nodes::SqlLiteral.new viz.accept(@ctx, ::Arel::Collectors::SQLString.new).value
10
+ ::Arel::Nodes::SqlLiteral.new("WHERE #{::Arel::Nodes::And.new(@ast.wheres).to_sql(engine)}")
28
11
  end
29
12
  end
30
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.1.0'
3
3
  end
data/lib/arsi.rb CHANGED
@@ -6,9 +6,10 @@ 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::UpdateManager.include(ArelTreeManager)
10
+ Arel::DeleteManager.include(ArelTreeManager)
11
+ ActiveRecord::ConnectionAdapters::Mysql2Adapter.prepend(Mysql2Adapter)
12
+ ActiveRecord::Relation.prepend(Relation)
12
13
  ActiveRecord::Querying.delegate(:without_arsi, :to => :relation)
13
14
 
14
15
  @enabled = true
@@ -24,15 +25,12 @@ module Arsi
24
25
  attr_reader :enabled
25
26
  attr_accessor :violation_callback
26
27
 
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
28
  def arel_check!(arel, relation)
34
29
  return unless @enabled
35
- sql = arel.respond_to?(:ast) ? arel.where_sql : arel.to_s
30
+ return if relation && relation.without_arsi?
31
+
32
+ # ::Arel::TreeManager, String, nil or ... ?
33
+ sql = arel.respond_to?(:where_sql) ? arel_where_sql(arel, relation) : arel.to_s
36
34
  sql_check!(sql, relation)
37
35
  end
38
36
 
@@ -54,6 +52,18 @@ module Arsi
54
52
 
55
53
  private
56
54
 
55
+ def arel_where_sql(arel, relation)
56
+ return arel.where_sql if relation.nil?
57
+ return arel.where_sql unless relation.model.respond_to?(:arel_engine)
58
+
59
+ arel.where_sql(relation.model.arel_engine)
60
+ end
61
+
62
+ def sql_check!(sql, relation)
63
+ return if SQL_MATCHER.match?(sql)
64
+ report_violation(sql, relation)
65
+ end
66
+
57
67
  def run_with_arsi(with_arsi)
58
68
  previous, @enabled = @enabled, with_arsi
59
69
  yield
metadata CHANGED
@@ -1,29 +1,15 @@
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.1.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-09-15 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: arel
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: '0'
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- version: '0'
27
13
  - !ruby/object:Gem::Dependency
28
14
  name: mysql2
29
15
  requirement: !ruby/object:Gem::Requirement
@@ -47,7 +33,7 @@ dependencies:
47
33
  version: 5.0.0
48
34
  - - "<"
49
35
  - !ruby/object:Gem::Version
50
- version: '6.0'
36
+ version: '7.1'
51
37
  type: :runtime
52
38
  prerelease: false
53
39
  version_requirements: !ruby/object:Gem::Requirement
@@ -57,7 +43,7 @@ dependencies:
57
43
  version: 5.0.0
58
44
  - - "<"
59
45
  - !ruby/object:Gem::Version
60
- version: '6.0'
46
+ version: '7.1'
61
47
  - !ruby/object:Gem::Dependency
62
48
  name: bump
63
49
  requirement: !ruby/object:Gem::Requirement
@@ -87,21 +73,7 @@ dependencies:
87
73
  - !ruby/object:Gem::Version
88
74
  version: '0'
89
75
  - !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
76
+ name: maxitest
105
77
  requirement: !ruby/object:Gem::Requirement
106
78
  requirements:
107
79
  - - ">="
@@ -167,14 +139,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
167
139
  requirements:
168
140
  - - ">="
169
141
  - !ruby/object:Gem::Version
170
- version: '0'
142
+ version: 2.5.0
171
143
  required_rubygems_version: !ruby/object:Gem::Requirement
172
144
  requirements:
173
145
  - - ">="
174
146
  - !ruby/object:Gem::Version
175
147
  version: '0'
176
148
  requirements: []
177
- rubygems_version: 3.3.8
149
+ rubygems_version: 3.3.5
178
150
  signing_key:
179
151
  specification_version: 4
180
152
  summary: ActiveRecord SQL Inspector