rails_lens 0.0.0 → 0.2.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.
Files changed (81) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +23 -0
  3. data/LICENSE.txt +2 -2
  4. data/README.md +463 -9
  5. data/exe/rails_lens +25 -0
  6. data/lib/rails_lens/analyzers/association_analyzer.rb +111 -0
  7. data/lib/rails_lens/analyzers/base.rb +35 -0
  8. data/lib/rails_lens/analyzers/best_practices_analyzer.rb +114 -0
  9. data/lib/rails_lens/analyzers/column_analyzer.rb +97 -0
  10. data/lib/rails_lens/analyzers/composite_keys.rb +62 -0
  11. data/lib/rails_lens/analyzers/database_constraints.rb +35 -0
  12. data/lib/rails_lens/analyzers/delegated_types.rb +129 -0
  13. data/lib/rails_lens/analyzers/enums.rb +34 -0
  14. data/lib/rails_lens/analyzers/error_handling.rb +66 -0
  15. data/lib/rails_lens/analyzers/foreign_key_analyzer.rb +47 -0
  16. data/lib/rails_lens/analyzers/generated_columns.rb +56 -0
  17. data/lib/rails_lens/analyzers/index_analyzer.rb +128 -0
  18. data/lib/rails_lens/analyzers/inheritance.rb +212 -0
  19. data/lib/rails_lens/analyzers/notes.rb +325 -0
  20. data/lib/rails_lens/analyzers/performance_analyzer.rb +110 -0
  21. data/lib/rails_lens/annotation_pipeline.rb +87 -0
  22. data/lib/rails_lens/cli.rb +176 -0
  23. data/lib/rails_lens/cli_error_handler.rb +86 -0
  24. data/lib/rails_lens/commands.rb +164 -0
  25. data/lib/rails_lens/connection.rb +133 -0
  26. data/lib/rails_lens/erd/column_type_formatter.rb +32 -0
  27. data/lib/rails_lens/erd/domain_color_mapper.rb +40 -0
  28. data/lib/rails_lens/erd/mysql_column_type_formatter.rb +19 -0
  29. data/lib/rails_lens/erd/postgresql_column_type_formatter.rb +19 -0
  30. data/lib/rails_lens/erd/visualizer.rb +329 -0
  31. data/lib/rails_lens/errors.rb +78 -0
  32. data/lib/rails_lens/extension_loader.rb +261 -0
  33. data/lib/rails_lens/extensions/base.rb +194 -0
  34. data/lib/rails_lens/extensions/closure_tree_ext.rb +157 -0
  35. data/lib/rails_lens/file_insertion_helper.rb +168 -0
  36. data/lib/rails_lens/mailer/annotator.rb +226 -0
  37. data/lib/rails_lens/mailer/extractor.rb +201 -0
  38. data/lib/rails_lens/model_detector.rb +252 -0
  39. data/lib/rails_lens/parsers/class_info.rb +46 -0
  40. data/lib/rails_lens/parsers/module_info.rb +33 -0
  41. data/lib/rails_lens/parsers/parser_result.rb +55 -0
  42. data/lib/rails_lens/parsers/prism_parser.rb +90 -0
  43. data/lib/rails_lens/parsers.rb +10 -0
  44. data/lib/rails_lens/providers/association_notes_provider.rb +11 -0
  45. data/lib/rails_lens/providers/base.rb +37 -0
  46. data/lib/rails_lens/providers/best_practices_notes_provider.rb +11 -0
  47. data/lib/rails_lens/providers/column_notes_provider.rb +11 -0
  48. data/lib/rails_lens/providers/composite_keys_provider.rb +11 -0
  49. data/lib/rails_lens/providers/database_constraints_provider.rb +11 -0
  50. data/lib/rails_lens/providers/delegated_types_provider.rb +11 -0
  51. data/lib/rails_lens/providers/enums_provider.rb +11 -0
  52. data/lib/rails_lens/providers/extension_notes_provider.rb +20 -0
  53. data/lib/rails_lens/providers/extensions_provider.rb +22 -0
  54. data/lib/rails_lens/providers/foreign_key_notes_provider.rb +11 -0
  55. data/lib/rails_lens/providers/generated_columns_provider.rb +11 -0
  56. data/lib/rails_lens/providers/index_notes_provider.rb +20 -0
  57. data/lib/rails_lens/providers/inheritance_provider.rb +23 -0
  58. data/lib/rails_lens/providers/notes_provider_base.rb +25 -0
  59. data/lib/rails_lens/providers/performance_notes_provider.rb +11 -0
  60. data/lib/rails_lens/providers/schema_provider.rb +61 -0
  61. data/lib/rails_lens/providers/section_provider_base.rb +28 -0
  62. data/lib/rails_lens/railtie.rb +17 -0
  63. data/lib/rails_lens/rake_bootstrapper.rb +18 -0
  64. data/lib/rails_lens/route/annotator.rb +268 -0
  65. data/lib/rails_lens/route/extractor.rb +133 -0
  66. data/lib/rails_lens/route/parser.rb +59 -0
  67. data/lib/rails_lens/schema/adapters/base.rb +345 -0
  68. data/lib/rails_lens/schema/adapters/database_info.rb +118 -0
  69. data/lib/rails_lens/schema/adapters/mysql.rb +279 -0
  70. data/lib/rails_lens/schema/adapters/postgresql.rb +197 -0
  71. data/lib/rails_lens/schema/adapters/sqlite3.rb +96 -0
  72. data/lib/rails_lens/schema/annotation.rb +144 -0
  73. data/lib/rails_lens/schema/annotation_manager.rb +202 -0
  74. data/lib/rails_lens/tasks/annotate.rake +35 -0
  75. data/lib/rails_lens/tasks/erd.rake +24 -0
  76. data/lib/rails_lens/tasks/mailers.rake +27 -0
  77. data/lib/rails_lens/tasks/routes.rake +27 -0
  78. data/lib/rails_lens/tasks/schema.rake +108 -0
  79. data/lib/rails_lens/version.rb +5 -0
  80. data/lib/rails_lens.rb +138 -5
  81. metadata +215 -11
