hot-glue 0.6.3 → 0.6.3.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|