hot-glue 0.0.5 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -5,6 +5,3 @@
5
5
  = form_with model: <%= singular %>, url: <%= path_helper_plural %>(<%= nested_objects_arity %>), method: "post" do |f|
6
6
  = render partial: "<%=namespace_with_slash%><%= @plural %>/form", locals: {<%= singular %>: <%= singular %>, f: f}
7
7
 
8
- .row
9
- .col-md-12
10
- = f.submit "Save", class: "btn btn-primary pull-right"
@@ -1,7 +1,7 @@
1
1
  <%= all_line_fields %>
2
2
  .col
3
3
  <% if destroy_action %>
4
- = link_to "Delete <i class='fa fa-1x fa-remove'></i>".html_safe, <%= path_helper_full %>(<%= path_helper_args %>), method: :delete, data: {confirm: 'Are you sure?'}, disable_with: "Loading...", class: "delete-<%= singular %>-button btn btn-primary "
4
+ = link_to "Delete <i class='fa fa-1x fa-remove'></i>".html_safe, <%= path_helper_singular %>(<%= path_helper_args %>), method: :delete, data: {confirm: 'Are you sure?'}, disable_with: "Loading...", class: "delete-<%= singular %>-button btn btn-primary "
5
5
  <% end %>
6
6
  &nbsp;
7
- = link_to "Edit <i class='fa fa-1x fa-list-alt'></i>".html_safe, edit_<%= path_helper_full %>(<%= path_helper_args %>), disable_with: "Loading...", class: "edit-<%= singular %>-button btn btn-primary "
7
+ = link_to "Edit <i class='fa fa-1x fa-list-alt'></i>".html_safe, edit_<%= path_helper_singular %>(<%= path_helper_args %>), <% if @big_edit %>'data-turbo' => 'false', <% end %>disable_with: "Loading...", class: "edit-<%= singular %>-button btn btn-primary "
@@ -1,7 +1,6 @@
1
1
  class <%= controller_class_name %> < <%= controller_descends_from %>
2
2
  <% unless @auth_identifier == '' || @auth.nil? %>before_action :authenticate_<%= @auth_identifier %>!<% end %>
3
- <% if any_nested? %> <% @nested_args.each do |arg| %>
4
- before_action :load_<%= arg %><% end %> <% end %>
3
+
5
4
  before_action :load_<%= singular_name %>, only: [:show, :edit, :update, :destroy]
6
5
  helper :hot_glue
7
6
  include HotGlue::ControllerHelper
@@ -11,22 +10,23 @@ class <%= controller_class_name %> < <%= controller_descends_from %>
11
10
  <% end %>
12
11
 
13
12
  <% if any_nested? %><% nest_chain = [] %> <% @nested_args.each { |arg|
14
- this_scope = nest_chain.empty? ? "#{@auth ? auth_object : class_name}.#{arg}s" : "@#{nest_chain.last}.#{arg}s"
15
- nest_chain << arg %>def load_<%= arg %>
16
- @<%= arg %> = <%= this_scope %>.find(params[:<%= arg %>_id])
13
+ this_scope = nest_chain.empty? ? "#{@auth ? auth_object : class_name}.#{arg}s" : "#{nest_chain.last}.#{arg}s"
14
+ nest_chain << arg %>
15
+ def <%= arg %>
16
+ @<%= arg %> ||= <%= this_scope %>.find(params[:<%= arg %>_id])
17
17
  end<% } %><% end %>
18
18
 
19
19
  <% if !@self_auth %>
20
20
  def load_<%= singular_name %>
21
- @<%= singular_name %> = <%= object_scope %>.find(params[:id])
21
+ @<%= singular_name %> = <%= object_scope.gsub("@",'') %>.find(params[:id])
22
22
  end
23
23
  <% else %>
24
24
  def load_<%= singular_name %>
25
- @<%= singular_name %> = <%= auth_object %>
25
+ @<%= singular_name %> = <%= auth_object.gsub("@",'') %>
26
26
  end<% end %>
27
27
 
28
28
  def load_all_<%= plural %>
