rails_app 0.8.0 → 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +22 -0
- data/README.md +18 -14
- data/lib/rails_app/cli.rb +30 -22
- data/lib/rails_app/command.rb +32 -5
- data/lib/rails_app/options_data.rb +22 -5
- data/lib/rails_app/template/template.rb +1 -1
- data/lib/rails_app/version.rb +1 -1
- metadata +2 -3
- data/assets/screenshot_cli_useconfig.png +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 52a552ad38f9b0cd6267841541720a9f89db6000e68131eb8a34247f1a329fdc
|
4
|
+
data.tar.gz: 87e54f8b3f3a27327d426f14871e3ede7b5d7f5377a5ef54d586b77ec6953f99
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0ce7c421dd28e008f52caf74b520e8bb2aa57ca13e8d21f7b4dc5c0cc6ab8357d3ffad3a18dd8f65b7ae80339475664fcf23ff28d5fb8a4d838f165bbb9e0e71
|
7
|
+
data.tar.gz: 54409b3d01c1bd0a11f4ca01bcd8ba0f0d153192127ab262b2e2f9a4bfafb7046fd2f8df04b84d37ed4451d6858fdb1ee9451296a1a214628bd031499de3e42e
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,27 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## [0.9.0](https://github.com/eclectic-coding/rails_app/tree/0.9.0) (2024-04-09)
|
4
|
+
|
5
|
+
[Full Changelog](https://github.com/eclectic-coding/rails_app/compare/0.8.1...0.9.0)
|
6
|
+
|
7
|
+
**Implemented enhancements:**
|
8
|
+
|
9
|
+
- Add additional flags to CLI [\#26](https://github.com/eclectic-coding/rails_app/issues/26)
|
10
|
+
- Add additional flags to cli [\#30](https://github.com/eclectic-coding/rails_app/pull/30) ([eclectic-coding](https://github.com/eclectic-coding))
|
11
|
+
|
12
|
+
## [0.8.1](https://github.com/eclectic-coding/rails_app/tree/0.8.1) (2024-04-08)
|
13
|
+
|
14
|
+
[Full Changelog](https://github.com/eclectic-coding/rails_app/compare/0.8.0...0.8.1)
|
15
|
+
|
16
|
+
**Implemented enhancements:**
|
17
|
+
|
18
|
+
- Read users existing .railsrc for preferences [\#1](https://github.com/eclectic-coding/rails_app/issues/1)
|
19
|
+
|
20
|
+
**Fixed bugs:**
|
21
|
+
|
22
|
+
- CLI Menu should be bypassed when using saved configuration [\#28](https://github.com/eclectic-coding/rails_app/issues/28)
|
23
|
+
- CLI menu should be bypassed when using saved configuration [\#29](https://github.com/eclectic-coding/rails_app/pull/29) ([eclectic-coding](https://github.com/eclectic-coding))
|
24
|
+
|
3
25
|
## [0.8.0](https://github.com/eclectic-coding/rails_app/tree/0.8.0) (2024-04-05)
|
4
26
|
|
5
27
|
[Full Changelog](https://github.com/eclectic-coding/rails_app/compare/0.7.0...0.8.0)
|
data/README.md
CHANGED
@@ -38,7 +38,7 @@ There is an additional syntax, available starting with release `v. 0.7.0`, which
|
|
38
38
|
|
39
39
|
|
40
40
|
```bash
|
41
|
-
rails_app
|
41
|
+
rails_app my_app -a propshaft --css bootstrap -d postgresql
|
42
42
|
```
|
43
43
|
I few things to note:
|
44
44
|
- the `app_name` must be first, just like with `rails new`
|
@@ -60,18 +60,14 @@ If a file has been previously saved, you will be prompted if you want to use:
|
|
60
60
|
![](assets/screenshot_cli_readconfig.png)
|
61
61
|
|
62
62
|
|
63
|
-
|
64
|
-
![](assets/screenshot_cli_useconfig.png)
|
63
|
+
The CLI menu will then be bypassed and the application with be created with your presets.
|
65
64
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
- Webmock
|
71
|
-
- VCR
|
72
|
-
- Simplecov
|
65
|
+
# Features
|
66
|
+
|
67
|
+
## Authentication
|
68
|
+
documentation coming soon
|
73
69
|
|
74
|
-
|
70
|
+
## Code Quality Tools
|
75
71
|
The template includes the following code quality tools:
|
76
72
|
- Rubocop using the `rubocop-rails-omakase` gem with a few custom settings in a provided `.rubocop.yml`
|
77
73
|
- Brakeman for security scanning
|
@@ -80,10 +76,18 @@ The template includes the following code quality tools:
|
|
80
76
|
All of this tools can be run using the following command, which also will run the test suite: `bin/ci`
|
81
77
|
|
82
78
|
In addition, the template includes:
|
83
|
-
- the `annotate` gem to annotate models and
|
84
|
-
- the `bullet` gem to help identify and
|
79
|
+
- the `annotate` gem to annotate models and factories with schema information
|
80
|
+
- the `bullet` gem to help identify and diagnose N+1 queries
|
81
|
+
|
82
|
+
## Testing
|
83
|
+
The template includes RSpec for testing, which includes pre configured:
|
84
|
+
- FactoryBot
|
85
|
+
- Faker
|
86
|
+
- Webmock
|
87
|
+
- VCR
|
88
|
+
- Simplecov
|
85
89
|
|
86
|
-
|
90
|
+
# Development
|
87
91
|
|
88
92
|
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.
|
89
93
|
|
data/lib/rails_app/cli.rb
CHANGED
@@ -5,45 +5,53 @@ require "tty-prompt"
|
|
5
5
|
module RailsApp
|
6
6
|
class CLI
|
7
7
|
def self.start(args)
|
8
|
+
# puts "args: #{args}"
|
8
9
|
prompt = TTY::Prompt.new
|
9
|
-
|
10
10
|
options_data = OptionsData.new(args)
|
11
11
|
config_file = ConfigFile.new
|
12
12
|
|
13
13
|
app_name = options_data.app_name || prompt.ask("What is the name of your application?", required: true)
|
14
14
|
|
15
|
-
# Read
|
15
|
+
# Read from existing configuration and ask the user if they want to use it
|
16
16
|
config_options = config_file.read
|
17
|
+
|
17
18
|
if config_options && prompt.yes?("Do you want to use this configuration? #{config_options}")
|
18
|
-
|
19
|
+
create_app(app_name, config_options) # standard:disable Style/IdenticalConditionalBranches
|
20
|
+
else
|
21
|
+
config_options = menu(prompt, options_data) # open cli menus to get user input
|
22
|
+
# puts "config_options: #{config_options}"
|
23
|
+
save_config(prompt, config_file, config_options) # save their configuration
|
24
|
+
create_app(app_name, config_options) # standard:disable Style/IdenticalConditionalBranches
|
19
25
|
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.menu(prompt, option_data = nil)
|
29
|
+
assets = prompt.select("How would you like to manage assets?", %w[propshaft sprockets], default: option_data&.default_assets)
|
30
|
+
styling = prompt.select("How would you like to manage styling?", %w[bootstrap tailwind bulma postcss sass], default: option_data&.default_styling)
|
31
|
+
database = prompt.select("Which database would you like to use?", %w[postgresql sqlite3 mysql trilogy oracle sqlserver jdbcmysql jdbcsqlite3 jdbcpostgresql jdbc], default: option_data&.default_database)
|
32
|
+
skip_spring = prompt.yes?("Would you like to SKIP spring?", default: option_data&.default_action_mailer)
|
33
|
+
action_mailer = prompt.yes?("Would you like to SKIP Action Mailer?", default: option_data&.default_action_mailer)
|
34
|
+
action_mailbox = prompt.yes?("Would you like to SKIP Action Mailbox?", default: option_data&.default_action_mailbox)
|
35
|
+
action_text = prompt.yes?("Would you like to SKIP Action Text?", default: option_data&.default_action_text)
|
36
|
+
action_storage = prompt.yes?("Would you like to SKIP Active Storage?", default: option_data&.default_action_storage)
|
37
|
+
action_cable = prompt.yes?("Would you like to SKIP Active Cable?", default: option_data&.default_action_cable)
|
38
|
+
|
39
|
+
{assets: assets, styling: styling, database: database, skip_spring: skip_spring, action_mailer: action_mailer,
|
40
|
+
action_mailbox: action_mailbox, action_text: action_text, action_storage: action_storage, action_cable: action_cable}
|
41
|
+
end
|
42
|
+
|
43
|
+
def self.create_app(app_name, args)
|
44
|
+
Command.new(app_name, args).run
|
45
|
+
end
|
20
46
|
|
21
|
-
|
22
|
-
styling = prompt.select("How would you like to manage styling?", %w[bootstrap tailwind bulma postcss sass], default: options_data.default_styling)
|
23
|
-
database = prompt.select("Which database would you like to use?",
|
24
|
-
%w[postgresql sqlite3 mysql trilogy oracle sqlserver jdbcmysql jdbcsqlite3 jdbcpostgresql jdbc],
|
25
|
-
default: options_data.default_database)
|
26
|
-
|
27
|
-
# Collect all configuration options into a hash
|
28
|
-
config_options = {
|
29
|
-
app_name: app_name,
|
30
|
-
assets: assets,
|
31
|
-
styling: styling,
|
32
|
-
database: database
|
33
|
-
}
|
34
|
-
|
35
|
-
# Ask the user if they wish to save their configuration
|
47
|
+
def self.save_config(prompt, config_file, config_options)
|
36
48
|
if prompt.yes?("Do you wish to save your configuration?")
|
37
|
-
# Iterate over the hash and set the configuration
|
38
49
|
config_options.each do |key, value|
|
39
|
-
next if key == :app_name
|
40
50
|
config_file.set(key, value)
|
41
51
|
end
|
42
52
|
config_file.write(force: true)
|
43
53
|
puts "Configuration saved successfully @ #{config_file.full_path}"
|
44
54
|
end
|
45
|
-
|
46
|
-
Command.new(config_options).run
|
47
55
|
end
|
48
56
|
end
|
49
57
|
end
|
data/lib/rails_app/command.rb
CHANGED
@@ -2,11 +2,18 @@ module RailsApp
|
|
2
2
|
class Command
|
3
3
|
attr_reader :app_name, :assets, :styling, :database
|
4
4
|
|
5
|
-
def initialize(args)
|
6
|
-
|
5
|
+
def initialize(app_name, args)
|
6
|
+
# puts "args: #{args}"
|
7
|
+
@app_name = app_name
|
7
8
|
@assets = args[:assets]
|
8
9
|
@styling = args[:styling]
|
9
10
|
@database = args[:database]
|
11
|
+
@skip_spring = args[:skip_spring]
|
12
|
+
@skip_action_mailer = args[:action_mailer]
|
13
|
+
@skip_action_mailbox = args[:action_mailbox]
|
14
|
+
@skip_action_text = args[:action_text]
|
15
|
+
@skip_action_storage = args[:action_storage]
|
16
|
+
@skip_action_cable = args[:action_cable]
|
10
17
|
end
|
11
18
|
|
12
19
|
def template
|
@@ -14,14 +21,34 @@ module RailsApp
|
|
14
21
|
end
|
15
22
|
|
16
23
|
def run
|
17
|
-
command = "rails new #{@app_name} --no-rc #{skip_spring} #{database_adapter} #{asset_management} #{javascript_bundling} #{styling_framework} #{testing_framework} -m #{template}"
|
24
|
+
command = "rails new #{@app_name} --no-rc #{skip_spring} #{skip_action_mailer} #{skip_action_mailbox} #{skip_action_text} #{skip_action_text} #{skip_action_cable} #{database_adapter} #{asset_management} #{javascript_bundling} #{styling_framework} #{testing_framework} -m #{template}"
|
18
25
|
command.squeeze!(" ")
|
19
|
-
puts command
|
26
|
+
# puts command
|
20
27
|
system(command)
|
21
28
|
end
|
22
29
|
|
23
30
|
def skip_spring
|
24
|
-
"--skip-spring"
|
31
|
+
"--skip-spring" if @skip_spring == true
|
32
|
+
end
|
33
|
+
|
34
|
+
def skip_action_mailer
|
35
|
+
"--skip-action-mailer" if @skip_action_mailer == true
|
36
|
+
end
|
37
|
+
|
38
|
+
def skip_action_mailbox
|
39
|
+
"--skip-action-mailbox" if @skip_action_mailbox == true
|
40
|
+
end
|
41
|
+
|
42
|
+
def skip_action_text
|
43
|
+
"--skip-action-text" if @skip_action_text == true
|
44
|
+
end
|
45
|
+
|
46
|
+
def skip_action_storage
|
47
|
+
"--skip-active-storage" if @skip_action_storage == true
|
48
|
+
end
|
49
|
+
|
50
|
+
def skip_action_cable
|
51
|
+
"--skip-action-cable" if @skip_action_cable == true
|
25
52
|
end
|
26
53
|
|
27
54
|
def database_adapter
|
@@ -8,16 +8,13 @@ module RailsApp
|
|
8
8
|
@options = args
|
9
9
|
end
|
10
10
|
|
11
|
-
def self.from_config(config_hash)
|
12
|
-
new_args = config_hash.map { |key, value| value.to_s }
|
13
|
-
new(new_args)
|
14
|
-
end
|
15
|
-
|
16
11
|
def app_name
|
17
12
|
@options[0]
|
18
13
|
end
|
19
14
|
|
20
15
|
def default_assets
|
16
|
+
# puts "@options: #{@options.include?("sprockets")}"
|
17
|
+
|
21
18
|
@options.include?("sprockets") ? "sprockets" : "propshaft"
|
22
19
|
end
|
23
20
|
|
@@ -60,5 +57,25 @@ module RailsApp
|
|
60
57
|
"sqlite3"
|
61
58
|
end
|
62
59
|
end
|
60
|
+
|
61
|
+
def default_action_mailer
|
62
|
+
@options.include?("skip_action_mailer")
|
63
|
+
end
|
64
|
+
|
65
|
+
def default_action_mailbox
|
66
|
+
@options.include?("skip_action_mailbox")
|
67
|
+
end
|
68
|
+
|
69
|
+
def default_action_text
|
70
|
+
@options.include?("skip_action_text")
|
71
|
+
end
|
72
|
+
|
73
|
+
def default_action_storage
|
74
|
+
@options.include?("skip_action_storage")
|
75
|
+
end
|
76
|
+
|
77
|
+
def default_action_cable
|
78
|
+
@options.include?("skip_action_cable")
|
79
|
+
end
|
63
80
|
end
|
64
81
|
end
|
data/lib/rails_app/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails_app
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chuck Smith
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-04-
|
11
|
+
date: 2024-04-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bootsnap
|
@@ -97,7 +97,6 @@ files:
|
|
97
97
|
- assets/screenshot_cli.png
|
98
98
|
- assets/screenshot_cli_db.png
|
99
99
|
- assets/screenshot_cli_readconfig.png
|
100
|
-
- assets/screenshot_cli_useconfig.png
|
101
100
|
- bin/rails_app
|
102
101
|
- lib/rails_app.rb
|
103
102
|
- lib/rails_app/cli.rb
|
Binary file
|