rails-new-app 0.0.3 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/tests.yml +28 -0
- data/.gitignore +2 -0
- data/Gemfile +14 -0
- data/Gemfile.lock +60 -0
- data/README.md +60 -20
- data/Rakefile +9 -0
- data/lib/rails-new-app.rb +1 -1
- data/lib/rails-new-app/processors/authentication_processor.rb +16 -0
- data/lib/rails-new-app/processors/authorization_processor.rb +18 -0
- data/lib/rails-new-app/runner.rb +97 -146
- data/lib/rails-new-app/screens.rb +8 -0
- data/lib/rails-new-app/screens/app_name_screen.rb +28 -0
- data/lib/rails-new-app/screens/auth_screen.rb +26 -0
- data/lib/rails-new-app/screens/authentication_screen.rb +27 -0
- data/lib/rails-new-app/screens/authorization_screen.rb +27 -0
- data/lib/rails-new-app/screens/choice_screen.rb +52 -0
- data/lib/rails-new-app/{steps/code_coverage_step.rb → screens/code_coverage_screen.rb} +3 -3
- data/lib/rails-new-app/{steps/database_step.rb → screens/database_screen.rb} +7 -5
- data/lib/rails-new-app/{steps/form_builder_step.rb → screens/form_builder_screen.rb} +2 -2
- data/lib/rails-new-app/{steps/java_script_framework_step.rb → screens/java_script_framework_screen.rb} +2 -2
- data/lib/rails-new-app/screens/menu_screen.rb +61 -0
- data/lib/rails-new-app/{steps/pagination_step.rb → screens/pagination_screen.rb} +2 -2
- data/lib/rails-new-app/screens/review_and_confirm_screen.rb +59 -0
- data/lib/rails-new-app/{steps/ruby_linter_step.rb → screens/ruby_linter_screen.rb} +2 -2
- data/lib/rails-new-app/screens/screen.rb +66 -0
- data/lib/rails-new-app/{steps/template_engine_step.rb → screens/template_engine_screen.rb} +2 -2
- data/lib/rails-new-app/{steps/test_factory_step.rb → screens/test_factory_screen.rb} +3 -3
- data/lib/rails-new-app/{steps/test_fake_data.rb → screens/test_fake_data_screen.rb} +3 -3
- data/lib/rails-new-app/{steps/test_runner_step.rb → screens/test_runner_screen.rb} +3 -3
- data/lib/rails-new-app/{steps/yes_no_choice_step.rb → screens/yes_no_choice_screen.rb} +1 -1
- data/lib/rails-new-app/templates/cancancan-config.rb +1 -0
- data/lib/rails-new-app/templates/cancancan-gemfile.rb +1 -0
- data/lib/rails-new-app/templates/devise-config.rb +1 -0
- data/lib/rails-new-app/templates/devise-gemfile.rb +1 -0
- data/lib/rails-new-app/templates/pagy-config.rb +1 -1
- data/lib/rails-new-app/templates/pundit-config.rb +7 -0
- data/lib/rails-new-app/templates/pundit-gemfile.rb +1 -0
- data/lib/rails-new-app/version.rb +1 -1
- metadata +34 -18
- data/lib/rails-new-app/steps.rb +0 -7
- data/lib/rails-new-app/steps/app_name_step.rb +0 -20
- data/lib/rails-new-app/steps/choice_step.rb +0 -45
- data/lib/rails-new-app/steps/rails_version_step.rb +0 -34
- data/lib/rails-new-app/steps/step.rb +0 -75
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a2d108c27dd154b223f683f5cd2fdd6efc5871a5419146de56112fff357de6d3
|
4
|
+
data.tar.gz: d4cfbbb2754df7c54d711e71679c1763e01659594db614f67647150a3bca3f51
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 206bd5da44b2aaca70734ebf6db67900e214774bc3775638af3589c2abf1b085e08fe8b3cf01ee5ae165c4c448c9dd4f616851e86ff03a1401f0b6e5ed415e89
|
7
|
+
data.tar.gz: fd63025c4f3a0ef5f27e1d7a16443c669b67122f22b2132ef7dd8905b628e782664c1cfc8c0f802f103dc07dc84fc5664ff96622a813dd7ff969e0c876374e84
|
@@ -0,0 +1,28 @@
|
|
1
|
+
name: Ruby
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
branches: [ main ]
|
6
|
+
pull_request:
|
7
|
+
branches: [ main ]
|
8
|
+
|
9
|
+
jobs:
|
10
|
+
test:
|
11
|
+
|
12
|
+
runs-on: ubuntu-latest
|
13
|
+
strategy:
|
14
|
+
matrix:
|
15
|
+
ruby-version: ['2.6', '2.7', '3.0']
|
16
|
+
|
17
|
+
steps:
|
18
|
+
- uses: actions/checkout@v2
|
19
|
+
- name: Set up Ruby
|
20
|
+
# To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
|
21
|
+
# change this to (see https://github.com/ruby/setup-ruby#versioning):
|
22
|
+
# uses: ruby/setup-ruby@v1
|
23
|
+
uses: ruby/setup-ruby@473e4d8fe5dd94ee328fdfca9f8c9c7afc9dae5e
|
24
|
+
with:
|
25
|
+
ruby-version: ${{ matrix.ruby-version }}
|
26
|
+
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
|
27
|
+
- name: Run tests
|
28
|
+
run: COVERAGE=true bundle exec rake test
|
data/.gitignore
CHANGED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
GEM
|
2
|
+
remote: https://rubygems.org/
|
3
|
+
specs:
|
4
|
+
ansi (1.5.0)
|
5
|
+
ast (2.4.2)
|
6
|
+
byebug (11.1.3)
|
7
|
+
docile (1.4.0)
|
8
|
+
minitest (5.14.4)
|
9
|
+
parallel (1.20.1)
|
10
|
+
parser (3.0.1.1)
|
11
|
+
ast (~> 2.4.1)
|
12
|
+
rainbow (3.0.0)
|
13
|
+
rake (13.0.3)
|
14
|
+
regexp_parser (2.1.1)
|
15
|
+
rexml (3.2.5)
|
16
|
+
rubocop (1.14.0)
|
17
|
+
parallel (~> 1.10)
|
18
|
+
parser (>= 3.0.0.0)
|
19
|
+
rainbow (>= 2.2.2, < 4.0)
|
20
|
+
regexp_parser (>= 1.8, < 3.0)
|
21
|
+
rexml
|
22
|
+
rubocop-ast (>= 1.5.0, < 2.0)
|
23
|
+
ruby-progressbar (~> 1.7)
|
24
|
+
unicode-display_width (>= 1.4.0, < 3.0)
|
25
|
+
rubocop-ast (1.7.0)
|
26
|
+
parser (>= 3.0.1.1)
|
27
|
+
rubocop-performance (1.11.2)
|
28
|
+
rubocop (>= 1.7.0, < 2.0)
|
29
|
+
rubocop-ast (>= 0.4.0)
|
30
|
+
ruby-progressbar (1.11.0)
|
31
|
+
simplecov (0.21.2)
|
32
|
+
docile (~> 1.1)
|
33
|
+
simplecov-html (~> 0.11)
|
34
|
+
simplecov_json_formatter (~> 0.1)
|
35
|
+
simplecov-console (0.9.1)
|
36
|
+
ansi
|
37
|
+
simplecov
|
38
|
+
terminal-table
|
39
|
+
simplecov-html (0.12.3)
|
40
|
+
simplecov_json_formatter (0.1.3)
|
41
|
+
standard (1.1.1)
|
42
|
+
rubocop (= 1.14.0)
|
43
|
+
rubocop-performance (= 1.11.2)
|
44
|
+
terminal-table (3.0.1)
|
45
|
+
unicode-display_width (>= 1.1.1, < 3)
|
46
|
+
unicode-display_width (2.0.0)
|
47
|
+
|
48
|
+
PLATFORMS
|
49
|
+
x86_64-linux
|
50
|
+
|
51
|
+
DEPENDENCIES
|
52
|
+
byebug
|
53
|
+
minitest
|
54
|
+
rake
|
55
|
+
simplecov
|
56
|
+
simplecov-console
|
57
|
+
standard
|
58
|
+
|
59
|
+
BUNDLED WITH
|
60
|
+
2.2.11
|
data/README.md
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# rails-new-app
|
2
|
-
Command-line tool to assist in the creation of new Rails
|
2
|
+
Command-line tool to assist in the creation of new Rails 6 apps
|
3
3
|
|
4
4
|
## Installation:
|
5
5
|
|
@@ -9,23 +9,22 @@ Run `gem install "rails-new-app"`
|
|
9
9
|
|
10
10
|
Run `rails-new-app` command and follow the step by step wizard.
|
11
11
|
|
12
|
-
|
13
|
-
|
14
|
-
If, for any reason, the menu navigation does not work, run `rails-new-app navigation=false`.
|
12
|
+
It will use the current default Rails version, so you should install the version you want to use, these generators are currently tested with Rails 6.
|
15
13
|
|
16
14
|
## Current configurations:
|
17
|
-
-
|
18
|
-
- Database: none / MySQL / PostgreSQL / SQLite
|
15
|
+
- Database: MySQL / PostgreSQL / SQLite
|
19
16
|
- Tests:
|
20
17
|
- - runner: none / Minitest / RSpec
|
21
18
|
- - CodeCoverage: none / Simplecov
|
22
19
|
- - Factories: none / FactoryBot
|
23
20
|
- - Fake data: none / Faker
|
24
21
|
- TemplateEngine: None (just ERB) / Slim / HAML
|
25
|
-
- RubyLinter: None / RuboCop / StandardRB
|
26
22
|
- FormBuilder: None / Simple Form / Formtastic
|
27
|
-
- JS Framework: None / ReactJS / VueJS / Angular / Elm / Stimulus
|
28
23
|
- Pagination: None / Pagy / Kaminari / WillPaginate
|
24
|
+
- JS Framework: None / ReactJS / VueJS / Angular / Elm / Stimulus
|
25
|
+
- Authorization: None / Pundit / CanCanCan
|
26
|
+
- Authentication: None / Devise
|
27
|
+
- RubyLinter: None / RuboCop / StandardRB
|
29
28
|
|
30
29
|
## TODOs and ideas:
|
31
30
|
- improve GUI and UX
|
@@ -36,29 +35,33 @@ If, for any reason, the menu navigation does not work, run `rails-new-app naviga
|
|
36
35
|
- add more tools
|
37
36
|
- support `rails new` flags configuration
|
38
37
|
- research requirements
|
39
|
-
- improve validations (check rails version, ruby version, if gems are compatible with rails, etc)
|
40
|
-
- show the user the current Ruby version
|
41
38
|
- support a `rails-new-app-defaults` file at the HOME dir to set default options if empty answers
|
42
39
|
|
43
40
|
#### Ideas for other tools:
|
44
|
-
-
|
45
|
-
-
|
41
|
+
- dotenv/figaro
|
42
|
+
- resque/sideqik/suckerpunch/other?
|
43
|
+
- CSS framework? bootstrap/tailwind/material/spectre/bulma (this affects the form builders processor)
|
46
44
|
- CI config? github actions / travis / circleci / bitbucket / gitlab / others
|
47
|
-
- js linter? None/ESlint/StandardJS
|
48
|
-
- devise?
|
49
45
|
- carrierwave/paperclip/dragonfly?
|
46
|
+
- js linter? None/ESlint/StandardJS
|
50
47
|
- exception_notification / airbreak / other reporting tools
|
51
|
-
- dotenv/figaro
|
52
48
|
- redis?
|
53
49
|
- memcached/dalli/other?
|
54
|
-
- resque/sideqik/suckerpunch/other?
|
55
|
-
- CSS framework? bootstrap/tailwind/material/spectre/bulma (this affects the form builders processor)
|
56
50
|
- add basic docker config?
|
57
|
-
- admin gems? ActiveAdmin/RailsAdmin/Trestle/others
|
58
51
|
- pre-commit hooks? overcommit
|
59
|
-
-
|
52
|
+
- admin gems? ActiveAdmin/RailsAdmin/Trestle/others
|
53
|
+
- type of app: standard/minimal/api
|
54
|
+
- support other databases like MongoDB that require more config
|
55
|
+
|
56
|
+
## For developers
|
60
57
|
|
61
|
-
|
58
|
+
### Setup:
|
59
|
+
|
60
|
+
- Clone the repo
|
61
|
+
- Run `bundle install`
|
62
|
+
- You can run the app with `./exe/rails-new-app`
|
63
|
+
|
64
|
+
### Adding more configurations and tools:
|
62
65
|
|
63
66
|
1. Add a new step at `lib/rails-new-app/steps` (or modify an existing one)
|
64
67
|
2. Collect step config in the `config` hash
|
@@ -70,6 +73,36 @@ If, for any reason, the menu navigation does not work, run `rails-new-app naviga
|
|
70
73
|
|
71
74
|
* Steps 5 and 6 are split so we can run `bundle install` once.
|
72
75
|
|
76
|
+
### Quick scripted execution:
|
77
|
+
|
78
|
+
Since the app uses the STDIN to configure the generator, you can pipe a stream of inputs that a user would do to the command to quickly set all the desired options. For example:
|
79
|
+
|
80
|
+
```
|
81
|
+
# inside any text file, like... defaults.txt
|
82
|
+
1
|
83
|
+
MyApp
|
84
|
+
2
|
85
|
+
3
|
86
|
+
8
|
87
|
+
2
|
88
|
+
0
|
89
|
+
Y
|
90
|
+
```
|
91
|
+
|
92
|
+
These inputs set the name (1) to `MyApp`, then goes to database config (2) and sets PostrgreSQL (3), then goes to pagination (8) and sets Pagy (2), finally, it goes to `review and confirm` (0) and confirms it (Y).
|
93
|
+
|
94
|
+
With that file you can do a quick setup with:
|
95
|
+
|
96
|
+
```sh
|
97
|
+
cat defaults.txt | rails-new-app
|
98
|
+
```
|
99
|
+
|
100
|
+
This can eventually be used to share complete setups or generate defaults.
|
101
|
+
|
102
|
+
### Tests:
|
103
|
+
|
104
|
+
Run `rake test` or `COVERAGE=true rake test`.
|
105
|
+
|
73
106
|
## Changelogs
|
74
107
|
|
75
108
|
### 0.0.1
|
@@ -84,3 +117,10 @@ Added navigation between menus.
|
|
84
117
|
- Add a git initial commit
|
85
118
|
- Added new tools: Faker, pagination gems
|
86
119
|
- Bug fixing
|
120
|
+
|
121
|
+
### 0.1
|
122
|
+
- Refactor screens (ex steps) handling
|
123
|
+
- Refactor user input handling to allow easier testing
|
124
|
+
- Added tests for multiple screens
|
125
|
+
- Bug fixing (Pagy config, incorrect indexing)
|
126
|
+
- Added SimpleCov and easier dev setup
|
data/Rakefile
ADDED
data/lib/rails-new-app.rb
CHANGED
@@ -0,0 +1,16 @@
|
|
1
|
+
module RailsNewApp
|
2
|
+
class AuthenticationProcessor < Processor
|
3
|
+
def update_gemfile(config)
|
4
|
+
case config[:authentication][:key]
|
5
|
+
when "devise" then apply_template "devise-gemfile"
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
def configure(config)
|
10
|
+
puts "Processing Authentication config"
|
11
|
+
case config[:authentication][:key]
|
12
|
+
when "devise" then apply_template "devise-config"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module RailsNewApp
|
2
|
+
class AuthorizationProcessor < Processor
|
3
|
+
def update_gemfile(config)
|
4
|
+
case config[:authorization][:key]
|
5
|
+
when "pundit" then apply_template "pundit-gemfile"
|
6
|
+
when "cancancan" then apply_template "cancancan-gemfile"
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
def configure(config)
|
11
|
+
puts "Processing Authorization config"
|
12
|
+
case config[:authorization][:key]
|
13
|
+
when "pundit" then apply_template "pundit-config"
|
14
|
+
when "cancancan" then apply_template "cancancan-config"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/lib/rails-new-app/runner.rb
CHANGED
@@ -1,57 +1,55 @@
|
|
1
|
-
require_relative "
|
1
|
+
require_relative "screens"
|
2
2
|
require_relative "processors"
|
3
3
|
require "readline"
|
4
|
+
require "byebug"
|
4
5
|
|
5
6
|
module RailsNewApp
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
def get_screen(option)
|
24
|
-
case option.to_s
|
25
|
-
when /\A\d+\z/
|
26
|
-
SCREENS.find { |x| x[:option] == option.to_s }
|
27
|
-
else
|
28
|
-
SCREENS.find { |x| x[:class].key == option.to_sym }
|
29
|
-
end
|
30
|
-
end
|
7
|
+
# use option: nil to hide the screen from the main menu
|
8
|
+
SCREENS = [
|
9
|
+
{option: "1", page: 1, class: AppNameScreen},
|
10
|
+
{option: "2", page: 1, class: DatabaseScreen},
|
11
|
+
{option: "3", page: 1, class: TestRunnerScreen},
|
12
|
+
{option: "4", page: 1, class: JavaScriptFrameworkScreen},
|
13
|
+
{option: "5", page: 1, class: RubyLinterScreen},
|
14
|
+
{option: "6", page: 1, class: TemplateEngineScreen},
|
15
|
+
{option: "7", page: 1, class: FormBuilderScreen},
|
16
|
+
{option: "8", page: 1, class: PaginationScreen},
|
17
|
+
{option: "1", page: 2, class: AuthScreen},
|
18
|
+
{option: nil, class: CodeCoverageScreen},
|
19
|
+
{option: nil, class: TestFactoryScreen},
|
20
|
+
{option: nil, class: TestFakeDataScreen},
|
21
|
+
{option: nil, class: AuthenticationScreen},
|
22
|
+
{option: nil, class: AuthorizationScreen}
|
23
|
+
].freeze
|
31
24
|
|
32
|
-
|
25
|
+
class Runner
|
26
|
+
attr_accessor :config, :current_page, :current_screen, :menu
|
33
27
|
|
34
|
-
|
35
|
-
|
36
|
-
@
|
28
|
+
def initialize(navigation: true)
|
29
|
+
@menu = MenuScreen.new SCREENS
|
30
|
+
@current_screen = @menu
|
31
|
+
@navigation = navigation
|
32
|
+
@config = {}.tap do |h|
|
37
33
|
SCREENS.each do |s|
|
38
34
|
kls = s[:class]
|
39
35
|
h[kls.key] = kls.default
|
40
36
|
end
|
41
37
|
end
|
38
|
+
end
|
42
39
|
|
40
|
+
# entry point
|
41
|
+
def run
|
43
42
|
intro
|
44
43
|
|
45
|
-
|
46
|
-
if navigation
|
47
|
-
|
44
|
+
confirmation =
|
45
|
+
if @navigation
|
46
|
+
start
|
48
47
|
else
|
49
48
|
steps
|
50
49
|
review_and_confirm
|
51
50
|
end
|
52
51
|
|
53
|
-
if
|
54
|
-
install_rails
|
52
|
+
if confirmation == :finish
|
55
53
|
rails_new
|
56
54
|
process_config
|
57
55
|
end_message
|
@@ -62,132 +60,71 @@ module RailsNewApp
|
|
62
60
|
end
|
63
61
|
end
|
64
62
|
|
65
|
-
def clear
|
66
|
-
system("clear")
|
67
|
-
end
|
68
|
-
|
69
63
|
def intro
|
70
64
|
clear
|
71
65
|
puts "Let's create a new Rails app step by step"
|
72
66
|
end
|
73
67
|
|
74
|
-
def
|
75
|
-
|
76
|
-
next if s[:option].nil?
|
77
|
-
|
78
|
-
screen_name = s[:class].clean_name
|
79
|
-
puts "#{s[:option]} : #{screen_name}"
|
80
|
-
end
|
81
|
-
puts "0 : Review and confirm"
|
82
|
-
puts ""
|
83
|
-
puts "Type the number of the menu and press enter:"
|
68
|
+
def show_current_screen
|
69
|
+
puts current_screen.screen_text
|
84
70
|
end
|
85
71
|
|
86
|
-
def
|
87
|
-
|
72
|
+
def start
|
73
|
+
next_do = nil
|
74
|
+
|
88
75
|
loop do
|
76
|
+
show_current_screen
|
89
77
|
option = gets.chomp.strip
|
90
|
-
if option == "0"
|
91
|
-
case review_and_confirm
|
92
|
-
when :yes then return true
|
93
|
-
when :no then return false
|
94
|
-
end
|
95
|
-
clear
|
96
|
-
print_screens
|
97
|
-
else
|
98
|
-
show_screen(option)
|
99
|
-
end
|
100
|
-
end
|
101
|
-
end
|
102
78
|
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
79
|
+
next_do = process_user_input(option)
|
80
|
+
case next_do
|
81
|
+
when :finish, :abort then break
|
82
|
+
end
|
107
83
|
clear
|
108
|
-
screen_obj.next_step ? show_screen(screen_obj.next_step) : print_screens
|
109
|
-
else
|
110
|
-
puts "Invalid option, select a category:"
|
111
84
|
end
|
85
|
+
|
86
|
+
next_do
|
112
87
|
end
|
113
88
|
|
114
|
-
def
|
115
|
-
|
116
|
-
config[:rails_version] = RailsVersionStep.run(config)
|
117
|
-
config[:database] = DatabaseStep.run(config)
|
118
|
-
config[:test_runner] = TestRunnerStep.run(config)
|
89
|
+
def process_user_input(option)
|
90
|
+
next_step, new_config = @current_screen.process_user_input(option)
|
119
91
|
|
120
|
-
if
|
121
|
-
config[
|
122
|
-
config[:test_factory] = TestFactoryStep.run(config)
|
123
|
-
config[:test_fake_data] = TestFakeDataStep.run(config)
|
92
|
+
if new_config
|
93
|
+
@config[@current_screen.class.key] = new_config
|
124
94
|
end
|
125
95
|
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
def review_and_confirm
|
134
|
-
clear
|
135
|
-
rails_ver = config[:rails_version]
|
136
|
-
rails_ver = "Using latest installed Rails version" if rails_ver == ""
|
137
|
-
|
138
|
-
puts <<~REVIEW
|
139
|
-
===== New Rails app config =====
|
140
|
-
|
141
|
-
App name: #{config[:app_name]}
|
142
|
-
Ruby version: #{RUBY_VERSION}
|
143
|
-
Rails version: #{rails_ver}
|
144
|
-
Database: #{config[:database]}
|
145
|
-
Test runner: #{config[:test_runner]}
|
146
|
-
Code coverage: #{config[:code_coverage]}
|
147
|
-
Test factories: #{config[:test_factory]}
|
148
|
-
Test fake data: #{config[:test_fake_data]}
|
149
|
-
JS framework: #{config[:java_script_framework]}
|
150
|
-
Ruby Linter: #{config[:ruby_linter]}
|
151
|
-
Template engine: #{config[:template_engine]}
|
152
|
-
Form builder: #{config[:form_builder]}
|
153
|
-
Pagination: #{config[:pagination]}
|
154
|
-
|
155
|
-
REVIEW
|
156
|
-
|
157
|
-
message = "Type 'Y(es)' to confirm, 'B(ack) to go back, or 'N(o)' to abort"
|
158
|
-
if config[:app_name] == ""
|
159
|
-
puts <<~WARNING
|
160
|
-
=====================================
|
161
|
-
App name is required
|
162
|
-
=====================================
|
163
|
-
|
164
|
-
WARNING
|
165
|
-
message.gsub!("Type 'Y(es)' to confirm, ", "Type ")
|
96
|
+
case next_step
|
97
|
+
when :menu then @current_screen = @menu
|
98
|
+
when :review_and_confirm then @current_screen = ReviewAndConfirmScreen.new(config)
|
99
|
+
when :finish, :abort, :rerender then next_step
|
100
|
+
else
|
101
|
+
@current_screen = get_screen(next_step).new(config)
|
166
102
|
end
|
103
|
+
end
|
167
104
|
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
return :back if /\A*B(ack)?\z/i.match?(answer)
|
173
|
-
return :no if /\A*N(o)?\z/i.match?(answer)
|
105
|
+
def steps
|
106
|
+
config[:app_name] = AppNameScreen.run(config)
|
107
|
+
config[:database] = DatabaseScreen.run(config)
|
108
|
+
config[:test_runner] = TestRunnerScreen.run(config)
|
174
109
|
|
175
|
-
|
110
|
+
if config[:test_runner][:key] != ""
|
111
|
+
config[:code_coverage] = CodeCoverageScreen.run(config)
|
112
|
+
config[:test_factory] = TestFactoryScreen.run(config)
|
113
|
+
config[:test_fake_data] = TestFakeDataScreen.run(config)
|
176
114
|
end
|
177
|
-
end
|
178
115
|
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
116
|
+
config[:js_framework] = JavaScriptFrameworkScreen.run(config)
|
117
|
+
config[:ruby_linter] = RubyLinterScreen.run(config)
|
118
|
+
config[:template_engine] = TemplateEngineScreen.run(config)
|
119
|
+
config[:form_builder] = FormBuilderScreen.run(config)
|
120
|
+
config[:pagination] = PaginationScreen.run(config)
|
184
121
|
end
|
185
122
|
|
186
123
|
def rails_new
|
187
124
|
puts "Running Rails new"
|
188
125
|
command = build_rails_new_command
|
189
126
|
puts command
|
190
|
-
|
127
|
+
run_cmnd(command)
|
191
128
|
end
|
192
129
|
|
193
130
|
def process_config
|
@@ -202,11 +139,13 @@ module RailsNewApp
|
|
202
139
|
TemplateEngineProcessor,
|
203
140
|
FormBuilderProcessor,
|
204
141
|
RubyLinterProcessor,
|
205
|
-
PaginationProcessor
|
142
|
+
PaginationProcessor,
|
143
|
+
AuthorizationProcessor,
|
144
|
+
AuthenticationProcessor
|
206
145
|
].each { |p| p.update_gemfile(config) }
|
207
146
|
|
208
147
|
# install gems
|
209
|
-
|
148
|
+
run_cmnd("bundle install")
|
210
149
|
|
211
150
|
# configure each gem
|
212
151
|
[
|
@@ -215,7 +154,9 @@ module RailsNewApp
|
|
215
154
|
TestFactoryProcessor,
|
216
155
|
FormBuilderProcessor,
|
217
156
|
RubyLinterProcessor,
|
218
|
-
PaginationProcessor
|
157
|
+
PaginationProcessor,
|
158
|
+
AuthorizationProcessor,
|
159
|
+
AuthenticationProcessor
|
219
160
|
].each { |p| p.configure(config) }
|
220
161
|
|
221
162
|
after_create
|
@@ -235,19 +176,15 @@ module RailsNewApp
|
|
235
176
|
puts "Aborted"
|
236
177
|
end
|
237
178
|
|
238
|
-
private
|
239
|
-
|
240
179
|
# final step and creation
|
241
180
|
def build_rails_new_command
|
242
181
|
["rails"].tap do |ar|
|
243
|
-
# use specific Rails version
|
244
|
-
ar << "_#{config[:rails_version]}_" if config[:rails_version] != ""
|
245
182
|
# new command
|
246
183
|
ar << "new"
|
247
184
|
# use desired database
|
248
|
-
ar << "--database=#{config[:database][:key]}" if config[:database][:in_rails_new]
|
185
|
+
ar << "--database=#{config[:database][:key]}" if config[:database][:in_rails_new] && !config[:database][:is_default]
|
249
186
|
# ignore test if not minitest
|
250
|
-
ar << "--
|
187
|
+
ar << "--skip-test" if config[:test_runner][:key] != "minitest"
|
251
188
|
# use desired js framework
|
252
189
|
ar << "--webpack=#{config[:java_script_framework][:key]}" if config[:java_script_framework][:in_rails_new]
|
253
190
|
# ar << "--skip-javascript"
|
@@ -258,14 +195,28 @@ module RailsNewApp
|
|
258
195
|
|
259
196
|
def fix_code_style
|
260
197
|
case config[:ruby_linter][:key]
|
261
|
-
when "rubocop" then
|
262
|
-
when "standardrb" then
|
198
|
+
when "rubocop" then run_cmnd("rubocop -A")
|
199
|
+
when "standardrb" then run_cmnd("standardrb --fix")
|
263
200
|
end
|
264
201
|
end
|
265
202
|
|
266
203
|
def initial_commit
|
267
|
-
|
268
|
-
|
204
|
+
run_cmnd("git add .")
|
205
|
+
run_cmnd("git commit -a -m 'Initial commit'")
|
206
|
+
end
|
207
|
+
|
208
|
+
private
|
209
|
+
|
210
|
+
def clear
|
211
|
+
run_cmnd("clear")
|
212
|
+
end
|
213
|
+
|
214
|
+
def run_cmnd(cmd)
|
215
|
+
system(cmd) unless ENV["env"] == "test"
|
216
|
+
end
|
217
|
+
|
218
|
+
def get_screen(key)
|
219
|
+
SCREENS.find { |x| x[:class].key == key.to_sym }[:class]
|
269
220
|
end
|
270
221
|
end
|
271
222
|
end
|