29
- <% if !@self_auth %>@<%= plural_name %> = <%= object_scope %><% if model_has_strings? %>.where(<%=class_name %>.arel_table[:email].matches("%#{@__general_string}%"))<% end %>.page(params[:page])
29
+ <% if !@self_auth %>@<%= plural_name %> = <%= object_scope.gsub("@",'') %><% if model_has_strings? %>.where(<%=class_name %>.arel_table[:email].matches("%#{@__general_string}%"))<% end %>.page(params[:page])
30
30
  <% else %>@<%= plural_name %> = [<%= auth_object %>]<% end %>
31
31
  end
32
32
 
@@ -46,6 +46,7 @@ class <%= controller_class_name %> < <%= controller_descends_from %>
46
46
  format.html
47
47
  end
48
48
  end
49
+
49
50
  def create
50
51
  modified_params = modify_date_inputs_on_params(<%=singular_name %>_params.dup<% if !@object_owner_sym.empty? %>.merge!(<%= @object_owner_sym %>: <%= @object_owner_eval %> )<% end %> <%= @auth ? ', ' + @auth : '' %>)
51
52
  @<%=singular_name %> = <%=class_name %>.create(modified_params)
@@ -80,8 +81,10 @@ class <%= controller_class_name %> < <%= controller_descends_from %>
80
81
  end
81
82
 
82
83
  def update
83
- if !@<%= singular_name %>.update(modify_date_inputs_on_params(<%= singular %>_params<%= @auth ? ', ' + @auth : '' %>))
84
- flash[:alert] = "<%= singular_name.titlecase %> could not be saved"
84
+ if @<%= singular_name %>.update(modify_date_inputs_on_params(<%= singular %>_params<%= @auth ? ', ' + @auth : '' %>))
85
+ flash[:notice] = "Saved #{@<%= singular %>.<%= display_class %>}"
86
+ else
87
+ flash[:alert] = "<%= singular_name.titlecase %> could not be saved."
85
88
  end
86
89
  respond_to do |format|
87
90
  format.turbo_stream
@@ -1,3 +1,5 @@
1
+ = link_to "<i class='fa fa-arrow-circle-left 2x'></i> Back to list".html_safe, <%= path_helper_plural %>
2
+
1
3
  = turbo_frame_tag "<%= singular %>__#{<%= "@" + singular %>.id}" do
2
4
  .cell.editable{style: "position: relative;"}
3
5
  - if <%="@" + singular%>.errors.any?