data/lib/rails_lens.rb CHANGED
@@ -1,9 +1,142 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'zeitwerk'
4
+ require 'rails'
5
+ require 'active_record'
6
+ require 'active_support'
7
+ require 'active_support/configurable'
8
+ require 'thor'
9
+ require 'ostruct'
10
+
11
+ require_relative 'rails_lens/version'
12
+ require_relative 'rails_lens/railtie' if defined?(Rails::Railtie)
13
+
14
+ loader = Zeitwerk::Loader.for_gem
15
+ loader.ignore(File.join(__dir__, 'rails_lens/errors.rb'))
16
+ loader.ignore(File.join(__dir__, 'rails_lens/analyzers/error_handling.rb'))
17
+ loader.ignore(File.join(__dir__, 'rails_lens/cli.rb'))
18
+ loader.ignore(File.join(__dir__, 'rails_lens/commands.rb'))
19
+ loader.ignore(File.join(__dir__, 'rails_lens/cli_error_handler.rb'))
20
+ loader.inflector.inflect(
21
+ 'cli' => 'CLI',
22
+ 'erd' => 'ERD',
23
+ 'ast_file_modifier' => 'ASTFileModifier'
24
+ )
25
+ loader.setup
26
+
27
+ require_relative 'rails_lens/errors'
28
+ require_relative 'rails_lens/cli'
29
+
3
30
  module RailsLens
