Skip to content

Commit a5297d8

Browse files
authored
Merge pull request #2 from sabljak/copy-generators
Copy existing generator files from tailwind rails
2 parents 06f4b87 + ca1b4a9 commit a5297d8

File tree

10 files changed

+170
-1
lines changed

10 files changed

+170
-1
lines changed
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
require 'rails/generators/erb/scaffold/scaffold_generator'
2+
require "rails/generators/resource_helpers"
3+
4+
module Tailwindcss
5+
module Generators
6+
class ScaffoldGenerator < Erb::Generators::ScaffoldGenerator
7+
include Rails::Generators::ResourceHelpers
8+
9+
source_root File.expand_path("../templates", __FILE__)
10+
11+
argument :attributes, type: :array, default: [], banner: "field:type field:type"
12+
13+
def create_root_folder
14+
empty_directory File.join("app/views", controller_file_path)
15+
end
16+
17+
def copy_view_files
18+
available_views.each do |view|
19+
formats.each do |format|
20+
filename = filename_with_extensions(view, format)
21+
template filename, File.join("app/views", controller_file_path, filename)
22+
end
23+
end
24+
25+
template "partial.html.erb", File.join("app/views", controller_file_path, "_#{singular_table_name}.html.erb")
26+
end
27+
28+
private
29+
def available_views
30+
%w(index edit show new _form)
31+
end
32+
end
33+
end
34+
end
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
<%%= form_with(model: <%= model_resource_name %>, class: "contents") do |form| %>
2+
<%% if <%= singular_table_name %>.errors.any? %>
3+
<div id="error_explanation" class="bg-red-50 text-red-500 px-3 py-2 font-medium rounded-lg mt-3">
4+
<h2><%%= pluralize(<%= singular_table_name %>.errors.count, "error") %> prohibited this <%= singular_table_name %> from being saved:</h2>
5+
6+
<ul>
7+
<%% <%= singular_table_name %>.errors.each do |error| %>
8+
<li><%%= error.full_message %></li>
9+
<%% end %>
10+
</ul>
11+
</div>
12+
<%% end %>
13+
14+
<% attributes.each do |attribute| -%>
15+
<div class="my-5">
16+
<% if attribute.password_digest? -%>
17+
<%%= form.label :password %>
18+
<%%= form.password_field :password %>
19+
</div>
20+
21+
<div class="my-5">
22+
<%%= form.label :password_confirmation %>
23+
<%%= form.password_field :password_confirmation, class: "block shadow rounded-md border border-gray-200 outline-none px-3 py-2 mt-2 w-full" %>
24+
<% elsif attribute.attachments? -%>
25+
<%%= form.label :<%= attribute.column_name %> %>
26+
<%%= form.<%= attribute.field_type %> :<%= attribute.column_name %>, multiple: true, class: "block shadow rounded-md border border-gray-200 outline-none px-3 py-2 mt-2 w-full" %>
27+
<% else -%>
28+
<%%= form.label :<%= attribute.column_name %> %>
29+
<% if attribute.field_type == :text_area -%>
30+
<%%= form.<%= attribute.field_type %> :<%= attribute.column_name %>, rows: 4, class: "block shadow rounded-md border border-gray-200 outline-none px-3 py-2 mt-2 w-full" %>
31+
<% elsif attribute.field_type == :check_box -%>
32+
<%%= form.<%= attribute.field_type %> :<%= attribute.column_name %>, class: "block mt-2 h-5 w-5" %>
33+
<% else -%>
34+
<%%= form.<%= attribute.field_type %> :<%= attribute.column_name %>, class: "block shadow rounded-md border border-gray-200 outline-none px-3 py-2 mt-2 w-full" %>
35+
<% end -%>
36+
<% end -%>
37+
</div>
38+
39+
<% end -%>
40+
<div class="inline">
41+
<%%= form.submit class: "rounded-lg py-3 px-5 bg-blue-600 text-white inline-block font-medium" %>
42+
</div>
43+
<%% end %>
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<div class="mx-auto md:w-2/3 w-full">
2+
<h1 class="font-bold text-4xl">Editing <%= human_name.downcase %></h1>
3+
4+
<%%= render "form", <%= singular_table_name %>: @<%= singular_table_name %> %>
5+
6+
<%%= link_to "Show this <%= human_name.downcase %>", @<%= singular_table_name %>, class: "ml-2 rounded-lg py-3 px-5 bg-gray-100 inline-block font-medium" %>
7+
<%%= link_to "Back to <%= human_name.pluralize.downcase %>", <%= index_helper %>_path, class: "ml-2 rounded-lg py-3 px-5 bg-gray-100 inline-block font-medium" %>
8+
</div>
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<div class="w-full">
2+
<%% if notice.present? %>
3+
<p class="py-2 px-3 bg-green-50 mb-5 text-green-500 font-medium rounded-lg inline-block" id="notice"><%%= notice %></p>
4+
<%% end %>
5+
6+
<div class="flex justify-between items-center">
7+
<h1 class="text-lg font-bold text-4xl"><%= human_name.pluralize %></h1>
8+
<%%= link_to 'New <%= human_name.downcase %>', new_<%= singular_route_name %>_path, class: "rounded-lg py-3 px-5 bg-blue-600 text-white block font-medium" %>
9+
</div>
10+
11+
<div id="<%= plural_table_name %>" class="min-w-full">
12+
<%%= render @<%= plural_table_name %> %>
13+
</div>
14+
</div>
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<div class="mx-auto md:w-2/3 w-full">
2+
<h1 class="text-lg font-bold text-4xl">New <%= human_name.downcase %></h1>
3+
4+
<%%= render "form", <%= singular_table_name %>: @<%= singular_table_name %> %>
5+
6+
<%%= link_to 'Back to <%= human_name.pluralize.downcase %>', <%= index_helper %>_path, class: "ml-2 rounded-lg py-3 px-5 bg-gray-100 inline-block font-medium" %>
7+
</div>
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<div id="<%%= dom_id <%= singular_table_name %> %>">
2+
<% attributes.reject(&:password_digest?).each do |attribute| -%>
3+
<p class="my-5">
4+
<strong class="block font-medium mb-1"><%= attribute.human_name %>:</strong>
5+
<% if attribute.attachment? -%>
6+
<%%= link_to <%= singular_table_name %>.<%= attribute.column_name %>.filename, <%= singular_table_name %>.<%= attribute.column_name %> if <%= singular_table_name %>.<%= attribute.column_name %>.attached? %>
7+
<% elsif attribute.attachments? -%>
8+
<%% <%= singular_table_name %>.<%= attribute.column_name %>.each do |<%= attribute.singular_name %>| %>
9+
<div><%%= link_to <%= attribute.singular_name %>.filename, <%= attribute.singular_name %> %></div>
10+
<%% end %>
11+
<% else -%>
12+
<%%= <%= singular_table_name %>.<%= attribute.column_name %> %>
13+
<% end -%>
14+
</p>
15+
16+
<% end -%>
17+
<%% if action_name != "show" %>
18+
<%%= link_to "Show this <%= human_name.downcase %>", <%= singular_table_name %>, class: "rounded-lg py-3 px-5 bg-gray-100 inline-block font-medium" %>
19+
<%%= link_to 'Edit this <%= human_name.downcase %>', edit_<%= singular_table_name %>_path(<%= singular_table_name %>), class: "rounded-lg py-3 ml-2 px-5 bg-gray-100 inline-block font-medium" %>
20+
<hr class="mt-6">
21+
<%% end %>
22+
</div>
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<div class="mx-auto md:w-2/3 w-full flex">
2+
<div class="mx-auto">
3+
<%% if notice.present? %>
4+
<p class="py-2 px-3 bg-green-50 mb-5 text-green-500 font-medium rounded-lg inline-block" id="notice"><%%= notice %></p>
5+
<%% end %>
6+
7+
<%%= render @<%= singular_table_name %> %>
8+
9+
<%%= link_to 'Edit this <%= singular_table_name %>', edit_<%= singular_table_name %>_path(@<%= singular_table_name %>), class: "mt-2 rounded-lg py-3 px-5 bg-gray-100 inline-block font-medium" %>
10+
<div class="inline-block ml-2">
11+
<%%= button_to 'Delete this <%= singular_table_name %>', <%= singular_table_name %>_path(@<%= singular_table_name %>), method: :delete, data: { confirm: "Are you sure you want to delete this <%= singular_table_name %>?" }, class: "mt-2 rounded-lg py-3 px-5 bg-gray-100 font-medium" %>
12+
</div>
13+
<%%= link_to 'Back to <%= plural_table_name %>', <%= index_helper %>_path, class: "ml-2 rounded-lg py-3 px-5 bg-gray-100 inline-block font-medium" %>
14+
</div>
15+
</div>