@@ -0,0 +1,148 @@
1
+ require 'rails_helper'
2
+
3
+ describe "interaction for <%= controller_class_name %>", type: :feature do
4
+ include HotGlue::ControllerHelper
5
+ <% unless @auth.nil? %>let(:<%= @auth %>) {create(:<%= @auth.gsub('current_', '') %>)}<%end%>
6
+
7
+ let!(:<%= singular %>1) {create(:<%= singular %><%= object_parent_mapping_as_argument_for_specs %> )}
8
+ let!(:<%= singular %>2) {create(:<%= singular %><%= object_parent_mapping_as_argument_for_specs %> )}
9
+ let!(:<%= singular %>3) {create(:<%= singular %><%= object_parent_mapping_as_argument_for_specs %> )}
10
+
11
+ <%= objest_nest_factory_setup %>
12
+
13
+ before(:each) do
14
+ login_as(<%= @auth %>)
15
+ end
16
+
17
+ describe "index" do
18
+ it "should show me the list" do
19
+ visit <%= path_helper_plural %>
20
+
21
+ <%=
22
+ @columns.map { |col|
23
+ type = eval("#{singular_class}.columns_hash['#{col}']").type
24
+ # limit = eval("#{singular_class}.columns_hash['#{col}']").limit
25
+ # sql_type = eval("#{singular_class}.columns_hash['#{col}']").sql_type
26
+ #
27
+
28
+ case type
29
+ when :datetime
30
+ " " + ["expect(page).to have_content(#{singular}#{rand(3)+1}.#{col}.in_time_zone(#{ @auth }.timezone).strftime('%m/%d/%Y @ %l:%M %p ').gsub(' ', ' ') + timezonize(#{ @auth }.timezone) )"].join("\n ")
31
+
32
+ else
33
+ " " + ["expect(page).to have_content(#{singular}#{rand(3)+1}.#{col})"].join("\n ")
34
+
35
+ end
36
+
37
+ }.join("\n")
38
+
39
+ %>
40
+
41
+ end
42
+ end
43
+
44
+ describe "new & create" do
45
+ it "should create a new <%= singular.titlecase %>" do
46
+ visit <%= path_helper_plural %>
47
+ click_link "New <%= singular.titlecase %>"
48
+ expect(page).to have_selector(:xpath, './/h3[contains(., "New <%= singular.titlecase %>")]')
49
+
50
+ <%=
51
+ @columns.map { |col|
52
+ type = eval("#{singular_class}.columns_hash['#{col}']").type
53
+ # limit = eval("#{singular_class}.columns_hash['#{col}']").limit
54
+ # sql_type = eval("#{singular_class}.columns_hash['#{col}']").sql_type
55
+ #
56
+
57
+ case type
58
+ when :datetime
59
+ when :integer
60
+ " " + 'find("input#' + singular + '_' + col.to_s + '").fill_in(with: rand(10))'
61
+ else
62
+ " " + "new_#{col} = 'new_test-email@nowhere.com' \n" +
63
+ ' ' + 'find("input#' + singular + '_' + col.to_s + '").fill_in(with: new_' + col.to_s + ')'
64
+ end
65
+
66
+ }.join("\n")
67
+
68
+ %>
69
+ click_button "Save"
70
+ expect(page).to have_content("Successfully created")
71
+
72
+ <%=
73
+ @columns.map { |col|
74
+ type = eval("#{singular_class}.columns_hash['#{col}']").type
75
+
76
+ case type
77
+ when :datetime
78
+ when :integer
79
+ else
80
+ "expect(page).to have_content(new_#{col})"
81
+ end
82
+
83
+ }.join("\n")
84
+ %>
85
+
86
+ end
87
+ end
88
+
89
+ describe "show" do
90
+ it "should return a view form" do
91
+ visit <%= path_helper_plural %>
92
+
93
+ end
94
+ end
95
+
96
+ describe "edit & update" do
97
+ it "should return an editable form" do
98
+ visit <%= path_helper_plural %>
99
+ find("a.edit-<%= singular %>-button[href='/<%= namespace_with_slash %><%= plural %>/#{<%= singular %>1.id}/edit']").click
100
+
101
+ expect(page).to have_content("Editing #{<%= singular %>1.<%= derrive_reference_name(singular_class) %>}")
102
+ <%=
103
+ @columns.map { |col|
104
+ type = eval("#{singular_class}.columns_hash['#{col}']").type
105
+
106
+ case type
107
+ when :datetime
108
+ when :integer
109
+ else
110
+ " " + "new_#{col.to_s} = Faker::Name.new \n" +
111
+
112
+ ' find("input[name=\'' + singular + '[' + col.to_s + ']\'").fill_in(with: new_' + col.to_s + ')'
113
+
114
+ end
115
+ }.join("\n")
116
+ %>
117
+ click_button "Save"
118
+ within("turbo-frame#<%= singular %>__#{<%= singular %>1.id} ") do
119
+
120
+
121
+ <%=
122
+ @columns.map { |col|
123
+ type = eval("#{singular_class}.columns_hash['#{col}']").type
124
+ case type
125
+ when :datetime
126
+ when :integer
127
+ else
128
+ ' expect(page).to have_content(new_' + col.to_s + ')'
129
+ end
130
+ }.join("\n")
131
+ %>
132
+
133
+ end
134
+ end
135
+ end
136
+
137
+ describe "destroy" do
138
+ it "should destroy" do
139
+ visit <%= path_helper_plural %>
140
+ accept_alert do
141
+ find("a.delete-<%= singular %>-button[href='<%= namespace_with_dash %>/<%= plural %>/#{<%= singular %>1.id}']").click
142
+ end
143
+ expect(page).to_not have_content(<%= singular %>1.email)
144
+ expect(<%= singular_class %>.where(id: <%= singular %>1.id).count).to eq(0)
145
+ end
146
+ end
147
+ end
148
+
@@ -3,3 +3,7 @@
3
3
  = render partial: 'line', locals: {<%= singular %>: @<%= singular %> <%= nested_assignments_with_leading_comma %> }
4
4
 
5
5
 
