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.
@@ -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.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