rails-architect 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/README.md +134 -0
- data/Rakefile +12 -0
- data/bin/rails-architect +15 -0
- data/lib/rails/architect/version.rb +7 -0
- data/lib/rails/architect.rb +10 -0
- data/sig/rails/architect.rbs +6 -0
- metadata +163 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 9eaba9e7a51319c2b9c17d2612aa8937ec9858e3c23cdd22f5293f35c7f0b691
|
|
4
|
+
data.tar.gz: ec11a0500475321f9941a4e266b77226b692a2eca508b27a9ea47930942ad2dc
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 7a59adc47f124695972d4fc830cffd2e188bdba523071b8e99d1f51e55c9dd30cec9c96c4d3482b872f886720dcb3a678e6952cb62dc5cf913eec787702bad51
|
|
7
|
+
data.tar.gz: 7ad650cf77b1aef49fb1cc7a84784ecf36394f48472231df1f68150a618cfa258f4b73856fe1294468386ee3fb42d23a8393193096eb90cc784f280aef02f912
|
data/README.md
ADDED
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
# RailsArchitect
|
|
2
|
+
|
|
3
|
+
A comprehensive architectural enforcement and code quality tool for Rails applications.
|
|
4
|
+
|
|
5
|
+
Rails Architect helps maintain clean Rails architecture by automatically detecting and preventing common anti-patterns, monitoring code complexity, enforcing test coverage, and providing architectural visualizations.
|
|
6
|
+
|
|
7
|
+
## Features
|
|
8
|
+
|
|
9
|
+
- **Architecture Pattern Enforcement**: Detects fat models, complex controllers, and suggests service objects
|
|
10
|
+
- **Code Complexity Monitoring**: Tracks method complexity and suggests refactoring
|
|
11
|
+
- **XP/Agile Integration**: Built-in checks for test coverage requirements and TDD patterns
|
|
12
|
+
- **Performance Alerts**: Detects N+1 queries and inefficient database operations
|
|
13
|
+
- **Architecture Visualization**: Generates dependency diagrams and service flow representations
|
|
14
|
+
|
|
15
|
+
## Installation
|
|
16
|
+
|
|
17
|
+
Add this line to your application's Gemfile:
|
|
18
|
+
|
|
19
|
+
```ruby
|
|
20
|
+
gem 'rails-architect'
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
And then execute:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
bundle install
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Or install it yourself as:
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
gem install rails-architect
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### Configuration
|
|
36
|
+
|
|
37
|
+
Create `config/rails_architect.yml` in your Rails app:
|
|
38
|
+
|
|
39
|
+
```yaml
|
|
40
|
+
defaults: &defaults
|
|
41
|
+
model_method_threshold: 10
|
|
42
|
+
controller_action_threshold: 5
|
|
43
|
+
method_complexity_threshold: 10
|
|
44
|
+
test_coverage_minimum: 80
|
|
45
|
+
|
|
46
|
+
development:
|
|
47
|
+
<<: *defaults
|
|
48
|
+
|
|
49
|
+
test:
|
|
50
|
+
<<: *defaults
|
|
51
|
+
|
|
52
|
+
production:
|
|
53
|
+
<<: *defaults
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### Bullet Integration
|
|
57
|
+
|
|
58
|
+
Add to your `Gemfile`:
|
|
59
|
+
|
|
60
|
+
```ruby
|
|
61
|
+
group :development do
|
|
62
|
+
gem 'bullet'
|
|
63
|
+
end
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
And configure in `config/environments/development.rb`:
|
|
67
|
+
|
|
68
|
+
```ruby
|
|
69
|
+
config.after_initialize do
|
|
70
|
+
Bullet.enable = true
|
|
71
|
+
Bullet.alert = true
|
|
72
|
+
Bullet.bullet_logger = true
|
|
73
|
+
Bullet.console = true
|
|
74
|
+
Bullet.rails_logger = true
|
|
75
|
+
end
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### Pre-commit Hook
|
|
79
|
+
|
|
80
|
+
Copy the hook to your git hooks:
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
cp $(bundle show rails-architect)/hooks/pre-commit .git/hooks/pre-commit
|
|
84
|
+
chmod +x .git/hooks/pre-commit
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## Usage
|
|
88
|
+
|
|
89
|
+
### Command Line
|
|
90
|
+
|
|
91
|
+
Run analysis on your Rails project:
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
rails-architect analyze # Run all checks
|
|
95
|
+
rails-architect visualize # Generate diagrams
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### Rake Tasks
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
rake rails_architect:analyze # Run all checks (fails on issues)
|
|
102
|
+
rake rails_architect:visualize # Generate visualizations
|
|
103
|
+
rake rails_architect:check_coverage # Check test coverage
|
|
104
|
+
rake rails_architect:check_performance # Run performance checks
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### Programmatic Usage
|
|
108
|
+
|
|
109
|
+
```ruby
|
|
110
|
+
require 'rails_architect'
|
|
111
|
+
|
|
112
|
+
# Analyze the codebase
|
|
113
|
+
issues = RailsArchitect.analyze
|
|
114
|
+
issues.each do |issue|
|
|
115
|
+
puts "#{issue[:type]}: #{issue[:message]} in #{issue[:file]}"
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
# Generate visualizations
|
|
119
|
+
RailsArchitect.visualize
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
## Development
|
|
123
|
+
|
|
124
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
|
125
|
+
|
|
126
|
+
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`.
|
|
127
|
+
|
|
128
|
+
## Contributing
|
|
129
|
+
|
|
130
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/samydghim/rails-architect.
|
|
131
|
+
|
|
132
|
+
## License
|
|
133
|
+
|
|
134
|
+
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
data/Rakefile
ADDED
data/bin/rails-architect
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
require 'rails_architect'
|
|
5
|
+
|
|
6
|
+
case ARGV[0]
|
|
7
|
+
when 'analyze', nil
|
|
8
|
+
issues = RailsArchitect.analyze
|
|
9
|
+
puts "Found #{issues.count} architectural issues:"
|
|
10
|
+
issues.each { |issue| puts "- #{issue[:message]}" }
|
|
11
|
+
when 'visualize'
|
|
12
|
+
RailsArchitect.visualize
|
|
13
|
+
else
|
|
14
|
+
puts "Usage: rails-architect [analyze|visualize]"
|
|
15
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: rails-architect
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.1.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Sami Dghim
|
|
8
|
+
bindir: bin
|
|
9
|
+
cert_chain: []
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
11
|
+
dependencies:
|
|
12
|
+
- !ruby/object:Gem::Dependency
|
|
13
|
+
name: rails
|
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
|
15
|
+
requirements:
|
|
16
|
+
- - ">="
|
|
17
|
+
- !ruby/object:Gem::Version
|
|
18
|
+
version: '5.0'
|
|
19
|
+
type: :runtime
|
|
20
|
+
prerelease: false
|
|
21
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
22
|
+
requirements:
|
|
23
|
+
- - ">="
|
|
24
|
+
- !ruby/object:Gem::Version
|
|
25
|
+
version: '5.0'
|
|
26
|
+
- !ruby/object:Gem::Dependency
|
|
27
|
+
name: parser
|
|
28
|
+
requirement: !ruby/object:Gem::Requirement
|
|
29
|
+
requirements:
|
|
30
|
+
- - "~>"
|
|
31
|
+
- !ruby/object:Gem::Version
|
|
32
|
+
version: '3.0'
|
|
33
|
+
type: :runtime
|
|
34
|
+
prerelease: false
|
|
35
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
36
|
+
requirements:
|
|
37
|
+
- - "~>"
|
|
38
|
+
- !ruby/object:Gem::Version
|
|
39
|
+
version: '3.0'
|
|
40
|
+
- !ruby/object:Gem::Dependency
|
|
41
|
+
name: ast
|
|
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: rainbow
|
|
56
|
+
requirement: !ruby/object:Gem::Requirement
|
|
57
|
+
requirements:
|
|
58
|
+
- - ">="
|
|
59
|
+
- !ruby/object:Gem::Version
|
|
60
|
+
version: '0'
|
|
61
|
+
type: :runtime
|
|
62
|
+
prerelease: false
|
|
63
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
64
|
+
requirements:
|
|
65
|
+
- - ">="
|
|
66
|
+
- !ruby/object:Gem::Version
|
|
67
|
+
version: '0'
|
|
68
|
+
- !ruby/object:Gem::Dependency
|
|
69
|
+
name: ruby-graphviz
|
|
70
|
+
requirement: !ruby/object:Gem::Requirement
|
|
71
|
+
requirements:
|
|
72
|
+
- - ">="
|
|
73
|
+
- !ruby/object:Gem::Version
|
|
74
|
+
version: '0'
|
|
75
|
+
type: :runtime
|
|
76
|
+
prerelease: false
|
|
77
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
78
|
+
requirements:
|
|
79
|
+
- - ">="
|
|
80
|
+
- !ruby/object:Gem::Version
|
|
81
|
+
version: '0'
|
|
82
|
+
- !ruby/object:Gem::Dependency
|
|
83
|
+
name: bullet
|
|
84
|
+
requirement: !ruby/object:Gem::Requirement
|
|
85
|
+
requirements:
|
|
86
|
+
- - "~>"
|
|
87
|
+
- !ruby/object:Gem::Version
|
|
88
|
+
version: '7.0'
|
|
89
|
+
type: :runtime
|
|
90
|
+
prerelease: false
|
|
91
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
92
|
+
requirements:
|
|
93
|
+
- - "~>"
|
|
94
|
+
- !ruby/object:Gem::Version
|
|
95
|
+
version: '7.0'
|
|
96
|
+
- !ruby/object:Gem::Dependency
|
|
97
|
+
name: yaml
|
|
98
|
+
requirement: !ruby/object:Gem::Requirement
|
|
99
|
+
requirements:
|
|
100
|
+
- - ">="
|
|
101
|
+
- !ruby/object:Gem::Version
|
|
102
|
+
version: '0'
|
|
103
|
+
type: :runtime
|
|
104
|
+
prerelease: false
|
|
105
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
106
|
+
requirements:
|
|
107
|
+
- - ">="
|
|
108
|
+
- !ruby/object:Gem::Version
|
|
109
|
+
version: '0'
|
|
110
|
+
- !ruby/object:Gem::Dependency
|
|
111
|
+
name: minitest
|
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
|
113
|
+
requirements:
|
|
114
|
+
- - "~>"
|
|
115
|
+
- !ruby/object:Gem::Version
|
|
116
|
+
version: '5.0'
|
|
117
|
+
type: :development
|
|
118
|
+
prerelease: false
|
|
119
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
120
|
+
requirements:
|
|
121
|
+
- - "~>"
|
|
122
|
+
- !ruby/object:Gem::Version
|
|
123
|
+
version: '5.0'
|
|
124
|
+
description: Rails Architect helps maintain clean Rails architecture by automatically
|
|
125
|
+
detecting and preventing common anti-patterns, monitoring code complexity, and providing
|
|
126
|
+
architectural visualizations.
|
|
127
|
+
email:
|
|
128
|
+
- samidghim@gmail.com
|
|
129
|
+
executables:
|
|
130
|
+
- rails-architect
|
|
131
|
+
extensions: []
|
|
132
|
+
extra_rdoc_files: []
|
|
133
|
+
files:
|
|
134
|
+
- README.md
|
|
135
|
+
- Rakefile
|
|
136
|
+
- bin/rails-architect
|
|
137
|
+
- lib/rails/architect.rb
|
|
138
|
+
- lib/rails/architect/version.rb
|
|
139
|
+
- sig/rails/architect.rbs
|
|
140
|
+
homepage: https://github.com/samydghim/rails-architect
|
|
141
|
+
licenses: []
|
|
142
|
+
metadata:
|
|
143
|
+
allowed_push_host: https://rubygems.org
|
|
144
|
+
homepage_uri: https://github.com/samydghim/rails-architect
|
|
145
|
+
source_code_uri: https://github.com/samydghim/rails-architect
|
|
146
|
+
rdoc_options: []
|
|
147
|
+
require_paths:
|
|
148
|
+
- lib
|
|
149
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
150
|
+
requirements:
|
|
151
|
+
- - ">="
|
|
152
|
+
- !ruby/object:Gem::Version
|
|
153
|
+
version: 2.7.0
|
|
154
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
155
|
+
requirements:
|
|
156
|
+
- - ">="
|
|
157
|
+
- !ruby/object:Gem::Version
|
|
158
|
+
version: '0'
|
|
159
|
+
requirements: []
|
|
160
|
+
rubygems_version: 3.6.9
|
|
161
|
+
specification_version: 4
|
|
162
|
+
summary: A comprehensive architectural enforcement and code quality tool for Rails
|
|
163
|
+
test_files: []
|