4
- VERSION = "0.0.0"
5
-
6
- def self.version
7
- VERSION
31
+ include ActiveSupport::Configurable
32
+
33
+ # Add configuration for error handling
34
+ config_accessor :verbose, default: false
35
+ config_accessor :debug, default: false
36
+ config_accessor :raise_on_error, default: false
37
+
38
+ # Configuration using ActiveSupport::Configurable
39
+ config_accessor :annotations do
40
+ {
41
+ position: :before,
42
+ format: :rdoc
43
+ }
44
+ end
45
+
46
+ config_accessor :erd do
47
+ {
48
+ output_dir: 'doc/erd',
49
+ orientation: 'TB',
50
+ theme: true,
51
+ default_colors: %w[
52
+ lightblue
53
+ lightcoral
54
+ lightgreen
55
+ lightyellow
56
+ plum
57
+ lightcyan
58
+ lightgray
59
+ ]
60
+ }
61
+ end
62
+
63
+ config_accessor :schema do
64
+ {
65
+ adapter: :auto,
66
+ include_notes: true,
67
+ exclude_tables: %w[schema_migrations ar_internal_metadata],
68
+ format_options: {
69
+ show_defaults: true,
70
+ show_comments: true,
71
+ show_foreign_keys: true,
72
+ show_indexes: true,
73
+ show_check_constraints: true
74
+ }
75
+ }
76
+ end
77
+
78
+ config_accessor :extensions do
79
+ {
80
+ enabled: true,
81
+ autoload: true,
82
+ interface_version: '1.0',
83
+ ignore: [],
84
+ custom_paths: [],
85
+ error_reporting: :warn, # :silent, :warn, :verbose
86
+ fail_safe_mode: true, # Continue processing if extensions fail
87
+ track_health: false # Track extension success/failure rates
88
+ }
89
+ end
90
+
91
+ config_accessor :routes do
92
+ {
93
+ enabled: true,
94
+ include_defaults: true,
95
+ include_constraints: true,
96
+ pattern: '**/*_controller.rb',
97
+ exclusion_pattern: 'vendor/**/*_controller.rb'
98
+ }
99
+ end
100
+
101
+ config_accessor :mailers do
102
+ {
103
+ enabled: true,
104
+ include_templates: true,
105
+ include_delivery_methods: true,
106
+ include_variables: true,
107
+ include_locales: true,
108
+ include_defaults: true,
109
+ pattern: '**/*_mailer.rb',
110
+ exclusion_pattern: 'vendor/**/*_mailer.rb'
111
+ }
112
+ end
113
+
114
+ class << self
115
+ def load_config_file(path = '.rails-lens.yml')
116
+ return unless File.exist?(path)
117
+
118
+ yaml = YAML.load_file(path)
119
+
120
+ yaml.each do |section, settings|
121
+ next unless config.respond_to?("#{section}=")
122
+ next unless settings.is_a?(Hash)
123
+
124
+ current_value = config.send(section)
125
+ if current_value.is_a?(Hash)
126
+ config.send("#{section}=", current_value.merge(settings.symbolize_keys))
127
+ else
128
+ config.send("#{section}=", settings.symbolize_keys)
129
+ end
130
+ end
131
+ end
132
+
133
+ # Schema annotation methods
134
+ def annotate_models(options = {})
135
+ Schema::AnnotationManager.annotate_all(options)
136
+ end
137
+
138
+ def remove_annotations(options = {})
139
+ Schema::AnnotationManager.remove_all(options)
140
+ end
8
141
  end
9
- end
142
+ end
metadata CHANGED
@@ -1,39 +1,242 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails_lens
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
- - seuros
8
- bindir: bin
7
+ - Abdelkader Boudih
8
+ bindir: exe
9
9
  cert_chain: []
10
10
  date: 1980-01-02 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
- name: rails
13
+ name: activerecord
14
14
  requirement: !ruby/object:Gem::Requirement
15
15
  requirements:
16
16
  - - ">="
17
17
  - !ruby/object:Gem::Version
18
- version: '7.0'
18
+ version: 7.2.0
19
19
  type: :runtime
20
20
  prerelease: false
21
21
  version_requirements: !ruby/object:Gem::Requirement
22
22
  requirements:
23
23
  - - ">="
24
24
  - !ruby/object:Gem::Version