lib/install/tailwindcss.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,10 @@
1313

1414

1515
if APPLICATION_LAYOUT_PATH.exist?
16-
say "Add Tailwindcss include tags in application layout"
16+
say "Add Tailwindcss include tags and container element in application layout"
1717
insert_into_file Rails.root.join("app/views/layouts/application.html.erb").to_s, %(\n <%= stylesheet_pack_tag "application", "data-turbo-track": "reload" %>), before: /\s*<\/head>/
18+
insert_into_file APPLICATION_LAYOUT_PATH.to_s, %( <main class="container mx-auto mt-28 px-5 flex">\n ), before: /^\s*<%= yield/
19+
insert_into_file APPLICATION_LAYOUT_PATH.to_s, %(\n </main>), after: /^\s*<%= yield %>/
1820
else
1921
say "Default application.html.erb is missing!", :red
2022
say %( Add <%= stylesheet_pack_tag "application", "data-turbo-track": "reload" %> within the <head> tag in your custom layout.)

lib/tailwindcss/engine.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
module Tailwindcss
22
class Engine < ::Rails::Engine
3+
config.app_generators do |g|
4+
g.template_engine :tailwindcss
5+
end
36
end
47
end
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
require "test_helper"
2+
require "generators/tailwindcss/scaffold/scaffold_generator"
3+
4+
class Tailwindcss::Generators::ScaffoldGeneratorTest < Rails::Generators::TestCase
5+
GENERATION_PATH = File.expand_path("../tmp", File.dirname(__FILE__))
6+
7+
tests Tailwindcss::Generators::ScaffoldGenerator
8+
destination GENERATION_PATH
9+
10+
arguments %w(message title:string content:text)
11+
12+
Minitest.after_run do
13+
FileUtils.rm_rf GENERATION_PATH
14+
end
15+
16+
test "generates correct view templates" do
17+
run_generator
18+
19+
%w(index edit new show _form _message).each { |view| assert_file "app/views/messages/#{view}.html.erb" }
20+
end
21+
end

0 commit comments

Comments
 (0)