hot-glue 0.5.12 → 0.5.14
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +65 -1
- data/lib/generators/hot_glue/fields/date_time_field.rb +3 -2
- data/lib/generators/hot_glue/fields/enum_field.rb +2 -2
- data/lib/generators/hot_glue/fields/field.rb +1 -1
- data/lib/generators/hot_glue/fields/integer_field.rb +1 -1
- data/lib/generators/hot_glue/fields/uuid_field.rb +1 -2
- data/lib/generators/hot_glue/flash_notices_install_generator.rb +20 -0
- data/lib/generators/hot_glue/install_generator.rb +2 -7
- data/lib/generators/hot_glue/scaffold_generator.rb +25 -5
- data/lib/generators/hot_glue/templates/controller.rb.erb +5 -4
- data/lib/generators/hot_glue/templates/erb/_edit.erb +12 -0
- data/lib/generators/hot_glue/templates/erb/_flash_notices.erb +12 -8
- data/lib/generators/hot_glue/templates/erb/_show.erb +1 -1
- data/lib/generators/hot_glue/templates/erb/create.turbo_stream.erb +3 -4
- data/lib/generators/hot_glue/templates/erb/destroy.turbo_stream.erb +7 -1
- data/lib/generators/hot_glue/templates/erb/edit.erb +1 -12
- data/lib/generators/hot_glue/templates/erb/update.turbo_stream.erb +3 -6
- data/lib/generators/hot_glue/templates/system_spec.rb.erb +1 -1
- data/lib/hot-glue.rb +4 -1
- data/lib/hotglue/version.rb +1 -1
- metadata +4 -18
- data/lib/generators/hot_glue/templates/erb/_errors.erb +0 -11
- data/lib/generators/hot_glue/templates/haml/_errors.haml +0 -6
- data/lib/generators/hot_glue/templates/haml/_flash_notices.haml +0 -8
- data/lib/generators/hot_glue/templates/haml/_form.haml +0 -5
- data/lib/generators/hot_glue/templates/haml/_line.haml +0 -6
- data/lib/generators/hot_glue/templates/haml/_list.haml +0 -15
- data/lib/generators/hot_glue/templates/haml/_new_button.haml +0 -2
- data/lib/generators/hot_glue/templates/haml/_new_form.haml +0 -7
- data/lib/generators/hot_glue/templates/haml/_show.haml +0 -7
- data/lib/generators/hot_glue/templates/haml/create.turbo_stream.haml +0 -14
- data/lib/generators/hot_glue/templates/haml/destroy.turbo_stream.haml +0 -2
- data/lib/generators/hot_glue/templates/haml/edit.haml +0 -19
- data/lib/generators/hot_glue/templates/haml/edit.turbo_stream.haml +0 -4
- data/lib/generators/hot_glue/templates/haml/index.haml +0 -8
- data/lib/generators/hot_glue/templates/haml/new.haml +0 -1
- data/lib/generators/hot_glue/templates/haml/update.turbo_stream.haml +0 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c93b089a5dfd19941c88d9b330f0305dee83315bf7b8a6af436321dad842ac0b
|
4
|
+
data.tar.gz: cf17d5a487fdf1ae4230647923b42d344465bf1e81a06eb6eef0caa75282eb2c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f9c6f8fdd02d3cd09e7c9e6a46a5a82c7125475b18f11fafa1cc3c609c4e7376c7c2cfcbc3a18483bd2027a69adfff859b62fa5d2405dabf371f4086247b240d
|
7
|
+
data.tar.gz: 51b3736cb2715e6387a13a98a4fe12bf450eee827679d80a6079d3b62546d31db234c4a818e03e801f07881ebd45da289b34b7c61dd5821d25db8084c8de6a61
|
data/README.md
CHANGED
@@ -1124,9 +1124,29 @@ Thus, your factory object must have a method of the same name as the factory bei
|
|
1124
1124
|
For example, assuming the example from above, we are going to do the lookup ourselves inside of our own `AgentFactory` object.)
|
1125
1125
|
|
1126
1126
|
```
|
1127
|
-
|
1127
|
+
factory = AgentFactory.new(find_or_create_by_email: agent_company_params[:__lookup_email],
|
1128
|
+
params: modified_params)
|
1128
1129
|
```
|
1129
1130
|
|
1131
|
+
Here the new AgentFactory will recieve any variables by keyword argument, and since you're specifying the calling code here, Hot Glue does not dictate your factory's setup.
|
1132
|
+
However, two special variables are in scope which you can use in your calling code.
|
1133
|
+
|
1134
|
+
`*_params` (where * is the name of the thing you are building)
|
1135
|
+
`modified_params` a variable that has been transmogrified for the timezone aware input
|
1136
|
+
|
1137
|
+
Either one must be recieved by your factory for your factory to create data based off the inputted data.
|
1138
|
+
|
1139
|
+
Rememebr, `*_params` has the input params passed only the through the sanitizer, and modified_params has it passed through the timezone aware mechanism and other Hot Glue-specific defaults.
|
1140
|
+
|
1141
|
+
Always:
|
1142
|
+
• In your factory calling code, assign the variable `factory = ` (do not use a different variable name),
|
1143
|
+
• Write a factory object with a `new` method that received the paramters you are specifying in your calling code,
|
1144
|
+
• Be sure your factory has an _instance method_ a method with the **same name** of the built object, which hot glue will call next:
|
1145
|
+
|
1146
|
+
`@agent = factory.agent`
|
1147
|
+
|
1148
|
+
Don't include this last line in your factory code.
|
1149
|
+
|
1130
1150
|
|
1131
1151
|
|
1132
1152
|
## Automatic Base Controller
|
@@ -1209,8 +1229,52 @@ def self.status_labels
|
|
1209
1229
|
|
1210
1230
|
Now, your labels will show up on the front-end as defined in the `_labels` ("Is currently pending", etc) instead of the database-values.
|
1211
1231
|
|
1232
|
+
### Validation Magic
|
1233
|
+
|
1234
|
+
Use ActiveRecord validations or hooks to validate your data. Hot Glue will automatically display the errors in the UI.
|
1235
|
+
|
1236
|
+
TO prevent a record from being destroyed, use a syntax like this:
|
1237
|
+
|
1238
|
+
```
|
1239
|
+
before_destroy :check_if_allowed_to_destroy
|
1240
|
+
|
1241
|
+
def check_if_allowed_to_destroy
|
1242
|
+
if (some_condition)
|
1243
|
+
self.errors.add(:base, "Cannot delete")
|
1244
|
+
raise ActiveRecord::RecordNotDestroyed("Cannot delete because of some condition")
|
1245
|
+
end
|
1246
|
+
end
|
1247
|
+
|
1248
|
+
```
|
1249
|
+
|
1250
|
+
|
1251
|
+
|
1252
|
+
|
1212
1253
|
|
1213
1254
|
# VERSION HISTORY
|
1255
|
+
|
1256
|
+
#### TBR
|
1257
|
+
- When using big edit, updating a child will now re-render the parent EDIT record automatically.
|
1258
|
+
|
1259
|
+
For example
|
1260
|
+
`rails generate hot_glue:scafold LineItem --nested=invioce`
|
1261
|
+
|
1262
|
+
Whenever the line item is created, updated, or destroyed, the parent invoice record gets (edit action) re-rendered automatically. This happens for the big edit screen of the invoice.
|
1263
|
+
|
1264
|
+
#### 2023-05-14 - v0.5.14 Delete message flash notice and new flash notice partial
|
1265
|
+
|
1266
|
+
- This changes to how flash_notices work.
|
1267
|
+
- After you upgrade to 0.5.14 from a prior version, please re-install the global flash notice
|
1268
|
+
- template with:
|
1269
|
+
|
1270
|
+
`rails generate hot_glue:flash_notices_install`
|
1271
|
+
|
1272
|
+
The newer template will work with old Hot Glue scaffold (generated prior to 0.5.14) and new scaffold moving forward.
|
1273
|
+
|
1274
|
+
If you miss this step, your old Hot Glue flash notices template will not show the model error messages (but will continue to show the global alert & notice messages)
|
1275
|
+
|
1276
|
+
- The destroy action on controllers now produces an "alert" message for successful deletion.
|
1277
|
+
|
1214
1278
|
#### 2023-04-24 - v0.5.12
|
1215
1279
|
- adds new option for `bootstrap_column_width` (default is 2) to specify the number of bootstrap columns a visual column should take up
|
1216
1280
|
- You can specify this as a builder option (`--bootstrap-column-width`)
|
@@ -10,7 +10,8 @@ class DateTimeField < Field
|
|
10
10
|
end
|
11
11
|
|
12
12
|
def spec_make_assertion
|
13
|
-
|
13
|
+
|
14
|
+
"expect(page).to have_content(new_#{name}.in_time_zone(current_timezone).strftime('%m/%d/%Y @ %l:%M %p ') + timezonize(current_timezone))"
|
14
15
|
end
|
15
16
|
|
16
17
|
def spec_setup_let_arg
|
@@ -18,6 +19,6 @@ class DateTimeField < Field
|
|
18
19
|
end
|
19
20
|
|
20
21
|
def spec_list_view_assertion
|
21
|
-
"
|
22
|
+
"expect(page).to have_content(#{singular}#{1}.#{name}.in_time_zone(current_timezone).strftime('%m/%d/%Y @ %l:%M %p ').gsub(' ', ' ') + timezonize(current_timezone) )"
|
22
23
|
end
|
23
24
|
end
|
@@ -19,9 +19,9 @@ class EnumField < Field
|
|
19
19
|
|
20
20
|
def spec_list_view_assertion
|
21
21
|
if(eval("#{singular_class}.respond_to?(:#{name}_labels)"))
|
22
|
-
"
|
22
|
+
"expect(page).to have_content(#{singular_class}.#{name}_labels[#{singular}#{1}.#{name}])"
|
23
23
|
else
|
24
|
-
"
|
24
|
+
"expect(page).to have_content(#{singular}1.#{name})"
|
25
25
|
end
|
26
26
|
end
|
27
27
|
end
|
@@ -6,7 +6,6 @@ class UUIDField < Field
|
|
6
6
|
def spec_list_view_assertion
|
7
7
|
assoc_name = name.to_s.gsub('_id','')
|
8
8
|
association = eval("#{singular_class}.reflect_on_association(:#{assoc_name})")
|
9
|
-
"
|
10
|
-
|
9
|
+
"expect(page).to have_content(#{singular}#{1}.#{assoc_name}.#{HotGlue.derrive_reference_name(association.class_name)})"
|
11
10
|
end
|
12
11
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module HotGlue
|
2
|
+
class FlashNoticesInstallGenerator < Rails::Generators::Base
|
3
|
+
source_root File.expand_path('templates', __dir__)
|
4
|
+
|
5
|
+
def filepath_prefix
|
6
|
+
# todo: inject the context
|
7
|
+
'spec/dummy/' if Rails.env.test?
|
8
|
+
end
|
9
|
+
|
10
|
+
|
11
|
+
def initialize(*args) #:nodoc:
|
12
|
+
super
|
13
|
+
copy_file "erb/_flash_notices.erb", "#{'spec/dummy/' if Rails.env.test?}app/views/layouts/_flash_notices.erb"
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
|
20
|
+
|
@@ -27,13 +27,8 @@ module HotGlue
|
|
27
27
|
end
|
28
28
|
|
29
29
|
|
30
|
-
@markup = options['markup']
|
31
|
-
|
32
|
-
copy_file "haml/_flash_notices.haml", "#{'spec/dummy/' if Rails.env.test?}app/views/layouts/_flash_notices.haml"
|
33
|
-
elsif @markup == "erb"
|
34
|
-
copy_file "erb/_flash_notices.erb", "#{'spec/dummy/' if Rails.env.test?}app/views/layouts/_flash_notices.erb"
|
35
|
-
|
36
|
-
end
|
30
|
+
@markup = options['markup'] || "erb"
|
31
|
+
copy_file "erb/_flash_notices.erb", "#{'spec/dummy/' if Rails.env.test?}app/views/layouts/_flash_notices.erb"
|
37
32
|
|
38
33
|
begin
|
39
34
|
if Rails.version.split(".")[0].to_i == 6
|
@@ -648,10 +648,10 @@ class HotGlue::ScaffoldGenerator < Erb::Generators::ScaffoldGenerator
|
|
648
648
|
}.join(", ")
|
649
649
|
|
650
650
|
if @factory_creation == ''
|
651
|
-
"@#{singular } = #{ class_name }.create(modified_params)"
|
651
|
+
"@#{singular } = #{ class_name }.create(modified_params#{'.merge(' + merge_with + ')' if !merge_with.empty?})"
|
652
652
|
else
|
653
653
|
"#{@factory_creation}\n" +
|
654
|
-
" @#{singular } =
|
654
|
+
" @#{singular } = factory.#{singular}"
|
655
655
|
end
|
656
656
|
end
|
657
657
|
|
@@ -707,7 +707,9 @@ class HotGlue::ScaffoldGenerator < Erb::Generators::ScaffoldGenerator
|
|
707
707
|
template "system_spec.rb.erb", dest_file
|
708
708
|
end
|
709
709
|
|
710
|
-
|
710
|
+
if File.exist?("#{filepath_prefix}app/views#{namespace_with_dash}/_errors.#{@markup}")
|
711
|
+
File.delete("#{filepath_prefix}app/views#{namespace_with_dash}/_errors.#{@markup}")
|
712
|
+
end
|
711
713
|
end
|
712
714
|
|
713
715
|
def spec_foreign_association_merge_hash
|
@@ -1050,14 +1052,14 @@ class HotGlue::ScaffoldGenerator < Erb::Generators::ScaffoldGenerator
|
|
1050
1052
|
end
|
1051
1053
|
|
1052
1054
|
def all_views
|
1053
|
-
res = %w(index _line _list _show
|
1055
|
+
res = %w(index _line _list _show)
|
1054
1056
|
|
1055
1057
|
unless @no_create
|
1056
1058
|
res += %w(new _new_form _new_button)
|
1057
1059
|
end
|
1058
1060
|
|
1059
1061
|
unless @no_edit
|
1060
|
-
res
|
1062
|
+
res += %w{edit _edit}
|
1061
1063
|
end
|
1062
1064
|
|
1063
1065
|
if !( @no_edit && @no_create)
|
@@ -1257,4 +1259,22 @@ class HotGlue::ScaffoldGenerator < Erb::Generators::ScaffoldGenerator
|
|
1257
1259
|
def any_datetime_fields?
|
1258
1260
|
(@columns - @attachments.keys.collect(&:to_sym)).collect{|col| eval("#{singular_class}.columns_hash['#{col}']").type}.include?(:datetime)
|
1259
1261
|
end
|
1262
|
+
|
1263
|
+
def post_action_parental_updates
|
1264
|
+
if @nested_set.any?
|
1265
|
+
"\n" + @nested_set.collect{ |data|
|
1266
|
+
parent = data[:singular]
|
1267
|
+
"@#{singular}.#{parent}.reload"
|
1268
|
+
}.join("\n")
|
1269
|
+
end
|
1270
|
+
end
|
1271
|
+
|
1272
|
+
|
1273
|
+
def turbo_parental_updates
|
1274
|
+
@nested_set.collect{| data|
|
1275
|
+
"<%= turbo_stream.replace \"#{@namespace + '__' if @namespace}\#{dom_id(@#{data[:singular]})}\" do %>
|
1276
|
+
<%= render partial: \"#{@namespace}/#{data[:plural]}/edit\", locals: {#{data[:singular]}: @#{singular}.#{data[:singular]}.reload} %>
|
1277
|
+
<% end %>"
|
1278
|
+
}.join("\n")
|
1279
|
+
end
|
1260
1280
|
end
|
@@ -57,8 +57,7 @@ class <%= controller_class_name %> < <%= controller_descends_from %>
|
|
57
57
|
def load_<%= singular_name %>
|
58
58
|
<% if @nested_set[0] && @nested_set[0][:optional] %>if params.include?(:<%= @nested_set.last[:singular] %>_id)
|
59
59
|
@<%= singular_name %> = <%= object_scope.gsub("@",'') %>.find(params[:id])
|
60
|
-
else
|
61
|
-
<% end %>@<%= singular_name %> = <%= object_scope %>.find(params[:id])<% if @nested_set[0] && @nested_set[0][:optional] %>
|
60
|
+
else <% end %>@<%= singular_name %> = <%= object_scope %>.find(params[:id])<% if @nested_set[0] && @nested_set[0][:optional] %>
|
62
61
|
end<% end %>
|
63
62
|
end
|
64
63
|
<% else %>
|
@@ -93,6 +92,7 @@ class <%= controller_class_name %> < <%= controller_descends_from %>
|
|
93
92
|
|
94
93
|
if @<%= singular_name %>.save
|
95
94
|
flash[:notice] = "Successfully created #{@<%= singular %>.<%= display_class %>}"
|
95
|
+
<%= post_action_parental_updates %>
|
96
96
|
load_all_<%= plural %>
|
97
97
|
render :create
|
98
98
|
else
|
@@ -137,9 +137,10 @@ class <%= controller_class_name %> < <%= controller_descends_from %>
|
|
137
137
|
<% end %><% if destroy_action %> def destroy
|
138
138
|
begin
|
139
139
|
@<%=singular_name%>.destroy
|
140
|
+
flash[:notice] = '<%= singular_name.titlecase %> successfully deleted'
|
140
141
|
rescue StandardError => e
|
141
|
-
flash[:alert] = '<%= singular_name.titlecase %> could not be deleted
|
142
|
-
end
|
142
|
+
flash[:alert] = '<%= singular_name.titlecase %> could not be deleted'
|
143
|
+
end <%= post_action_parental_updates %>
|
143
144
|
load_all_<%= plural %>
|
144
145
|
end<% end %>
|
145
146
|
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<\%= turbo_frame_tag "<%= @namespace %>__#{dom_id(@<%= singular %>)}" do %>
|
2
|
+
<div class="cell editable" style="position: relative;">
|
3
|
+
<\% if @<%= singular %>.errors.any? %>
|
4
|
+
<\%= render(partial: "<%= namespace_with_trailing_dash %>errors", locals: {resource: @<%= singular %> }) %>
|
5
|
+
<\% end %>
|
6
|
+
|
7
|
+
<h2>Editing <\%= @<%= @singular %>.<%= display_class %> %></h2>
|
8
|
+
<\%= form_with model: <%= "@" + singular %>, url: <%= form_path_edit_helper %> do |f| %>
|
9
|
+
<\%= render partial: "form", locals: {:<%= singular %> => <%= "@" + singular%>, f: f}<%= @nested_set.collect{|arg| ".merge(@#{arg[:singular]} ? {#{arg[:singular]}: @#{arg[:singular]}} : {})" }.join %> \%>
|
10
|
+
<\% end %>
|
11
|
+
</div>
|
12
|
+
<\% end %>
|
@@ -1,12 +1,16 @@
|
|
1
1
|
<%= turbo_frame_tag "flash_notices" do %>
|
2
|
-
<% unless notice.nil? %>
|
3
|
-
<div class="alert alert
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
2
|
+
<% unless notice.nil? && alert.nil? %>
|
3
|
+
<div class="alert alert-<%= alert ? 'danger' : 'primary' %> alert-dismissible">
|
4
|
+
<div><%= notice %></div>
|
5
|
+
<div><%= alert %></div>
|
6
|
+
<% if defined?(resource) && resource %>
|
7
|
+
<ul>
|
8
|
+
<% resource.errors.full_messages.each do |message| %>
|
9
|
+
<li><%= message %></li>
|
10
|
+
<% end %>
|
11
|
+
</ul>
|
12
|
+
<% end %>
|
13
|
+
|
10
14
|
</div>
|
11
15
|
<% end %>
|
12
16
|
<% end %>
|
@@ -35,6 +35,6 @@
|
|
35
35
|
<% end %>
|
36
36
|
|
37
37
|
<% unless @no_edit %>
|
38
|
-
<\%= link_to "Edit
|
38
|
+
<\%= link_to "Edit <% if @button_icons == 'font-awesome' %><i class='fa fa-1x fa-list-alt'></i><% end %>".html_safe, <%= edit_path_helper %>, <% if @big_edit %>'data-turbo' => 'false', <% end %>disable_with: "Loading...", class: "edit-<%= singular %>-button btn btn-primary btn-sm" %>
|
39
39
|
<% end %>
|
40
40
|
</div>
|
@@ -3,6 +3,7 @@
|
|
3
3
|
<\%= render partial: "list", locals: {<%= plural %>: @<%= plural %>}<%= @nested_set.collect{|arg| ".merge(@" + arg[:singular] + " ? {nested_for: \"" + arg[:singular] + "-\#{@" + arg[:singular] + ".id}\"" + ", " + arg[:singular] + ": @" + arg[:singular] + "} : {})"}.join() %> \%>
|
4
4
|
<\% end %>
|
5
5
|
<\% end %>
|
6
|
+
<%= turbo_parental_updates %>
|
6
7
|
<\%= turbo_stream.replace "<%= @namespace %>__<%= singular %>__<%= singular %>-new" do %>
|
7
8
|
<\% if @<%= singular %>.errors.none? %>
|
8
9
|
<\%= render partial: "new_button", locals: {}<%= @nested_set.collect{|arg| ".merge(@" + arg[:singular] + " ? {" + arg[:singular] + ": @" + arg[:singular] + "} : {})"}.join() %> %>
|
@@ -11,8 +12,6 @@
|
|
11
12
|
<\% end %>
|
12
13
|
<\% end %>
|
13
14
|
<\%= turbo_stream.replace "flash_notices" do %>
|
14
|
-
<\%= render partial: "layouts/flash_notices" %>
|
15
|
-
|
16
|
-
<\%= render partial: "errors", locals: {resource: @<%= singular %>} %>
|
17
|
-
<\% end %>
|
15
|
+
<\%= render partial: "layouts/flash_notices", locals: {resource: @<%= singular %>} %>
|
16
|
+
|
18
17
|
<\% end %>
|
@@ -1,3 +1,9 @@
|
|
1
|
-
|
1
|
+
<%= turbo_parental_updates %>
|
2
|
+
|
3
|
+
<\%= turbo_stream.update "<%= @namespace %>__<%= plural %>-list" + <%= nested_for_turbo_nested_constructor %> do %>
|
2
4
|
<\%= render partial: "list", locals: {<%=plural%>: @<%=plural%> }<%= @nested_set.collect{|arg| ".merge(@" + arg[:singular] + " ? {nested_for: \"" + arg[:singular] + "-\#{@" + arg[:singular] + ".id}\"" + ", " + arg[:singular] + ": @" + arg[:singular] + "} : {})"}.join() %> \%>
|
3
5
|
<\% end %>
|
6
|
+
|
7
|
+
<\%= turbo_stream.update "flash_notices" do %>
|
8
|
+
<\%= render partial: "layouts/flash_notices", locals: {resource: @<%= singular %>} %>
|
9
|
+
<\% end %>
|
@@ -4,18 +4,7 @@
|
|
4
4
|
<div class="col-md-12">
|
5
5
|
<\%= link_to "<% if @button_icons == 'font-awesome' %><i class='fa fa-arrow-circle-left 2x'></i><% end %> Back to list".html_safe, <%= path_helper_plural %> %>
|
6
6
|
<% end %>
|
7
|
-
<\%=
|
8
|
-
<div class="cell editable" style="position: relative;">
|
9
|
-
<\% if @<%= singular %>.errors.any? %>
|
10
|
-
<\%= render(partial: "<%= namespace_with_trailing_dash %>errors", locals: {resource: @<%= singular %> }) %>
|
11
|
-
<\% end %>
|
12
|
-
|
13
|
-
<h2>Editing <\%= @<%= @singular %>.<%= display_class %> %></h2>
|
14
|
-
<\%= form_with model: <%= "@" + singular %>, url: <%= form_path_edit_helper %> do |f| %>
|
15
|
-
<\%= render partial: "form", locals: {:<%= singular %> => <%= "@" + singular%>, f: f}<%= @nested_set.collect{|arg| ".merge(@#{arg[:singular]} ? {#{arg[:singular]}: @#{arg[:singular]}} : {})" }.join %> \%>
|
16
|
-
<\% end %>
|
17
|
-
</div>
|
18
|
-
<\% end %>
|
7
|
+
<\%= render partial: "edit", locals: {<%= singular %>: @<%= singular %>} %>
|
19
8
|
<% if @big_edit %>
|
20
9
|
</div>
|
21
10
|
</div>
|
@@ -4,10 +4,7 @@
|
|
4
4
|
<\%= render partial: '<%= list_path_partial %>', locals: {<%= plural %>: @<%= plural %>}<%= @nested_set.collect{|arg| ".merge(@#{arg[:singular]} ? {#{arg[:singular]}: @#{arg[:singular]}} : {})" }.join %> \%>
|
5
5
|
<\% end %>
|
6
6
|
<% end %>
|
7
|
-
|
8
|
-
<\%= turbo_stream.
|
9
|
-
<\%= render partial: "layouts/flash_notices" %>
|
10
|
-
<\% if @<%= singular %>.errors.any? %>
|
11
|
-
<\%= render partial: "errors", locals: {resource: @<%= singular %>} %>
|
12
|
-
<\% end %>
|
7
|
+
<%= turbo_parental_updates %>
|
8
|
+
<\%= turbo_stream.update "flash_notices" do %>
|
9
|
+
<\%= render partial: "layouts/flash_notices", locals: {resource: @<%= singular %>} %>
|
13
10
|
<\% end %>
|
@@ -25,7 +25,7 @@ describe 'interaction for <%= controller_class_name %>' do
|
|
25
25
|
describe "index" do
|
26
26
|
it "should show me the list" do
|
27
27
|
visit <%= path_helper_plural %>
|
28
|
-
<%= @columns_map.collect{|col, col_object| col_object.spec_list_view_assertion } %>
|
28
|
+
<%= @columns_map.collect{|col, col_object| col_object.spec_list_view_assertion }.join("\n ") %>
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
data/lib/hot-glue.rb
CHANGED
@@ -27,14 +27,17 @@ module HotGlue
|
|
27
27
|
top_level: false,
|
28
28
|
put_form: false)
|
29
29
|
instance_sym = top_level ? "@" : ""
|
30
|
+
|
30
31
|
if nested_set.nil? || nested_set.empty?
|
31
32
|
return modifier + "#{(namespace + '_') if namespace}#{target}_path" + (("(#{instance_sym}#{target})" if put_form) || "")
|
32
33
|
elsif nested_set[0][:optional] == false
|
34
|
+
|
33
35
|
return modifier + ((namespace + "_" if namespace) || "") + nested_set.collect{|x|
|
34
36
|
x[:singular] + "_"
|
35
37
|
}.join() + target + "_path" + (("(#{nested_set.collect{
|
36
38
|
|x| instance_sym + x[:singular] }.join(",")
|
37
|
-
}#{ put_form ? ',' + instance_sym + target : '' })"
|
39
|
+
}#{ put_form ? ',' + instance_sym + target : '' })") || "")
|
40
|
+
|
38
41
|
|
39
42
|
else
|
40
43
|
# copy the first item, make a ternery in this cycle, and recursively move to both the
|
data/lib/hotglue/version.rb
CHANGED
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.5.
|
4
|
+
version: 0.5.14
|
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: 2023-
|
11
|
+
date: 2023-05-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -92,6 +92,7 @@ files:
|
|
92
92
|
- lib/generators/hot_glue/fields/text_field.rb
|
93
93
|
- lib/generators/hot_glue/fields/time_field.rb
|
94
94
|
- lib/generators/hot_glue/fields/uuid_field.rb
|
95
|
+
- lib/generators/hot_glue/flash_notices_install_generator.rb
|
95
96
|
- lib/generators/hot_glue/hot_glue.rb
|
96
97
|
- lib/generators/hot_glue/install_generator.rb
|
97
98
|
- lib/generators/hot_glue/layout/builder.rb
|
@@ -106,7 +107,7 @@ files:
|
|
106
107
|
- lib/generators/hot_glue/templates/capybara_login.rb
|
107
108
|
- lib/generators/hot_glue/templates/computer_code.jpg
|
108
109
|
- lib/generators/hot_glue/templates/controller.rb.erb
|
109
|
-
- lib/generators/hot_glue/templates/erb/
|
110
|
+
- lib/generators/hot_glue/templates/erb/_edit.erb
|
110
111
|
- lib/generators/hot_glue/templates/erb/_flash_notices.erb
|
111
112
|
- lib/generators/hot_glue/templates/erb/_form.erb
|
112
113
|
- lib/generators/hot_glue/templates/erb/_line.erb
|
@@ -121,21 +122,6 @@ files:
|
|
121
122
|
- lib/generators/hot_glue/templates/erb/index.erb
|
122
123
|
- lib/generators/hot_glue/templates/erb/new.erb
|
123
124
|
- lib/generators/hot_glue/templates/erb/update.turbo_stream.erb
|
124
|
-
- lib/generators/hot_glue/templates/haml/_errors.haml
|
125
|
-
- lib/generators/hot_glue/templates/haml/_flash_notices.haml
|
126
|
-
- lib/generators/hot_glue/templates/haml/_form.haml
|
127
|
-
- lib/generators/hot_glue/templates/haml/_line.haml
|
128
|
-
- lib/generators/hot_glue/templates/haml/_list.haml
|
129
|
-
- lib/generators/hot_glue/templates/haml/_new_button.haml
|
130
|
-
- lib/generators/hot_glue/templates/haml/_new_form.haml
|
131
|
-
- lib/generators/hot_glue/templates/haml/_show.haml
|
132
|
-
- lib/generators/hot_glue/templates/haml/create.turbo_stream.haml
|
133
|
-
- lib/generators/hot_glue/templates/haml/destroy.turbo_stream.haml
|
134
|
-
- lib/generators/hot_glue/templates/haml/edit.haml
|
135
|
-
- lib/generators/hot_glue/templates/haml/edit.turbo_stream.haml
|
136
|
-
- lib/generators/hot_glue/templates/haml/index.haml
|
137
|
-
- lib/generators/hot_glue/templates/haml/new.haml
|
138
|
-
- lib/generators/hot_glue/templates/haml/update.turbo_stream.haml
|
139
125
|
- lib/generators/hot_glue/templates/javascript/dropzone_controller.js
|
140
126
|
- lib/generators/hot_glue/templates/system_spec.rb.erb
|
141
127
|
- lib/generators/hot_glue/templates/themes/hotglue_scaffold_dark_knight.scss
|
@@ -1,11 +0,0 @@
|
|
1
|
-
<\%= turbo_frame_tag "errors" do %>
|
2
|
-
<\% if resource.errors.any? %>
|
3
|
-
<div id="error_explanation">
|
4
|
-
<\% resource.errors.full_messages.each do |message| %>
|
5
|
-
<div class="alert alert-danger">
|
6
|
-
<\%= message %>
|
7
|
-
</div>
|
8
|
-
<\% end %>
|
9
|
-
</div>
|
10
|
-
<\% end %>
|
11
|
-
<\% end %>
|
@@ -1,15 +0,0 @@
|
|
1
|
-
= turbo_frame_tag "<%= plural %>-list" do
|
2
|
-
%div{class: "<%= @container_name %> <%= singular %>-table"}
|
3
|
-
.row
|
4
|
-
.col-md-12
|
5
|
-
<%= '= render partial: "' + (@namespace+"/" if @namespace) + plural + '/new_button", locals: {' + nested_assignments + '}' unless @no_create %>
|
6
|
-
|
7
|
-
.row
|
8
|
-
<%= list_column_headings %>
|
9
|
-
.col
|
10
|
-
%div
|
11
|
-
- if <%= plural %>.empty?
|
12
|
-
None
|
13
|
-
- <%= plural %>.each do |<%= singular %>|
|
14
|
-
= render partial: '<%= line_path_partial %>', locals: {<%= singular %>: <%= singular %><%= nested_assignments_with_leading_comma if @nest %> }
|
15
|
-
<%= @no_paginate ? "" : paginate %>
|
@@ -1,7 +0,0 @@
|
|
1
|
-
= turbo_frame_tag "<%= singular %>-new" do
|
2
|
-
%h3
|
3
|
-
New <%= singular.titlecase %>
|
4
|
-
|
5
|
-
= form_with model: <%= singular %>, url: <%= path_helper_plural %>(<%= nested_objects_arity %>), method: "post" do |f|
|
6
|
-
= render partial: "<%=namespace_with_slash%><%= @plural %>/form", locals: {<%= singular %>: <%= singular %>, f: f}
|
7
|
-
|
@@ -1,7 +0,0 @@
|
|
1
|
-
<%= all_line_fields %>
|
2
|
-
.col
|
3
|
-
<% if destroy_action %>
|
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
|
-
<% end %>
|
6
|
-
|
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,14 +0,0 @@
|
|
1
|
-
- if @<%= singular %>.errors.none?
|
2
|
-
= turbo_stream.replace "<%= plural %>-list" do
|
3
|
-
= render partial: "list", locals: {<%= plural %>: @<%= plural %> <%= nest_assignments_operator(true, true) %>}
|
4
|
-
|
5
|
-
= turbo_stream.replace "<%= singular %>-new" do
|
6
|
-
- if @<%= singular %>.errors.none?
|
7
|
-
= render partial: "new_button", locals: {<%= nest_assignments_operator(true, false) %> }
|
8
|
-
- else
|
9
|
-
= render partial: "new_form", locals: {<%= singular %>: @<%= singular %> <%= nest_assignments_operator(true, true) %>}
|
10
|
-
|
11
|
-
= turbo_stream.replace "flash_notices" do
|
12
|
-
= render partial: "layouts/flash_notices"
|
13
|
-
- if @<%= singular %>.errors.any?
|
14
|
-
= render partial: "errors", locals: {resource: @<%= singular %>}
|
@@ -1,19 +0,0 @@
|
|
1
|
-
= link_to "<i class='fa fa-arrow-circle-left 2x'></i> Back to list".html_safe, <%= path_helper_plural %>
|
2
|
-
|
3
|
-
= turbo_frame_tag "<%= singular %>__#{<%= "@" + singular %>.id}" do
|
4
|
-
.cell.editable{style: "position: relative;"}
|
5
|
-
- if <%="@" + singular%>.errors.any?
|
6
|
-
= render(partial: "#{controller.namespace}errors", locals: {resource: <%="@" + singular%>})
|
7
|
-
|
8
|
-
|
9
|
-
Editing
|
10
|
-
- if <%="@" + singular%>.try(:to_label)
|
11
|
-
= <%="@" + singular%>.to_label
|
12
|
-
- elsif <%="@" + singular%>.try(:name)
|
13
|
-
= <%="@" + singular%>.name
|
14
|
-
- else
|
15
|
-
(no name)
|
16
|
-
|
17
|
-
= form_with model: <%= "@" + singular%>, url: <%= path_helper_singular %>(<%= path_arity %>) do |f|
|
18
|
-
= render partial: "form", locals: {:<%= singular %> => <%= "@" + singular%>, f: f}
|
19
|
-
|
@@ -1 +0,0 @@
|
|
1
|
-
= render partial: "new_form", locals: {<%=singular%>: @<%=singular%>}
|
@@ -1,9 +0,0 @@
|
|
1
|
-
|
2
|
-
= turbo_stream.replace "<%= singular%>__#{@<%= singular %>.id}" do
|
3
|
-
= render partial: 'line', locals: {<%= singular %>: @<%= singular %> <%= nested_assignments_with_leading_comma %> }
|
4
|
-
|
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 %>}
|