adaptive_alias 0.0.1 → 0.0.2

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.
@@ -1,21 +1,21 @@
1
- module AdaptiveAlias
2
- module Hooks
3
- module Relation
4
- def pluck(*)
5
- AdaptiveAlias.rescue_statement_invalid(self){ super }
6
- end
7
-
8
- def select_all(*)
9
- AdaptiveAlias.rescue_statement_invalid(self){ super }
10
- end
11
-
12
- def exec_queries(*)
13
- AdaptiveAlias.rescue_statement_invalid(self){ super }
14
- end
15
- end
16
- end
17
- end
18
-
19
- class ActiveRecord::Relation
20
- prepend AdaptiveAlias::Hooks::Relation
21
- end
1
+ module AdaptiveAlias
2
+ module Hooks
3
+ module Relation
4
+ def pluck(*)
5
+ AdaptiveAlias.rescue_statement_invalid(self){ super }
6
+ end
7
+
8
+ def select_all(*)
9
+ AdaptiveAlias.rescue_statement_invalid(self){ super }
10
+ end
11
+
12
+ def exec_queries(*)
13
+ AdaptiveAlias.rescue_statement_invalid(self){ super }
14
+ end
15
+ end
16
+ end
17
+ end
18
+
19
+ class ActiveRecord::Relation
20
+ prepend AdaptiveAlias::Hooks::Relation
21
+ end
@@ -1,13 +1,13 @@
1
- module AdaptiveAlias
2
- module Hooks
3
- module SingularAssociation
4
- def reader(*)
5
- AdaptiveAlias.rescue_missing_attribute{ super }
6
- end
7
- end
8
- end
9
- end
10
-
11
- class ActiveRecord::Associations::SingularAssociation
12
- prepend AdaptiveAlias::Hooks::SingularAssociation
13
- end
1
+ module AdaptiveAlias
2
+ module Hooks
3
+ module SingularAssociation
4
+ def reader(*)
5
+ AdaptiveAlias.rescue_missing_attribute{ super }
6
+ end
7
+ end
8
+ end
9
+ end
10
+
11
+ class ActiveRecord::Associations::SingularAssociation
12
+ prepend AdaptiveAlias::Hooks::SingularAssociation
13
+ end
@@ -1,21 +1,21 @@
1
- # frozen_string_literal: true
2
-
3
- require 'adaptive_alias/patches/base'
4
-
5
- module AdaptiveAlias
6
- module Patches
7
- class BackPatch < Base
8
- def apply!
9
- AdaptiveAlias.current_patches[[@klass, @old_column, @new_column]] = self
10
- @klass.alias_attribute(@old_column, @new_column)
11
- add_hooks!(current_column: @new_column, alias_column: @old_column, log_warning: true)
12
- end
13
-
14
- def remove!
15
- super
16
- @klass.remove_alias_attribute(@old_column)
17
- ForwardPatch.new(@klass, @old_column, @new_column).apply!
18
- end
19
- end
20
- end
21
- end
1
+ # frozen_string_literal: true
2
+
3
+ require 'adaptive_alias/patches/base'
4
+
5
+ module AdaptiveAlias
6
+ module Patches
7
+ class BackwardPatch < Base
8
+ def apply!
9
+ AdaptiveAlias.current_patches[[@klass, @old_column, @new_column]] = self
10
+ @klass.alias_attribute(@old_column, @new_column)
11
+ add_hooks!(current_column: @new_column, alias_column: @old_column, log_warning: true)
12
+ end
13
+
14
+ def remove!
15
+ super
16
+ @klass.remove_alias_attribute(@old_column)
17
+ ForwardPatch.new(@klass, @old_column, @new_column).apply!
18
+ end
19
+ end
20
+ end
21
+ end
@@ -1,75 +1,75 @@
1
- # frozen_string_literal: true
2
-
3
- module AdaptiveAlias
4
- module Patches
5
- class Base
6
- attr_reader :fix_association
7
- attr_reader :fix_missing_attribute
8
- attr_reader :removed
9
-
10
- def initialize(klass, old_column, new_column)
11
- @klass = klass
12
- @old_column = old_column
13
- @new_column = new_column
14
- end
15
-
16
- def add_hooks!(current_column:, alias_column:, log_warning: false)
17
- patch = self
18
- old_column = @old_column
19
- new_column = @new_column
20
-
21
- AdaptiveAlias.get_or_create_model_module(@klass).instance_exec do
22
- remove_method(new_column) if method_defined?(new_column)
23
- define_method(new_column) do
24
- AdaptiveAlias.rescue_missing_attribute{ self[new_column] }
25
- end
26
-
27
- remove_method(old_column) if method_defined?(old_column)
28
- define_method(old_column) do
29
- patch.log_warning if log_warning
30
- AdaptiveAlias.rescue_missing_attribute{ self[old_column] }
31
- end
32
- end
33
-
34
- expected_error_message = "Mysql2::Error: Unknown column '#{@klass.table_name}.#{current_column}' in 'where clause'".freeze
35
-
36
- @fix_missing_attribute = proc do
37
- next false if patch.removed
38
-
39
- patch.remove!
40
- next true
41
- end
42
-
43
- @fix_association = proc do |target, error|
44
- next false if patch.removed || error.message != expected_error_message
45
-
46
- patch.remove!
47
-
48
- if target
49
- hash = target.where_values_hash
50
- hash[alias_column] = hash.delete(current_column) if hash.key?(current_column)
51
- target.instance_variable_set(:@arel, nil)
52
- target.unscope!(:where).where!(hash)
53
- end
54
-
55
- next true
56
- end
57
- end
58
-
59
- def log_warning
60
- if @prev_warning_time == nil || @prev_warning_time < AdaptiveAlias.log_interval.ago
61
- @prev_warning_time = Time.now
62
- AdaptiveAlias.unexpected_old_column_proc&.call
63
- end
64
- end
65
-
66
- def remove!
67
- @removed = true
68
- @klass.send(:reload_schema_from_cache)
69
- @klass.initialize_find_by_cache
70
- @fix_association = nil
71
- @fix_missing_attribute = nil
72
- end
73
- end
74
- end
75
- end
1
+ # frozen_string_literal: true
2
+
3
+ module AdaptiveAlias
4
+ module Patches
5
+ class Base
6
+ attr_reader :fix_association
7
+ attr_reader :fix_missing_attribute
8
+ attr_reader :removed
9
+
10
+ def initialize(klass, old_column, new_column)
11
+ @klass = klass
12
+ @old_column = old_column
13
+ @new_column = new_column
14
+ end
15
+
16
+ def add_hooks!(current_column:, alias_column:, log_warning: false)
17
+ patch = self
18
+ old_column = @old_column
19
+ new_column = @new_column
20
+
21
+ AdaptiveAlias.get_or_create_model_module(@klass).instance_exec do
22
+ remove_method(new_column) if method_defined?(new_column)
23
+ define_method(new_column) do
24
+ AdaptiveAlias.rescue_missing_attribute{ self[new_column] }
25
+ end
26
+
27
+ remove_method(old_column) if method_defined?(old_column)
28
+ define_method(old_column) do
29
+ patch.log_warning if log_warning
30
+ AdaptiveAlias.rescue_missing_attribute{ self[old_column] }
31
+ end
32
+ end
33
+
34
+ expected_error_message = "Mysql2::Error: Unknown column '#{@klass.table_name}.#{current_column}' in 'where clause'".freeze
35
+
36
+ @fix_missing_attribute = proc do
37
+ next false if patch.removed
38
+
39
+ patch.remove!
40
+ next true
41
+ end
42
+
43
+ @fix_association = proc do |target, error|
44
+ next false if patch.removed || error.message != expected_error_message
45
+
46
+ patch.remove!
47
+
48
+ if target
49
+ hash = target.where_values_hash
50
+ hash[alias_column] = hash.delete(current_column) if hash.key?(current_column)
51
+ target.instance_variable_set(:@arel, nil)
52
+ target.unscope!(:where).where!(hash)
53
+ end
54
+
55
+ next true
56
+ end
57
+ end
58
+
59
+ def log_warning
60
+ if @prev_warning_time == nil || @prev_warning_time < AdaptiveAlias.log_interval.ago
61
+ @prev_warning_time = Time.now
62
+ AdaptiveAlias.unexpected_old_column_proc&.call
63
+ end
64
+ end
65
+
66
+ def remove!
67
+ @removed = true
68
+ @klass.send(:reload_schema_from_cache)
69
+ @klass.initialize_find_by_cache
70
+ @fix_association = nil
71
+ @fix_missing_attribute = nil
72
+ end
73
+ end
74
+ end
75
+ end
@@ -1,21 +1,21 @@
1
- # frozen_string_literal: true
2
-
3
- require 'adaptive_alias/patches/base'
4
-
5
- module AdaptiveAlias
6
- module Patches
7
- class ForwardPatch < Base
8
- def apply!
9
- AdaptiveAlias.current_patches[[@klass, @old_column, @new_column]] = self
10
- @klass.alias_attribute(@new_column, @old_column)
11
- add_hooks!(current_column: @old_column, alias_column: @new_column)
12
- end
13
-
14
- def remove!
15
- super
16
- @klass.remove_alias_attribute(@new_column)
17
- BackPatch.new(@klass, @old_column, @new_column).apply!
18
- end
19
- end
20
- end
21
- end
1
+ # frozen_string_literal: true
2
+
3
+ require 'adaptive_alias/patches/base'
4
+
5
+ module AdaptiveAlias
6
+ module Patches
7
+ class ForwardPatch < Base
8
+ def apply!
9
+ AdaptiveAlias.current_patches[[@klass, @old_column, @new_column]] = self
10
+ @klass.alias_attribute(@new_column, @old_column)
11
+ add_hooks!(current_column: @old_column, alias_column: @new_column)
12
+ end
13
+
14
+ def remove!
15
+ super
16
+ @klass.remove_alias_attribute(@new_column)
17
+ BackwardPatch.new(@klass, @old_column, @new_column).apply!
18
+ end
19
+ end
20
+ end
21
+ end
@@ -1,3 +1,3 @@
1
- module AdaptiveAlias
2
- VERSION = '0.0.1'
3
- end
1
+ module AdaptiveAlias
2
+ VERSION = '0.0.2'
3
+ end
@@ -3,7 +3,7 @@
3
3
  require 'adaptive_alias/version'
