rails_app_generator 0.2.38 → 0.2.41

Sign up to get free protection for your applications and to get access to all the features.
Files changed (74) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +21 -0
  3. data/after_templates/addons/avo/_.rb +11 -3
  4. data/after_templates/addons/avo/app/avo/resources/post_resource.rb +3 -0
  5. data/after_templates/addons/avo/app/avo/resources/user_resource.rb +1 -0
  6. data/after_templates/addons/avo/app/controllers/home_controller.rb +4 -0
  7. data/after_templates/addons/avo/app/models/post.rb +3 -2
  8. data/after_templates/addons/avo/app/models/user.rb +6 -0
  9. data/after_templates/addons/avo/app/services/seed_service.rb +9 -0
  10. data/after_templates/addons/avo/app/views/home/index.html.erb +4 -2
  11. data/after_templates/addons/avo/app/views/layouts/_navbar.html.erb +7 -1
  12. data/after_templates/addons/avo/db/seeds.rb +1 -1
  13. data/after_templates/addons/factory_bot_rails/_.rb +45 -0
  14. data/after_templates/addons/factory_bot_rails/app/controllers/home_controller.rb +8 -0
  15. data/after_templates/addons/factory_bot_rails/app/services/seed_service.rb +27 -0
  16. data/after_templates/addons/factory_bot_rails/app/views/home/index.html.erb +3 -0
  17. data/after_templates/addons/factory_bot_rails/app/views/home/reseed.html.erb +6 -0
  18. data/after_templates/addons/factory_bot_rails/app/views/layouts/_footer.html.erb +0 -0
  19. data/after_templates/addons/factory_bot_rails/app/views/layouts/_navbar.html.erb +6 -0
  20. data/after_templates/addons/factory_bot_rails/app/views/layouts/application.html.erb +29 -0
  21. data/after_templates/addons/factory_bot_rails/db/seeds.rb +1 -0
  22. data/after_templates/addons/factory_bot_rails/factories.rb +27 -0
  23. data/after_templates/addons/friendly_id/app/views/posts/_form.html.erb +32 -0
  24. data/after_templates/addons/friendly_id/app/views/posts/_post.html.erb +17 -0
  25. data/after_templates/addons/friendly_id/app/views/posts/_post.json.jbuilder +2 -0
  26. data/after_templates/addons/friendly_id/app/views/posts/edit.html.erb +10 -0
  27. data/after_templates/addons/friendly_id/app/views/posts/index.html.erb +14 -0
  28. data/after_templates/addons/friendly_id/app/views/posts/index.json.jbuilder +1 -0
  29. data/after_templates/addons/friendly_id/app/views/posts/new.html.erb +9 -0
  30. data/after_templates/addons/friendly_id/app/views/posts/show.json.jbuilder +1 -0
  31. data/after_templates/application/klueless/_.rb +99 -0
  32. data/after_templates/application/klueless/app/avo/dashboards/dashboard.rb +13 -0
  33. data/after_templates/application/klueless/app/avo/resources/db_schema_resource.rb +12 -0
  34. data/after_templates/application/klueless/app/avo/resources/rails_app_resource.rb +15 -0
  35. data/after_templates/application/klueless/app/avo/resources/rubocop_resource.rb +12 -0
  36. data/after_templates/application/klueless/app/avo/resources/table_count_resource.rb +12 -0
  37. data/after_templates/application/klueless/app/avo/resources/user_resource.rb +24 -0
  38. data/after_templates/application/klueless/app/controllers/home_controller.rb +12 -0
  39. data/after_templates/application/klueless/app/models/db_schema.rb +11 -0
  40. data/after_templates/application/klueless/app/models/rails_app.rb +3 -0
  41. data/after_templates/application/klueless/app/models/rubocop.rb +11 -0
  42. data/after_templates/application/klueless/app/models/table_count.rb +11 -0
  43. data/after_templates/application/klueless/app/queries/rubocop_log.psql +23 -0
  44. data/after_templates/application/klueless/app/queries/rubocop_log_query.rb +10 -0
  45. data/after_templates/application/klueless/app/queries/sql_query.rb +40 -0
  46. data/after_templates/application/klueless/app/services/seed_service.rb +7 -0
  47. data/after_templates/application/klueless/app/views/home/index.html.erb +6 -0
  48. data/after_templates/application/klueless/app/views/home/quick_signin.html.erb +3 -0
  49. data/after_templates/application/klueless/app/views/layouts/_footer.html.erb +0 -0
  50. data/after_templates/application/klueless/app/views/layouts/_navbar.html.erb +4 -0
  51. data/after_templates/application/klueless/app/views/layouts/application.html.erb +29 -0
  52. data/after_templates/application/klueless/config/initializers/avo.rb +101 -0
  53. data/after_templates/application/klueless/config/locales/en.yml +4 -0
  54. data/after_templates/application/klueless/db/seeds.rb +18 -0
  55. data/after_templates/application/printspeak/_.rb +65 -23
  56. data/after_templates/application/printspeak/db/seeds.rb +3 -3
  57. data/docs/last_run/app_generator_class.json +8 -0
  58. data/docs/last_run/app_generator_data.json +14 -12
  59. data/docs/last_run/rails_options_class.json +8 -0
  60. data/docs/last_run/rails_options_data.json +14 -13
  61. data/lib/rails_app_generator/addons/avo.rb +2 -0
  62. data/lib/rails_app_generator/addons/factory_bot_rails.rb +15 -0
  63. data/lib/rails_app_generator/addons/scenic.rb +38 -0
  64. data/lib/rails_app_generator/app_generator.rb +18 -0
  65. data/lib/rails_app_generator/rag_initializer.rb +1 -0
  66. data/lib/rails_app_generator/version.rb +1 -1
  67. data/package-lock.json +2 -2
  68. data/package.json +1 -1
  69. data/profiles/addons/avo.json +1 -1
  70. data/profiles/addons/factory_bot_rails.json +14 -0
  71. data/profiles/application/klueless.json +23 -0
  72. data/profiles/application/printspeak.json +7 -1
  73. data/templates/Gemfile.erb +0 -1
  74. metadata +50 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: acc731854bb8ac95ec84859705ef81a8b9858802d9675a54dc02a6af5a9ee676
