rails_app_generator 0.2.40 → 0.2.41
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +7 -0
- data/after_templates/application/klueless/_.rb +99 -0
- data/after_templates/application/klueless/app/avo/dashboards/dashboard.rb +13 -0
- data/after_templates/application/klueless/app/avo/resources/db_schema_resource.rb +12 -0
- data/after_templates/application/klueless/app/avo/resources/rails_app_resource.rb +15 -0
- data/after_templates/application/klueless/app/avo/resources/rubocop_resource.rb +12 -0
- data/after_templates/application/klueless/app/avo/resources/table_count_resource.rb +12 -0
- data/after_templates/application/klueless/app/avo/resources/user_resource.rb +24 -0
- data/after_templates/application/klueless/app/controllers/home_controller.rb +12 -0
- data/after_templates/application/klueless/app/models/db_schema.rb +11 -0
- data/after_templates/application/klueless/app/models/rails_app.rb +3 -0
- data/after_templates/application/klueless/app/models/rubocop.rb +11 -0
- data/after_templates/application/klueless/app/models/table_count.rb +11 -0
- data/after_templates/application/klueless/app/queries/rubocop_log.psql +23 -0
- data/after_templates/application/klueless/app/queries/rubocop_log_query.rb +10 -0
- data/after_templates/application/klueless/app/queries/sql_query.rb +40 -0
- data/after_templates/application/klueless/app/services/seed_service.rb +7 -0
- data/after_templates/application/klueless/app/views/home/index.html.erb +6 -0
- data/after_templates/application/klueless/app/views/home/quick_signin.html.erb +3 -0
- data/after_templates/application/klueless/app/views/layouts/_footer.html.erb +0 -0
- data/after_templates/application/klueless/app/views/layouts/_navbar.html.erb +4 -0
- data/after_templates/application/klueless/app/views/layouts/application.html.erb +29 -0
- data/after_templates/application/klueless/config/initializers/avo.rb +101 -0
- data/after_templates/application/klueless/config/locales/en.yml +4 -0
- data/after_templates/application/klueless/db/seeds.rb +18 -0
- data/after_templates/application/printspeak/_.rb +65 -23
- data/after_templates/application/printspeak/db/seeds.rb +3 -3
- data/docs/last_run/app_generator_data.json +12 -11
- data/docs/last_run/rails_options_data.json +12 -12
- data/lib/rails_app_generator/addons/avo.rb +2 -0
- data/lib/rails_app_generator/addons/scenic.rb +38 -0
- data/lib/rails_app_generator/app_generator.rb +9 -0
- data/lib/rails_app_generator/version.rb +1 -1
- data/package-lock.json +2 -2
- data/package.json +1 -1
- data/profiles/application/klueless.json +23 -0
- data/profiles/application/printspeak.json +7 -1
- data/templates/Gemfile.erb +0 -1
- metadata +28 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6f266923a169ab15ff8606551f4e023723d947f785513dc89083e0762fd2d568
|
4
|
+
data.tar.gz: 55093884128eff848ef3a6b21e415c3739530110590d58308bb7037674022744
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aaf2fc71ee43c3d12c73b2ab6c91e1c7b5aacd31740a17284b845eb60aff94058634b7d346910242777d1e7ae17d4d75cde624002e6b67b2c5b73e530a6668d2
|
7
|
+
data.tar.gz: c2c8a7dbb9d0cf975b4e02d19309147a3a90ae5a58da010b007eba9f2713d8289b6e3dbe1ee5caa04b33ef95a9d6c9eae31f97ec4480cad7969d4fdb1796642f
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
## [0.2.40](https://github.com/klueless-io/rails_app_generator/compare/v0.2.39...v0.2.40) (2022-08-23)
|
2
|
+
|
3
|
+
|
4
|
+
### Bug Fixes
|
5
|
+
|
6
|
+
* add factory_bot_rails profile ([8a6a7ef](https://github.com/klueless-io/rails_app_generator/commit/8a6a7ef6c4b1b26003930776724cedaeb5232f84))
|
7
|
+
|
1
8
|
## [0.2.39](https://github.com/klueless-io/rails_app_generator/compare/v0.2.38...v0.2.39) (2022-08-23)
|
2
9
|
|
3
10
|
|
@@ -0,0 +1,99 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# No Code as a Service Rails Application Builder
|
4
|
+
#
|
5
|
+
# exe/rag application/klueless
|
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
|
+
force_copy
|
15
|
+
create_db
|
16
|
+
scaffolds
|
17
|
+
setup_customizations
|
18
|
+
migrate_db
|
19
|
+
setup_avo
|
20
|
+
|
21
|
+
swap1 = ' resources :users'
|
22
|
+
swap2 = " devise_for :users, controllers: { sessions: 'users/sessions', registrations: 'users/registrations' }"
|
23
|
+
|
24
|
+
swap_lines('config/routes.rb', swap1, swap2)
|
25
|
+
end
|
26
|
+
|
27
|
+
def scaffolds
|
28
|
+
add_scaffold_controller('users', 'name', 'email')
|
29
|
+
|
30
|
+
add_scaffold('rails_app', 'name', 'user:references') # name of the rails_app
|
31
|
+
|
32
|
+
# no of records in each table per region
|
33
|
+
add_scaffold('table_count', 'data:jsonb', 'rails_app:references')
|
34
|
+
# add_scaffold('table_count_table', 'name', 'region', 'count:integer', 'table_count:references')
|
35
|
+
|
36
|
+
# rubocop logs
|
37
|
+
add_scaffold('rubocop', 'data:jsonb', 'rails_app:references') # import_date is known as created_at
|
38
|
+
|
39
|
+
# database schema
|
40
|
+
add_scaffold('db_schema', 'data:jsonb', 'rails_app:references')
|
41
|
+
# add_scaffold('db_schema_table', 'name', 'primary_key', 'primary_key_type', 'db_schema:references')
|
42
|
+
|
43
|
+
# add_scaffold('db_schema_column', 'name', 'type', 'precision:integer', 'scale:integer', 'default', 'array:boolean', 'null:boolean', 'limit:integer', 'db_schema_table:references')
|
44
|
+
# add_scaffold('db_schema_foreign_key', 'left', 'right', 'name', 'on_update', 'on_delete', 'column', 'db_schema_table:references')
|
45
|
+
# add_scaffold('db_schema_index', 'name', 'fields', 'using', 'order:jsonb', 'where', 'unique', 'db_schema_table:references')
|
46
|
+
# add_scaffold('db_schema_view', 'name', 'materialized:boolean', 'sql_definition', 'db_schema_table:references')
|
47
|
+
end
|
48
|
+
|
49
|
+
def setup_customizations
|
50
|
+
route("root 'home#index'")
|
51
|
+
|
52
|
+
force_copy
|
53
|
+
|
54
|
+
add_controller('home', 'index', 'quick_signin', 'reseed')
|
55
|
+
|
56
|
+
directory "app/controllers"
|
57
|
+
directory "app/models"
|
58
|
+
directory "app/views"
|
59
|
+
template 'app/views/layouts/application.html.erb', 'app/views/layouts/application.html.erb'
|
60
|
+
directory "app/queries"
|
61
|
+
end
|
62
|
+
|
63
|
+
def setup_avo
|
64
|
+
# generate('avo:install')
|
65
|
+
|
66
|
+
generate('avo:resource RailsApp')
|
67
|
+
generate('avo:resource TableCount')
|
68
|
+
generate('avo:resource Rubocop')
|
69
|
+
generate('avo:resource DbSchema')
|
70
|
+
generate('avo:resource User')
|
71
|
+
# generate('avo:dashboard Dashboard')
|
72
|
+
|
73
|
+
directory "app/avo"
|
74
|
+
directory "config/initializers"
|
75
|
+
directory "config/locales"
|
76
|
+
|
77
|
+
# # add devise support
|
78
|
+
# gsub_file 'config/initializers/avo.rb', %(# config.current_user_method = {}), 'config.current_user_method = :current_user'
|
79
|
+
end
|
80
|
+
|
81
|
+
def create_db
|
82
|
+
gsub_file('config/database.yml', ' encoding: unicode', db_development_settings)
|
83
|
+
db(drop: true, create: true)
|
84
|
+
end
|
85
|
+
|
86
|
+
def migrate_db
|
87
|
+
template 'db/seeds.rb' , 'db/seeds.rb'
|
88
|
+
|
89
|
+
db(migrate: true, seed: true)
|
90
|
+
end
|
91
|
+
|
92
|
+
def db_development_settings
|
93
|
+
<<-'RUBY'
|
94
|
+
encoding: unicode
|
95
|
+
host: <%= ENV['DATABASE_HOST'] %>
|
96
|
+
username: <%= ENV['DATABASE_USERNAME'] %>
|
97
|
+
password: <%= ENV['DATABASE_PASSWORD'] %>
|
98
|
+
RUBY
|
99
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
class Dashboard < Avo::Dashboards::BaseDashboard
|
2
|
+
self.id = "dashboard"
|
3
|
+
self.name = "Dashboard"
|
4
|
+
|
5
|
+
# self.description = "Tiny dashboard description"
|
6
|
+
# self.grid_cols = 3
|
7
|
+
# self.visible = -> do
|
8
|
+
# true
|
9
|
+
# end
|
10
|
+
|
11
|
+
# cards go here
|
12
|
+
# card UsersCount
|
13
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
class DbSchemaResource < Avo::BaseResource
|
2
|
+
self.title = :display_name
|
3
|
+
self.includes = []
|
4
|
+
|
5
|
+
# self.search_query = ->(params:) do
|
6
|
+
# scope.ransack(id_eq: params[:q], m: "or").result(distinct: false)
|
7
|
+
# end
|
8
|
+
|
9
|
+
field :id, as: :id
|
10
|
+
# field :data, as: :textarea, only_on: [:edit]
|
11
|
+
# field :user_name, as: :text
|
12
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
class RailsAppResource < Avo::BaseResource
|
2
|
+
self.title = :display_name
|
3
|
+
self.includes = []
|
4
|
+
|
5
|
+
# self.search_query = ->(params:) do
|
6
|
+
# scope.ransack(id_eq: params[:q], m: "or").result(distinct: false)
|
7
|
+
# end
|
8
|
+
|
9
|
+
field :id, as: :id
|
10
|
+
field :name, as: :text
|
11
|
+
|
12
|
+
field :db_schema, as: :has_one
|
13
|
+
field :table_count, as: :has_one
|
14
|
+
field :rubocop, as: :has_one
|
15
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
class RubocopResource < Avo::BaseResource
|
2
|
+
self.title = :display_name
|
3
|
+
self.includes = []
|
4
|
+
|
5
|
+
# self.search_query = ->(params:) do
|
6
|
+
# scope.ransack(id_eq: params[:q], m: "or").result(distinct: false)
|
7
|
+
# end
|
8
|
+
|
9
|
+
field :id, as: :id
|
10
|
+
# field :data, as: :textarea, only_on: [:edit]
|
11
|
+
# field :user_name, as: :text
|
12
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
class TableCountResource < Avo::BaseResource
|
2
|
+
self.title = :display_name
|
3
|
+
self.includes = []
|
4
|
+
|
5
|
+
# self.search_query = ->(params:) do
|
6
|
+
# scope.ransack(id_eq: params[:q], m: "or").result(distinct: false)
|
7
|
+
# end
|
8
|
+
|
9
|
+
field :id, as: :id
|
10
|
+
# field :data, as: :textarea, only_on: [:edit]
|
11
|
+
# field :user_name, as: :text
|
12
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# tutorial (user resource): https://youtu.be/WgNK-oINFww?t=599
|
2
|
+
class UserResource < Avo::BaseResource
|
3
|
+
# https://docs.avohq.io/2.0/resources.html#devise-password-optional
|
4
|
+
# you need to fill in the password when creating a new user,
|
5
|
+
# but when editing a user you can leave the password field empty
|
6
|
+
self.devise_password_optional = true
|
7
|
+
|
8
|
+
# tutorial (better search experience): https://youtu.be/WgNK-oINFww?t=649
|
9
|
+
self.title = :email
|
10
|
+
self.includes = []
|
11
|
+
|
12
|
+
self.search_query = ->(params:) do
|
13
|
+
scope
|
14
|
+
.ransack(id_eq: params[:q], name_cont: params[:q], email_cont: params[:q], m: "or")
|
15
|
+
.result(distinct: false)
|
16
|
+
end
|
17
|
+
|
18
|
+
field :id, as: :id
|
19
|
+
field :email, as: :gravatar, link_to_resource: true, as_avatar: true
|
20
|
+
field :name, as: :text
|
21
|
+
field :email, as: :text, as_description: true
|
22
|
+
field :password, as: :text
|
23
|
+
field :posts, as: :has_many
|
24
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
WITH
|
2
|
+
|
3
|
+
files AS (
|
4
|
+
SELECT jsonb_array_elements(data->'files') FROM rubocops
|
5
|
+
),
|
6
|
+
lines AS (
|
7
|
+
SELECT
|
8
|
+
jsonb_array_elements(files)->>'file' as file,
|
9
|
+
jsonb_array_elements(files)->'lines' as lines
|
10
|
+
FROM files
|
11
|
+
),
|
12
|
+
rubocop_log AS (
|
13
|
+
SELECT
|
14
|
+
jsonb_array_elements(lines)->>'position' as position,
|
15
|
+
jsonb_array_elements(lines)->>'status' as status,
|
16
|
+
jsonb_array_elements(lines)->>'status_message' as status_message,
|
17
|
+
jsonb_array_elements(lines)->>'cop' as cop,
|
18
|
+
jsonb_array_elements(lines)->>'message' as message,
|
19
|
+
jsonb_array_elements(lines)->>'full_line' as full_line,
|
20
|
+
jsonb_array_elements(lines)->>'file_name' as file_name
|
21
|
+
FROM lines
|
22
|
+
)
|
23
|
+
select * from rubocop_log
|
@@ -0,0 +1,40 @@
|
|
1
|
+
class SqlQuery
|
2
|
+
attr_reader :opts
|
3
|
+
attr_reader :sql
|
4
|
+
attr_reader :record
|
5
|
+
|
6
|
+
def initialize(**opts)
|
7
|
+
@opts = opts
|
8
|
+
@sql = self.class.sql
|
9
|
+
@record = self.class.record
|
10
|
+
end
|
11
|
+
|
12
|
+
def query(sql_query)
|
13
|
+
result = connection.execute(sql_query)
|
14
|
+
result.map { |row| record.new(**row) }
|
15
|
+
end
|
16
|
+
|
17
|
+
class << self
|
18
|
+
attr_reader :sql
|
19
|
+
attr_reader :record
|
20
|
+
|
21
|
+
def query(**opts)
|
22
|
+
new(**opts).call
|
23
|
+
end
|
24
|
+
|
25
|
+
def sql_resource(filename)
|
26
|
+
sql_file = File.expand_path(filename, File.dirname(__FILE__))
|
27
|
+
@sql = File.read(sql_file)
|
28
|
+
end
|
29
|
+
|
30
|
+
def fields(fields)
|
31
|
+
@record = Struct.new(*fields, keyword_init: true)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
protected
|
36
|
+
|
37
|
+
def connection
|
38
|
+
ActiveRecord::Base.connection
|
39
|
+
end
|
40
|
+
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,101 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# For more information regaring these settings check out our docs https://docs.avohq.io
|
4
|
+
Avo.configure do |config|
|
5
|
+
## == Routing ==
|
6
|
+
config.root_path = '/admin'
|
7
|
+
|
8
|
+
# https://docs.avohq.io/2.0/customization.html
|
9
|
+
config.app_name = 'Klueless NoCaaS'
|
10
|
+
config.id_links_to_resource = true
|
11
|
+
# config.resource_controls_placement = :left
|
12
|
+
|
13
|
+
# Where should the user be redirected when visting the `/avo` url
|
14
|
+
# config.home_path = nil
|
15
|
+
|
16
|
+
## == Licensing ==
|
17
|
+
config.license = 'pro' # change this to 'pro' when you add the license key
|
18
|
+
config.license_key = ENV['AVO_LICENSE_KEY']
|
19
|
+
|
20
|
+
## == Set the context ==
|
21
|
+
config.set_context do
|
22
|
+
# Return a context object that gets evaluated in Avo::ApplicationController
|
23
|
+
end
|
24
|
+
|
25
|
+
## == Authentication ==
|
26
|
+
config.current_user_method = :current_user
|
27
|
+
# config.authenticate_with = {}
|
28
|
+
|
29
|
+
## == Authorization ==
|
30
|
+
# config.authorization_methods = {
|
31
|
+
# index: 'index?',
|
32
|
+
# show: 'show?',
|
33
|
+
# edit: 'edit?',
|
34
|
+
# new: 'new?',
|
35
|
+
# update: 'update?',
|
36
|
+
# create: 'create?',
|
37
|
+
# destroy: 'destroy?',
|
38
|
+
# }
|
39
|
+
# config.raise_error_on_missing_policy = false
|
40
|
+
|
41
|
+
## == Localization ==
|
42
|
+
# config.locale = 'en-US'
|
43
|
+
|
44
|
+
## == Customization ==
|
45
|
+
# config.app_name = 'Avocadelicious'
|
46
|
+
# config.timezone = 'UTC'
|
47
|
+
# config.currency = 'USD'
|
48
|
+
# config.per_page = 24
|
49
|
+
# config.per_page_steps = [12, 24, 48, 72]
|
50
|
+
# config.via_per_page = 8
|
51
|
+
# config.default_view_type = :table
|
52
|
+
# config.hide_layout_when_printing = false
|
53
|
+
# config.id_links_to_resource = false
|
54
|
+
# config.full_width_container = false
|
55
|
+
# config.full_width_index_view = false
|
56
|
+
# config.cache_resources_on_index_view = true
|
57
|
+
# config.search_debounce = 300
|
58
|
+
# config.view_component_path = "app/components"
|
59
|
+
# config.display_license_request_timeout_error = true
|
60
|
+
# config.disabled_features = []
|
61
|
+
|
62
|
+
## == Breadcrumbs ==
|
63
|
+
# config.display_breadcrumbs = true
|
64
|
+
config.set_initial_breadcrumbs do
|
65
|
+
add_breadcrumb "Home", '/admin'
|
66
|
+
end
|
67
|
+
|
68
|
+
## == Menus ==
|
69
|
+
config.main_menu = -> {
|
70
|
+
section "Dashboards", icon: "dashboards" do
|
71
|
+
all_dashboards
|
72
|
+
end
|
73
|
+
|
74
|
+
section "Resources", icon: "resources" do
|
75
|
+
group "App Meta Data" do
|
76
|
+
resource :db_schema, label: 'DB Schema'
|
77
|
+
resource :rubocop, label: 'RuboCop'
|
78
|
+
resource :table_count, label: 'Table Count'
|
79
|
+
end
|
80
|
+
|
81
|
+
# group "Xxx" do # , collapsable: true, collapsed: true
|
82
|
+
# end
|
83
|
+
|
84
|
+
group "Admin" do
|
85
|
+
resource :user
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
section "Tools", icon: "tools" do
|
90
|
+
all_tools
|
91
|
+
end
|
92
|
+
|
93
|
+
section I18n.t('admin.external_links'), icon: "heroicons/outline/link", collapsable: true, collapsed: true do
|
94
|
+
link 'Appy Dave', path: 'https://appydave.com', target: :_blank
|
95
|
+
link 'Klueless', path: 'https://klueless.io/', target: :_blank
|
96
|
+
end
|
97
|
+
}
|
98
|
+
config.profile_menu = -> {
|
99
|
+
link "Profile", path: "/admin/profile", icon: "user-circle"
|
100
|
+
}
|
101
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
@data_path = "/Users/davidcruwys/dev/printspeak/printspeak-generator/.builders/.data/"
|
2
|
+
|
3
|
+
david = User.create_with(name: 'david', password: 'password').find_or_create_by(email: 'david@site.com')
|
4
|
+
|
5
|
+
def get_data(filename)
|
6
|
+
json = File.read(File.join(@data_path, filename))
|
7
|
+
JSON.parse(json)
|
8
|
+
end
|
9
|
+
|
10
|
+
rails_app = RailsApp.create(name: 'Printspeak', user: david)
|
11
|
+
|
12
|
+
puts 'Create Rubocop Data'
|
13
|
+
Rubocop.create(rails_app: rails_app, data: get_data('rubocop.json'))
|
14
|
+
|
15
|
+
puts 'Create Table Count Data'
|
16
|
+
TableCount.create(rails_app: rails_app, data: get_data('sql_count.json'))
|
17
|
+
|
18
|
+
|
@@ -8,42 +8,84 @@ self.local_template_path = File.dirname(__FILE__)
|
|
8
8
|
|
9
9
|
gac 'base rails 7 image created'
|
10
10
|
|
11
|
-
|
12
|
-
add_controller('page', 'benefits', 'faq', 'terms', 'privacy', '--skip-routes')
|
13
|
-
|
14
|
-
route("root 'home#index'")
|
15
|
-
route(<<-'RUBY')
|
16
|
-
PageController.action_methods.each do |action|
|
17
|
-
get "/#{action}", to: "page##{action}", as: "page_#{action}"
|
18
|
-
end
|
19
|
-
RUBY
|
11
|
+
prepare_environment
|
20
12
|
|
21
13
|
after_bundle do
|
22
|
-
|
14
|
+
force_copy
|
15
|
+
prepare_postgresql
|
16
|
+
scaffolds
|
17
|
+
setup_controllers
|
18
|
+
setup_customizations
|
23
19
|
setup_db
|
24
|
-
|
20
|
+
setup_avo
|
25
21
|
end
|
26
22
|
|
27
|
-
def
|
28
|
-
|
23
|
+
def scaffolds
|
24
|
+
add_scaffold('post', 'title', 'body:text')
|
25
|
+
add_scaffold('people', 'first_name', 'last_name', 'age:integer', 'address:text')
|
26
|
+
end
|
29
27
|
|
30
|
-
|
31
|
-
|
28
|
+
def setup_controllers
|
29
|
+
route("root 'home#index'")
|
32
30
|
|
33
|
-
|
31
|
+
add_controller('home', 'index')
|
32
|
+
add_controller('page', 'benefits', 'faq', 'terms', 'privacy', '--skip-routes')
|
34
33
|
|
35
|
-
|
36
|
-
|
34
|
+
route("root 'home#index'")
|
35
|
+
route(<<-'RUBY')
|
36
|
+
PageController.action_methods.each do |action|
|
37
|
+
get "/#{action}", to: "page##{action}", as: "page_#{action}"
|
38
|
+
end
|
39
|
+
RUBY
|
40
|
+
end
|
37
41
|
|
38
|
-
|
42
|
+
def setup_customizations
|
43
|
+
directory "app/assets/images"
|
44
|
+
directory "app/assets/stylesheets"
|
45
|
+
directory "app/controllers"
|
46
|
+
directory "app/models"
|
47
|
+
directory "app/views"
|
48
|
+
# directory "app/services"
|
39
49
|
template 'app/views/layouts/application.html.erb' , 'app/views/layouts/application.html.erb'
|
50
|
+
end
|
40
51
|
|
52
|
+
def setup_db
|
41
53
|
template 'db/seeds.rb' , 'db/seeds.rb'
|
54
|
+
|
55
|
+
gsub_file('config/database.yml', ' encoding: unicode', db_development_settings)
|
56
|
+
|
57
|
+
db(drop: true, create: true, migrate: true, seed: true)
|
42
58
|
end
|
43
59
|
|
44
|
-
def
|
45
|
-
|
46
|
-
|
60
|
+
def setup_avo
|
61
|
+
# generate('avo:install')
|
62
|
+
|
63
|
+
# generate('avo:resource Category')
|
64
|
+
# generate('avo:resource Post')
|
65
|
+
# generate('avo:resource Comment')
|
66
|
+
# generate('avo:resource Location')
|
67
|
+
# generate('avo:resource Room')
|
68
|
+
# generate('avo:resource Booking')
|
69
|
+
# generate('avo:resource User')
|
70
|
+
# generate('avo:dashboard Dashboard')
|
71
|
+
|
72
|
+
# directory "app/avo"
|
73
|
+
# directory "config/initializers"
|
74
|
+
# directory "config/locales"
|
75
|
+
|
76
|
+
# add devise support
|
77
|
+
# gsub_file 'config/initializers/avo.rb', %(# config.current_user_method = {}), 'config.current_user_method = :current_user'
|
78
|
+
end
|
79
|
+
|
80
|
+
def prepare_postgresql
|
81
|
+
gsub_file('config/database.yml', ' encoding: unicode', db_development_settings)
|
82
|
+
end
|
47
83
|
|
48
|
-
|
84
|
+
def db_development_settings
|
85
|
+
<<-'RUBY'
|
86
|
+
encoding: unicode
|
87
|
+
host: <%= ENV['DATABASE_HOST'] %>
|
88
|
+
username: <%= ENV['DATABASE_USERNAME'] %>
|
89
|
+
password: <%= ENV['DATABASE_PASSWORD'] %>
|
90
|
+
RUBY
|
49
91
|
end
|
@@ -11,6 +11,6 @@
|
|
11
11
|
# bob = User.create(email: 'bob@site.com', name: 'bob', password: 'password')
|
12
12
|
# lisa = User.create(email: 'lisa@site.com', name: 'lisa', password: 'password')
|
13
13
|
|
14
|
-
|
15
|
-
|
16
|
-
|
14
|
+
10.times do |i|
|
15
|
+
Post.create(title: "Post #{i}", body: "This is the body of post #{i}")
|
16
|
+
end
|
@@ -3,8 +3,8 @@
|
|
3
3
|
"skip_namespace": false,
|
4
4
|
"skip_collision_check": false,
|
5
5
|
"ruby": "/Users/davidcruwys/.asdf/installs/ruby/3.1.1/bin/ruby",
|
6
|
-
"database": "
|
7
|
-
"skip_git":
|
6
|
+
"database": "postgresql",
|
7
|
+
"skip_git": false,
|
8
8
|
"skip_keeps": false,
|
9
9
|
"skip_action_mailer": false,
|
10
10
|
"skip_action_mailbox": false,
|
@@ -32,16 +32,16 @@
|
|
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": true,
|
36
|
+
"add_avo": true,
|
37
37
|
"add_bcrypt": false,
|
38
|
-
"add_brakeman":
|
38
|
+
"add_brakeman": true,
|
39
39
|
"add_browser": false,
|
40
|
-
"add_bundler_audit":
|
40
|
+
"add_bundler_audit": true,
|
41
41
|
"add_chartkick": false,
|
42
|
-
"add_devise":
|
42
|
+
"add_devise": true,
|
43
43
|
"add_devise_masquerade": false,
|
44
|
-
"add_dotenv":
|
44
|
+
"add_dotenv": true,
|
45
45
|
"add_factory_bot_rails": true,
|
46
46
|
"add_faker": true,
|
47
47
|
"add_friendly_id": false,
|
@@ -52,7 +52,7 @@
|
|
52
52
|
"add_image_processing": false,
|
53
53
|
"add_kaminari": false,
|
54
54
|
"add_lograge": false,
|
55
|
-
"add_minimal_css":
|
55
|
+
"add_minimal_css": false,
|
56
56
|
"minimal_css_library": "water.css",
|
57
57
|
"add_mini_magick": false,
|
58
58
|
"add_motor_admin": false,
|
@@ -63,8 +63,9 @@
|
|
63
63
|
"add_ransack": false,
|
64
64
|
"add_redcarpet": false,
|
65
65
|
"add_rolify": false,
|
66
|
-
"add_rubocop":
|
66
|
+
"add_rubocop": true,
|
67
67
|
"add_twilio_ruby": false,
|
68
|
-
"template": "/Users/davidcruwys/dev/kgems/rails_app_generator/after_templates/
|
68
|
+
"template": "/Users/davidcruwys/dev/kgems/rails_app_generator/after_templates/application/klueless/_.rb",
|
69
|
+
"css": "tailwind"
|
69
70
|
}
|
70
71
|
}
|
@@ -7,9 +7,9 @@
|
|
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/
|
11
|
-
"database": "
|
12
|
-
"skip_git":
|
10
|
+
"template": "/Users/davidcruwys/dev/kgems/rails_app_generator/after_templates/application/klueless/_.rb",
|
11
|
+
"database": "postgresql",
|
12
|
+
"skip_git": false,
|
13
13
|
"skip_keeps": false,
|
14
14
|
"skip_action_mailer": false,
|
15
15
|
"skip_action_mailbox": false,
|
@@ -36,22 +36,22 @@
|
|
36
36
|
"api": false,
|
37
37
|
"minimal": false,
|
38
38
|
"javascript": "importmap",
|
39
|
-
"css": "",
|
39
|
+
"css": "tailwind",
|
40
40
|
"skip_bundle": false,
|
41
41
|
"note": "",
|
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": true,
|
46
|
+
"add_avo": true,
|
47
47
|
"add_bcrypt": false,
|
48
|
-
"add_brakeman":
|
48
|
+
"add_brakeman": true,
|
49
49
|
"add_browser": false,
|
50
|
-
"add_bundler_audit":
|
50
|
+
"add_bundler_audit": true,
|
51
51
|
"add_chartkick": false,
|
52
|
-
"add_devise":
|
52
|
+
"add_devise": true,
|
53
53
|
"add_devise_masquerade": false,
|
54
|
-
"add_dotenv":
|
54
|
+
"add_dotenv": true,
|
55
55
|
"add_factory_bot_rails": true,
|
56
56
|
"add_faker": true,
|
57
57
|
"add_friendly_id": false,
|
@@ -62,7 +62,7 @@
|
|
62
62
|
"add_image_processing": false,
|
63
63
|
"add_kaminari": false,
|
64
64
|
"add_lograge": false,
|
65
|
-
"add_minimal_css":
|
65
|
+
"add_minimal_css": false,
|
66
66
|
"minimal_css_library": "water.css",
|
67
67
|
"add_mini_magick": false,
|
68
68
|
"add_motor_admin": false,
|
@@ -73,7 +73,7 @@
|
|
73
73
|
"add_ransack": false,
|
74
74
|
"add_redcarpet": false,
|
75
75
|
"add_rolify": false,
|
76
|
-
"add_rubocop":
|
76
|
+
"add_rubocop": true,
|
77
77
|
"add_twilio_ruby": false
|
78
78
|
}
|
79
79
|
}
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# lib/rails_app_generator/rag_initializer.rb
|
4
|
+
# add_if(:scenic)
|
5
|
+
# rag.add_option :add_scenic , type: :boolean, default: false
|
6
|
+
|
7
|
+
module RailsAppGenerator
|
8
|
+
# Custom add-ons for RailsAppGenerator
|
9
|
+
module AddOns
|
10
|
+
# Add Scenic to rails application
|
11
|
+
class Scenic < RailsAppGenerator::Addon
|
12
|
+
required_gem gem.version('scenic', '1.6.0', '')
|
13
|
+
|
14
|
+
def apply
|
15
|
+
say 'Setting up Scenic'
|
16
|
+
# template('scenic_template.rb', 'target/scenic.rb', force: true)
|
17
|
+
# template('app/javascript/stylesheets/components.scss')
|
18
|
+
# create_file('target/scenic.rb', 'put your content here')
|
19
|
+
# directory 'app/template', 'app/target', force: true
|
20
|
+
# empty_directory 'app/target'
|
21
|
+
# inject_into_file('app/application.js', "some content")
|
22
|
+
# rails_command('tailwindcss:install')
|
23
|
+
end
|
24
|
+
|
25
|
+
def before_template
|
26
|
+
say 'Setting up Scenic - before custom template'
|
27
|
+
end
|
28
|
+
|
29
|
+
def before_bundle
|
30
|
+
say 'Setting up Scenic - before bundle install'
|
31
|
+
end
|
32
|
+
|
33
|
+
def after_bundle
|
34
|
+
say 'Setting up Scenic - after bundle install'
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -291,6 +291,15 @@ module RailsAppGenerator
|
|
291
291
|
rails_command('db:migrate')
|
292
292
|
end
|
293
293
|
|
294
|
+
def db(drop: false, create: false, migrate: false, seed: false)
|
295
|
+
commands = []
|
296
|
+
commands << 'db:drop' if drop
|
297
|
+
commands << 'db:create' if create
|
298
|
+
commands << 'db:migrate' if migrate
|
299
|
+
commands << 'db:seed' if seed
|
300
|
+
rails_command(commands.join(' '))
|
301
|
+
end
|
302
|
+
|
294
303
|
def db_seed
|
295
304
|
rails_command('db:seed')
|
296
305
|
end
|
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.41",
|
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.41",
|
10
10
|
"dependencies": {
|
11
11
|
"daisyui": "^2.20.0"
|
12
12
|
},
|
data/package.json
CHANGED
@@ -0,0 +1,23 @@
|
|
1
|
+
{
|
2
|
+
"args": {
|
3
|
+
"app_path": "klueless",
|
4
|
+
"destination_root": "/Users/davidcruwys/dev/kweb",
|
5
|
+
"note": "add sidekiq to handle the data import tasks, add impersonate"
|
6
|
+
},
|
7
|
+
"opts": {
|
8
|
+
"skip_test": true,
|
9
|
+
"database": "postgresql",
|
10
|
+
"css": "tailwind",
|
11
|
+
"template": "/Users/davidcruwys/dev/kgems/rails_app_generator/after_templates/application/klueless/_.rb",
|
12
|
+
"add_avo": true,
|
13
|
+
"add_annotate": true,
|
14
|
+
"add_brakeman": true,
|
15
|
+
"add_bundler_audit": true,
|
16
|
+
"add_devise": true,
|
17
|
+
"add_dotenv": true,
|
18
|
+
"add_factory_bot_rails": true,
|
19
|
+
"add_faker": true,
|
20
|
+
"add_ransack": false,
|
21
|
+
"add_rubocop": true
|
22
|
+
}
|
23
|
+
}
|
@@ -5,10 +5,16 @@
|
|
5
5
|
},
|
6
6
|
"opts": {
|
7
7
|
"skip_test": true,
|
8
|
-
"template": "/Users/davidcruwys/dev/kgems/rails_app_generator/after_templates/application/printspeak/_.rb",
|
9
8
|
"css": "bootstrap",
|
9
|
+
"database": "postgresql",
|
10
|
+
"template": "/Users/davidcruwys/dev/kgems/rails_app_generator/after_templates/application/printspeak/_.rb",
|
11
|
+
"add_avo": true,
|
10
12
|
"add_annotate": true,
|
13
|
+
"add_devise": true,
|
11
14
|
"add_dotenv": true,
|
15
|
+
"add_factory_bot_rails": true,
|
16
|
+
"add_faker": true,
|
17
|
+
"add_ransack": false,
|
12
18
|
"add_rubocop": true
|
13
19
|
}
|
14
20
|
}
|
data/templates/Gemfile.erb
CHANGED
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.41
|
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-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bootsnap
|
@@ -444,6 +444,30 @@ files:
|
|
444
444
|
- after_templates/addons/twilio_ruby/app/controllers/home_controller.rb
|
445
445
|
- after_templates/addons/twilio_ruby/app/views/home/index.html.erb
|
446
446
|
- after_templates/addons/twilio_ruby/config/initializers/twilio.rb
|
447
|
+
- after_templates/application/klueless/_.rb
|
448
|
+
- after_templates/application/klueless/app/avo/dashboards/dashboard.rb
|
449
|
+
- after_templates/application/klueless/app/avo/resources/db_schema_resource.rb
|
450
|
+
- after_templates/application/klueless/app/avo/resources/rails_app_resource.rb
|
451
|
+
- after_templates/application/klueless/app/avo/resources/rubocop_resource.rb
|
452
|
+
- after_templates/application/klueless/app/avo/resources/table_count_resource.rb
|
453
|
+
- after_templates/application/klueless/app/avo/resources/user_resource.rb
|
454
|
+
- after_templates/application/klueless/app/controllers/home_controller.rb
|
455
|
+
- after_templates/application/klueless/app/models/db_schema.rb
|
456
|
+
- after_templates/application/klueless/app/models/rails_app.rb
|
457
|
+
- after_templates/application/klueless/app/models/rubocop.rb
|
458
|
+
- after_templates/application/klueless/app/models/table_count.rb
|
459
|
+
- after_templates/application/klueless/app/queries/rubocop_log.psql
|
460
|
+
- after_templates/application/klueless/app/queries/rubocop_log_query.rb
|
461
|
+
- after_templates/application/klueless/app/queries/sql_query.rb
|
462
|
+
- after_templates/application/klueless/app/services/seed_service.rb
|
463
|
+
- after_templates/application/klueless/app/views/home/index.html.erb
|
464
|
+
- after_templates/application/klueless/app/views/home/quick_signin.html.erb
|
465
|
+
- after_templates/application/klueless/app/views/layouts/_footer.html.erb
|
466
|
+
- after_templates/application/klueless/app/views/layouts/_navbar.html.erb
|
467
|
+
- after_templates/application/klueless/app/views/layouts/application.html.erb
|
468
|
+
- after_templates/application/klueless/config/initializers/avo.rb
|
469
|
+
- after_templates/application/klueless/config/locales/en.yml
|
470
|
+
- after_templates/application/klueless/db/seeds.rb
|
447
471
|
- after_templates/application/printspeak/_.rb
|
448
472
|
- after_templates/application/printspeak/app/assets/images/.keep
|
449
473
|
- after_templates/application/printspeak/app/assets/images/about/1.jpg
|
@@ -703,6 +727,7 @@ files:
|
|
703
727
|
- lib/rails_app_generator/addons/rspec.rb
|
704
728
|
- lib/rails_app_generator/addons/rubocop.rb
|
705
729
|
- lib/rails_app_generator/addons/scaffold.rb
|
730
|
+
- lib/rails_app_generator/addons/scenic.rb
|
706
731
|
- lib/rails_app_generator/addons/services.rb
|
707
732
|
- lib/rails_app_generator/addons/sidekiq.rb
|
708
733
|
- lib/rails_app_generator/addons/stimulus.rb
|
@@ -776,6 +801,7 @@ files:
|
|
776
801
|
- profiles/addons/rolify.json
|
777
802
|
- profiles/addons/rubocop.json
|
778
803
|
- profiles/addons/twilio_ruby.json
|
804
|
+
- profiles/application/klueless.json
|
779
805
|
- profiles/application/printspeak.json
|
780
806
|
- profiles/rag/bootstrap.json
|
781
807
|
- profiles/rag/devise.json
|