4
4
  require 'adaptive_alias/active_model_patches/read_attribute'
5
5
  require 'adaptive_alias/active_model_patches/remove_alias_attribute'
6
- require 'adaptive_alias/patches/back_patch'
6
+ require 'adaptive_alias/patches/backward_patch'
7
7
  require 'adaptive_alias/patches/forward_patch'
8
8
 
9
9
  require 'adaptive_alias/hooks/association'
@@ -32,7 +32,7 @@ module AdaptiveAlias
32
32
 
33
33
  included do
34
34
  if column_names.include?(new_column)
35
- Patches::BackPatch.new(self, old_column, new_column).apply!
35
+ Patches::BackwardPatch.new(self, old_column, new_column).apply!
36
36
  else
37
37
  Patches::ForwardPatch.new(self, old_column, new_column).apply!
38
38
  end
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.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - khiav reoy
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-07-22 00:00:00.000000000 Z
11
+ date: 2022-07-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -73,19 +73,19 @@ dependencies:
73
73
  - !ruby/object:Gem::Version
74
74
  version: '5.0'
75
75
  - !ruby/object:Gem::Dependency
76
- name: backports
76
+ name: rails_compatibility
77
77
  requirement: !ruby/object:Gem::Requirement
78
78
  requirements:
79
- - - "~>"
79
+ - - ">="
80
80
  - !ruby/object:Gem::Version
