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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 54b2a13a1fb9740be4ca14f108d98b72d8f1250b6131389c5e1d2130f07578cb
4
- data.tar.gz: 15010c5e7fb34e35503b5a43aa563159d52f19c0b36f690ff03d67b7f1468060
3
+ metadata.gz: 76d714abff8aa0f8fd8f763d80d281bfad48b73f22264721a65aa8c4113895cd
4
+ data.tar.gz: c86b9c53e75cb794a9798ed3b112358c8ee6af2928c0d435486f2988a6fc5e38
5
5
  SHA512:
6
- metadata.gz: 7b4c9a3e48ea19199f95314a4f0bbff28ca7dfd5635c8ee34e3e2304944ad227d31cb359db1d7c4200f75336ebdb20133cfdb3c762cbe034590630e6d3051a0a
7
- data.tar.gz: c6c26412000d4bfa3ee27571aa430a8cf7b1c6dc454c55254a618bd312a14f754088ddb2dd77cf485dd69f433d06fe985a6ba34242f3df47607f4a3955703653
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.7)
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
- #### D2024-01-15 - v0.6.3
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.blank?
205
- ["#{field} = ?", search]
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\']['#{name}_match']==-1 ? '' : 'checked', class: '#{@layout_strategy.form_checkbox_input_class}') %>\n" +
86
- " <%= f.label('q[0][#{name}_match]', value: '-1', for: 'q[0][#{name}_match]_-1' ) %>\n" +
87
-
88
- " <%= f.radio_button('q[0][#{name}_match]', '0', checked: @q[\'0\']['#{name}_match']==0 ? '' : 'checked', class: '#{@layout_strategy.form_checkbox_input_class}') %>\n" +
89
- " <%= f.label('q[0][#{name}_match]_0', value: '#{modify_binary? && modify_as[:binary][:falsy] || 'No'}', for: 'q[0][#{name}_match]_0') %>\n" +
90
- " <br /> <%= f.radio_button('q[0][#{name}_match]', '1', checked: @q[\'0\']['#{name}_match']==1 ? 'checked' : '' , class: '#{@layout_strategy.form_checkbox_input_class}') %>\n" +
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('#{name} ILIKE ?', #{name}_query)"
103
+ ".where(#{name}_query)"
101
104
  end
102
105
 
103
106
  def load_all_query_statement
104
- "#{name}_query = boolean_query_constructor(@q['0'][:#{name}_match], @q['0'][:#{name}_search])"
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
- " <div data-controller='date-range-picker' >"+
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(*#{name}_query)"
76
+ ".where(#{name}_query)"
66
77
  end
67
78
 
68
79
  def load_all_query_statement
69
- "#{name}_query = date_query_constructor(:#{name}, @q['0'][:#{name}_match], @q['0'][:#{name}_search_start], @q['0'][:#{name}_search_end])"
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
- " <div class='#{column_classes} search-cell--#{singular}--#{column.join("-")}' >" +
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
- add_spaces_each_line( (form_labels_position == 'before' ? the_label || "" : "") +
110
- + " <br />\n" + search_field_result +
111
- (form_labels_position == 'after' ? the_label : "") , 4) +
112
- "\n </span>\n <br /></div>", 2)
113
- }.join("\n")
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
- if @search_fields
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| {"#{foo}_match".to_sym => "", "#{foo}_search".to_sym => ""}}.reduce({}, :merge) } %> <% end %><% if @search_fields %>
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 %>
@@ -42,7 +42,11 @@
42
42
  <% end %>
43
43
 
44
44
  <% if @search %>
45
+ <div class="card">
46
+ <div class="card-body">
45
47
  <%= @template_builder.search_input_area %>
48
+ </div>
49
+ </div>
46
50
  <% end %>
47
51
 
48
52
  <\% if <%= plural %>.empty? %>
@@ -1,5 +1,5 @@
1
1
  module HotGlue
2
2
  class Version
3
- CURRENT = '0.6.3'
3
+ CURRENT = '0.6.3.2'
4
4
  end
5
5
  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.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-15 00:00:00.000000000 Z
11
+ date: 2024-01-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails