rails_app_generator 0.2.37 → 0.2.40
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +21 -0
- data/after_templates/addons/avo/_.rb +11 -3
- data/after_templates/addons/avo/app/avo/resources/post_resource.rb +3 -0
- data/after_templates/addons/avo/app/avo/resources/user_resource.rb +1 -0
- data/after_templates/addons/avo/app/controllers/home_controller.rb +4 -0
- data/after_templates/addons/avo/app/models/post.rb +3 -2
- data/after_templates/addons/avo/app/models/user.rb +6 -0
- data/after_templates/addons/avo/app/services/seed_service.rb +9 -0
- data/after_templates/addons/avo/app/views/home/index.html.erb +4 -2
- data/after_templates/addons/avo/app/views/layouts/_navbar.html.erb +7 -1
- data/after_templates/addons/avo/db/seeds.rb +1 -1
- data/after_templates/addons/factory_bot_rails/_.rb +45 -0
- data/after_templates/addons/factory_bot_rails/app/controllers/home_controller.rb +8 -0
- data/after_templates/addons/factory_bot_rails/app/services/seed_service.rb +27 -0
- data/after_templates/addons/factory_bot_rails/app/views/home/index.html.erb +3 -0
- data/after_templates/addons/factory_bot_rails/app/views/home/reseed.html.erb +6 -0
- data/after_templates/addons/factory_bot_rails/app/views/layouts/_footer.html.erb +0 -0
- data/after_templates/addons/factory_bot_rails/app/views/layouts/_navbar.html.erb +6 -0
- data/after_templates/addons/factory_bot_rails/app/views/layouts/application.html.erb +29 -0
- data/after_templates/addons/factory_bot_rails/db/seeds.rb +1 -0
- data/after_templates/addons/factory_bot_rails/factories.rb +27 -0
- data/after_templates/addons/friendly_id/_.rb +68 -0
- data/after_templates/addons/friendly_id/app/controllers/home_controller.rb +5 -0
- data/after_templates/addons/friendly_id/app/controllers/posts_controller.rb +66 -0
- data/after_templates/addons/friendly_id/app/models/post.rb +16 -0
- data/after_templates/addons/friendly_id/app/views/home/index.html.erb +22 -0
- data/after_templates/addons/friendly_id/app/views/layouts/_footer.html.erb +0 -0
- data/after_templates/addons/friendly_id/app/views/layouts/_navbar.html.erb +3 -0
- data/after_templates/addons/friendly_id/app/views/layouts/application.html.erb +29 -0
- data/after_templates/addons/friendly_id/app/views/posts/_form.html.erb +32 -0
- data/after_templates/addons/friendly_id/app/views/posts/_post.html.erb +17 -0
- data/after_templates/addons/friendly_id/app/views/posts/_post.json.jbuilder +2 -0
- data/after_templates/addons/friendly_id/app/views/posts/edit.html.erb +10 -0
- data/after_templates/addons/friendly_id/app/views/posts/index.html.erb +14 -0
- data/after_templates/addons/friendly_id/app/views/posts/index.json.jbuilder +1 -0
- data/after_templates/addons/friendly_id/app/views/posts/new.html.erb +9 -0
- data/after_templates/addons/friendly_id/app/views/posts/show.html.erb +19 -0
- data/after_templates/addons/friendly_id/app/views/posts/show.json.jbuilder +1 -0
- data/after_templates/addons/friendly_id/db/seeds.rb +47 -0
- data/docs/last_run/app_generator_class.json +16 -0
- data/docs/last_run/app_generator_data.json +9 -7
- data/docs/last_run/rails_options_class.json +16 -0
- data/docs/last_run/rails_options_data.json +9 -7
- data/lib/rails_app_generator/addons/factory_bot_rails.rb +15 -0
- data/lib/rails_app_generator/addons/friendly_id.rb +2 -1
- data/lib/rails_app_generator/app_generator.rb +9 -0
- data/lib/rails_app_generator/rag_initializer.rb +1 -0
- data/lib/rails_app_generator/version.rb +1 -1
- data/package-lock.json +2 -2
- data/package.json +1 -1
- data/profiles/addons/avo.json +1 -1
- data/profiles/addons/factory_bot_rails.json +14 -0
- data/profiles/addons/friendly_id.json +14 -0
- data/templates/thor_task/profile/app/views/layouts/_navbar.html.erb +3 -3
- metadata +35 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 635081352fed9b65ca6d9905c209e40edc4d74ea8eb1fcc5ae1f53b58c080fe6
|
4
|
+
data.tar.gz: 0a0e858ef8a51a3c6ae1dca71ffb112e6e61cfb8802c6a3f4f2139d77195334d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b75d081dad75b16ff179fd916c3b25f0f1c2a1fbcd1def2749a7b5cceb2f6af77f950c07abd14fad51a7db3a2d4f12ae3b9c3a8d9ca87f018991c34f3e7889b6
|
7
|
+
data.tar.gz: 537cac1df29fefd9294470bc47fcbe4510004189f637b7e0da70a815dc2b48a78f9ffb373be70d3b23c4cc0a85c0f8e1f2876f1a6fded9bb44e53de7a236fb3d
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,24 @@
|
|
1
|
+
## [0.2.39](https://github.com/klueless-io/rails_app_generator/compare/v0.2.38...v0.2.39) (2022-08-23)
|
2
|
+
|
3
|
+
|
4
|
+
### Bug Fixes
|
5
|
+
|
6
|
+
* add friendly_id profile, add factory_bot_rails addon ([75d51ce](https://github.com/klueless-io/rails_app_generator/commit/75d51ceb63a5a560977073b2a6199545c5c8d17f))
|
7
|
+
|
8
|
+
## [0.2.38](https://github.com/klueless-io/rails_app_generator/compare/v0.2.37...v0.2.38) (2022-08-22)
|
9
|
+
|
10
|
+
|
11
|
+
### Bug Fixes
|
12
|
+
|
13
|
+
* add friendly_id addon ([5c34df5](https://github.com/klueless-io/rails_app_generator/commit/5c34df5fdbca8bc6810bd3cc9343d8b799d63ac3))
|
14
|
+
|
15
|
+
## [0.2.37](https://github.com/klueless-io/rails_app_generator/compare/v0.2.36...v0.2.37) (2022-08-22)
|
16
|
+
|
17
|
+
|
18
|
+
### Bug Fixes
|
19
|
+
|
20
|
+
* add friendly_id addon ([e6fc42e](https://github.com/klueless-io/rails_app_generator/commit/e6fc42e7d4ef017775c6b33850fb22aabc156ca5))
|
21
|
+
|
1
22
|
## [0.2.36](https://github.com/klueless-io/rails_app_generator/compare/v0.2.35...v0.2.36) (2022-08-22)
|
2
23
|
|
3
24
|
|
@@ -18,13 +18,19 @@ after_bundle do
|
|
18
18
|
setup_customizations
|
19
19
|
setup_db
|
20
20
|
setup_avo
|
21
|
+
|
22
|
+
swap1 = ' resources :users'
|
23
|
+
swap2 = " devise_for :users, controllers: { sessions: 'users/sessions', registrations: 'users/registrations' }"
|
24
|
+
|
25
|
+
swap_lines('config/routes.rb', swap1, swap2)
|
21
26
|
end
|
22
27
|
|
23
28
|
def scaffolds
|
24
29
|
add_scaffold_controller('users', 'name', 'email')
|
25
|
-
# add_scaffold('author', 'name', 'email', 'bio:text')
|
26
30
|
add_scaffold('category', 'title', 'description:text')
|
27
|
-
add_scaffold('post', 'title content:text', 'published:boolean', 'user:references', 'category:references')
|
31
|
+
add_scaffold('post', 'title', 'content:text', 'published:boolean', 'user:references', 'category:references')
|
32
|
+
add_scaffold('comment', 'body:text', 'commentable:references{polymorphic}', 'user:references')
|
33
|
+
|
28
34
|
add_scaffold('location', 'name', 'description:text') #, 'photo:file')
|
29
35
|
add_scaffold('room', 'name', 'description:text', 'location:references') #, 'photo:file'
|
30
36
|
add_scaffold('booking', 'user:references', 'room:references', 'booked_at:datetime', 'booked_for:integer')
|
@@ -35,11 +41,12 @@ def setup_customizations
|
|
35
41
|
|
36
42
|
force_copy
|
37
43
|
|
38
|
-
add_controller('home', 'index', 'quick_signin')
|
44
|
+
add_controller('home', 'index', 'quick_signin', 'reseed')
|
39
45
|
|
40
46
|
directory "app/controllers"
|
41
47
|
directory "app/models"
|
42
48
|
directory "app/views"
|
49
|
+
directory "app/services"
|
43
50
|
template 'app/views/layouts/application.html.erb' , 'app/views/layouts/application.html.erb'
|
44
51
|
end
|
45
52
|
|
@@ -55,6 +62,7 @@ def setup_avo
|
|
55
62
|
|
56
63
|
generate('avo:resource Category')
|
57
64
|
generate('avo:resource Post')
|
65
|
+
generate('avo:resource Comment')
|
58
66
|
generate('avo:resource Location')
|
59
67
|
generate('avo:resource Room')
|
60
68
|
generate('avo:resource Booking')
|
@@ -22,4 +22,7 @@ class PostResource < Avo::BaseResource
|
|
22
22
|
|
23
23
|
# tutorial (related category): https://youtu.be/WgNK-oINFww?t=328
|
24
24
|
field :category, as: :belongs_to
|
25
|
+
|
26
|
+
# tutorial (related category with custom name): https://youtu.be/WgNK-oINFww?t=722
|
27
|
+
field :user, name: "Author", as: :belongs_to
|
25
28
|
end
|
@@ -1,9 +1,10 @@
|
|
1
1
|
class Post < ApplicationRecord
|
2
|
-
belongs_to :author, class_name: 'User', foreign_key: :user_id
|
2
|
+
# belongs_to :author, class_name: 'User', foreign_key: :user_id
|
3
|
+
belongs_to :user
|
3
4
|
belongs_to :category
|
4
5
|
|
5
6
|
# tutorial: https://youtu.be/WgNK-oINFww?t=209
|
6
7
|
def excerpt
|
7
|
-
ActionView::Base.full_sanitizer.sanitize(content).truncate(
|
8
|
+
ActionView::Base.full_sanitizer.sanitize(content).truncate(50)
|
8
9
|
end
|
9
10
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
-
<h1
|
1
|
+
<h1><%= I18n.t('application_name') %></h1>
|
2
2
|
|
3
|
-
<p>Avo abstracts away the common parts of building apps, letting your engineers work on your app's essential components
|
3
|
+
<p>Avo abstracts away the common parts of building apps, letting your engineers work on your app's essential components.</p>
|
4
|
+
|
5
|
+
<p>The result is a full-featured admin panel that works out of the box, ready to give to your end-users.</p>
|
@@ -1,13 +1,19 @@
|
|
1
1
|
<%= link_to 'Home', root_path %> |
|
2
|
+
<%= link_to 'Re-Seed', home_reseed_path %> |
|
2
3
|
<%= link_to 'Quick Sign In', home_quick_signin_path %> |
|
3
4
|
<%= link_to 'AVO', avo_path %>
|
5
|
+
<% if current_user %>
|
6
|
+
<br>
|
4
7
|
(
|
5
|
-
<%= link_to 'Posts', posts_path, class: 'simple_scaffold' %> |
|
6
8
|
<%= link_to 'Categories', categories_path, class: 'simple_scaffold' %> |
|
9
|
+
<%= link_to 'Posts', posts_path, class: 'simple_scaffold' %> |
|
10
|
+
<%= link_to 'Comments', comments_path, class: 'simple_scaffold' %> |
|
7
11
|
<%= link_to 'Authors', users_path, class: 'simple_scaffold' %>
|
8
12
|
)
|
9
13
|
(
|
10
14
|
<%= link_to 'Locations', locations_path, class: 'simple_scaffold' %> |
|
11
15
|
<%= link_to 'Rooms', rooms_path, class: 'simple_scaffold' %> |
|
16
|
+
<%= link_to 'Comments', comments_path, class: 'simple_scaffold' %> |
|
12
17
|
<%= link_to 'Bookings', bookings_path, class: 'simple_scaffold' %>
|
13
18
|
)
|
19
|
+
<% end %>
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Provides Rails integration for factory_bot
|
4
|
+
#
|
5
|
+
# exe/rag addons/factory_bot_rails
|
6
|
+
|
7
|
+
self.local_template_path = File.dirname(__FILE__)
|
8
|
+
|
9
|
+
gac 'base rails 7 image created'
|
10
|
+
|
11
|
+
prepare_environment
|
12
|
+
|
13
|
+
after_bundle do
|
14
|
+
scaffolds
|
15
|
+
setup_customizations
|
16
|
+
setup_db
|
17
|
+
end
|
18
|
+
|
19
|
+
def scaffolds
|
20
|
+
add_scaffold('post', 'title', 'body:text', 'is_featured:boolean')
|
21
|
+
add_scaffold('person', 'first_name', 'last_name', 'email', 'password', 'address:text')
|
22
|
+
add_scaffold('project', 'name', 'status', 'budget:decimal', 'country', 'progress:integer')
|
23
|
+
end
|
24
|
+
|
25
|
+
def setup_customizations
|
26
|
+
route("root 'home#index'")
|
27
|
+
|
28
|
+
force_copy
|
29
|
+
|
30
|
+
add_controller('home', 'index', 'reseed')
|
31
|
+
|
32
|
+
directory "app/controllers"
|
33
|
+
directory "app/models"
|
34
|
+
directory "app/services"
|
35
|
+
directory "app/views"
|
36
|
+
template 'app/views/layouts/application.html.erb' , 'app/views/layouts/application.html.erb'
|
37
|
+
copy_file 'factories.rb', 'factories.rb'
|
38
|
+
end
|
39
|
+
|
40
|
+
def setup_db
|
41
|
+
template 'db/seeds.rb' , 'db/seeds.rb'
|
42
|
+
|
43
|
+
db_migrate
|
44
|
+
db_seed
|
45
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
class SeedService
|
2
|
+
class << self
|
3
|
+
def seed
|
4
|
+
service = SeedService.new
|
5
|
+
service.call
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
def call
|
10
|
+
reset
|
11
|
+
create
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def reset
|
17
|
+
Person.delete_all
|
18
|
+
Post.delete_all
|
19
|
+
Project.delete_all
|
20
|
+
end
|
21
|
+
|
22
|
+
def create
|
23
|
+
FactoryBot.create_list(:post, rand(10..20))
|
24
|
+
FactoryBot.create_list(:person, rand(10..20))
|
25
|
+
FactoryBot.create_list(:project, rand(10..20))
|
26
|
+
end
|
27
|
+
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 @@
|
|
1
|
+
SeedService.seed
|
@@ -0,0 +1,27 @@
|
|
1
|
+
FactoryBot.define do
|
2
|
+
# add_scaffold('post', 'title', 'body:text', 'is_featured:boolean')
|
3
|
+
# add_scaffold('person', 'first_name', 'last_name', 'email', 'password', 'is_featured:boolean', 'address:text')
|
4
|
+
# add_scaffold('project', 'status', 'budget:decimal', 'country', 'progress:integer')
|
5
|
+
|
6
|
+
factory :person do
|
7
|
+
first_name { Faker::Name.first_name }
|
8
|
+
last_name { Faker::Name.last_name }
|
9
|
+
email { Faker::Internet.email }
|
10
|
+
password { Faker::Internet.password }
|
11
|
+
address { Faker::Address.full_address }
|
12
|
+
end
|
13
|
+
|
14
|
+
factory :post do
|
15
|
+
title { Faker::Quote.famous_last_words }
|
16
|
+
body { Faker::Lorem.paragraphs(number: rand(4...10)).join("\n") }
|
17
|
+
is_featured { [true, false].sample }
|
18
|
+
end
|
19
|
+
|
20
|
+
factory :project do
|
21
|
+
name { Faker::App.name }
|
22
|
+
status { [:closed, :rejected, :failed, :loading, :running, :waiting, :done, :finalized, :archived, :finished].sample }
|
23
|
+
budget { Faker::Number.decimal(l_digits: 4) }
|
24
|
+
country { Faker::Address.country_code }
|
25
|
+
progress { Faker::Number.between(from: 0, to: 100) }
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# FriendlyId provides slugging and permalink support for Active Record. It lets you create pretty URLs and work with human-friendly strings as if they were numeric ids.
|
4
|
+
#
|
5
|
+
# exe/rag addons/friendly_id
|
6
|
+
|
7
|
+
self.local_template_path = File.dirname(__FILE__)
|
8
|
+
|
9
|
+
gac 'base rails 7 image created'
|
10
|
+
|
11
|
+
prepare_environment
|
12
|
+
|
13
|
+
after_bundle do
|
14
|
+
scaffolds
|
15
|
+
setup_customizations
|
16
|
+
setup_db
|
17
|
+
end
|
18
|
+
|
19
|
+
def scaffolds
|
20
|
+
add_scaffold('post', 'title', 'category', 'body:text', 'slug:uniq')
|
21
|
+
end
|
22
|
+
|
23
|
+
def setup_customizations
|
24
|
+
route("root 'home#index'")
|
25
|
+
|
26
|
+
force_copy
|
27
|
+
|
28
|
+
add_controller('home', 'index')
|
29
|
+
|
30
|
+
directory "app/controllers"
|
31
|
+
directory "app/models"
|
32
|
+
directory "app/views"
|
33
|
+
template 'app/views/layouts/application.html.erb' , 'app/views/layouts/application.html.erb'
|
34
|
+
end
|
35
|
+
|
36
|
+
def setup_db
|
37
|
+
template 'db/seeds.rb' , 'db/seeds.rb'
|
38
|
+
|
39
|
+
db_migrate
|
40
|
+
db_seed
|
41
|
+
end
|
42
|
+
|
43
|
+
# Other template command examples
|
44
|
+
# prepare_environment
|
45
|
+
# bundle_install
|
46
|
+
# css_install('tailwind')
|
47
|
+
# rails_command('db:migrate')
|
48
|
+
# rails_command('db:migrate')
|
49
|
+
# bundle_add('hotwire-rails')
|
50
|
+
# rails_command('hotwire:install')
|
51
|
+
# run('bin/importmap pin sortablejs')
|
52
|
+
# run('npm install daisyui')
|
53
|
+
# rubocop
|
54
|
+
#
|
55
|
+
# directory 'app/assets/images'
|
56
|
+
# create_file 'app/assets/stylesheets/custom-bootstrap-import.scss' , read_template('custom-bootstrap-import.scss')
|
57
|
+
# append_to_file 'app/assets/config/manifest.js' , read_template('manifest.js')
|
58
|
+
# insert_into_file 'app/views/layouts/application.html.erb', read_template('application.html.erb'),
|
59
|
+
# before: %( <%= javascript_include_tag "application", "data-turbo-track": "reload", defer: true %>)
|
60
|
+
# gsub_file 'app/views/layouts/application.html.erb', %(container mx-auto mt-28 px-5 flex), 'container mx-auto px-5'
|
61
|
+
# template 'home.css', 'app/assets/stylesheets/home.css'
|
62
|
+
#
|
63
|
+
# add_controller('page', 'benefits', 'faq', 'terms', 'privacy', '--skip-routes')
|
64
|
+
# route(<<-'RUBY')
|
65
|
+
# PageController.action_methods.each do |action|
|
66
|
+
# get "/#{action}", to: "page##{action}", as: "page_#{action}"
|
67
|
+
# end
|
68
|
+
# RUBY
|
@@ -0,0 +1,66 @@
|
|
1
|
+
class PostsController < ApplicationController
|
2
|
+
before_action :set_post, only: %i[ edit update destroy ]
|
3
|
+
|
4
|
+
def index
|
5
|
+
@posts = Post.all
|
6
|
+
end
|
7
|
+
|
8
|
+
# GET /posts/1 or /posts/some-friendly-slug
|
9
|
+
def show
|
10
|
+
@post = Post.friendly.find(params[:id])
|
11
|
+
@friendly = @post.slug == params[:id]
|
12
|
+
end
|
13
|
+
|
14
|
+
def new
|
15
|
+
@post = Post.new
|
16
|
+
end
|
17
|
+
|
18
|
+
def edit
|
19
|
+
end
|
20
|
+
|
21
|
+
def create
|
22
|
+
@post = Post.new(post_params)
|
23
|
+
|
24
|
+
respond_to do |format|
|
25
|
+
if @post.save
|
26
|
+
format.html { redirect_to post_url(@post), notice: "Post was successfully created." }
|
27
|
+
format.json { render :show, status: :created, location: @post }
|
28
|
+
else
|
29
|
+
format.html { render :new, status: :unprocessable_entity }
|
30
|
+
format.json { render json: @post.errors, status: :unprocessable_entity }
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def update
|
36
|
+
respond_to do |format|
|
37
|
+
if @post.update(post_params)
|
38
|
+
format.html { redirect_to post_url(@post), notice: "Post was successfully updated." }
|
39
|
+
format.json { render :show, status: :ok, location: @post }
|
40
|
+
else
|
41
|
+
format.html { render :edit, status: :unprocessable_entity }
|
42
|
+
format.json { render json: @post.errors, status: :unprocessable_entity }
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def destroy
|
48
|
+
@post.destroy
|
49
|
+
|
50
|
+
respond_to do |format|
|
51
|
+
format.html { redirect_to posts_url, notice: "Post was successfully destroyed." }
|
52
|
+
format.json { head :no_content }
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
private
|
57
|
+
# Use callbacks to share common setup or constraints between actions.
|
58
|
+
def set_post
|
59
|
+
@post = Post.find(params[:id])
|
60
|
+
end
|
61
|
+
|
62
|
+
# Only allow a list of trusted parameters through.
|
63
|
+
def post_params
|
64
|
+
params.require(:post).permit(:title, :body)
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
<h1>Friendly</h1>
|
2
|
+
|
3
|
+
<p>FriendlyId provides slugging and permalink support for Active Record. It lets you create pretty URLs and work with human-friendly strings as if they were numeric ids.</p>
|
4
|
+
|
5
|
+
<table>
|
6
|
+
<thead>
|
7
|
+
<tr>
|
8
|
+
<td>Title</td>
|
9
|
+
<td style='width: 100px;'>Category</td>
|
10
|
+
<td>Friendly URL</td>
|
11
|
+
</tr>
|
12
|
+
</thead>
|
13
|
+
<tbody>
|
14
|
+
<% @posts.each do |post| %>
|
15
|
+
<tr>
|
16
|
+
<td><%= post.title %></td>
|
17
|
+
<td style='width: 100px;'><%= post.category %></td>
|
18
|
+
<td><%= link_to post.slug, post %></td>
|
19
|
+
</tr>
|
20
|
+
<% end %>
|
21
|
+
</tbody>
|
22
|
+
</table>
|
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,32 @@
|
|
1
|
+
<%= form_with(model: post) do |form| %>
|
2
|
+
<% if post.errors.any? %>
|
3
|
+
<div style="color: red">
|
4
|
+
<h2><%= pluralize(post.errors.count, "error") %> prohibited this post from being saved:</h2>
|
5
|
+
|
6
|
+
<ul>
|
7
|
+
<% post.errors.each do |error| %>
|
8
|
+
<li><%= error.full_message %></li>
|
9
|
+
<% end %>
|
10
|
+
</ul>
|
11
|
+
</div>
|
12
|
+
<% end %>
|
13
|
+
|
14
|
+
<div>
|
15
|
+
<%= form.label :title, style: "display: block" %>
|
16
|
+
<%= form.text_field :title %>
|
17
|
+
</div>
|
18
|
+
|
19
|
+
<div>
|
20
|
+
<%= form.label :body, style: "display: block" %>
|
21
|
+
<%= form.text_area :body %>
|
22
|
+
</div>
|
23
|
+
|
24
|
+
<div>
|
25
|
+
<%= form.label :slug, style: "display: block" %>
|
26
|
+
<%= form.text_field :slug %>
|
27
|
+
</div>
|
28
|
+
|
29
|
+
<div>
|
30
|
+
<%= form.submit %>
|
31
|
+
</div>
|
32
|
+
<% end %>
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<p style="color: green"><%= notice %></p>
|
2
|
+
|
3
|
+
<h1>Posts</h1>
|
4
|
+
|
5
|
+
<div id="posts">
|
6
|
+
<% @posts.each do |post| %>
|
7
|
+
<%= render post %>
|
8
|
+
<p>
|
9
|
+
<%= link_to "Show this post", post %>
|
10
|
+
</p>
|
11
|
+
<% end %>
|
12
|
+
</div>
|
13
|
+
|
14
|
+
<%= link_to "New post", new_post_path %>
|
@@ -0,0 +1 @@
|
|
1
|
+
json.array! @posts, partial: "posts/post", as: :post
|
@@ -0,0 +1,19 @@
|
|
1
|
+
<% if @friendly %>
|
2
|
+
|
3
|
+
<h1><%= @post.title %></h1>
|
4
|
+
<p><%= @post.body %></p>
|
5
|
+
|
6
|
+
<% else %>
|
7
|
+
|
8
|
+
<p style="color: green"><%= notice %></p>
|
9
|
+
|
10
|
+
<%= render @post %>
|
11
|
+
|
12
|
+
<div>
|
13
|
+
<%= link_to "Edit this post", edit_post_path(@post) %> |
|
14
|
+
<%= link_to "Back to posts", posts_path %>
|
15
|
+
|
16
|
+
<%= button_to "Destroy this post", @post, method: :delete %>
|
17
|
+
</div>
|
18
|
+
|
19
|
+
<% end %>
|
@@ -0,0 +1 @@
|
|
1
|
+
json.partial! "posts/post", post: @post
|
@@ -0,0 +1,47 @@
|
|
1
|
+
posts = [
|
2
|
+
'can ruby on rails run on windows',
|
3
|
+
'can ruby on rails be used for mobile apps',
|
4
|
+
'does ruby on rails have a future',
|
5
|
+
'what does ruby on rails do',
|
6
|
+
'how does ruby on rails work',
|
7
|
+
'what is rails ruby',
|
8
|
+
'where ruby on rails',
|
9
|
+
'what ruby on rails is used for',
|
10
|
+
'where ruby on rails active record',
|
11
|
+
'where ruby on rails performance',
|
12
|
+
'which companies use ruby on rails',
|
13
|
+
'what is ruby on rails developer',
|
14
|
+
'who created ruby on rails',
|
15
|
+
'what is ruby on rails good for',
|
16
|
+
'is ruby on rails worth learning',
|
17
|
+
'is ruby on rails hard to learn',
|
18
|
+
'is ruby on rails backend or frontend',
|
19
|
+
'is ruby on rails a programming language',
|
20
|
+
'is ruby on rails easy to learn',
|
21
|
+
'who uses ruby on rails',
|
22
|
+
'who created ruby on rails',
|
23
|
+
'is ruby rails dead',
|
24
|
+
'what is rails ruby',
|
25
|
+
'when to use ruby on rails',
|
26
|
+
'why ruby on rails is good',
|
27
|
+
'where ruby on rails is used',
|
28
|
+
'where ruby on rails',
|
29
|
+
'where ruby on rails active record',
|
30
|
+
'where ruby on rails performance',
|
31
|
+
'query where ruby on rails'
|
32
|
+
]
|
33
|
+
|
34
|
+
categories = [
|
35
|
+
'ruby',
|
36
|
+
'rails',
|
37
|
+
'ruby on rails',
|
38
|
+
'ror',
|
39
|
+
'rails 7',
|
40
|
+
'full stack',
|
41
|
+
'web',
|
42
|
+
'web app'
|
43
|
+
]
|
44
|
+
|
45
|
+
posts.each do |post|
|
46
|
+
Post.create(title: post.capitalize, category: categories.sample, body: Faker::Lorem.paragraphs(number: 20).join(' '))
|
47
|
+
end
|
@@ -52,7 +52,9 @@
|
|
52
52
|
"add_devise",
|
53
53
|
"add_devise_masquerade",
|
54
54
|
"add_dotenv",
|
55
|
+
"add_factory_bot_rails",
|
55
56
|
"add_faker",
|
57
|
+
"add_friendly_id",
|
56
58
|
"add_groupdate",
|
57
59
|
"add_hexapdf",
|
58
60
|
"add_httparty",
|
@@ -439,6 +441,13 @@
|
|
439
441
|
"default": false,
|
440
442
|
"required": false
|
441
443
|
},
|
444
|
+
{
|
445
|
+
"name": "add_factory_bot_rails",
|
446
|
+
"description": "Indicates when to generate add factory bot rails",
|
447
|
+
"type": "boolean",
|
448
|
+
"default": false,
|
449
|
+
"required": false
|
450
|
+
},
|
442
451
|
{
|
443
452
|
"name": "add_faker",
|
444
453
|
"description": "Indicates when to generate add faker",
|
@@ -446,6 +455,13 @@
|
|
446
455
|
"default": false,
|
447
456
|
"required": false
|
448
457
|
},
|
458
|
+
{
|
459
|
+
"name": "add_friendly_id",
|
460
|
+
"description": "Indicates when to generate add friendly",
|
461
|
+
"type": "boolean",
|
462
|
+
"default": false,
|
463
|
+
"required": false
|
464
|
+
},
|
449
465
|
{
|
450
466
|
"name": "add_groupdate",
|
451
467
|
"description": "Indicates when to generate add groupdate",
|
@@ -32,22 +32,24 @@
|
|
32
32
|
"test": "rspec",
|
33
33
|
"add_acts_as_list": false,
|
34
34
|
"add_administrate": false,
|
35
|
-
"add_annotate":
|
36
|
-
"add_avo":
|
35
|
+
"add_annotate": false,
|
36
|
+
"add_avo": false,
|
37
37
|
"add_bcrypt": false,
|
38
38
|
"add_brakeman": false,
|
39
39
|
"add_browser": false,
|
40
40
|
"add_bundler_audit": false,
|
41
41
|
"add_chartkick": false,
|
42
|
-
"add_devise":
|
42
|
+
"add_devise": false,
|
43
43
|
"add_devise_masquerade": false,
|
44
44
|
"add_dotenv": false,
|
45
|
+
"add_factory_bot_rails": true,
|
45
46
|
"add_faker": true,
|
47
|
+
"add_friendly_id": false,
|
46
48
|
"add_groupdate": false,
|
47
49
|
"add_hexapdf": false,
|
48
50
|
"add_httparty": false,
|
49
51
|
"add_honeybadger": false,
|
50
|
-
"add_image_processing":
|
52
|
+
"add_image_processing": false,
|
51
53
|
"add_kaminari": false,
|
52
54
|
"add_lograge": false,
|
53
55
|
"add_minimal_css": true,
|
@@ -58,11 +60,11 @@
|
|
58
60
|
"add_pretender": false,
|
59
61
|
"add_public_suffix": false,
|
60
62
|
"add_rails_html_sanitizer": false,
|
61
|
-
"add_ransack":
|
63
|
+
"add_ransack": false,
|
62
64
|
"add_redcarpet": false,
|
63
65
|
"add_rolify": false,
|
64
|
-
"add_rubocop":
|
66
|
+
"add_rubocop": false,
|
65
67
|
"add_twilio_ruby": false,
|
66
|
-
"template": "/Users/davidcruwys/dev/kgems/rails_app_generator/after_templates/addons/
|
68
|
+
"template": "/Users/davidcruwys/dev/kgems/rails_app_generator/after_templates/addons/factory_bot_rails/_.rb"
|
67
69
|
}
|
68
70
|
}
|
@@ -52,7 +52,9 @@
|
|
52
52
|
"add_devise",
|
53
53
|
"add_devise_masquerade",
|
54
54
|
"add_dotenv",
|
55
|
+
"add_factory_bot_rails",
|
55
56
|
"add_faker",
|
57
|
+
"add_friendly_id",
|
56
58
|
"add_groupdate",
|
57
59
|
"add_hexapdf",
|
58
60
|
"add_httparty",
|
@@ -439,6 +441,13 @@
|
|
439
441
|
"default": false,
|
440
442
|
"required": false
|
441
443
|
},
|
444
|
+
{
|
445
|
+
"name": "add_factory_bot_rails",
|
446
|
+
"description": "",
|
447
|
+
"type": "boolean",
|
448
|
+
"default": false,
|
449
|
+
"required": false
|
450
|
+
},
|
442
451
|
{
|
443
452
|
"name": "add_faker",
|
444
453
|
"description": "",
|
@@ -446,6 +455,13 @@
|
|
446
455
|
"default": false,
|
447
456
|
"required": false
|
448
457
|
},
|
458
|
+
{
|
459
|
+
"name": "add_friendly_id",
|
460
|
+
"description": "",
|
461
|
+
"type": "boolean",
|
462
|
+
"default": false,
|
463
|
+
"required": false
|
464
|
+
},
|
449
465
|
{
|
450
466
|
"name": "add_groupdate",
|
451
467
|
"description": "",
|
@@ -7,7 +7,7 @@
|
|
7
7
|
"quiet": false,
|
8
8
|
"skip": false,
|
9
9
|
"ruby": "/Users/davidcruwys/.asdf/installs/ruby/3.1.1/bin/ruby",
|
10
|
-
"template": "/Users/davidcruwys/dev/kgems/rails_app_generator/after_templates/addons/
|
10
|
+
"template": "/Users/davidcruwys/dev/kgems/rails_app_generator/after_templates/addons/factory_bot_rails/_.rb",
|
11
11
|
"database": "sqlite3",
|
12
12
|
"skip_git": true,
|
13
13
|
"skip_keeps": false,
|
@@ -42,22 +42,24 @@
|
|
42
42
|
"test": "rspec",
|
43
43
|
"add_acts_as_list": false,
|
44
44
|
"add_administrate": false,
|
45
|
-
"add_annotate":
|
46
|
-
"add_avo":
|
45
|
+
"add_annotate": false,
|
46
|
+
"add_avo": false,
|
47
47
|
"add_bcrypt": false,
|
48
48
|
"add_brakeman": false,
|
49
49
|
"add_browser": false,
|
50
50
|
"add_bundler_audit": false,
|
51
51
|
"add_chartkick": false,
|
52
|
-
"add_devise":
|
52
|
+
"add_devise": false,
|
53
53
|
"add_devise_masquerade": false,
|
54
54
|
"add_dotenv": false,
|
55
|
+
"add_factory_bot_rails": true,
|
55
56
|
"add_faker": true,
|
57
|
+
"add_friendly_id": false,
|
56
58
|
"add_groupdate": false,
|
57
59
|
"add_hexapdf": false,
|
58
60
|
"add_httparty": false,
|
59
61
|
"add_honeybadger": false,
|
60
|
-
"add_image_processing":
|
62
|
+
"add_image_processing": false,
|
61
63
|
"add_kaminari": false,
|
62
64
|
"add_lograge": false,
|
63
65
|
"add_minimal_css": true,
|
@@ -68,10 +70,10 @@
|
|
68
70
|
"add_pretender": false,
|
69
71
|
"add_public_suffix": false,
|
70
72
|
"add_rails_html_sanitizer": false,
|
71
|
-
"add_ransack":
|
73
|
+
"add_ransack": false,
|
72
74
|
"add_redcarpet": false,
|
73
75
|
"add_rolify": false,
|
74
|
-
"add_rubocop":
|
76
|
+
"add_rubocop": false,
|
75
77
|
"add_twilio_ruby": false
|
76
78
|
}
|
77
79
|
}
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RailsAppGenerator
|
4
|
+
# Custom add-ons for RailsAppGenerator
|
5
|
+
module AddOns
|
6
|
+
# Add FactoryBotRails to rails application
|
7
|
+
class FactoryBotRails < RailsAppGenerator::Addon
|
8
|
+
required_gem gem.version('factory_bot_rails', '6.2.0', 'Provides Rails integration for factory_bot')
|
9
|
+
|
10
|
+
def apply
|
11
|
+
say 'Setting up FactoryBotRails'
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -5,9 +5,10 @@ module RailsAppGenerator
|
|
5
5
|
module AddOns
|
6
6
|
# Add FriendlyId to rails application
|
7
7
|
class FriendlyId < RailsAppGenerator::Addon
|
8
|
-
required_gem gem.version('friendly_id', '5.4.2', '')
|
8
|
+
required_gem gem.version('friendly_id', '5.4.2', 'FriendlyId provides slugging and permalink support for Active Record.')
|
9
9
|
|
10
10
|
def apply
|
11
|
+
bundle_install
|
11
12
|
generate('friendly_id')
|
12
13
|
end
|
13
14
|
end
|
@@ -184,6 +184,7 @@ module RailsAppGenerator
|
|
184
184
|
# docker
|
185
185
|
add_if(:dotenv) # tested
|
186
186
|
add_if(:factory_bot) # TODO: needs testing
|
187
|
+
add_if(:factory_bot_rails) # tested
|
187
188
|
add_if(:faker) # tested
|
188
189
|
add_if(:friendly_id) # tested
|
189
190
|
add_if(:generators) # TODO: needs testing
|
@@ -365,6 +366,14 @@ module RailsAppGenerator
|
|
365
366
|
template_files.map { |template_file| read_template(template_file) }.join(join)
|
366
367
|
end
|
367
368
|
|
369
|
+
# swap two lines using the gsub_file
|
370
|
+
def swap_lines(file, swap1, swap2)
|
371
|
+
swap_temp = '##SWAP_IT##'
|
372
|
+
gsub_file(file, swap1, swap_temp)
|
373
|
+
gsub_file(file, swap2, swap1)
|
374
|
+
gsub_file(file, swap_temp, swap2)
|
375
|
+
end
|
376
|
+
|
368
377
|
# Moves a file at given location, to another location. Both files are relative to the destination_root
|
369
378
|
#
|
370
379
|
# ==== Parameters
|
@@ -118,6 +118,7 @@ KConfig.configure do |config|
|
|
118
118
|
# docker
|
119
119
|
rag.add_option :add_dotenv , type: :boolean, default: false
|
120
120
|
# factory_bot
|
121
|
+
rag.add_option :add_factory_bot_rails , type: :boolean, default: false
|
121
122
|
rag.add_option :add_faker , type: :boolean, default: false
|
122
123
|
rag.add_option :add_friendly_id , type: :boolean, default: false
|
123
124
|
# generators
|
data/package-lock.json
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
{
|
2
2
|
"name": "rails_app_generator",
|
3
|
-
"version": "0.2.
|
3
|
+
"version": "0.2.40",
|
4
4
|
"lockfileVersion": 2,
|
5
5
|
"requires": true,
|
6
6
|
"packages": {
|
7
7
|
"": {
|
8
8
|
"name": "rails_app_generator",
|
9
|
-
"version": "0.2.
|
9
|
+
"version": "0.2.40",
|
10
10
|
"dependencies": {
|
11
11
|
"daisyui": "^2.20.0"
|
12
12
|
},
|
data/package.json
CHANGED
data/profiles/addons/avo.json
CHANGED
@@ -0,0 +1,14 @@
|
|
1
|
+
{
|
2
|
+
"args": {
|
3
|
+
"app_path": "r7_factory_bot_rails",
|
4
|
+
"destination_root": "/Users/davidcruwys/dev/kgems/rails_app_generator/a/addons"
|
5
|
+
},
|
6
|
+
"opts": {
|
7
|
+
"skip_git": true,
|
8
|
+
"skip_test": true,
|
9
|
+
"add_minimal_css": true,
|
10
|
+
"template": "/Users/davidcruwys/dev/kgems/rails_app_generator/after_templates/addons/factory_bot_rails/_.rb",
|
11
|
+
"add_factory_bot_rails": true,
|
12
|
+
"add_faker": true
|
13
|
+
}
|
14
|
+
}
|
@@ -0,0 +1,14 @@
|
|
1
|
+
{
|
2
|
+
"args": {
|
3
|
+
"app_path": "r7_friendly_id",
|
4
|
+
"destination_root": "/Users/davidcruwys/dev/kgems/rails_app_generator/a/addons"
|
5
|
+
},
|
6
|
+
"opts": {
|
7
|
+
"skip_git": true,
|
8
|
+
"skip_test": true,
|
9
|
+
"add_minimal_css": true,
|
10
|
+
"template": "/Users/davidcruwys/dev/kgems/rails_app_generator/after_templates/addons/friendly_id/_.rb",
|
11
|
+
"add_faker": true,
|
12
|
+
"add_friendly_id": true
|
13
|
+
}
|
14
|
+
}
|
@@ -1,5 +1,5 @@
|
|
1
1
|
<%= link_to 'Home', root_path %>
|
2
|
-
|
3
|
-
|
4
|
-
|
2
|
+
| <%= link_to 'Products', products_path %>
|
3
|
+
| <%= link_to 'Posts', posts_path %>
|
4
|
+
| <%= link_to 'People', people_path %>
|
5
5
|
<hr />
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails_app_generator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.40
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Cruwys
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-08-
|
11
|
+
date: 2022-08-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bootsnap
|
@@ -214,6 +214,8 @@ files:
|
|
214
214
|
- after_templates/addons/avo/app/controllers/home_controller.rb
|
215
215
|
- after_templates/addons/avo/app/models/category.rb
|
216
216
|
- after_templates/addons/avo/app/models/post.rb
|
217
|
+
- after_templates/addons/avo/app/models/user.rb
|
218
|
+
- after_templates/addons/avo/app/services/seed_service.rb
|
217
219
|
- after_templates/addons/avo/app/views/home/index.html.erb
|
218
220
|
- after_templates/addons/avo/app/views/home/quick_signin.html.erb
|
219
221
|
- after_templates/addons/avo/app/views/layouts/_footer.html.erb
|
@@ -292,6 +294,16 @@ files:
|
|
292
294
|
- after_templates/addons/dotenv/app/controllers/home_controller.rb
|
293
295
|
- after_templates/addons/dotenv/app/views/home/index.html.erb
|
294
296
|
- after_templates/addons/dotenv/app/views/layouts/application.html.erb
|
297
|
+
- after_templates/addons/factory_bot_rails/_.rb
|
298
|
+
- after_templates/addons/factory_bot_rails/app/controllers/home_controller.rb
|
299
|
+
- after_templates/addons/factory_bot_rails/app/services/seed_service.rb
|
300
|
+
- after_templates/addons/factory_bot_rails/app/views/home/index.html.erb
|
301
|
+
- after_templates/addons/factory_bot_rails/app/views/home/reseed.html.erb
|
302
|
+
- after_templates/addons/factory_bot_rails/app/views/layouts/_footer.html.erb
|
303
|
+
- after_templates/addons/factory_bot_rails/app/views/layouts/_navbar.html.erb
|
304
|
+
- after_templates/addons/factory_bot_rails/app/views/layouts/application.html.erb
|
305
|
+
- after_templates/addons/factory_bot_rails/db/seeds.rb
|
306
|
+
- after_templates/addons/factory_bot_rails/factories.rb
|
295
307
|
- after_templates/addons/faker/_.rb
|
296
308
|
- after_templates/addons/faker/app/controllers/home_controller.rb
|
297
309
|
- after_templates/addons/faker/app/views/home/index.html.erb
|
@@ -299,6 +311,24 @@ files:
|
|
299
311
|
- after_templates/addons/faker/app/views/layouts/_footer.html.erb
|
300
312
|
- after_templates/addons/faker/app/views/layouts/_navbar.html.erb
|
301
313
|
- after_templates/addons/faker/app/views/layouts/application.html.erb
|
314
|
+
- after_templates/addons/friendly_id/_.rb
|
315
|
+
- after_templates/addons/friendly_id/app/controllers/home_controller.rb
|
316
|
+
- after_templates/addons/friendly_id/app/controllers/posts_controller.rb
|
317
|
+
- after_templates/addons/friendly_id/app/models/post.rb
|
318
|
+
- after_templates/addons/friendly_id/app/views/home/index.html.erb
|
319
|
+
- after_templates/addons/friendly_id/app/views/layouts/_footer.html.erb
|
320
|
+
- after_templates/addons/friendly_id/app/views/layouts/_navbar.html.erb
|
321
|
+
- after_templates/addons/friendly_id/app/views/layouts/application.html.erb
|
322
|
+
- after_templates/addons/friendly_id/app/views/posts/_form.html.erb
|
323
|
+
- after_templates/addons/friendly_id/app/views/posts/_post.html.erb
|
324
|
+
- after_templates/addons/friendly_id/app/views/posts/_post.json.jbuilder
|
325
|
+
- after_templates/addons/friendly_id/app/views/posts/edit.html.erb
|
326
|
+
- after_templates/addons/friendly_id/app/views/posts/index.html.erb
|
327
|
+
- after_templates/addons/friendly_id/app/views/posts/index.json.jbuilder
|
328
|
+
- after_templates/addons/friendly_id/app/views/posts/new.html.erb
|
329
|
+
- after_templates/addons/friendly_id/app/views/posts/show.html.erb
|
330
|
+
- after_templates/addons/friendly_id/app/views/posts/show.json.jbuilder
|
331
|
+
- after_templates/addons/friendly_id/db/seeds.rb
|
302
332
|
- after_templates/addons/hexapdf/_.rb
|
303
333
|
- after_templates/addons/hexapdf/app/controllers/home_controller.rb
|
304
334
|
- after_templates/addons/hexapdf/app/views/home/index.html.erb
|
@@ -644,6 +674,7 @@ files:
|
|
644
674
|
- lib/rails_app_generator/addons/docker_compose.rb
|
645
675
|
- lib/rails_app_generator/addons/dotenv.rb
|
646
676
|
- lib/rails_app_generator/addons/factory_bot.rb
|
677
|
+
- lib/rails_app_generator/addons/factory_bot_rails.rb
|
647
678
|
- lib/rails_app_generator/addons/faker.rb
|
648
679
|
- lib/rails_app_generator/addons/foreman.rb
|
649
680
|
- lib/rails_app_generator/addons/friendly_id.rb
|
@@ -726,7 +757,9 @@ files:
|
|
726
757
|
- profiles/addons/devise.json
|
727
758
|
- profiles/addons/devise_masquerade.json
|
728
759
|
- profiles/addons/dotenv.json
|
760
|
+
- profiles/addons/factory_bot_rails.json
|
729
761
|
- profiles/addons/faker.json
|
762
|
+
- profiles/addons/friendly_id.json
|
730
763
|
- profiles/addons/hexapdf.json
|
731
764
|
- profiles/addons/honeybadger.json
|
732
765
|
- profiles/addons/httparty.json
|