4
- data.tar.gz: 3be6aedc699c1f8078aaa54e465658b17ed4e9b66f56e63832e187c0119e9afa
3
+ metadata.gz: 6f266923a169ab15ff8606551f4e023723d947f785513dc89083e0762fd2d568
4
+ data.tar.gz: 55093884128eff848ef3a6b21e415c3739530110590d58308bb7037674022744
5
5
  SHA512:
6
- metadata.gz: 520c0072f1fa27c043d4af71667cc486e67cae7606d19daa558482c6e7892322f1b7ab89d2ce685098d635b4d307d3f34ab035ce132b0eb131e625f2071f1f39
7
- data.tar.gz: 57781bbb63ea180fb25aac7727d5ae0c88e8f2948d46e2d14635accb78a750c589462075cdfb2368f95eac8eb1da416150644370497e4c4c56b25b39a5bd5ee8
6
+ metadata.gz: aaf2fc71ee43c3d12c73b2ab6c91e1c7b5aacd31740a17284b845eb60aff94058634b7d346910242777d1e7ae17d4d75cde624002e6b67b2c5b73e530a6668d2
7
+ data.tar.gz: c2c8a7dbb9d0cf975b4e02d19309147a3a90ae5a58da010b007eba9f2713d8289b6e3dbe1ee5caa04b33ef95a9d6c9eae31f97ec4480cad7969d4fdb1796642f
data/CHANGELOG.md CHANGED
@@ -1,3 +1,24 @@
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
+
8
+ ## [0.2.39](https://github.com/klueless-io/rails_app_generator/compare/v0.2.38...v0.2.39) (2022-08-23)
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * add friendly_id profile, add factory_bot_rails addon ([75d51ce](https://github.com/klueless-io/rails_app_generator/commit/75d51ceb63a5a560977073b2a6199545c5c8d17f))
14
+
15
+ ## [0.2.38](https://github.com/klueless-io/rails_app_generator/compare/v0.2.37...v0.2.38) (2022-08-22)
16
+
17
+
18
+ ### Bug Fixes
19
+
20
+ * add friendly_id addon ([5c34df5](https://github.com/klueless-io/rails_app_generator/commit/5c34df5fdbca8bc6810bd3cc9343d8b799d63ac3))
21
+
1
22
  ## [0.2.37](https://github.com/klueless-io/rails_app_generator/compare/v0.2.36...v0.2.37) (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
@@ -20,4 +20,5 @@ class UserResource < Avo::BaseResource
20
20
  field :name, as: :text
21
21
  field :email, as: :text, as_description: true
22
22
  field :password, as: :text
23
+ field :posts, as: :has_many
23
24
  end
@@ -5,4 +5,8 @@ class HomeController < ApplicationController
5
5
  def quick_signin
6
6
  sign_in(:user, User.first)
7
7
  end
8
+
9
+ def reseed
10
+ SeedService.seed
11
+ end
8
12
  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(100)
8
+ ActionView::Base.full_sanitizer.sanitize(content).truncate(50)
8
9
  end
9
10
  end
@@ -0,0 +1,6 @@
1
+ class User < ApplicationRecord
2
+ devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable
3
+
4
+ has_many :posts
5
+ has_many :comments
6
+ end
@@ -0,0 +1,9 @@
1
+ require 'open-uri'
2
+
3
+ class SeedService
4
+ class << self
5
+ def seed
6
+ puts 'sssssssssssssssssssssss'
7
+ end
8
+ end
9
+ end
@@ -1,3 +1,5 @@
1
- <h1>I18n.t('application_name')</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. The result is a full-featured admin panel that works out of the box, ready to give to your end-users.</p>
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 %>
@@ -176,7 +176,7 @@ end
176
176
  content: Faker::Lorem.sentences(number: 5).join('<br />'),
177
177
  published: Faker::Boolean.boolean(true_ratio: 0.6),
178
178
  category: Category.all.sample,
179
- author: User.all.sample)
179
+ user: User.all.sample)
180
180
  end
181
181
 
182
182
  # 200.times do
@@ -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,8 @@
1
+ class HomeController < ApplicationController
2
+ def index
3
+ end
4
+
5
+ def reseed
6
+ SeedService.seed
7
+ end
8
+ 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
@@ -0,0 +1,3 @@
1
+ <h1>Factory bot rails</h1>
2
+
3
+ <p></p>
@@ -0,0 +1,6 @@
1
+ <h1>Re-Seed</h1>
2
+ <p>Database has been re-seeded</p>
3
+
4
+ <p>Posts: <%= Post.count %></p>
5
+ <p>People: <%= Person.count %></p>
6
+ <p>Projects: <%= Project.count %></p>
@@ -0,0 +1,6 @@
1
+ <%= link_to 'Home', root_path %>
2
+ | <%= link_to 'Re-Seed', home_reseed_path %>
3
+ | <%= link_to 'Posts', posts_path %>
4
+ | <%= link_to 'People', people_path %>
5
+ | <%= link_to 'Projects', projects_path %>
6
+ <hr />
@@ -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,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,17 @@
1
+ <div id="<%= dom_id post %>">
2
+ <p>
3
+ <strong>Title:</strong>
4
+ <%= post.title %>
5
+ </p>
6
+
7
+ <p>
8
+ <strong>Body:</strong>
9
+ <%= post.body %>
10
+ </p>
11
+
12
+ <p>
13
+ <strong>Slug:</strong>
14
+ <%= post.slug %>
15
+ </p>
16
+
17
+ </div>
@@ -0,0 +1,2 @@
1
+ json.extract! post, :id, :title, :body, :slug, :created_at, :updated_at
2
+ json.url post_url(post, format: :json)
@@ -0,0 +1,10 @@
1
+ <h1>Editing post</h1>
2
+
3
+ <%= render "form", post: @post %>
4
+
5
+ <br>
6
+
7
+ <div>
8
+ <%= link_to "Show this post", @post %> |
9
+ <%= link_to "Back to posts", posts_path %>
10
+ </div>
@@ -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,9 @@
1
+ <h1>New post</h1>
2
+
3
+ <%= render "form", post: @post %>
4
+
5
+ <br>
6
+
7
+ <div>
8
+ <%= link_to "Back to posts", posts_path %>
9
+ </div>
@@ -0,0 +1 @@
1
+ json.partial! "posts/post", post: @post
@@ -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