hot-glue 0.5.12 → 0.5.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 %>}
|