6
+ = turbo_stream.replace "flash_notices" do
7
+ = render partial: "layouts/flash_notices"
8
+ - if @<%= singular %>.errors.any?
9
+ = render partial: "errors", locals: {resource: @<%= singular %>}
@@ -1,3 +1,3 @@
1
1
  module HotGlue
2
- VERSION = '0.0.5'
2
+ VERSION = '0.1.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hot-glue
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jason Fleetwood-Boldt
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-03-01 00:00:00.000000000 Z
11
+ date: 2021-04-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -108,9 +108,18 @@ files:
108
108
  - LICENCE
109
109
  - README.md
110
110
  - Rakefile
111
+ - app/assets/config/manifest.js
111
112
  - app/helpers/hot_glue/controller_helper.rb
112
113
  - app/helpers/hot_glue_helper.rb
113
114
  - bin/rails
115
+ - config/database.yml
116
+ - db/migrate/20210306212711_create_abcs.rb
117
+ - db/migrate/20210306223300_create_defs.rb
118
+ - db/migrate/20210306223305_create_ghis.rb
119
+ - db/migrate/20210306223309_create_jkls.rb
120
+ - db/migrate/20210306223701_devise_create_users.rb
121
+ - db/migrate/20210306225506_create_xyzs.rb
122
+ - db/schema.rb
114
123
  - lib/generators/hot_glue/install_generator.rb
115
124
  - lib/generators/hot_glue/scaffold_generator.rb
116
125
  - lib/generators/hot_glue/templates/_errors.haml
@@ -121,15 +130,15 @@ files:
121
130
  - lib/generators/hot_glue/templates/_new_button.haml
122
131
  - lib/generators/hot_glue/templates/_new_form.haml
123
132
  - lib/generators/hot_glue/templates/_show.haml
124
- - lib/generators/hot_glue/templates/base_controller.rb
125
- - lib/generators/hot_glue/templates/controller.rb
126
- - lib/generators/hot_glue/templates/controller_spec.rb
133
+ - lib/generators/hot_glue/templates/base_controller.rb.erb
134
+ - lib/generators/hot_glue/templates/controller.rb.erb
127
135
  - lib/generators/hot_glue/templates/create.turbo_stream.haml
128
136
  - lib/generators/hot_glue/templates/destroy.turbo_stream.haml
129
137
  - lib/generators/hot_glue/templates/edit.haml
130
138
  - lib/generators/hot_glue/templates/edit.turbo_stream.haml
131
139
  - lib/generators/hot_glue/templates/index.haml
132
140
  - lib/generators/hot_glue/templates/new.haml
141
+ - lib/generators/hot_glue/templates/system_spec.rb.erb
133
142
  - lib/generators/hot_glue/templates/update.turbo_stream.haml
134
143
  - lib/hot-glue.rb
135
144
  - lib/hotglue/engine.rb
@@ -139,8 +148,8 @@ licenses:
139
148
  - Nonstandard
140
149
  metadata:
141
150
  source_code_uri: https://github.com/jasonfb/hot-glue
142
- documentation_uri: https://jfb.teachable.com/p/gems-by-jason
143
- homepage_uri: https://blog.jasonfleetwoodboldt.com/hot-glue/
151
+ documentation_uri: https://www.instagram.com/jfbcodes/
152
+ homepage_uri: https://jasonfleetwoodboldt.com/hot-glue/
144
153
  post_install_message: |
145
154
  ---------------------------------------------
146
155
  Welcome to Hot Glue - A Scaffold Building Companion for Hotwire + Turbo-Rails
@@ -149,11 +158,11 @@ post_install_message: |
149
158
 
150
159
  * Build plug-and-play scaffolding mixing HAML with the power of Hotwire and Turbo-Rails
151
160
  * Automatically Reads Your Models (make them before building your scaffolding!)
152
- * Excellent for CRUD, lists with pagination, searching, sorting.
153
- * Great for prototyping very.
154
- * Plays nicely with Devise, Kaminari, Haml-Rails, Rspec.
155
- * Create specs automatically along with the controllers.
156
- * Nest your routes model-by-model for built-in poor man's authentication
161
+ * Excellent for CRUD, lists with pagination (coming soon: searching & sorting)
162
+ * Great for prototyping.
163
+ * Plays nicely with Devise, Kaminari, Haml-Rails, Rspec, FontAwesome
164
+ * Create specs automatically along with the generated controllers.
165
+ * Nest your routes model-by-model for built-in poor man's authentication.
157
166
  * Throw the scaffolding away when your app is ready to graduate to its next phase.
