rails_app_generator 0.3.2 → 0.3.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -0
- data/after_templates/addons/factory_bot/_.rb +12 -26
- data/after_templates/addons/factory_bot/app/controllers/home_controller.rb +8 -2
- data/after_templates/addons/factory_bot/app/services/seed_service.rb +46 -13
- data/after_templates/addons/factory_bot/app/views/articles/index.html.erb +32 -0
- data/after_templates/addons/factory_bot/app/views/companies/index.html.erb +33 -0
- data/after_templates/addons/factory_bot/app/views/employee_roles/index.html.erb +30 -0
- data/after_templates/addons/factory_bot/app/views/employees/index.html.erb +36 -0
- data/after_templates/addons/factory_bot/app/views/layouts/_navbar.html.erb +15 -8
- data/after_templates/addons/factory_bot/app/views/projects/index.html.erb +36 -0
- data/after_templates/addons/factory_bot/app/views/regions/index.html.erb +29 -0
- data/after_templates/addons/factory_bot/app/views/roles/index.html.erb +29 -0
- data/after_templates/addons/factory_bot/app/views/videos/index.html.erb +31 -0
- data/after_templates/addons/factory_bot/best-practices/toshima/a1.png +0 -0
- data/after_templates/addons/factory_bot/best-practices/toshima/a2.png +0 -0
- data/after_templates/addons/factory_bot/best-practices/toshima/a3.png +0 -0
- data/after_templates/addons/factory_bot/best-practices/toshima/a4.png +0 -0
- data/after_templates/addons/factory_bot/best-practices/toshima/a5.png +0 -0
- data/after_templates/addons/factory_bot/best-practices/toshima/a6.png +0 -0
- data/after_templates/addons/factory_bot/best-practices/toshima/a7.png +0 -0
- data/after_templates/addons/factory_bot/best-practices/toshima/a8.png +0 -0
- data/after_templates/addons/factory_bot/best-practices/toshima/a9.png +0 -0
- data/after_templates/addons/factory_bot/best-practices/toshima/b1.png +0 -0
- data/after_templates/addons/factory_bot/best-practices/toshima/b2.png +0 -0
- data/after_templates/addons/factory_bot/best-practices/toshima/b3.png +0 -0
- data/after_templates/addons/factory_bot/best-practices/toshima/b4.png +0 -0
- data/after_templates/addons/factory_bot/best-practices/toshima/b5.png +0 -0
- data/after_templates/addons/factory_bot/best-practices/toshima/b6.png +0 -0
- data/after_templates/addons/factory_bot/best-practices/toshima/b7.png +0 -0
- data/after_templates/addons/factory_bot/best-practices/toshima/b8.png +0 -0
- data/after_templates/addons/factory_bot/best-practices/toshima/b9.png +0 -0
- data/after_templates/addons/factory_bot/best-practices/toshima/c1.png +0 -0
- data/after_templates/addons/factory_bot/best-practices/toshima/c2.png +0 -0
- data/after_templates/addons/factory_bot/best-practices/toshima/c3.png +0 -0
- data/after_templates/addons/factory_bot/best-practices/toshima/c4.png +0 -0
- data/after_templates/addons/factory_bot/best-practices/toshima/c5.png +0 -0
- data/after_templates/addons/factory_bot/best-practices/toshima/c6.png +0 -0
- data/after_templates/addons/factory_bot/best-practices/toshima/c7.png +0 -0
- data/after_templates/addons/factory_bot/best-practices/toshima/c8.png +0 -0
- data/after_templates/addons/factory_bot/best-practices/toshima/c9.png +0 -0
- data/after_templates/addons/factory_bot/best-practices/toshima/d1.png +0 -0
- data/after_templates/addons/factory_bot/best-practices/toshima/d2.png +0 -0
- data/after_templates/addons/factory_bot/best-practices/toshima/d3.png +0 -0
- data/after_templates/addons/factory_bot/best-practices/toshima/d4.png +0 -0
- data/after_templates/addons/factory_bot/best_practice.rb +630 -0
- data/after_templates/addons/factory_bot/config/application.rb +39 -0
- data/after_templates/addons/factory_bot/{factories.rb → custom_factories/_examples.rb} +25 -37
- data/after_templates/addons/factory_bot/custom_factories/article.rb +13 -0
- data/after_templates/addons/factory_bot/custom_factories/company.rb +9 -0
- data/after_templates/addons/factory_bot/custom_factories/employee.rb +37 -0
- data/after_templates/addons/factory_bot/custom_factories/project.rb +10 -0
- data/after_templates/addons/factory_bot/custom_factories/region.rb +32 -0
- data/after_templates/addons/factory_bot/custom_factories/role.rb +21 -0
- data/after_templates/addons/factory_bot/custom_factories/user.rb +10 -0
- data/after_templates/addons/factory_bot/custom_factories/video.rb +7 -0
- data/after_templates/addons/rspec/_.rb +61 -0
- data/after_templates/addons/rspec/app/controllers/home_controller.rb +8 -0
- data/after_templates/addons/rspec/app/services/seed_service.rb +31 -0
- data/after_templates/addons/rspec/app/views/home/index.html.erb +3 -0
- data/after_templates/addons/rspec/app/views/layouts/_footer.html.erb +0 -0
- data/after_templates/addons/rspec/app/views/layouts/_navbar.html.erb +5 -0
- data/after_templates/addons/rspec/app/views/layouts/application.html.erb +29 -0
- data/after_templates/addons/rspec/db/seeds.rb +8 -0
- data/docs/last_run/app_generator_class.json +16 -8
- data/docs/last_run/app_generator_data.json +2 -1
- data/docs/last_run/rails_options_class.json +13 -5
- data/docs/last_run/rails_options_data.json +3 -3
- data/lib/rails_app_generator/addons/rspec.rb +7 -1
- data/lib/rails_app_generator/app_generator.rb +6 -9
- data/lib/rails_app_generator/rag_initializer.rb +4 -1
- data/lib/rails_app_generator/version.rb +1 -1
- data/package-lock.json +2 -2
- data/package.json +1 -1
- data/profiles/addons/factory_bot.json +1 -3
- data/profiles/addons/rspec.json +14 -0
- metadata +61 -8
- data/after_templates/addons/factory_bot/factory-create-user.png +0 -0
- data/after_templates/addons/factory_bot/factory-employee-bad.png +0 -0
- data/after_templates/addons/factory_bot/factory-employee-good.png +0 -0
- data/after_templates/addons/factory_bot/factory-role.png +0 -0
- data/after_templates/addons/factory_bot/factory-video.png +0 -0
@@ -1,45 +1,33 @@
|
|
1
|
-
FactoryBot.define do
|
2
|
-
factory :app do
|
3
|
-
title { Faker::Name.name } # Faker::App.name
|
4
|
-
description { Faker::Lorem.paragraphs(number: rand(4...10)).join("\n") }
|
5
|
-
settings { { 'foo' => 'bar' } }
|
6
|
-
end
|
7
|
-
|
8
|
-
factory :tenant do
|
9
|
-
name { Faker::Name.name }
|
10
|
-
slug { Faker::Internet.slug }
|
11
|
-
active { [true, false].sample }
|
12
|
-
app
|
13
|
-
end
|
14
|
-
|
15
|
-
factory :employee do
|
16
|
-
first_name { Faker::Name.first_name }
|
17
|
-
last_name { Faker::Name.last_name }
|
18
|
-
email { Faker::Internet.email }
|
19
|
-
password { Faker::Internet.password }
|
20
|
-
address { Faker::Address.full_address }
|
21
|
-
end
|
22
|
-
|
23
|
-
factory :article do
|
24
|
-
title { Faker::Quote.famous_last_words }
|
25
|
-
body { Faker::Lorem.paragraphs(number: rand(4...10)).join("\n") }
|
26
|
-
is_featured { [true, false].sample }
|
27
|
-
end
|
28
|
-
|
29
|
-
factory :project do
|
30
|
-
name { Faker::App.name }
|
31
|
-
status { [:closed, :rejected, :failed, :loading, :running, :waiting, :done, :finalized, :archived, :finished].sample }
|
32
|
-
budget { Faker::Number.decimal(l_digits: 4) }
|
33
|
-
country { Faker::Address.country_code }
|
34
|
-
progress { Faker::Number.between(from: 0, to: 100) }
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
1
|
def examples
|
2
|
+
# description { Faker::Lorem.paragraphs(number: rand(1...3)).join("\n") }
|
39
3
|
Faker::Name.name
|
40
4
|
Faker::Name.unique.name
|
5
|
+
Faker::Name.unique.first_name
|
6
|
+
Faker::Name.unique.last_name
|
7
|
+
|
8
|
+
Faker::Hacker.unique.say_something_smart
|
9
|
+
Faker::String.unique.troublesome
|
10
|
+
|
11
|
+
Faker::Lorem.unique.sentences.join(' ')
|
12
|
+
Faker::Lorem.unique.words.join(' ')
|
13
|
+
Faker::Lorem.unique.characters(10)
|
14
|
+
Faker::Lorem.unique.paragraphs.join("\n\n")
|
41
15
|
|
42
16
|
Faker::Internet.email
|
17
|
+
Faker::Internet.unique.user_name
|
18
|
+
Faker::Internet.unique.url
|
19
|
+
Faker::Internet.unique.ip_v4_address
|
20
|
+
|
21
|
+
Faker::Number.unique.between(1, 10_000)
|
22
|
+
Faker::Number.unique.decimal(4, 2)
|
23
|
+
|
24
|
+
Faker::Company.catch_phrase
|
25
|
+
Faker::Company.buzzword
|
26
|
+
# When a straight answer won't do, BS to the rescue!
|
27
|
+
Faker::Company.bs
|
28
|
+
Faker::Company.logo #=> "https://pigment.github.com/fake-logos/logos/medium/color/5.png"
|
29
|
+
Faker::Company.profession #=> "firefighter"
|
30
|
+
Faker::Company.australian_business_number #=> "81137773602"
|
43
31
|
|
44
32
|
Faker::Artist.name
|
45
33
|
Faker::Address.city #=> "Imogeneborough"
|
@@ -0,0 +1,13 @@
|
|
1
|
+
FactoryBot.define do
|
2
|
+
factory :article do
|
3
|
+
title { Faker::Quote.famous_last_words }
|
4
|
+
body { Faker::Lorem.paragraphs(number: rand(4...10)).join("\n") }
|
5
|
+
is_featured { [true, false].sample }
|
6
|
+
published { rand(1..10) > 8 ? nil : rand(1..20).days.ago }
|
7
|
+
# employee { nil }
|
8
|
+
# tenant { nil }
|
9
|
+
trait :unpublished do
|
10
|
+
published { nil }
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
FactoryBot.define do
|
2
|
+
factory :employee do
|
3
|
+
first_name { Faker::Name.first_name }
|
4
|
+
last_name { Faker::Name.last_name }
|
5
|
+
email { Faker::Internet.email }
|
6
|
+
password { Faker::Internet.password }
|
7
|
+
address { Faker::Address.full_address }
|
8
|
+
role # { %i[role_contributor role_moderator role_admin].sample }
|
9
|
+
# tenant { nil }
|
10
|
+
# role { nil }
|
11
|
+
|
12
|
+
# trait :contributor do
|
13
|
+
# role :contributor_role
|
14
|
+
# end
|
15
|
+
|
16
|
+
# trait :moderator do
|
17
|
+
# role :moderator_role
|
18
|
+
# end
|
19
|
+
|
20
|
+
# trait :admin do
|
21
|
+
# role :admin_role
|
22
|
+
# end
|
23
|
+
|
24
|
+
# factory :contributor_user , traits: [:contributor]
|
25
|
+
# factory :moderator_user , traits: [:moderator]
|
26
|
+
# factory :admin_user , traits: [:admin]
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
# factory :employee do
|
31
|
+
# first_name { "MyString" }
|
32
|
+
# last_name { "MyString" }
|
33
|
+
# address { "MyText" }
|
34
|
+
# email { "MyString" }
|
35
|
+
# password { "MyString" }
|
36
|
+
# end
|
37
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
FactoryBot.define do
|
2
|
+
factory :project do
|
3
|
+
name { Faker::App.name }
|
4
|
+
status { %i[closed rejected failed loading running waiting done finalized archived finished].sample }
|
5
|
+
budget { Faker::Number.decimal(l_digits: 4) }
|
6
|
+
country { Faker::Address.country_code }
|
7
|
+
progress { Faker::Number.between(from: 0, to: 100) }
|
8
|
+
# tenant { nil }
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
FactoryBot.define do
|
2
|
+
factory :region do
|
3
|
+
name { Faker::Australia.location } # Faker::App.name
|
4
|
+
settings { Faker::Json.shallow_json(width: 3, options: { key: 'Name.first_name', value: 'Name.last_name' }) }
|
5
|
+
|
6
|
+
# These traits are used to define well known variations of a factory
|
7
|
+
trait :western_sydney do
|
8
|
+
name { 'Western Sydney' }
|
9
|
+
settings { { 'suburbs' => ['Blacktown', 'Parramatta', 'Penrith', 'Campbelltown', 'Liverpool'] } }
|
10
|
+
end
|
11
|
+
|
12
|
+
trait :sydney do
|
13
|
+
name { 'Sydney CBD' }
|
14
|
+
settings { { 'suburbs' => ['Sydney', 'Sydney CBD', 'Surry Hills', 'Darling Harbour', 'Barangaroo'] } }
|
15
|
+
end
|
16
|
+
|
17
|
+
trait :eastern_suburbs do
|
18
|
+
name { 'Eastern Suburbs' }
|
19
|
+
settings { { 'suburbs' => ['Bondi', 'Bondi Beach', 'Bondi Junction', 'Bronte', 'Coogee', 'Darlinghurst'] }}
|
20
|
+
end
|
21
|
+
|
22
|
+
trait :inner_west do
|
23
|
+
name { 'Inner West' }
|
24
|
+
settings { { 'suburbs' => ['Ashfield', 'Burwood', 'Campsie', 'Croydon', 'Newtown'] } }
|
25
|
+
end
|
26
|
+
|
27
|
+
trait :north_shore do
|
28
|
+
name { 'North Shore' }
|
29
|
+
settings { { 'suburbs' => ['Pymble', 'Castle Cove', 'Castlecrag', 'Chatswood', 'Crows Nest', 'Cremorne'] } }
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
FactoryBot.define do
|
2
|
+
factory :role do
|
3
|
+
code { 'user' }
|
4
|
+
|
5
|
+
trait :contributor do
|
6
|
+
code { 'contributor' }
|
7
|
+
end
|
8
|
+
|
9
|
+
trait :moderator do
|
10
|
+
code { 'moderator' }
|
11
|
+
end
|
12
|
+
|
13
|
+
trait :admin do
|
14
|
+
code { 'admin' }
|
15
|
+
end
|
16
|
+
|
17
|
+
# factory :contributor_role , traits: [:contributor]
|
18
|
+
# factory :moderator_role , traits: [:moderator]
|
19
|
+
# factory :admin_role , traits: [:admin]
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# BDD for Ruby
|
4
|
+
#
|
5
|
+
# exe/rag addons/rspec
|
6
|
+
|
7
|
+
# NOTE: Currently not implemented fully
|
8
|
+
|
9
|
+
self.local_template_path = File.dirname(__FILE__)
|
10
|
+
|
11
|
+
gac 'base rails 7 image created'
|
12
|
+
|
13
|
+
prepare_environment
|
14
|
+
|
15
|
+
after_bundle do
|
16
|
+
create_db
|
17
|
+
scaffolds
|
18
|
+
setup_customizations
|
19
|
+
migrate_db
|
20
|
+
end
|
21
|
+
|
22
|
+
def scaffolds
|
23
|
+
# add_scaffold('post', 'title', 'body:text', 'user:references')
|
24
|
+
# add_scaffold('people', 'first_name', 'last_name', 'age:integer', 'address:text')
|
25
|
+
# add_scaffold('product', 'name', 'price:integer')
|
26
|
+
end
|
27
|
+
|
28
|
+
def setup_customizations
|
29
|
+
route("root 'home#index'")
|
30
|
+
|
31
|
+
force_copy
|
32
|
+
|
33
|
+
add_controller('home', 'index')
|
34
|
+
|
35
|
+
directory "app/controllers"
|
36
|
+
directory "app/models"
|
37
|
+
directory "app/views"
|
38
|
+
template 'app/views/layouts/application.html.erb' , 'app/views/layouts/application.html.erb'
|
39
|
+
directory "app/services"
|
40
|
+
end
|
41
|
+
|
42
|
+
def create_db
|
43
|
+
# uncomment this if you need custom configuration in database.yml
|
44
|
+
# gsub_file('config/database.yml', ' encoding: unicode', db_development_settings)
|
45
|
+
db(drop: true, create: true)
|
46
|
+
end
|
47
|
+
|
48
|
+
def migrate_db
|
49
|
+
template 'db/seeds.rb' , 'db/seeds.rb'
|
50
|
+
|
51
|
+
db(migrate: true, seed: true)
|
52
|
+
end
|
53
|
+
|
54
|
+
def db_development_settings
|
55
|
+
<<-'RUBY'
|
56
|
+
encoding: unicode
|
57
|
+
host: 127.0.0.1
|
58
|
+
username: printspeak
|
59
|
+
password: printspeak
|
60
|
+
RUBY
|
61
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
class SeedService
|
2
|
+
class << self
|
3
|
+
def seed(variant: :reset)
|
4
|
+
service = SeedService.new
|
5
|
+
service.call(variant: variant)
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
def call(variant: :reset)
|
10
|
+
reset if variant == :reset
|
11
|
+
refresh if variant == :refresh
|
12
|
+
create
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def reset
|
18
|
+
# Person.delete_all
|
19
|
+
# Post.delete_all
|
20
|
+
# Project.delete_all
|
21
|
+
end
|
22
|
+
|
23
|
+
def refresh
|
24
|
+
end
|
25
|
+
|
26
|
+
def create
|
27
|
+
# FactoryBot.create_list(:post, rand(10..20))
|
28
|
+
# FactoryBot.create_list(:person, rand(10..20))
|
29
|
+
# FactoryBot.create_list(:project, rand(10..20))
|
30
|
+
end
|
31
|
+
end
|
File without changes
|
@@ -0,0 +1,29 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title><%= camelized %></title>
|
5
|
+
<meta name="viewport" content="width=device-width,initial-scale=1">
|
6
|
+
<%%= csrf_meta_tags %>
|
7
|
+
<%%= csp_meta_tag %>
|
8
|
+
|
9
|
+
<%- if options[:skip_hotwire] || options[:skip_javascript] -%>
|
10
|
+
<%%= stylesheet_link_tag "application" %>
|
11
|
+
<%- else -%>
|
12
|
+
<%%= stylesheet_link_tag "application", "data-turbo-track": "reload" %>
|
13
|
+
<%- end -%>
|
14
|
+
</head>
|
15
|
+
|
16
|
+
<body>
|
17
|
+
<header>
|
18
|
+
<%%= render 'layouts/navbar' %>
|
19
|
+
<hr />
|
20
|
+
</header>
|
21
|
+
<main>
|
22
|
+
<%%= yield %>
|
23
|
+
</main>
|
24
|
+
<footer>
|
25
|
+
<%%= render 'layouts/footer' %>
|
26
|
+
</footer>
|
27
|
+
</body>
|
28
|
+
</html>
|
29
|
+
|
@@ -0,0 +1,8 @@
|
|
1
|
+
# SeedService.seed
|
2
|
+
# david = User.create(email: 'david@site.com', name: 'david', password: 'password')
|
3
|
+
# james = User.create(email: 'james@site.com', name: 'james', password: 'password')
|
4
|
+
# sally = User.create(email: 'sally@site.com', name: 'sally', password: 'password')
|
5
|
+
|
6
|
+
# 10.times do |i|
|
7
|
+
# Post.create(title: "Post #{i}", body: "This is the body of post #{i}", user: User.all.sample)
|
8
|
+
# end
|
@@ -70,10 +70,11 @@
|
|
70
70
|
"add_pretender",
|
71
71
|
"add_public_suffix",
|
72
72
|
"add_rails_html_sanitizer",
|
73
|
-
"add_scenic",
|
74
73
|
"add_ransack",
|
75
74
|
"add_redcarpet",
|
76
75
|
"add_rolify",
|
76
|
+
"add_scenic",
|
77
|
+
"add_rspec",
|
77
78
|
"add_rubocop",
|
78
79
|
"add_twilio_ruby"
|
79
80
|
],
|
@@ -568,13 +569,6 @@
|
|
568
569
|
"default": false,
|
569
570
|
"required": false
|
570
571
|
},
|
571
|
-
{
|
572
|
-
"name": "add_scenic",
|
573
|
-
"description": "Indicates when to generate add scenic",
|
574
|
-
"type": "boolean",
|
575
|
-
"default": false,
|
576
|
-
"required": false
|
577
|
-
},
|
578
572
|
{
|
579
573
|
"name": "add_ransack",
|
580
574
|
"description": "Indicates when to generate add ransack",
|
@@ -596,6 +590,20 @@
|
|
596
590
|
"default": false,
|
597
591
|
"required": false
|
598
592
|
},
|
593
|
+
{
|
594
|
+
"name": "add_scenic",
|
595
|
+
"description": "Indicates when to generate add scenic",
|
596
|
+
"type": "boolean",
|
597
|
+
"default": false,
|
598
|
+
"required": false
|
599
|
+
},
|
600
|
+
{
|
601
|
+
"name": "add_rspec",
|
602
|
+
"description": "Indicates when to generate add rspec",
|
603
|
+
"type": "boolean",
|
604
|
+
"default": false,
|
605
|
+
"required": false
|
606
|
+
},
|
599
607
|
{
|
600
608
|
"name": "add_rubocop",
|
601
609
|
"description": "Indicates when to generate add rubocop",
|
@@ -60,10 +60,11 @@
|
|
60
60
|
"add_pretender": false,
|
61
61
|
"add_public_suffix": false,
|
62
62
|
"add_rails_html_sanitizer": false,
|
63
|
-
"add_scenic": false,
|
64
63
|
"add_ransack": false,
|
65
64
|
"add_redcarpet": false,
|
66
65
|
"add_rolify": false,
|
66
|
+
"add_scenic": false,
|
67
|
+
"add_rspec": false,
|
67
68
|
"add_rubocop": false,
|
68
69
|
"add_twilio_ruby": false,
|
69
70
|
"template": "/Users/davidcruwys/dev/kgems/rails_app_generator/after_templates/addons/factory_bot/_.rb"
|
@@ -70,10 +70,11 @@
|
|
70
70
|
"add_pretender",
|
71
71
|
"add_public_suffix",
|
72
72
|
"add_rails_html_sanitizer",
|
73
|
-
"add_scenic",
|
74
73
|
"add_ransack",
|
75
74
|
"add_redcarpet",
|
76
75
|
"add_rolify",
|
76
|
+
"add_scenic",
|
77
|
+
"add_rspec",
|
77
78
|
"add_rubocop",
|
78
79
|
"add_twilio_ruby"
|
79
80
|
],
|
@@ -569,28 +570,35 @@
|
|
569
570
|
"required": false
|
570
571
|
},
|
571
572
|
{
|
572
|
-
"name": "
|
573
|
+
"name": "add_ransack",
|
573
574
|
"description": "",
|
574
575
|
"type": "boolean",
|
575
576
|
"default": false,
|
576
577
|
"required": false
|
577
578
|
},
|
578
579
|
{
|
579
|
-
"name": "
|
580
|
+
"name": "add_redcarpet",
|
580
581
|
"description": "",
|
581
582
|
"type": "boolean",
|
582
583
|
"default": false,
|
583
584
|
"required": false
|
584
585
|
},
|
585
586
|
{
|
586
|
-
"name": "
|
587
|
+
"name": "add_rolify",
|
587
588
|
"description": "",
|
588
589
|
"type": "boolean",
|
589
590
|
"default": false,
|
590
591
|
"required": false
|
591
592
|
},
|
592
593
|
{
|
593
|
-
"name": "
|
594
|
+
"name": "add_scenic",
|
595
|
+
"description": "",
|
596
|
+
"type": "boolean",
|
597
|
+
"default": false,
|
598
|
+
"required": false
|
599
|
+
},
|
600
|
+
{
|
601
|
+
"name": "add_rspec",
|
594
602
|
"description": "",
|
595
603
|
"type": "boolean",
|
596
604
|
"default": false,
|
@@ -70,13 +70,13 @@
|
|
70
70
|
"add_pretender": false,
|
71
71
|
"add_public_suffix": false,
|
72
72
|
"add_rails_html_sanitizer": false,
|
73
|
-
"add_scenic": false,
|
74
73
|
"add_ransack": false,
|
75
74
|
"add_redcarpet": false,
|
76
75
|
"add_rolify": false,
|
76
|
+
"add_scenic": false,
|
77
|
+
"add_rspec": false,
|
77
78
|
"add_rubocop": false,
|
78
79
|
"add_twilio_ruby": false,
|
79
|
-
"add_factory_bot": true
|
80
|
-
"add_rspec": true
|
80
|
+
"add_factory_bot": true
|
81
81
|
}
|
82
82
|
}
|
@@ -1,10 +1,16 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
# lib/rails_app_generator/rag_initializer.rb
|
4
|
+
# add_if(:rspec)
|
5
|
+
# rag.add_option :add_rspec , type: :boolean, default: false
|
6
|
+
|
3
7
|
module RailsAppGenerator
|
4
8
|
# Custom add-ons for RailsAppGenerator
|
5
9
|
module AddOns
|
6
|
-
# Add
|
10
|
+
# Add Rspec to rails application
|
7
11
|
class Rspec < RailsAppGenerator::Addon
|
12
|
+
required_gem gem.version('rspec', '3.11.0', 'BDD for Ruby')
|
13
|
+
|
8
14
|
depends_on :test
|
9
15
|
|
10
16
|
def apply
|
@@ -1,7 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# require 'rails/generators/rails/app/app_generator'
|
4
|
-
|
5
3
|
module RailsAppGenerator
|
6
4
|
# AppGenerator is a wrapper for Rails::AppGenerator
|
7
5
|
class AppGenerator < Rails::Generators::AppGenerator
|
@@ -153,15 +151,13 @@ module RailsAppGenerator
|
|
153
151
|
add_if(:rubocop)
|
154
152
|
end
|
155
153
|
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
# super if options[:test] == 'minitest'
|
154
|
+
def create_test_files
|
155
|
+
return if options[:skip_test]
|
160
156
|
|
161
|
-
|
157
|
+
super if options[:test] == 'minitest'
|
162
158
|
|
163
|
-
|
164
|
-
|
159
|
+
add(:rspec) if active?(:rspec) || options[:test] == 'rspec'
|
160
|
+
end
|
165
161
|
|
166
162
|
# rubocop:disable Metrics/AbcSize, Metrics/MethodLength
|
167
163
|
def finish_template
|
@@ -209,6 +205,7 @@ module RailsAppGenerator
|
|
209
205
|
add_if(:redcarpet) # tested
|
210
206
|
add_if(:rolify) # tested
|
211
207
|
add_if(:scenic)
|
208
|
+
# add_if(:rspec) # see: create_test_filers
|
212
209
|
add_if(:services) # TODO: needs testing
|
213
210
|
add_if(:shoulda) # TODO: needs testing
|
214
211
|
add_if(:sidekiq) # TODO: needs testing
|
@@ -10,6 +10,7 @@ KConfig.configure do |config|
|
|
10
10
|
# https://github.com/carbonfive/raygun-rails
|
11
11
|
# https://github.com/abhaynikam/boring_generators
|
12
12
|
|
13
|
+
# NOTE: currently this is being done using add_rspec, but I should support this technique as well.
|
13
14
|
# rag.add_option :test , type: :string , default: 'rspec'
|
14
15
|
|
15
16
|
# rag.add_option :skip_namespace , type: :boolean , default: false , description: "Skip namespace (affects only isolated engines)"
|
@@ -68,6 +69,7 @@ KConfig.configure do |config|
|
|
68
69
|
# future_option :skip_hotwire , type: :boolean, default: false # , description: "Skip Hotwire integration"
|
69
70
|
# future_option :skip_jbuilder , type: :boolean, default: false # , description: "Skip jbuilder gem"
|
70
71
|
# rag.add_option :skip_test , type: :boolean, default: false # , description: "Skip test files"
|
72
|
+
# NOTE: currently this is being done using add_rspec, but I should support this technique as well.
|
71
73
|
rag.add_option :test , type: :string , default: 'rspec' # , description: "minitest or rspec (default: rspec)"
|
72
74
|
# future_option :skip_system_test , type: :boolean, default: false # , description: "Skip system test files"
|
73
75
|
# future_option :skip_bootsnap , type: :boolean, default: false # , description: "Skip bootsnap gem"
|
@@ -139,14 +141,15 @@ KConfig.configure do |config|
|
|
139
141
|
rag.add_option :add_public_suffix , type: :boolean, default: false
|
140
142
|
# pundit
|
141
143
|
rag.add_option :add_rails_html_sanitizer , type: :boolean, default: false
|
142
|
-
rag.add_option :add_scenic , type: :boolean, default: false
|
143
144
|
# rails_app_generator
|
144
145
|
rag.add_option :add_ransack , type: :boolean, default: false
|
145
146
|
rag.add_option :add_redcarpet , type: :boolean, default: false
|
146
147
|
rag.add_option :add_rolify , type: :boolean, default: false
|
148
|
+
rag.add_option :add_scenic , type: :boolean, default: false
|
147
149
|
# services
|
148
150
|
# shoulda
|
149
151
|
# sidekiq
|
152
|
+
rag.add_option :add_rspec , type: :boolean, default: false
|
150
153
|
rag.add_option :add_rubocop , type: :boolean, default: false
|
151
154
|
rag.add_option :add_twilio_ruby , type: :boolean, default: false
|
152
155
|
end
|
data/package-lock.json
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
{
|
2
2
|
"name": "rails_app_generator",
|
3
|
-
"version": "0.3.
|
3
|
+
"version": "0.3.3",
|
4
4
|
"lockfileVersion": 2,
|
5
5
|
"requires": true,
|
6
6
|
"packages": {
|
7
7
|
"": {
|
8
8
|
"name": "rails_app_generator",
|
9
|
-
"version": "0.3.
|
9
|
+
"version": "0.3.3",
|
10
10
|
"dependencies": {
|
11
11
|
"daisyui": "^2.20.0"
|
12
12
|
},
|
data/package.json
CHANGED
@@ -5,14 +5,12 @@
|
|
5
5
|
"when_folder_exist": "keep_git"
|
6
6
|
},
|
7
7
|
"opts": {
|
8
|
-
"skip_git": false,
|
9
8
|
"skip_test": true,
|
10
9
|
"add_minimal_css": true,
|
11
10
|
"template": "/Users/davidcruwys/dev/kgems/rails_app_generator/after_templates/addons/factory_bot/_.rb",
|
12
11
|
"add_annotate": true,
|
13
12
|
"add_factory_bot": true,
|
14
13
|
"add_factory_bot_rails": true,
|
15
|
-
"add_faker": true
|
16
|
-
"add_rspec": true
|
14
|
+
"add_faker": true
|
17
15
|
}
|
18
16
|
}
|
@@ -0,0 +1,14 @@
|
|
1
|
+
{
|
2
|
+
"args": {
|
3
|
+
"app_path": "r7_rspec",
|
4
|
+
"destination_root": "/Users/davidcruwys/dev/kgems/rails_app_generator/a/addons",
|
5
|
+
"when_folder_exist": "destroy"
|
6
|
+
},
|
7
|
+
"opts": {
|
8
|
+
"skip_git": true,
|
9
|
+
"add_minimal_css": true,
|
10
|
+
"template": "/Users/davidcruwys/dev/kgems/rails_app_generator/after_templates/addons/rspec/_.rb",
|
11
|
+
"test": "rspec",
|
12
|
+
"add_rspec": true
|
13
|
+
}
|
14
|
+
}
|