rails_lens 0.2.2 → 0.2.4
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/CHANGELOG.md +19 -0
- data/lib/rails_lens/analyzers/generated_columns.rb +1 -1
- data/lib/rails_lens/analyzers/notes.rb +114 -6
- data/lib/rails_lens/annotation_pipeline.rb +26 -21
- data/lib/rails_lens/connection.rb +4 -4
- data/lib/rails_lens/erd/visualizer.rb +50 -3
- data/lib/rails_lens/model_detector.rb +73 -0
- data/lib/rails_lens/providers/base.rb +1 -1
- data/lib/rails_lens/providers/extension_notes_provider.rb +3 -2
- data/lib/rails_lens/providers/extensions_provider.rb +1 -1
- data/lib/rails_lens/providers/index_notes_provider.rb +3 -2
- data/lib/rails_lens/providers/inheritance_provider.rb +1 -1
- data/lib/rails_lens/providers/notes_provider_base.rb +3 -2
- data/lib/rails_lens/providers/schema_provider.rb +10 -8
- data/lib/rails_lens/providers/section_provider_base.rb +1 -1
- data/lib/rails_lens/providers/view_notes_provider.rb +22 -0
- data/lib/rails_lens/providers/view_provider.rb +67 -0
- data/lib/rails_lens/schema/adapters/database_info.rb +2 -2
- data/lib/rails_lens/schema/adapters/mysql.rb +113 -1
- data/lib/rails_lens/schema/adapters/postgresql.rb +161 -1
- data/lib/rails_lens/schema/adapters/sqlite3.rb +114 -1
- data/lib/rails_lens/schema/annotation_manager.rb +90 -38
- data/lib/rails_lens/version.rb +1 -1
- data/lib/rails_lens/view_metadata.rb +98 -0
- metadata +4 -1
@@ -0,0 +1,98 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RailsLens
|
4
|
+
# Extracts and manages metadata for database views and materialized views
|
5
|
+
class ViewMetadata
|
6
|
+
attr_reader :model_class, :connection, :table_name
|
7
|
+
|
8
|
+
def initialize(model_class)
|
9
|
+
@model_class = model_class
|
10
|
+
@connection = model_class.connection
|
11
|
+
@table_name = model_class.table_name
|
12
|
+
@adapter_name = connection.adapter_name.downcase
|
13
|
+
@adapter = create_adapter
|
14
|
+
end
|
15
|
+
|
16
|
+
def view_type
|
17
|
+
return nil unless view_exists?
|
18
|
+
|
19
|
+
@adapter&.view_type
|
20
|
+
end
|
21
|
+
|
22
|
+
def view_exists?
|
23
|
+
ModelDetector.view_exists?(model_class)
|
24
|
+
end
|
25
|
+
|
26
|
+
def materialized_view?
|
27
|
+
view_type == 'materialized'
|
28
|
+
end
|
29
|
+
|
30
|
+
def regular_view?
|
31
|
+
view_type == 'regular'
|
32
|
+
end
|
33
|
+
|
34
|
+
def updatable?
|
35
|
+
return false unless view_exists?
|
36
|
+
|
37
|
+
@adapter&.view_updatable? || false
|
38
|
+
rescue ActiveRecord::StatementInvalid, ActiveRecord::ConnectionNotDefined
|
39
|
+
false
|
40
|
+
end
|
41
|
+
|
42
|
+
def dependencies
|
43
|
+
return [] unless view_exists?
|
44
|
+
|
45
|
+
@adapter&.view_dependencies || []
|
46
|
+
rescue ActiveRecord::StatementInvalid, ActiveRecord::ConnectionNotDefined
|
47
|
+
[]
|
48
|
+
end
|
49
|
+
|
50
|
+
def refresh_strategy
|
51
|
+
return nil unless materialized_view?
|
52
|
+
|
53
|
+
@adapter&.view_refresh_strategy
|
54
|
+
end
|
55
|
+
|
56
|
+
def last_refreshed
|
57
|
+
return nil unless materialized_view?
|
58
|
+
|
59
|
+
@adapter&.view_last_refreshed
|
60
|
+
rescue ActiveRecord::StatementInvalid, ActiveRecord::ConnectionNotDefined
|
61
|
+
nil
|
62
|
+
end
|
63
|
+
|
64
|
+
def view_definition
|
65
|
+
return nil unless view_exists?
|
66
|
+
|
67
|
+
@adapter&.view_definition
|
68
|
+
rescue ActiveRecord::StatementInvalid, ActiveRecord::ConnectionNotDefined
|
69
|
+
nil
|
70
|
+
end
|
71
|
+
|
72
|
+
def to_h
|
73
|
+
{
|
74
|
+
view_type: view_type,
|
75
|
+
updatable: updatable?,
|
76
|
+
dependencies: dependencies,
|
77
|
+
refresh_strategy: refresh_strategy,
|
78
|
+
last_refreshed: last_refreshed,
|
79
|
+
view_definition: view_definition
|
80
|
+
}.compact
|
81
|
+
end
|
82
|
+
|
83
|
+
private
|
84
|
+
|
85
|
+
def create_adapter
|
86
|
+
case @adapter_name
|
87
|
+
when 'postgresql'
|
88
|
+
Schema::Adapters::Postgresql.new(connection, table_name)
|
89
|
+
when 'mysql', 'mysql2'
|
90
|
+
Schema::Adapters::Mysql.new(connection, table_name)
|
91
|
+
when 'sqlite', 'sqlite3'
|
92
|
+
Schema::Adapters::Sqlite3.new(connection, table_name)
|
93
|
+
else
|
94
|
+
nil
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails_lens
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Abdelkader Boudih
|
@@ -219,6 +219,8 @@ files:
|
|
219
219
|
- lib/rails_lens/providers/performance_notes_provider.rb
|
220
220
|
- lib/rails_lens/providers/schema_provider.rb
|
221
221
|
- lib/rails_lens/providers/section_provider_base.rb
|
222
|
+
- lib/rails_lens/providers/view_notes_provider.rb
|
223
|
+
- lib/rails_lens/providers/view_provider.rb
|
222
224
|
- lib/rails_lens/railtie.rb
|
223
225
|
- lib/rails_lens/rake_bootstrapper.rb
|
224
226
|
- lib/rails_lens/route/annotator.rb
|
@@ -237,6 +239,7 @@ files:
|
|
237
239
|
- lib/rails_lens/tasks/routes.rake
|
238
240
|
- lib/rails_lens/tasks/schema.rake
|
239
241
|
- lib/rails_lens/version.rb
|
242
|
+
- lib/rails_lens/view_metadata.rb
|
240
243
|
homepage: https://github.com/seuros/rails_lens
|
241
244
|
licenses:
|
242
245
|
- MIT
|