25
- version: '7.0'
26
- description: Rails Lens provides intelligent model annotations and ERD generation
27
- for Rails applications. This is a placeholder gem - full implementation coming soon.
25
+ version: 7.2.0
26
+ - !ruby/object:Gem::Dependency
27
+ name: railties
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 7.2.0
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: 7.2.0
40
+ - !ruby/object:Gem::Dependency
41
+ name: ostruct
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ type: :runtime
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ - !ruby/object:Gem::Dependency
55
+ name: thor
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '1.3'
61
+ type: :runtime
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '1.3'
68
+ - !ruby/object:Gem::Dependency
69
+ name: zeitwerk
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '2.7'
75
+ type: :runtime
76
+ prerelease: false
77
+ version_requirements: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '2.7'
82
+ - !ruby/object:Gem::Dependency
83
+ name: actionmailer
84
+ requirement: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: 7.2.0
89
+ type: :development
90
+ prerelease: false
91
+ version_requirements: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: 7.2.0
96
+ - !ruby/object:Gem::Dependency
97
+ name: dotenv
98
+ requirement: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: '3.0'
103
+ type: :development
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: '3.0'
110
+ - !ruby/object:Gem::Dependency
111
+ name: mysql2
112
+ requirement: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - "~>"
115
+ - !ruby/object:Gem::Version
116
+ version: '0.5'
117
+ type: :development
118
+ prerelease: false
119
+ version_requirements: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - "~>"
122
+ - !ruby/object:Gem::Version
123
+ version: '0.5'
124
+ - !ruby/object:Gem::Dependency
125
+ name: pg
126
+ requirement: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - "~>"
129
+ - !ruby/object:Gem::Version
130
+ version: '1.5'
131
+ type: :development
132
+ prerelease: false
133
+ version_requirements: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - "~>"
136
+ - !ruby/object:Gem::Version
137
+ version: '1.5'
138
+ - !ruby/object:Gem::Dependency
139
+ name: sqlite3
140
+ requirement: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - "~>"
143
+ - !ruby/object:Gem::Version
144
+ version: '2.0'
145
+ type: :development
146
+ prerelease: false
147
+ version_requirements: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - "~>"
150
+ - !ruby/object:Gem::Version
151
+ version: '2.0'
152
+ description: Rails Lens provides unified visualization and annotation for Rails 7.2+
153
+ applications, integrating ERD generation and model annotations.
28
154
  email:
29
155
  - terminale@gmail.com
30
- executables: []
156
+ executables:
157
+ - rails_lens
31
158
  extensions: []
32
159
  extra_rdoc_files: []
33
160
  files:
161
+ - CHANGELOG.md
34
162
  - LICENSE.txt
35
163
  - README.md
164
+ - exe/rails_lens
36
165
  - lib/rails_lens.rb
