adaptive_alias 0.2.4 → 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/.rubocop.yml +2 -2
- data/CHANGELOG.md +3 -0
- data/lib/adaptive_alias/active_model_patches/write_attribute.rb +1 -0
- data/lib/adaptive_alias/hooks/active_record_core.rb +18 -0
- data/lib/adaptive_alias/patches/base.rb +26 -5
- data/lib/adaptive_alias/version.rb +1 -1
- data/lib/adaptive_alias.rb +1 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f5938ea6d66ddde37c2f28e252297844a422d3431b37105c54b2246244880971
|
4
|
+
data.tar.gz: ad5e44e57886b67db5eaacc898a910b5b916d194e8eca3ad821851f9b9c4a35e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2ed9da0a54fea620f1d31ebb8c6c15b11591eb5b34d96e21f699dd1c3c0acb64a9415ca224388688b8f6af1871f775b197a4876bf54e4abd24a59ec6ec154922
|
7
|
+
data.tar.gz: bcc8815527922cfb226c7ea8c718f25ed9d2f8cd029b0666ec567c9a2fb2ce3414596cbfc39e146d817be7ee8b2f36dfa6a304267ad60cb903ac3dc54706321e
|
data/.rubocop.yml
CHANGED
@@ -222,9 +222,9 @@ Metrics/CyclomaticComplexity:
|
|
222
222
|
Enabled: true
|
223
223
|
|
224
224
|
Layout/LineLength:
|
225
|
-
Description: 'Limit lines to
|
225
|
+
Description: 'Limit lines to 180 characters.'
|
226
226
|
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#80-character-limits'
|
227
|
-
Max:
|
227
|
+
Max: 180
|
228
228
|
Enabled: true
|
229
229
|
Exclude:
|
230
230
|
- 'config/locales/**'
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,8 @@
|
|
1
1
|
## Change Log
|
2
2
|
|
3
|
+
### [v0.2.4](https://github.com/khiav223577/adaptive_alias/compare/v0.2.3...v0.2.4) 2022/08/18
|
4
|
+
- [#18](https://github.com/khiav223577/adaptive_alias/pull/18) [Fix] get model from a relation with join will not generate right query (after migration) (@khiav223577)
|
5
|
+
|
3
6
|
### [v0.2.3](https://github.com/khiav223577/adaptive_alias/compare/v0.2.2...v0.2.3) 2022/08/17
|
4
7
|
- [#17](https://github.com/khiav223577/adaptive_alias/pull/17) [Feature] Support joins (@khiav223577)
|
5
8
|
- [#16](https://github.com/khiav223577/adaptive_alias/pull/16) [Enhance] No need to clone node (@khiav223577)
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module AdaptiveAlias
|
2
|
+
module Hooks
|
3
|
+
module ActiveRecordCore
|
4
|
+
def find(*)
|
5
|
+
AdaptiveAlias.rescue_statement_invalid(nil, nil){ super }
|
6
|
+
end
|
7
|
+
|
8
|
+
def find_by(*)
|
9
|
+
AdaptiveAlias.rescue_statement_invalid(nil, nil){ super }
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
# Nested module include is not supported until ruby 3.0
|
16
|
+
class << ActiveRecord::Base
|
17
|
+
prepend AdaptiveAlias::Hooks::ActiveRecordCore
|
18
|
+
end
|
@@ -47,6 +47,7 @@ module AdaptiveAlias
|
|
47
47
|
expected_association_err_msgs = [
|
48
48
|
"Mysql2::Error: Unknown column '#{klass.table_name}.#{current_column}' in 'where clause'".freeze,
|
49
49
|
"Mysql2::Error: Unknown column '#{klass.table_name}.#{current_column}' in 'on clause'".freeze,
|
50
|
+
"Mysql2::Error: Unknown column '#{klass.table_name}.#{current_column}' in 'field list'".freeze,
|
50
51
|
].freeze
|
51
52
|
|
52
53
|
expected_ambiguous_association_err_msgs = [
|
@@ -61,7 +62,7 @@ module AdaptiveAlias
|
|
61
62
|
@fix_missing_attribute = proc do |error_klass, error|
|
62
63
|
next false if not patch.removable
|
63
64
|
next false if patch.removed
|
64
|
-
next false if klass != error_klass
|
65
|
+
next false if klass.table_name != error_klass.table_name
|
65
66
|
next false if not expected_attribute_err_msgs.include?(error.message)
|
66
67
|
|
67
68
|
patch.remove!
|
@@ -90,8 +91,8 @@ module AdaptiveAlias
|
|
90
91
|
ambiguous = expected_ambiguous_association_err_msgs.include?(error.message)
|
91
92
|
|
92
93
|
if ambiguous
|
93
|
-
next false if relation and klass != relation.klass
|
94
|
-
next false if reflection and klass != reflection.klass
|
94
|
+
next false if relation and klass.table_name != relation.klass.table_name
|
95
|
+
next false if reflection and klass.table_name != reflection.klass.table_name
|
95
96
|
end
|
96
97
|
|
97
98
|
next false if not expected_association_err_msgs.include?(error.message) and not ambiguous
|
@@ -99,7 +100,14 @@ module AdaptiveAlias
|
|
99
100
|
patch.remove!
|
100
101
|
|
101
102
|
if relation
|
103
|
+
relation.reset # reset @arel
|
104
|
+
|
102
105
|
joins = relation.arel.source.right # @ctx.source.right << create_join(relation, nil, klass)
|
106
|
+
|
107
|
+
# adjust select fields
|
108
|
+
index = relation.select_values.index(current_column)
|
109
|
+
relation.select_values[index] = alias_column if index
|
110
|
+
|
103
111
|
fix_arel_nodes.call(joins.map{|s| s.right.expr })
|
104
112
|
fix_arel_nodes.call(relation.where_clause.send(:predicates))
|
105
113
|
end
|
@@ -119,8 +127,12 @@ module AdaptiveAlias
|
|
119
127
|
|
120
128
|
def remove!
|
121
129
|
@removed = true
|
122
|
-
|
123
|
-
@klass
|
130
|
+
|
131
|
+
reset_caches(@klass)
|
132
|
+
ActiveRecord::Base.descendants.each do |model_klass|
|
133
|
+
reset_caches(model_klass) if model_klass.table_name == @klass.table_name
|
134
|
+
end
|
135
|
+
|
124
136
|
@fix_association = nil
|
125
137
|
@fix_missing_attribute = nil
|
126
138
|
end
|
@@ -131,6 +143,15 @@ module AdaptiveAlias
|
|
131
143
|
|
132
144
|
private
|
133
145
|
|
146
|
+
def reset_caches(klass)
|
147
|
+
# We need to call reload_schema_from_cache (which is called in reset_column_information),
|
148
|
+
# in order to reset klass.attributes_builder which are initialized with outdated defaults.
|
149
|
+
# If not, it will not raise missing attributes error when we try to access the column which has already been renamed,
|
150
|
+
# and we will have no way to know the column has been renamed since no error is raised for us to rescue.
|
151
|
+
klass.reset_column_information
|
152
|
+
klass.columns_hash
|
153
|
+
end
|
154
|
+
|
134
155
|
def each_nodes(nodes, &block)
|
135
156
|
nodes.each do |node|
|
136
157
|
case node
|
data/lib/adaptive_alias.rb
CHANGED
@@ -13,6 +13,7 @@ require 'adaptive_alias/hooks/association'
|
|
13
13
|
require 'adaptive_alias/hooks/association_scope'
|
14
14
|
require 'adaptive_alias/hooks/singular_association'
|
15
15
|
require 'adaptive_alias/hooks/relation'
|
16
|
+
require 'adaptive_alias/hooks/active_record_core'
|
16
17
|
|
17
18
|
module AdaptiveAlias
|
18
19
|
@log_interval = 10 * 60
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: adaptive_alias
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- khiav reoy
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-09-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -128,6 +128,7 @@ files:
|
|
128
128
|
- lib/adaptive_alias/active_model_patches/read_attribute.rb
|
129
129
|
- lib/adaptive_alias/active_model_patches/remove_alias_attribute.rb
|
130
130
|
- lib/adaptive_alias/active_model_patches/write_attribute.rb
|
131
|
+
- lib/adaptive_alias/hooks/active_record_core.rb
|
131
132
|
- lib/adaptive_alias/hooks/association.rb
|
132
133
|
- lib/adaptive_alias/hooks/association_scope.rb
|
133
134
|
- lib/adaptive_alias/hooks/relation.rb
|