158
167
 
159
168
  see README for complete instructions.
@@ -1,110 +0,0 @@
1
- require 'rails_helper'
2
-
3
- describe <%= controller_class_name %> do
4
- render_views
5
- <% unless @auth.nil? %> let(:<%= @auth %>) {create(:<%= @auth.gsub('current_', '') %>)}<%end%>
6
- let(:<%= singular %>) {create(:<%= singular %><%= object_parent_mapping_as_argument_for_specs %> )}
7
-
8
- <%= objest_nest_factory_setup %>
9
-
10
- before(:each) do
11
- @request.env["devise.mapping"] = Devise.mappings[:account]
12
-
13
- sign_in <%= @auth %>, scope: :<%= @auth %>
14
- end
15
-
16
- describe "index" do
17
- it "should respond" do
18
- get :index, xhr: true, format: 'js', params: {
19
- <%= objest_nest_params_by_id_for_specs %>
20
- }
21
- end
22
- end
23
-
24
- describe "new" do
25
- it "should show form" do
26
- get :new, xhr: true, format: 'js', params: {
27
- <%= objest_nest_params_by_id_for_specs %>
28
- }
29
- end
30
- end
31
-
32
- describe "create" do
33
- it "should create a new <%= singular %>" do
34
- expect {
35
- post :create, xhr: true, format: 'js', params: {
36
- <%= (@nested_args.empty? ? "" : objest_nest_params_by_id_for_specs + ",") %>
37
- <%= singular %>: {
38
- <%= columns_spec_with_sample_data %>
39
- }}
40
- }.to change { <%= @singular_class %>.all.count }.by(1)
41
- assert_response :ok
42
- end
43
-
44
- # it "should not create if there are errors" do
45
- # post :create, xhr: true, format: 'js', params: {id: <%= singular %>.id,
46
- # <%= singular %>: {skin_id: nil}}
47
- #
48
- # expect(controller).to set_flash.now[:alert].to(/Oops, your <%= singular %> could not be saved/)
49
- # end
50
- end
51
-
52
- describe "edit" do
53
- it "should return an editable form" do
54
- get :edit, xhr: true, format: 'js', params: {
55
- <%= (@nested_args.empty? ? "" : objest_nest_params_by_id_for_specs + ",") %>
56
- id: <%= singular %>.id
57
- }
58
- assert_response :ok
59
- end
60
- end
61
-
62
- describe "show" do
63
- it "should return a view form" do
64
- get :show, xhr: true, format: 'js', params: {
65
- <%= (@nested_args.empty? ? "" : objest_nest_params_by_id_for_specs + ",") %>
66
- id: <%= singular %>.id
67
- }
68
- assert_response :ok
69
- end
70
- end
71
-
72
- describe "update" do
73
- it "should update" do
74
- put :update, xhr: true, format: 'js',
75
- params: {
76
- <%= (@nested_args.empty? ? "" : objest_nest_params_by_id_for_specs + ",") %>
77
- id: <%= singular %>.id,
78
- <%= singular %>: {
79
- <%= columns_spec_with_sample_data %>
80
- }}
81
-
82
- assert_response :ok
83
- end
84
-
85
- # it "should not update if invalid" do
86
- # put :update, xhr: true, format: 'js',
87
- # params: {
88
- # id: <%= singular %>.id,
89
- # <%= singular %>: {
90
- # <%= columns_spec_with_sample_data %>
91
- # }}
92
- #
93
- # assert_response :ok
94
- #
95
- # expect(controller).to set_flash.now[:alert].to(/Oops, your <%= singular %> could not be saved/)
96
- # end
97
- end
98
-
99
- describe "#destroy" do
100
- it "should destroy" do
101
- post :destroy, format: 'js', params: {
102
- <%= (@nested_args.empty? ? "" : objest_nest_params_by_id_for_specs + ",") %>
103
- id: <%= singular %>.id
104
- }
105
- assert_response :ok
106
- expect(<%= @singular_class %>.count).to be(0)
107
- end
108
- end
109
- end
110
-