hot-glue 0.6.3 → 0.6.3.2
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/Gemfile.lock +3 -3
- data/README.md +5 -1
- data/app/helpers/hot_glue/controller_helper.rb +10 -2
- data/lib/generators/hot_glue/fields/boolean_field.rb +16 -13
- data/lib/generators/hot_glue/fields/date_time_field.rb +18 -3
- data/lib/generators/hot_glue/markup_templates/erb.rb +13 -9
- data/lib/generators/hot_glue/scaffold_generator.rb +9 -6
- data/lib/generators/hot_glue/templates/controller.rb.erb +2 -1
- data/lib/generators/hot_glue/templates/erb/_list.erb +4 -0
- data/lib/hotglue/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 76d714abff8aa0f8fd8f763d80d281bfad48b73f22264721a65aa8c4113895cd
|
|
4
|
+
data.tar.gz: c86b9c53e75cb794a9798ed3b112358c8ee6af2928c0d435486f2988a6fc5e38
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: d794abf688a43ccd316547c35586938d6963c61e1194df2fd02efd434ab964f77f8eb5fba4f85a02f3d31ece2ad05a2282c1e31d07576048a3c4b88dbe1b62c3
|
|
7
|
+
data.tar.gz: f1ebd911e9da38b7631ee357a1863ed7706d4cd016ce665c70bca088ba6d537bc3e0264ecd64c0e957ca8973766d91d8fd24e76f4dc5739911859813604ea3b0
|
data/Gemfile.lock
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
hot-glue (0.6.2)
|
|
4
|
+
hot-glue (0.6.3.2)
|
|
5
5
|
ffaker (~> 2.16)
|
|
6
6
|
kaminari (~> 1.2)
|
|
7
7
|
rails (> 5.1)
|
|
@@ -139,14 +139,14 @@ GEM
|
|
|
139
139
|
mini_mime (1.1.2)
|
|
140
140
|
mini_portile2 (2.8.4)
|
|
141
141
|
minitest (5.16.3)
|
|
142
|
-
net-imap (0.4.
|
|
142
|
+
net-imap (0.4.9.1)
|
|
143
143
|
date
|
|
144
144
|
net-protocol
|
|
145
145
|
net-pop (0.1.2)
|
|
146
146
|
net-protocol
|
|
147
147
|
net-protocol (0.2.2)
|
|
148
148
|
timeout
|
|
149
|
-
net-smtp (0.4.0)
|
|
149
|
+
net-smtp (0.4.0.1)
|
|
150
150
|
net-protocol
|
|
151
151
|
nio4r (2.5.8)
|
|
152
152
|
nokogiri (1.13.9)
|
data/README.md
CHANGED
|
@@ -1606,7 +1606,11 @@ These automatic pickups for partials are detected at buildtime. This means that
|
|
|
1606
1606
|
|
|
1607
1607
|
# VERSION HISTORY
|
|
1608
1608
|
|
|
1609
|
-
####
|
|
1609
|
+
#### 2024-01-16 - v0.6.3.1
|
|
1610
|
+
Adds support for boolean modified datetime search; now, when using a modify= to turn a datetime into a boolean, the search box behaves appropriately and shows a 3-way radio picker: all, falsy, truthy.
|
|
1611
|
+
(Only implemented for datetime)
|
|
1612
|
+
|
|
1613
|
+
#### 2024-01-15 - v0.6.3
|
|
1610
1614
|
|
|
1611
1615
|
## Set Searching
|
|
1612
1616
|
|
|
@@ -201,8 +201,16 @@ module HotGlue
|
|
|
201
201
|
end
|
|
202
202
|
|
|
203
203
|
def boolean_query_constructor(field, search)
|
|
204
|
-
unless search
|
|
205
|
-
["#{field}
|
|
204
|
+
unless search == "-1"
|
|
205
|
+
["#{field} IS #{search ? 'TRUE' : 'FALSE'}"]
|
|
206
|
+
else
|
|
207
|
+
nil
|
|
208
|
+
end
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
def boolean_modified_datetime_constructor(field,search)
|
|
212
|
+
unless search == '-1'
|
|
213
|
+
["#{field} #{search == '0' ? 'IS NULL' : 'IS NOT NULL'}"]
|
|
206
214
|
else
|
|
207
215
|
nil
|
|
208
216
|
end
|
|
@@ -75,6 +75,14 @@ class BooleanField < Field
|
|
|
75
75
|
end
|
|
76
76
|
end
|
|
77
77
|
|
|
78
|
+
def truthy_value
|
|
79
|
+
modify_as[:binary][:truthy] || 'Yes'
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def falsy_value
|
|
83
|
+
modify_as[:binary][:falsy] || 'No'
|
|
84
|
+
end
|
|
85
|
+
|
|
78
86
|
def label_class
|
|
79
87
|
super + " form-check-label"
|
|
80
88
|
end
|
|
@@ -82,26 +90,21 @@ class BooleanField < Field
|
|
|
82
90
|
|
|
83
91
|
|
|
84
92
|
def search_field_output
|
|
85
|
-
" <%= f.radio_button('q[0][#{name}_match]', '-1', checked: @q[\'0\'][
|
|
86
|
-
" <%= f.label('
|
|
87
|
-
|
|
88
|
-
" <%= f.
|
|
89
|
-
"
|
|
90
|
-
"
|
|
91
|
-
" <%= f.label('q[0][#{name}_match]_1', value: '#{modify_binary? && modify_as[:binary][:truthy] || 'Yes'}', for: 'q[0][#{name}_match]_1') %>\n"
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
# "<%= f.select 'q[0][#{name}_match]', options_for_select([['', ''], ['contains', 'contains'], ['is exactly', 'is_exactly'], ['starts with', 'starts_with'], ['ends with', 'ends_with']], @q[\'0\']['#{name}_match'] ), {} , { class: 'form-control match' } %>"+
|
|
95
|
-
# "<%= f.text_field 'q[0][#{name}_search]', value: @q[\'0\'][:#{name}_search], autocomplete: 'off', size: 40, class: 'form-control', type: 'text' %>"
|
|
93
|
+
" <%= f.radio_button('q[0][#{name}_match]', '-1', checked: @q[\'0\'][:#{name}_match]=='-1' ? 'checked' : '', class: '#{@layout_strategy.form_checkbox_input_class}') %>\n" +
|
|
94
|
+
" <%= f.label('All', value: '-1', for: 'q[0][#{name}_match]_-1' ) %>\n" +
|
|
95
|
+
" <%= f.radio_button('q[0][#{name}_match]', '0', checked: @q[\'0\'][:#{name}_match]=='0' ? 'checked' : '', class: '#{@layout_strategy.form_checkbox_input_class}') %>\n" +
|
|
96
|
+
" <%= f.label('#{falsy_value}', value: '0', for: 'q[0][#{name}_match]_0') %>\n" +
|
|
97
|
+
" <br /> <%= f.radio_button('q[0][#{name}_match]', '1', checked: @q[\'0\'][:#{name}_match]=='1' ? 'checked' : '' , class: '#{@layout_strategy.form_checkbox_input_class}') %>\n" +
|
|
98
|
+
" <%= f.label('#{truthy_value}', value: '1', for: 'q[0][#{name}_match]_1') %>\n"
|
|
96
99
|
end
|
|
97
100
|
|
|
98
101
|
|
|
99
102
|
def where_query_statement
|
|
100
|
-
".where(
|
|
103
|
+
".where(#{name}_query)"
|
|
101
104
|
end
|
|
102
105
|
|
|
103
106
|
def load_all_query_statement
|
|
104
|
-
"#{name}_query = boolean_query_constructor(
|
|
107
|
+
"#{name}_query = boolean_query_constructor(:#{name}, @q['0'][:#{name}_match])"
|
|
105
108
|
end
|
|
106
109
|
|
|
107
110
|
# def code_to_reset_match_if_search_is_blank
|
|
@@ -50,7 +50,9 @@ class DateTimeField < Field
|
|
|
50
50
|
end
|
|
51
51
|
|
|
52
52
|
def search_field_output
|
|
53
|
-
|
|
53
|
+
if !modify_binary?
|
|
54
|
+
|
|
55
|
+
" <div data-controller='date-range-picker' >"+
|
|
54
56
|
"\n <%= f.select 'q[0][#{name}_match]', options_for_select([['', ''], ['is on', 'is_on'], " +
|
|
55
57
|
"\n ['is between', 'is_between'], ['is on or after', 'is_on_or_after'], " +
|
|
56
58
|
"\n ['is before or on', 'is_before_or_on'], ['not on', 'not_on']], @q[\'0\']['#{name}_match'] ), {} ," +
|
|
@@ -58,14 +60,27 @@ class DateTimeField < Field
|
|
|
58
60
|
"\n <%= datetime_local_field 'q[0]', '#{name}_search_start', {value: @q[\'0\'][:#{name}_search_start], autocomplete: 'off', size: 40, class: 'form-control', placeholder: 'start', 'data-date-range-picker-target': 'start' } %>" +
|
|
59
61
|
"\n <%= datetime_local_field 'q[0]', '#{name}_search_end', {value: @q[\'0\'][:#{name}_search_end], autocomplete: 'off', size: 40, class: 'form-control', placeholder: 'end' , 'data-date-range-picker-target': 'end' } %>" +
|
|
60
62
|
"\n </div>"
|
|
63
|
+
else
|
|
64
|
+
" <%= f.radio_button('q[0][#{name}_match]', '-1', checked: @q[\'0\'][:#{name}_match]=='-1' ? 'checked' : '', class: '#{@layout_strategy.form_checkbox_input_class}') %>\n" +
|
|
65
|
+
" <%= f.label('All', value: '-1', for: 'q[0][#{name}_match]_-1' ) %>\n" +
|
|
66
|
+
" <br /><%= f.radio_button('q[0][#{name}_match]', '0', checked: @q[\'0\'][:#{name}_match]=='0' ? 'checked' : '', class: '#{@layout_strategy.form_checkbox_input_class}') %>\n" +
|
|
67
|
+
" <%= f.label('#{modify_as[:binary][:falsy]}', value: '0', for: 'q[0][#{name}_match]_0') %>\n" +
|
|
68
|
+
" <br /><%= f.radio_button('q[0][#{name}_match]', '1', checked: @q[\'0\'][:#{name}_match]=='1' ? 'checked' : '', class: '#{@layout_strategy.form_checkbox_input_class}') %>\n" +
|
|
69
|
+
" <%= f.label('#{modify_as[:binary][:truthy]}', value: '1', for: 'q[0][#{name}_match]_1') %>\n" +
|
|
70
|
+
"<br />"
|
|
71
|
+
end
|
|
61
72
|
end
|
|
62
73
|
|
|
63
74
|
|
|
64
75
|
def where_query_statement
|
|
65
|
-
".where(
|
|
76
|
+
".where(#{name}_query)"
|
|
66
77
|
end
|
|
67
78
|
|
|
68
79
|
def load_all_query_statement
|
|
69
|
-
|
|
80
|
+
if !modify_binary?
|
|
81
|
+
"#{name}_query = date_query_constructor(:#{name}, @q['0'][:#{name}_match], @q['0'][:#{name}_search_start], @q['0'][:#{name}_search_end])"
|
|
82
|
+
else
|
|
83
|
+
"#{name}_query = boolean_modified_datetime_constructor(:#{name}, @q['0'][:#{name}_match])"
|
|
84
|
+
end
|
|
70
85
|
end
|
|
71
86
|
end
|
|
@@ -92,26 +92,30 @@ module HotGlue
|
|
|
92
92
|
columns = layout_object[:columns][:container]
|
|
93
93
|
column_classes = layout_strategy.column_classes_for_form_fields
|
|
94
94
|
|
|
95
|
-
|
|
96
95
|
res =+ "<\%= form_with url: #{form_path}, method: :get, html: {'data-turbo-action': 'advance', 'data-controller': 'search-form'} do |f| %>"
|
|
97
96
|
res << "<div class=\"#{@layout_strategy.row_classes} search--#{@plural}\">"
|
|
98
97
|
|
|
99
98
|
res << columns.map{ |column|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
column.map { |col|
|
|
99
|
+
cols_result = column.map { |col|
|
|
100
|
+
if @search_fields.collect(&:to_sym).include?(col)
|
|
103
101
|
label_class = columns_map[col].label_class
|
|
104
102
|
label_for = columns_map[col].label_for
|
|
105
103
|
the_label = "\n<label class='#{label_class}' for='search-#{label_for}'>#{col.to_s.humanize}</label>"
|
|
106
104
|
search_field_result = columns_map[col].search_field_output
|
|
107
105
|
|
|
108
106
|
add_spaces_each_line( "\n <span class='' >\n" +
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
107
|
+
add_spaces_each_line( (form_labels_position == 'before' ? the_label || "" : "") +
|
|
108
|
+
+ " <br />\n" + search_field_result +
|
|
109
|
+
(form_labels_position == 'after' ? the_label : "") , 4) +
|
|
110
|
+
"\n </span>\n <br />", 2)
|
|
111
|
+
end
|
|
112
|
+
}.compact.join("\n")
|
|
113
|
+
|
|
114
|
+
" <div class='#{column_classes} search-cell--#{singular}--#{column.join("-")}' >" +
|
|
115
|
+
cols_result + "</div>"
|
|
116
|
+
|
|
114
117
|
}.join("\n")
|
|
118
|
+
res << "</div>"
|
|
115
119
|
res << "<div class='#{column_classes}'>"
|
|
116
120
|
if @search_clear_button
|
|
117
121
|
res << "<\%= f.button \"Clear\", name: nil, 'data-search-form-target': 'clearButton', class: 'btn btn-sm btn-secondary' %>"
|
|
@@ -513,6 +513,7 @@ class HotGlue::ScaffoldGenerator < Erb::Generators::ScaffoldGenerator
|
|
|
513
513
|
@search = options['search']
|
|
514
514
|
if @search == 'set'
|
|
515
515
|
@search_fields = options['search_fields'].split(',') || @columns
|
|
516
|
+
|
|
516
517
|
# within the set search we will take out any fields on the query list
|
|
517
518
|
# or the field
|
|
518
519
|
@search_query_fields = options['search_query_fields'].split(',') || []
|
|
@@ -1454,7 +1455,7 @@ class HotGlue::ScaffoldGenerator < Erb::Generators::ScaffoldGenerator
|
|
|
1454
1455
|
end
|
|
1455
1456
|
|
|
1456
1457
|
if pundit
|
|
1457
|
-
res << "@#{ plural_name } = policy_scope(#{ object_scope }).page(params[:page])#{ n_plus_one_includes }#{ ".per(per)" if @paginate_per_page_selector }"
|
|
1458
|
+
res << " @#{ plural_name } = policy_scope(#{ object_scope }).page(params[:page])#{ n_plus_one_includes }#{ ".per(per)" if @paginate_per_page_selector }"
|
|
1458
1459
|
else
|
|
1459
1460
|
if !@self_auth
|
|
1460
1461
|
res << spaces(4) + "@#{ plural_name } = #{ object_scope.gsub("@",'') }#{ n_plus_one_includes }.page(params[:page])#{ ".per(per)" if @paginate_per_page_selector }"
|
|
@@ -1470,14 +1471,16 @@ class HotGlue::ScaffoldGenerator < Erb::Generators::ScaffoldGenerator
|
|
|
1470
1471
|
res << "@#{ plural_name } = #{ class_name }.all"
|
|
1471
1472
|
else
|
|
1472
1473
|
res << "@#{ plural_name } = #{ class_name }.where(id: #{ auth_object.gsub("@",'') }.id)#{ n_plus_one_includes }"
|
|
1473
|
-
|
|
1474
|
-
res << @search_fields.collect{ |field|
|
|
1475
|
-
@columns_map[field.to_sym].where_query_statement
|
|
1476
|
-
}.join("\n")
|
|
1477
|
-
end
|
|
1474
|
+
|
|
1478
1475
|
res << ".page(params[:page])#{ ".per(per)" if @paginate_per_page_selector }"
|
|
1479
1476
|
end
|
|
1480
1477
|
end
|
|
1478
|
+
res << "\n"
|
|
1479
|
+
if @search_fields
|
|
1480
|
+
res << @search_fields.collect{ |field|
|
|
1481
|
+
spaces(4) + "@#{plural_name} = @#{plural_name}" + @columns_map[field.to_sym].where_query_statement + " if #{field}_query"
|
|
1482
|
+
}.join("\n")
|
|
1483
|
+
end
|
|
1481
1484
|
res
|
|
1482
1485
|
end
|
|
1483
1486
|
|
|
@@ -77,7 +77,8 @@ class <%= controller_class_name %> < <%= controller_descends_from %>
|
|
|
77
77
|
end
|
|
78
78
|
|
|
79
79
|
def index <% if @search == "set" %>
|
|
80
|
-
@q = params[:q] || <%= {"0" => @search_fields.collect{|foo|
|
|
80
|
+
@q = params[:q] || <%= {"0" => @search_fields.collect{|foo|
|
|
81
|
+
{"#{foo}_match".to_sym => ((@columns_map[foo.to_sym].modify_as && @columns_map[foo.to_sym].modify_as[:binary]) ? "-1" : ""), "#{foo}_search".to_sym => ""}}.reduce({}, :merge) } %> <% end %><% if @search_fields %>
|
|
81
82
|
<%= @search_fields.collect{|field_name| @columns_map[field_name.to_sym].code_to_reset_match_if_search_is_blank}.compact.join(" \n") %><% end %>
|
|
82
83
|
load_all_<%= plural %><% if @pundit %><% if @pundit %>
|
|
83
84
|
authorize @<%= plural_name %><% end %>
|
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.6.3
|
|
4
|
+
version: 0.6.3.2
|
|
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: 2024-01-
|
|
11
|
+
date: 2024-01-18 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rails
|