81
- version: 3.15.0
81
+ version: 0.0.8
82
82
  type: :development
83
83
  prerelease: false
84
84
  version_requirements: !ruby/object:Gem::Requirement
85
85
  requirements:
86
- - - "~>"
86
+ - - ">="
87
87
  - !ruby/object:Gem::Version
88
- version: 3.15.0
88
+ version: 0.0.8
89
89
  - !ruby/object:Gem::Dependency
90
90
  name: activerecord
91
91
  requirement: !ruby/object:Gem::Requirement
@@ -100,20 +100,6 @@ dependencies:
100
100
  - - ">="
101
101
  - !ruby/object:Gem::Version
102
102
  version: '3'
103
- - !ruby/object:Gem::Dependency
104
- name: rails_compatibility
105
- requirement: !ruby/object:Gem::Requirement
106
- requirements:
107
- - - ">="
108
- - !ruby/object:Gem::Version
109
- version: 0.0.8
110
- type: :runtime
111
- prerelease: false
112
- version_requirements: !ruby/object:Gem::Requirement
113
- requirements:
114
- - - ">="
115
- - !ruby/object:Gem::Version
116
- version: 0.0.8
117
103
  description: Extend attribute_alias and make it be adaptive with realtime database
118
104
  schema
119
105
  email:
@@ -143,7 +129,7 @@ files:
143
129
  - lib/adaptive_alias/hooks/association_scope.rb
144
130
  - lib/adaptive_alias/hooks/relation.rb
145
131
  - lib/adaptive_alias/hooks/singular_association.rb
146
- - lib/adaptive_alias/patches/back_patch.rb
132
+ - lib/adaptive_alias/patches/backward_patch.rb
147
133
  - lib/adaptive_alias/patches/base.rb
148
134
  - lib/adaptive_alias/patches/forward_patch.rb
149
135
  - lib/adaptive_alias/version.rb
@@ -156,7 +142,7 @@ metadata:
156
142
  source_code_uri: https://github.com/khiav223577/adaptive_alias
157
143
  documentation_uri: https://www.rubydoc.info/gems/adaptive_alias
158
144
  bug_tracker_uri: https://github.com/khiav223577/adaptive_alias/issues
159
- post_install_message:
145
+ post_install_message:
160
146
  rdoc_options: []
161
147
  require_paths:
162
148
  - lib
@@ -171,8 +157,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
171
157
  - !ruby/object:Gem::Version
172
158
  version: '0'
173
159
  requirements: []
174
- rubygems_version: 3.2.14
175
- signing_key:
160
+ rubygems_version: 3.1.4
161
+ signing_key:
176
162
  specification_version: 4
177
163
  summary: Extend attribute_alias and make it be adaptive with realtime database schema
178
164
  test_files: []