rails_architect_analyzer 0.1.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 +7 -0
- data/.github/workflows/tests.yml +52 -0
- data/.gitignore +39 -0
- data/.rubocop.yml +51 -0
- data/CHANGELOG.md +66 -0
- data/CODE_OF_CONDUCT.md +41 -0
- data/CONTRIBUTING.md +534 -0
- data/EXAMPLE_GEMFILE +11 -0
- data/Gemfile +12 -0
- data/INDEX.md +192 -0
- data/LICENSE.md +21 -0
- data/README.md +270 -0
- data/Rakefile +15 -0
- data/exe/rails_architect +6 -0
- data/lib/rails_architect/analyzers/architecture_analyzer.rb +148 -0
- data/lib/rails_architect/analyzers/bdd_analyzer.rb +160 -0
- data/lib/rails_architect/analyzers/solid_analyzer.rb +239 -0
- data/lib/rails_architect/analyzers/tdd_analyzer.rb +138 -0
- data/lib/rails_architect/cli.rb +83 -0
- data/lib/rails_architect/reporters/report_generator.rb +212 -0
- data/lib/rails_architect/version.rb +5 -0
- data/lib/rails_architect.rb +53 -0
- data/rails_architect.gemspec +34 -0
- metadata +136 -0
data/CONTRIBUTING.md
ADDED
|
@@ -0,0 +1,534 @@
|
|
|
1
|
+
<!-- markdownlint-disable MD033 -->
|
|
2
|
+
<a href="https://github.com/danielmatos-pro/rails_architect">
|
|
3
|
+
<img alt="Rails Architect" src="https://img.shields.io/badge/Rails-Architect-blue?style=for-the-badge&logo=rails" />
|
|
4
|
+
</a>
|
|
5
|
+
<a href="https://github.com/danielmatos-pro/rails_architect/blob/main/LICENSE.md">
|
|
6
|
+
<img alt="License" src="https://img.shields.io/badge/license-MIT-green?style=for-the-badge" />
|
|
7
|
+
</a>
|
|
8
|
+
<a href="https://rubygems.org/gems/rails_architect">
|
|
9
|
+
<img alt="Gem Version" src="https://img.shields.io/gem/v/rails_architect?style=for-the-badge" />
|
|
10
|
+
</a>
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Rails Architect
|
|
15
|
+
|
|
16
|
+
🏗️ Uma gem Ruby para análise completa de projetos Rails com foco em **arquitetura**, **TDD**, **BDD** e **princípios SOLID**.
|
|
17
|
+
|
|
18
|
+
A Rails Architect analisa automaticamente a estrutura do seu projeto Rails e fornece sugestões detalhadas para melhorias em qualidade de código, cobertura de testes e aderência aos princípios SOLID.
|
|
19
|
+
|
|
20
|
+
## 📋 Tabela de Conteúdos
|
|
21
|
+
|
|
22
|
+
- [Características](#características)
|
|
23
|
+
- [Instalação](#instalação)
|
|
24
|
+
- [Uso](#uso)
|
|
25
|
+
- [O que é Analisado](#o-que-é-analisado)
|
|
26
|
+
- [Exemplos](#exemplos)
|
|
27
|
+
- [Padrões Recomendados](#padrões-recomendados)
|
|
28
|
+
- [Contribuindo](#contribuindo)
|
|
29
|
+
- [Licença](#licença)
|
|
30
|
+
|
|
31
|
+
## ✨ Características
|
|
32
|
+
|
|
33
|
+
- **📐 Análise de Arquitetura**: Verifica a estrutura padrão do Rails e recomenda padrões opcionais
|
|
34
|
+
- **🧪 Análise TDD**: Avalia cobertura de testes e sugere melhorias
|
|
35
|
+
- **🎯 Análise BDD**: Identifica funcionalidades BDD com Cucumber e RSpec
|
|
36
|
+
- **⚡ Análise SOLID**: Avalia cada princípio SOLID do seu código
|
|
37
|
+
- **💡 Sugestões Inteligentes**: Recomendações específicas e acionáveis para seu projeto
|
|
38
|
+
- **📊 Relatórios Detalhados**: Saída colorida em terminal e exportação em JSON
|
|
39
|
+
- **🔍 Detecção de Problemas**: Identifica "fat models", "fat controllers" e violações de SOLID
|
|
40
|
+
- **⚙️ CLI Completa**: Ferramenta de linha de comando intuitiva e poderosa
|
|
41
|
+
|
|
42
|
+
## 🚀 Instalação
|
|
43
|
+
|
|
44
|
+
### 1. Via Gemfile
|
|
45
|
+
|
|
46
|
+
Adicione à seu `Gemfile`:
|
|
47
|
+
|
|
48
|
+
```ruby
|
|
49
|
+
gem 'rails_architect'
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Execute:
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
bundle install
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### 2. Via Gem Manual
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
gem install rails_architect
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## 📖 Uso
|
|
65
|
+
|
|
66
|
+
### Linha de Comando
|
|
67
|
+
|
|
68
|
+
#### Analisar projeto atual
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
rails_architect analyze
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
#### Analisar um projeto específico
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
rails_architect analyze /caminho/para/seu/projeto
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
#### Obter sugestões de arquitetura
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
rails_architect suggest
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
#### Salvar relatório em JSON
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
rails_architect analyze --json --output report.json
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
#### Salvar relatório em arquivo de texto
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
rails_architect analyze --output report.txt
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### Dentro do Código Rails
|
|
99
|
+
|
|
100
|
+
```ruby
|
|
101
|
+
# Analisar projeto atual
|
|
102
|
+
results = RailsArchitect.analyze
|
|
103
|
+
|
|
104
|
+
# Analisar projeto específico
|
|
105
|
+
results = RailsArchitect.analyze('/caminho/para/seu/projeto')
|
|
106
|
+
|
|
107
|
+
# Acessar resultados específicos
|
|
108
|
+
puts results[:architecture][:score] # Score de arquitetura (0-100)
|
|
109
|
+
puts results[:tdd][:score][:score] # Score de cobertura TDD
|
|
110
|
+
puts results[:bdd][:score][:rating] # Rating de BDD
|
|
111
|
+
puts results[:solid][:score][:score] # Score SOLID (0-100)
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
## 📊 O que é Analisado?
|
|
115
|
+
|
|
116
|
+
### 📐 Análise de Arquitetura Rails
|
|
117
|
+
|
|
118
|
+
Verifica e recomenda:
|
|
119
|
+
|
|
120
|
+
- ✅ Estrutura padrão de diretórios (models, controllers, views, etc.)
|
|
121
|
+
- ✅ Padrões opcionais:
|
|
122
|
+
- Services (app/services)
|
|
123
|
+
- Decorators (app/decorators)
|
|
124
|
+
- Policies (app/policies)
|
|
125
|
+
- Presenters (app/presenters)
|
|
126
|
+
- Interactors (app/interactors)
|
|
127
|
+
- Concerns (app/concerns)
|
|
128
|
+
- Validators (app/validators)
|
|
129
|
+
- ⚠️ Detecção de "fat models" (modelos muito grandes)
|
|
130
|
+
- ⚠️ Detecção de "fat controllers" (controladores muito grandes)
|
|
131
|
+
- ⚠️ Qualidade de organização de helpers
|
|
132
|
+
|
|
133
|
+
### 🧪 Análise de TDD (Test-Driven Development)
|
|
134
|
+
|
|
135
|
+
Avalia:
|
|
136
|
+
|
|
137
|
+
- Cobertura de testes (modelo de estimativa)
|
|
138
|
+
- Número de testes por tipo:
|
|
139
|
+
- Testes de modelos
|
|
140
|
+
- Testes de controladores
|
|
141
|
+
- Testes de serviços
|
|
142
|
+
- Testes de helpers
|
|
143
|
+
- Testes de requisição
|
|
144
|
+
- Uso de RSpec vs Minitest
|
|
145
|
+
- Sugestões para melhorar cobertura
|
|
146
|
+
- Score de cobertura: 0-100%
|
|
147
|
+
|
|
148
|
+
### 🎯 Análise de BDD (Behavior-Driven Development)
|
|
149
|
+
|
|
150
|
+
Verifica:
|
|
151
|
+
|
|
152
|
+
- Presença de Cucumber
|
|
153
|
+
- Número de feature files e step definitions
|
|
154
|
+
- Análise de cenários legíveis (Given/When/Then)
|
|
155
|
+
- User stories estruturadas
|
|
156
|
+
- Testes de integração (request specs)
|
|
157
|
+
- Reusabilidade de steps
|
|
158
|
+
|
|
159
|
+
### ⚡ Análise de Princípios SOLID
|
|
160
|
+
|
|
161
|
+
Avalia cada um dos 5 princípios:
|
|
162
|
+
|
|
163
|
+
1. **S**ingle Responsibility Principle (SRP)
|
|
164
|
+
- Detecta classes com múltiplas responsabilidades
|
|
165
|
+
- Sugere extração de lógica em services
|
|
166
|
+
|
|
167
|
+
2. **O**pen/Closed Principle (OCP)
|
|
168
|
+
- Verifica uso de concerns e herança
|
|
169
|
+
- Incentiva extensibilidade sem modificação
|
|
170
|
+
|
|
171
|
+
3. **L**iskov Substitution Principle (LSP)
|
|
172
|
+
- Analisa cadeias de herança
|
|
173
|
+
- Detecta profundidade de herança excessiva
|
|
174
|
+
|
|
175
|
+
4. **I**nterface Segregation Principle (ISP)
|
|
176
|
+
- Detecta módulos e classes muito grandes
|
|
177
|
+
- Sugera segregação de interfaces
|
|
178
|
+
|
|
179
|
+
5. **D**ependency Inversion Principle (DIP)
|
|
180
|
+
- Avalia uso de service layer
|
|
181
|
+
- Recomenda injeção de dependência
|
|
182
|
+
|
|
183
|
+
**Score SOLID**: 0-100 pontos (20 pontos por princípio)
|
|
184
|
+
|
|
185
|
+
## 📈 Exemplo de Saída
|
|
186
|
+
|
|
187
|
+
```
|
|
188
|
+
================================================================================
|
|
189
|
+
🏗️ RAILS ARCHITECT - PROJECT ANALYSIS REPORT
|
|
190
|
+
================================================================================
|
|
191
|
+
|
|
192
|
+
📐 ARCHITECTURE ANALYSIS
|
|
193
|
+
────────────────────────────────────────────────────────────────────────────────
|
|
194
|
+
Overall Score: 65%
|
|
195
|
+
|
|
196
|
+
✓ Existing Directories (9/10):
|
|
197
|
+
✅ app/models (8 files)
|
|
198
|
+
✅ app/controllers (12 files)
|
|
199
|
+
✅ app/views (45 files)
|
|
200
|
+
✅ app/helpers (5 files)
|
|
201
|
+
✅ app/services (3 files)
|
|
202
|
+
✅ config (25 files)
|
|
203
|
+
✅ lib (8 files)
|
|
204
|
+
✅ spec (45 files)
|
|
205
|
+
❌ app/decorators
|
|
206
|
+
|
|
207
|
+
⚠️ Missing Important Directories:
|
|
208
|
+
• app/decorators
|
|
209
|
+
• app/policies
|
|
210
|
+
|
|
211
|
+
📦 Optional Patterns Available:
|
|
212
|
+
✅ Implemented - Service Objects (app/services)
|
|
213
|
+
❌ Not used - Decorator Pattern (app/decorators)
|
|
214
|
+
❌ Not used - Authorization Policies (app/policies)
|
|
215
|
+
|
|
216
|
+
💡 Suggestions:
|
|
217
|
+
• Consider creating 'app/decorators' directory for separating presentation logic
|
|
218
|
+
• Implement 'app/policies' directory for authorization logic
|
|
219
|
+
|
|
220
|
+
🧪 TEST-DRIVEN DEVELOPMENT (TDD) ANALYSIS
|
|
221
|
+
────────────────────────────────────────────────────────────────────────────────
|
|
222
|
+
Coverage Score: 65.5% ✅ Good
|
|
223
|
+
|
|
224
|
+
Test Files:
|
|
225
|
+
• Spec files: 48
|
|
226
|
+
• Test files: 0
|
|
227
|
+
• Total: 48
|
|
228
|
+
|
|
229
|
+
🎯 BEHAVIOR-DRIVEN DEVELOPMENT (BDD) ANALYSIS
|
|
230
|
+
────────────────────────────────────────────────────────────────────────────────
|
|
231
|
+
BDD Score: ✅ Some BDD coverage
|
|
232
|
+
|
|
233
|
+
Frameworks:
|
|
234
|
+
• Cucumber: ❌ Not installed
|
|
235
|
+
• RSpec: ✅ Installed
|
|
236
|
+
|
|
237
|
+
⚡ SOLID PRINCIPLES ANALYSIS
|
|
238
|
+
────────────────────────────────────────────────────────────────────────────────
|
|
239
|
+
SOLID Score: 72/100 ✅ Good
|
|
240
|
+
|
|
241
|
+
Principle Analysis:
|
|
242
|
+
|
|
243
|
+
1. Single Responsibility Principle (SRP)
|
|
244
|
+
Status: ✅ Good
|
|
245
|
+
|
|
246
|
+
2. Open/Closed Principle (OCP)
|
|
247
|
+
Status: ✅ Some patterns found
|
|
248
|
+
|
|
249
|
+
3. Liskov Substitution Principle (LSP)
|
|
250
|
+
Status: ✅ Good
|
|
251
|
+
|
|
252
|
+
...
|
|
253
|
+
|
|
254
|
+
📊 OVERALL SUMMARY
|
|
255
|
+
================================================================================
|
|
256
|
+
Architecture: 65%
|
|
257
|
+
TDD Coverage: 65.50% ✅ Good
|
|
258
|
+
BDD Practices: ✅ Some BDD coverage
|
|
259
|
+
SOLID Score: 72/100 ✅ Good
|
|
260
|
+
|
|
261
|
+
🚀 RECOMMENDATIONS FOR IMPROVEMENT
|
|
262
|
+
================================================================================
|
|
263
|
+
|
|
264
|
+
1. Consider creating 'app/decorators' directory
|
|
265
|
+
2. ⚠️ Detected fat models. Consider extracting logic to services
|
|
266
|
+
3. Add model specs/tests to ensure data validation logic
|
|
267
|
+
4. Consider using Cucumber for BDD with human-readable scenarios
|
|
268
|
+
...
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
## 💡 Padrões Recomendados
|
|
272
|
+
|
|
273
|
+
### 1. Services (app/services)
|
|
274
|
+
|
|
275
|
+
Encapsule lógica de negócio complexa:
|
|
276
|
+
|
|
277
|
+
```ruby
|
|
278
|
+
# app/services/user_creator.rb
|
|
279
|
+
class UserCreator
|
|
280
|
+
def initialize(user_params)
|
|
281
|
+
@user_params = user_params
|
|
282
|
+
end
|
|
283
|
+
|
|
284
|
+
def call
|
|
285
|
+
User.create!(@user_params)
|
|
286
|
+
end
|
|
287
|
+
end
|
|
288
|
+
|
|
289
|
+
# Uso
|
|
290
|
+
UserCreator.new(params).call
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
### 2. Decorators (app/decorators)
|
|
294
|
+
|
|
295
|
+
Separe lógica de apresentação dos modelos:
|
|
296
|
+
|
|
297
|
+
```ruby
|
|
298
|
+
# app/decorators/user_decorator.rb
|
|
299
|
+
class UserDecorator
|
|
300
|
+
def initialize(user)
|
|
301
|
+
@user = user
|
|
302
|
+
end
|
|
303
|
+
|
|
304
|
+
def full_name_with_email
|
|
305
|
+
"#{@user.full_name} <#{@user.email}>"
|
|
306
|
+
end
|
|
307
|
+
|
|
308
|
+
def formatted_created_at
|
|
309
|
+
@user.created_at.strftime('%d/%m/%Y')
|
|
310
|
+
end
|
|
311
|
+
end
|
|
312
|
+
|
|
313
|
+
# Uso em views
|
|
314
|
+
<%= UserDecorator.new(@user).full_name_with_email %>
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
### 3. Concerns (app/concerns)
|
|
318
|
+
|
|
319
|
+
Compartilhe comportamentos entre modelos:
|
|
320
|
+
|
|
321
|
+
```ruby
|
|
322
|
+
# app/concerns/timestampable.rb
|
|
323
|
+
module Timestampable
|
|
324
|
+
extend ActiveSupport::Concern
|
|
325
|
+
|
|
326
|
+
included do
|
|
327
|
+
before_save :update_timestamps
|
|
328
|
+
end
|
|
329
|
+
|
|
330
|
+
def update_timestamps
|
|
331
|
+
self.updated_at = Time.current
|
|
332
|
+
end
|
|
333
|
+
end
|
|
334
|
+
|
|
335
|
+
# Uso
|
|
336
|
+
class Post < ApplicationRecord
|
|
337
|
+
include Timestampable
|
|
338
|
+
end
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
### 4. Policies (app/policies)
|
|
342
|
+
|
|
343
|
+
Use Pundit para autorização:
|
|
344
|
+
|
|
345
|
+
```ruby
|
|
346
|
+
# app/policies/post_policy.rb
|
|
347
|
+
class PostPolicy
|
|
348
|
+
attr_reader :user, :post
|
|
349
|
+
|
|
350
|
+
def initialize(user, post)
|
|
351
|
+
@user = user
|
|
352
|
+
@post = post
|
|
353
|
+
end
|
|
354
|
+
|
|
355
|
+
def update?
|
|
356
|
+
@user == @post.author
|
|
357
|
+
end
|
|
358
|
+
|
|
359
|
+
def destroy?
|
|
360
|
+
@user == @post.author || @user.admin?
|
|
361
|
+
end
|
|
362
|
+
end
|
|
363
|
+
|
|
364
|
+
# Uso no controller
|
|
365
|
+
authorize @post, :update?
|
|
366
|
+
```
|
|
367
|
+
|
|
368
|
+
### 5. Presenters (app/presenters)
|
|
369
|
+
|
|
370
|
+
Prepare dados para a camada de apresentação:
|
|
371
|
+
|
|
372
|
+
```ruby
|
|
373
|
+
# app/presenters/dashboard_presenter.rb
|
|
374
|
+
class DashboardPresenter
|
|
375
|
+
def initialize(user)
|
|
376
|
+
@user = user
|
|
377
|
+
end
|
|
378
|
+
|
|
379
|
+
def total_posts
|
|
380
|
+
@user.posts.count
|
|
381
|
+
end
|
|
382
|
+
|
|
383
|
+
def recent_posts
|
|
384
|
+
@user.posts.recent.limit(5)
|
|
385
|
+
end
|
|
386
|
+
|
|
387
|
+
def stats
|
|
388
|
+
{
|
|
389
|
+
posts: total_posts,
|
|
390
|
+
comments: @user.comments.count
|
|
391
|
+
}
|
|
392
|
+
end
|
|
393
|
+
end
|
|
394
|
+
|
|
395
|
+
# Uso no controller
|
|
396
|
+
@dashboard = DashboardPresenter.new(current_user)
|
|
397
|
+
```
|
|
398
|
+
|
|
399
|
+
## 🧪 Testes
|
|
400
|
+
|
|
401
|
+
Execute os testes da gem:
|
|
402
|
+
|
|
403
|
+
```bash
|
|
404
|
+
cd rails_architect
|
|
405
|
+
bundle install
|
|
406
|
+
rake spec
|
|
407
|
+
```
|
|
408
|
+
|
|
409
|
+
## 🔄 Desenvolvimento
|
|
410
|
+
|
|
411
|
+
### Setup
|
|
412
|
+
|
|
413
|
+
```bash
|
|
414
|
+
git clone https://github.com/daniel8486/rails_architect.git
|
|
415
|
+
cd rails_architect
|
|
416
|
+
bundle install
|
|
417
|
+
```
|
|
418
|
+
|
|
419
|
+
### Testes
|
|
420
|
+
|
|
421
|
+
```bash
|
|
422
|
+
rake spec
|
|
423
|
+
```
|
|
424
|
+
|
|
425
|
+
### Console IRB
|
|
426
|
+
|
|
427
|
+
```bash
|
|
428
|
+
rake console
|
|
429
|
+
```
|
|
430
|
+
|
|
431
|
+
## 🤝 Contribuindo
|
|
432
|
+
|
|
433
|
+
Contribuições são muito bem-vindas! Para manter a qualidade:
|
|
434
|
+
|
|
435
|
+
1. Faça um fork do projeto
|
|
436
|
+
2. Crie uma branch para sua feature (`git checkout -b feature/AmazingFeature`)
|
|
437
|
+
3. Commit suas mudanças (`git commit -m 'Add some AmazingFeature'`)
|
|
438
|
+
4. Push para a branch (`git push origin feature/AmazingFeature`)
|
|
439
|
+
5. Abra um Pull Request
|
|
440
|
+
6. Certifique-se de que os testes passam
|
|
441
|
+
|
|
442
|
+
### Diretrizes
|
|
443
|
+
|
|
444
|
+
- Mantenha o código limpo e bem documentado
|
|
445
|
+
- Escreva testes para novas funcionalidades
|
|
446
|
+
- Siga o estilo de código do projeto
|
|
447
|
+
- Atualize a documentação conforme necessário
|
|
448
|
+
|
|
449
|
+
## 📋 Roadmap
|
|
450
|
+
|
|
451
|
+
- [ ] Análise de performance
|
|
452
|
+
- [ ] Detecção de code smells
|
|
453
|
+
- [ ] Sugestões de gems para padrões
|
|
454
|
+
- [ ] Integração com CI/CD (GitHub Actions, GitLab CI)
|
|
455
|
+
- [ ] Dashboard web interativo
|
|
456
|
+
- [ ] Comparação entre versões do projeto
|
|
457
|
+
- [ ] Análise histórica de métricas
|
|
458
|
+
- [ ] Exportação em múltiplos formatos (PDF, HTML)
|
|
459
|
+
- [ ] Suporte a gems de qualidade (Rubocop, Brakeman)
|
|
460
|
+
|
|
461
|
+
## 📝 Changelog
|
|
462
|
+
|
|
463
|
+
### v0.1.0 (2025-12-08)
|
|
464
|
+
|
|
465
|
+
**Features:**
|
|
466
|
+
- ✨ Análise inicial de arquitetura Rails
|
|
467
|
+
- ✨ Análise de TDD com estimativa de cobertura
|
|
468
|
+
- ✨ Análise de BDD com Cucumber e RSpec
|
|
469
|
+
- ✨ Análise de princípios SOLID
|
|
470
|
+
- ✨ CLI completa com múltiplas opções de saída
|
|
471
|
+
- ✨ Relatórios detalhados e coloridos em terminal
|
|
472
|
+
- ✨ Exportação em JSON
|
|
473
|
+
|
|
474
|
+
**Bugfixes:**
|
|
475
|
+
- 🐛 Correções iniciais
|
|
476
|
+
|
|
477
|
+
## 📄 Licença
|
|
478
|
+
|
|
479
|
+
MIT License - veja [LICENSE.md](LICENSE.md) para detalhes completos
|
|
480
|
+
|
|
481
|
+
```
|
|
482
|
+
Copyright (c) 2025 Daniel Matos
|
|
483
|
+
|
|
484
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
485
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
486
|
+
in the Software without restriction, including without limitation the rights
|
|
487
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
488
|
+
copies of the Software.
|
|
489
|
+
```
|
|
490
|
+
|
|
491
|
+
## 🙋 Suporte
|
|
492
|
+
|
|
493
|
+
### Issues
|
|
494
|
+
|
|
495
|
+
Para reportar bugs ou sugerir features, abra uma issue no [GitHub Issues](https://github.com/daniel8486/rails_architect/issues).
|
|
496
|
+
|
|
497
|
+
### Discussões
|
|
498
|
+
|
|
499
|
+
Tenha dúvidas? Inicie uma discussão no [GitHub Discussions](https://github.com/daniel8486/rails_architect/discussions).
|
|
500
|
+
|
|
501
|
+
## 👨💻 Autor
|
|
502
|
+
|
|
503
|
+
**Daniel Matos**
|
|
504
|
+
- GitHub: [@daniel8486](https://github.com/daniel8486)
|
|
505
|
+
- Email: eu@danieldjam.dev.br | danielmatos404@gmail.com
|
|
506
|
+
|
|
507
|
+
## 🙏 Agradecimentos
|
|
508
|
+
|
|
509
|
+
- Comunidade Rails por melhores práticas
|
|
510
|
+
- Inspiração em ferramentas de análise como RuboCop, Brakeman e Flay
|
|
511
|
+
- Todos os contribuidores que ajudam a melhorar a gem
|
|
512
|
+
|
|
513
|
+
## 📚 Referências e Leitura Recomendada
|
|
514
|
+
|
|
515
|
+
- [Rails Guides - Active Record](https://guides.rubyonrails.org/active_record_basics.html)
|
|
516
|
+
- [SOLID Principles](https://en.wikipedia.org/wiki/SOLID)
|
|
517
|
+
- [RSpec Best Practices](https://rspec.info/)
|
|
518
|
+
- [Cucumber.io Documentation](https://cucumber.io/docs/gherkin/)
|
|
519
|
+
- [Clean Code by Robert C. Martin](https://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882)
|
|
520
|
+
- [Refactoring: Improving the Design of Existing Code](https://refactoring.com/)
|
|
521
|
+
|
|
522
|
+
---
|
|
523
|
+
|
|
524
|
+
<p align="center">
|
|
525
|
+
<strong>Feito com ❤️ para a comunidade Rails</strong>
|
|
526
|
+
</p>
|
|
527
|
+
|
|
528
|
+
<p align="center">
|
|
529
|
+
<a href="https://github.com/daniel8486/rails_architect">⭐ Star no GitHub</a>
|
|
530
|
+
•
|
|
531
|
+
<a href="https://github.com/daniel8486/rails_architect/issues">🐛 Reportar Bug</a>
|
|
532
|
+
•
|
|
533
|
+
<a href="https://github.com/daniel8486/rails_architect/issues">💡 Sugerir Feature</a>
|
|
534
|
+
</p>
|
data/EXAMPLE_GEMFILE
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
source 'https://rubygems.org'
|
|
2
|
+
|
|
3
|
+
# This is an example Gemfile for a Rails project that uses rails_architect
|
|
4
|
+
# Install rails_architect to analyze your project
|
|
5
|
+
|
|
6
|
+
gem 'rails', '~> 7.0'
|
|
7
|
+
gem 'rails_architect', path: '../rails_architect' # or gem 'rails_architect' from rubygems
|
|
8
|
+
|
|
9
|
+
group :development do
|
|
10
|
+
gem 'rails_architect'
|
|
11
|
+
end
|
data/Gemfile
ADDED