166
+ - lib/rails_lens/analyzers/association_analyzer.rb
167
+ - lib/rails_lens/analyzers/base.rb
168
+ - lib/rails_lens/analyzers/best_practices_analyzer.rb
169
+ - lib/rails_lens/analyzers/column_analyzer.rb
170
+ - lib/rails_lens/analyzers/composite_keys.rb
171
+ - lib/rails_lens/analyzers/database_constraints.rb
172
+ - lib/rails_lens/analyzers/delegated_types.rb
173
+ - lib/rails_lens/analyzers/enums.rb
174
+ - lib/rails_lens/analyzers/error_handling.rb
175
+ - lib/rails_lens/analyzers/foreign_key_analyzer.rb
176
+ - lib/rails_lens/analyzers/generated_columns.rb
177
+ - lib/rails_lens/analyzers/index_analyzer.rb
178
+ - lib/rails_lens/analyzers/inheritance.rb
179
+ - lib/rails_lens/analyzers/notes.rb
180
+ - lib/rails_lens/analyzers/performance_analyzer.rb
181
+ - lib/rails_lens/annotation_pipeline.rb
182
+ - lib/rails_lens/cli.rb
183
+ - lib/rails_lens/cli_error_handler.rb
184
+ - lib/rails_lens/commands.rb
185
+ - lib/rails_lens/connection.rb
186
+ - lib/rails_lens/erd/column_type_formatter.rb
187
+ - lib/rails_lens/erd/domain_color_mapper.rb
188
+ - lib/rails_lens/erd/mysql_column_type_formatter.rb
189
+ - lib/rails_lens/erd/postgresql_column_type_formatter.rb
190
+ - lib/rails_lens/erd/visualizer.rb
191
+ - lib/rails_lens/errors.rb
192
+ - lib/rails_lens/extension_loader.rb
193
+ - lib/rails_lens/extensions/base.rb
194
+ - lib/rails_lens/extensions/closure_tree_ext.rb
195
+ - lib/rails_lens/file_insertion_helper.rb
196
+ - lib/rails_lens/mailer/annotator.rb
197
+ - lib/rails_lens/mailer/extractor.rb
198
+ - lib/rails_lens/model_detector.rb
199
+ - lib/rails_lens/parsers.rb
200
+ - lib/rails_lens/parsers/class_info.rb
201
+ - lib/rails_lens/parsers/module_info.rb
202
+ - lib/rails_lens/parsers/parser_result.rb
203
+ - lib/rails_lens/parsers/prism_parser.rb
204
+ - lib/rails_lens/providers/association_notes_provider.rb
205
+ - lib/rails_lens/providers/base.rb
206
+ - lib/rails_lens/providers/best_practices_notes_provider.rb
207
+ - lib/rails_lens/providers/column_notes_provider.rb
208
+ - lib/rails_lens/providers/composite_keys_provider.rb
209
+ - lib/rails_lens/providers/database_constraints_provider.rb
210
+ - lib/rails_lens/providers/delegated_types_provider.rb
211
+ - lib/rails_lens/providers/enums_provider.rb
212
+ - lib/rails_lens/providers/extension_notes_provider.rb
213
+ - lib/rails_lens/providers/extensions_provider.rb
214
+ - lib/rails_lens/providers/foreign_key_notes_provider.rb
215
+ - lib/rails_lens/providers/generated_columns_provider.rb
216
+ - lib/rails_lens/providers/index_notes_provider.rb
217
+ - lib/rails_lens/providers/inheritance_provider.rb
218
+ - lib/rails_lens/providers/notes_provider_base.rb
219
+ - lib/rails_lens/providers/performance_notes_provider.rb
220
+ - lib/rails_lens/providers/schema_provider.rb
221
+ - lib/rails_lens/providers/section_provider_base.rb
222
+ - lib/rails_lens/railtie.rb
223
+ - lib/rails_lens/rake_bootstrapper.rb
224
+ - lib/rails_lens/route/annotator.rb
225
+ - lib/rails_lens/route/extractor.rb
226
+ - lib/rails_lens/route/parser.rb
227
+ - lib/rails_lens/schema/adapters/base.rb
228
+ - lib/rails_lens/schema/adapters/database_info.rb
229
+ - lib/rails_lens/schema/adapters/mysql.rb
230
+ - lib/rails_lens/schema/adapters/postgresql.rb
231
+ - lib/rails_lens/schema/adapters/sqlite3.rb
232
+ - lib/rails_lens/schema/annotation.rb
233
+ - lib/rails_lens/schema/annotation_manager.rb
234
+ - lib/rails_lens/tasks/annotate.rake
235
+ - lib/rails_lens/tasks/erd.rake
236
+ - lib/rails_lens/tasks/mailers.rake
237
+ - lib/rails_lens/tasks/routes.rake
238
+ - lib/rails_lens/tasks/schema.rake
239
+ - lib/rails_lens/version.rb
37
240
  homepage: https://github.com/seuros/rails_lens
38
241
  licenses:
39
242
  - MIT
@@ -41,6 +244,7 @@ metadata:
41
244
  homepage_uri: https://github.com/seuros/rails_lens
42
245
  source_code_uri: https://github.com/seuros/rails_lens
43
246
  changelog_uri: https://github.com/seuros/rails_lens/blob/main/CHANGELOG.md
247
+ rubygems_mfa_required: 'true'
44
248
  rdoc_options: []
45
249
  require_paths:
46
250
  - lib
@@ -48,7 +252,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
48
252
  requirements:
49
253
  - - ">="
50
254
  - !ruby/object:Gem::Version
51
- version: 3.0.0
255
+ version: 3.3.0
52
256
  required_rubygems_version: !ruby/object:Gem::Requirement
53
257
  requirements:
54
258
  - - ">="
@@ -57,5 +261,5 @@ required_rubygems_version: !ruby/object:Gem::Requirement
57
261
  requirements: []
58
262
  rubygems_version: 3.6.9
59
263
  specification_version: 4
60
- summary: Intelligent Rails model annotations and ERD generation
264
+ summary: Comprehensive Rails application visualization and annotation
61
265
  test_files: []