recourse 3.0.4 → 4.0.0

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.
Files changed (131) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +234 -0
  3. data/README.md +150 -20
  4. data/app/controllers/bookmarks_controller.rb +7 -0
  5. data/app/controllers/concerns/recourse/landing.rb +49 -0
  6. data/app/controllers/concerns/recourse/list_resolution.rb +28 -0
  7. data/app/controllers/concerns/recourse/paging.rb +17 -0
  8. data/app/controllers/concerns/recourse/parent_naming.rb +24 -0
  9. data/app/controllers/concerns/recourse/parent_resolution.rb +63 -0
  10. data/app/controllers/concerns/recourse/reference_resolution.rb +70 -0
  11. data/app/controllers/concerns/recourse/resource_resolution.rb +68 -0
  12. data/app/controllers/concerns/recourse/zoning.rb +29 -0
  13. data/app/controllers/recourse/base_controller.rb +85 -0
  14. data/app/controllers/recourse/bookmarks_controller.rb +76 -0
  15. data/app/controllers/recourses_controller.rb +6 -25
  16. data/app/javascript/recourse/bookmark_controller.js +100 -0
  17. data/app/javascript/recourse/clear_controller.js +22 -0
  18. data/app/javascript/recourse/combobox_controller.js +68 -0
  19. data/app/javascript/recourse/confirm.js +46 -0
  20. data/app/javascript/recourse/deselect_controller.js +37 -0
  21. data/app/javascript/recourse/flash.js +35 -0
  22. data/app/javascript/recourse/limit_controller.js +23 -0
  23. data/app/javascript/recourse/phone_controller.js +33 -0
  24. data/app/javascript/recourse/relative_time_controller.js +45 -0
  25. data/app/javascript/recourse/reveal_controller.js +16 -0
  26. data/app/javascript/recourse/scheme_controller.js +51 -0
  27. data/app/javascript/recourse/search_controller.js +78 -0
  28. data/app/javascript/recourse/shortcuts_controller.js +42 -0
  29. data/app/javascript/recourse/timezone_controller.js +27 -0
  30. data/app/javascript/recourse/toast_controller.js +35 -0
  31. data/app/javascript/recourse/tooltip_controller.js +16 -0
  32. data/app/javascript/recourse/written.js +29 -0
  33. data/app/javascript/recourse/written_controller.js +28 -0
  34. data/app/views/layouts/recourses.html.erb +442 -0
  35. data/app/views/recourses/_breadcrumb.html.erb +35 -0
  36. data/app/views/recourses/_card.html.erb +33 -0
  37. data/app/views/recourses/_color.html.erb +20 -0
  38. data/app/views/recourses/_combobox.html.erb +68 -0
  39. data/app/views/recourses/_confirm.html.erb +14 -0
  40. data/app/views/recourses/_fields.html.erb +3 -0
  41. data/app/views/recourses/_flash.html.erb +26 -0
  42. data/app/views/recourses/_footer.html.erb +22 -0
  43. data/app/views/recourses/_form.html.erb +11 -0
  44. data/app/views/recourses/_none.html.erb +1 -0
  45. data/app/views/recourses/_results.html.erb +10 -0
  46. data/app/views/recourses/_row.html.erb +4 -10
  47. data/app/views/recourses/_scheme.html.erb +14 -0
  48. data/app/views/recourses/_search.html.erb +24 -0
  49. data/app/views/recourses/_sidebar.html.erb +40 -0
  50. data/app/views/recourses/_table.html.erb +47 -42
  51. data/app/views/recourses/_values.html.erb +3 -0
  52. data/app/views/recourses/edit.html.erb +10 -0
  53. data/app/views/recourses/index.html.erb +27 -24
  54. data/app/views/recourses/new.html.erb +3 -0
  55. data/app/views/recourses/show.html.erb +10 -0
  56. data/config/locales/recourse.en.yml +72 -0
  57. data/lib/recourse/bookmarks.rb +51 -0
  58. data/lib/recourse/broadcasting.rb +33 -0
  59. data/lib/recourse/colors.rb +32 -0
  60. data/lib/recourse/columns.rb +80 -0
  61. data/lib/recourse/controllers.rb +26 -0
  62. data/lib/recourse/engine.rb +33 -13
  63. data/lib/recourse/helpers/actions.rb +56 -0
  64. data/lib/recourse/helpers/bookmarks.rb +88 -0
  65. data/lib/recourse/helpers/buttons.rb +65 -0
  66. data/lib/recourse/helpers/cards.rb +67 -0
  67. data/lib/recourse/helpers/cells.rb +89 -0
  68. data/lib/recourse/helpers/choices.rb +49 -0
  69. data/lib/recourse/helpers/colors.rb +20 -0
  70. data/lib/recourse/helpers/comboboxes.rb +87 -0
  71. data/lib/recourse/helpers/constraints.rb +92 -0
  72. data/lib/recourse/helpers/counters.rb +75 -0
  73. data/lib/recourse/helpers/deletions.rb +87 -0
  74. data/lib/recourse/helpers/details.rb +41 -0
  75. data/lib/recourse/helpers/examples.rb +35 -0
  76. data/lib/recourse/helpers/fields.rb +78 -0
  77. data/lib/recourse/helpers/filters.rb +91 -0
  78. data/lib/recourse/helpers/formats.rb +94 -0
  79. data/lib/recourse/helpers/inputs.rb +92 -0
  80. data/lib/recourse/helpers/kinds.rb +87 -0
  81. data/lib/recourse/helpers/limits.rb +37 -0
  82. data/lib/recourse/helpers/names.rb +44 -0
  83. data/lib/recourse/helpers/navigation.rb +75 -0
  84. data/lib/recourse/helpers/parents.rb +82 -0
  85. data/lib/recourse/helpers/pictures.rb +33 -0
  86. data/lib/recourse/helpers/references.rb +99 -0
  87. data/lib/recourse/helpers/refreshes.rb +27 -0
  88. data/lib/recourse/helpers/resources.rb +47 -0
  89. data/lib/recourse/helpers/routing.rb +28 -0
  90. data/lib/recourse/helpers/rows.rb +33 -0
  91. data/lib/recourse/helpers/schemes.rb +14 -0
  92. data/lib/recourse/helpers/searches.rb +57 -0
  93. data/lib/recourse/helpers/shortcuts.rb +30 -0
  94. data/lib/recourse/helpers/sidebars.rb +39 -0
  95. data/lib/recourse/helpers/sorts.rb +62 -0
  96. data/lib/recourse/helpers/tabs.rb +82 -0
  97. data/lib/recourse/helpers/times.rb +43 -0
  98. data/lib/recourse/helpers/values.rb +64 -0
  99. data/lib/recourse/helpers/zones.rb +38 -0
  100. data/lib/recourse/helpers.rb +81 -0
  101. data/lib/recourse/icons.rb +21 -0
  102. data/lib/recourse/limits.rb +12 -0
  103. data/lib/recourse/recoursive.rb +66 -19
  104. data/lib/recourse/registry.rb +36 -0
  105. data/lib/recourse/routes/nested.rb +36 -0
  106. data/lib/recourse/routes.rb +57 -0
  107. data/lib/recourse/routing.rb +11 -32
  108. data/lib/recourse/schemes.rb +6 -0
  109. data/lib/recourse/scopes.rb +37 -0
  110. data/lib/recourse/search.rb +65 -0
  111. data/lib/recourse/searchable/columns.rb +99 -0
  112. data/lib/recourse/searchable/filters.rb +58 -0
  113. data/lib/recourse/searchable/terms.rb +56 -0
  114. data/lib/recourse/searchable.rb +47 -22
  115. data/lib/recourse/titles.rb +56 -0
  116. data/lib/recourse/version.rb +2 -1
  117. data/lib/recourse/writes.rb +12 -0
  118. data/lib/recourse/zones.rb +6 -0
  119. data/lib/recourse.rb +79 -7
  120. data/vendor/recourse/bootstrap-icons.min.css +5 -0
  121. data/vendor/recourse/bootstrap.bundle.min.js +9 -0
  122. data/vendor/recourse/bootstrap.min.css +2 -0
  123. data/vendor/recourse/fonts/bootstrap-icons.woff +0 -0
  124. data/vendor/recourse/fonts/bootstrap-icons.woff2 +0 -0
  125. data/vendor/recourse/stimulus.js +2563 -0
  126. metadata +169 -30
  127. data/Rakefile +0 -6
  128. data/app/helpers/navigable_helper.rb +0 -36
  129. data/app/helpers/recoursive_helper.rb +0 -10
  130. data/app/helpers/searchable_helper.rb +0 -54
  131. data/db/migrate/20260323234318_add_baby_to_posts.rb +0 -5
metadata CHANGED
@@ -1,115 +1,254 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: recourse
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.4
4
+ version: 4.0.0
5
5
  platform: ruby
6
6
  authors:
7
- - Claudio Baccigalupo
8
- bindir: bin
7
+ - claudiob
8
+ bindir: exe
9
9
  cert_chain: []
10
10
  date: 1980-01-02 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
- name: rails
13
+ name: actionpack
14
14
  requirement: !ruby/object:Gem::Requirement
15
15
  requirements:
16
16
  - - ">="
17
17
  - !ruby/object:Gem::Version
18
- version: '0'
18
+ version: '8.1'
19
19
  type: :runtime
20
20
  prerelease: false
21
21
  version_requirements: !ruby/object:Gem::Requirement
22
22
  requirements:
23
23
  - - ">="
24
24
  - !ruby/object:Gem::Version
25
- version: '0'
25
+ version: '8.1'
26
+ - !ruby/object:Gem::Dependency
27
+ name: activerecord
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: '8.1'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '8.1'
26
40
  - !ruby/object:Gem::Dependency
27
41
  name: pagy
28
42
  requirement: !ruby/object:Gem::Requirement
29
43
  requirements:
30
44
  - - ">="
31
45
  - !ruby/object:Gem::Version
32
- version: '0'
46
+ version: '43.6'
33
47
  type: :runtime
34
48
  prerelease: false
35
49
  version_requirements: !ruby/object:Gem::Requirement
36
50
  requirements:
37
51
  - - ">="
38
52
  - !ruby/object:Gem::Version
39
- version: '0'
53
+ version: '43.6'
40
54
  - !ruby/object:Gem::Dependency
41
- name: ransack
55
+ name: railties
42
56
  requirement: !ruby/object:Gem::Requirement
43
57
  requirements:
44
58
  - - ">="
45
59
  - !ruby/object:Gem::Version
46
- version: '0'
60
+ version: '8.1'
47
61
  type: :runtime
48
62
  prerelease: false
49
63
  version_requirements: !ruby/object:Gem::Requirement
50
64
  requirements:
51
65
  - - ">="
52
66
  - !ruby/object:Gem::Version
53
- version: '0'
67
+ version: '8.1'
54
68
  - !ruby/object:Gem::Dependency
55
- name: minitest
69
+ name: ransack
56
70
  requirement: !ruby/object:Gem::Requirement
57
71
  requirements:
58
- - - "<"
72
+ - - ">="
59
73
  - !ruby/object:Gem::Version
60
- version: '6'
61
- type: :development
74
+ version: '4.4'
75
+ type: :runtime
62
76
  prerelease: false
63
77
  version_requirements: !ruby/object:Gem::Requirement
64
78
  requirements:
65
- - - "<"
79
+ - - ">="
66
80
  - !ruby/object:Gem::Version
67
- version: '6'
81
+ version: '4.4'
68
82
  - !ruby/object:Gem::Dependency
69
- name: simplecov
83
+ name: turbo-rails
70
84
  requirement: !ruby/object:Gem::Requirement
71
85
  requirements:
72
86
  - - ">="
73
87
  - !ruby/object:Gem::Version
74
88
  version: '0'
75
- type: :development
89
+ type: :runtime
76
90
  prerelease: false
77
91
  version_requirements: !ruby/object:Gem::Requirement
78
92
  requirements:
79
93
  - - ">="
80
94
  - !ruby/object:Gem::Version
81
95
  version: '0'
82
- description: Turns resources into recourses
96
+ - !ruby/object:Gem::Dependency
97
+ name: unicon
98
+ requirement: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: '3.2'
103
+ type: :runtime
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: '3.2'
110
+ description: Recourse adds a `recourses` method to config/routes.rb. One line draws
111
+ the routes, controllers and views needed to browse and edit a resource, with no
112
+ files added to the host app. Any controller, view or partial can be overridden by
113
+ defining it in the app.
83
114
  email:
84
115
  - claudiob@users.noreply.github.com
85
116
  executables: []
86
117
  extensions: []
87
118
  extra_rdoc_files: []
88
119
  files:
120
+ - CHANGELOG.md
89
121
  - MIT-LICENSE
90
122
  - README.md
91
- - Rakefile
123
+ - app/controllers/bookmarks_controller.rb
124
+ - app/controllers/concerns/recourse/landing.rb
125
+ - app/controllers/concerns/recourse/list_resolution.rb
126
+ - app/controllers/concerns/recourse/paging.rb
127
+ - app/controllers/concerns/recourse/parent_naming.rb
128
+ - app/controllers/concerns/recourse/parent_resolution.rb
129
+ - app/controllers/concerns/recourse/reference_resolution.rb
130
+ - app/controllers/concerns/recourse/resource_resolution.rb
131
+ - app/controllers/concerns/recourse/zoning.rb
132
+ - app/controllers/recourse/base_controller.rb
133
+ - app/controllers/recourse/bookmarks_controller.rb
92
134
  - app/controllers/recourses_controller.rb
93
- - app/helpers/navigable_helper.rb
94
- - app/helpers/recoursive_helper.rb
95
- - app/helpers/searchable_helper.rb
135
+ - app/javascript/recourse/bookmark_controller.js
136
+ - app/javascript/recourse/clear_controller.js
137
+ - app/javascript/recourse/combobox_controller.js
138
+ - app/javascript/recourse/confirm.js
139
+ - app/javascript/recourse/deselect_controller.js
140
+ - app/javascript/recourse/flash.js
141
+ - app/javascript/recourse/limit_controller.js
142
+ - app/javascript/recourse/phone_controller.js
143
+ - app/javascript/recourse/relative_time_controller.js
144
+ - app/javascript/recourse/reveal_controller.js
145
+ - app/javascript/recourse/scheme_controller.js
146
+ - app/javascript/recourse/search_controller.js
147
+ - app/javascript/recourse/shortcuts_controller.js
148
+ - app/javascript/recourse/timezone_controller.js
149
+ - app/javascript/recourse/toast_controller.js
150
+ - app/javascript/recourse/tooltip_controller.js
151
+ - app/javascript/recourse/written.js
152
+ - app/javascript/recourse/written_controller.js
153
+ - app/views/layouts/recourses.html.erb
154
+ - app/views/recourses/_breadcrumb.html.erb
155
+ - app/views/recourses/_card.html.erb
156
+ - app/views/recourses/_color.html.erb
157
+ - app/views/recourses/_combobox.html.erb
158
+ - app/views/recourses/_confirm.html.erb
159
+ - app/views/recourses/_fields.html.erb
160
+ - app/views/recourses/_flash.html.erb
161
+ - app/views/recourses/_footer.html.erb
162
+ - app/views/recourses/_form.html.erb
163
+ - app/views/recourses/_none.html.erb
164
+ - app/views/recourses/_results.html.erb
96
165
  - app/views/recourses/_row.html.erb
166
+ - app/views/recourses/_scheme.html.erb
167
+ - app/views/recourses/_search.html.erb
168
+ - app/views/recourses/_sidebar.html.erb
97
169
  - app/views/recourses/_table.html.erb
170
+ - app/views/recourses/_values.html.erb
171
+ - app/views/recourses/edit.html.erb
98
172
  - app/views/recourses/index.html.erb
99
- - db/migrate/20260323234318_add_baby_to_posts.rb
173
+ - app/views/recourses/new.html.erb
174
+ - app/views/recourses/show.html.erb
175
+ - config/locales/recourse.en.yml
100
176
  - lib/recourse.rb
177
+ - lib/recourse/bookmarks.rb
178
+ - lib/recourse/broadcasting.rb
179
+ - lib/recourse/colors.rb
180
+ - lib/recourse/columns.rb
181
+ - lib/recourse/controllers.rb
101
182
  - lib/recourse/engine.rb
183
+ - lib/recourse/helpers.rb
184
+ - lib/recourse/helpers/actions.rb
185
+ - lib/recourse/helpers/bookmarks.rb
186
+ - lib/recourse/helpers/buttons.rb
187
+ - lib/recourse/helpers/cards.rb
188
+ - lib/recourse/helpers/cells.rb
189
+ - lib/recourse/helpers/choices.rb
190
+ - lib/recourse/helpers/colors.rb
191
+ - lib/recourse/helpers/comboboxes.rb
192
+ - lib/recourse/helpers/constraints.rb
193
+ - lib/recourse/helpers/counters.rb
194
+ - lib/recourse/helpers/deletions.rb
195
+ - lib/recourse/helpers/details.rb
196
+ - lib/recourse/helpers/examples.rb
197
+ - lib/recourse/helpers/fields.rb
198
+ - lib/recourse/helpers/filters.rb
199
+ - lib/recourse/helpers/formats.rb
200
+ - lib/recourse/helpers/inputs.rb
201
+ - lib/recourse/helpers/kinds.rb
202
+ - lib/recourse/helpers/limits.rb
203
+ - lib/recourse/helpers/names.rb
204
+ - lib/recourse/helpers/navigation.rb
205
+ - lib/recourse/helpers/parents.rb
206
+ - lib/recourse/helpers/pictures.rb
207
+ - lib/recourse/helpers/references.rb
208
+ - lib/recourse/helpers/refreshes.rb
209
+ - lib/recourse/helpers/resources.rb
210
+ - lib/recourse/helpers/routing.rb
211
+ - lib/recourse/helpers/rows.rb
212
+ - lib/recourse/helpers/schemes.rb
213
+ - lib/recourse/helpers/searches.rb
214
+ - lib/recourse/helpers/shortcuts.rb
215
+ - lib/recourse/helpers/sidebars.rb
216
+ - lib/recourse/helpers/sorts.rb
217
+ - lib/recourse/helpers/tabs.rb
218
+ - lib/recourse/helpers/times.rb
219
+ - lib/recourse/helpers/values.rb
220
+ - lib/recourse/helpers/zones.rb
221
+ - lib/recourse/icons.rb
222
+ - lib/recourse/limits.rb
102
223
  - lib/recourse/recoursive.rb
224
+ - lib/recourse/registry.rb
225
+ - lib/recourse/routes.rb
226
+ - lib/recourse/routes/nested.rb
103
227
  - lib/recourse/routing.rb
228
+ - lib/recourse/schemes.rb
229
+ - lib/recourse/scopes.rb
230
+ - lib/recourse/search.rb
104
231
  - lib/recourse/searchable.rb
232
+ - lib/recourse/searchable/columns.rb
233
+ - lib/recourse/searchable/filters.rb
234
+ - lib/recourse/searchable/terms.rb
235
+ - lib/recourse/titles.rb
105
236
  - lib/recourse/version.rb
237
+ - lib/recourse/writes.rb
238
+ - lib/recourse/zones.rb
239
+ - vendor/recourse/bootstrap-icons.min.css
240
+ - vendor/recourse/bootstrap.bundle.min.js
241
+ - vendor/recourse/bootstrap.min.css
242
+ - vendor/recourse/fonts/bootstrap-icons.woff
243
+ - vendor/recourse/fonts/bootstrap-icons.woff2
244
+ - vendor/recourse/stimulus.js
106
245
  homepage: https://github.com/claudiob/recourse
107
246
  licenses:
108
247
  - MIT
109
248
  metadata:
110
- homepage_uri: https://github.com/claudiob/recourse
111
- source_code_uri: https://github.com/claudiob/recourse/
112
- changelog_uri: https://github.com/claudiob/recourse/blob/master/CHANGELOG.md
249
+ source_code_uri: https://github.com/claudiob/recourse
250
+ changelog_uri: https://github.com/claudiob/recourse/blob/main/CHANGELOG.md
251
+ documentation_uri: https://rubydoc.info/gems/recourse
113
252
  rdoc_options: []
114
253
  require_paths:
115
254
  - lib
@@ -117,7 +256,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
117
256
  requirements:
118
257
  - - ">="
119
258
  - !ruby/object:Gem::Version
120
- version: '3'
259
+ version: 3.2.0
121
260
  required_rubygems_version: !ruby/object:Gem::Requirement
122
261
  requirements:
123
262
  - - ">="
@@ -126,5 +265,5 @@ required_rubygems_version: !ruby/object:Gem::Requirement
126
265
  requirements: []
127
266
  rubygems_version: 4.0.3
128
267
  specification_version: 4
129
- summary: Rails admin tool
268
+ summary: A routes.rb DSL that mounts ready-made resource screens.
130
269
  test_files: []
data/Rakefile DELETED
@@ -1,6 +0,0 @@
1
- require "bundler/setup"
2
-
3
- APP_RAKEFILE = File.expand_path("test/dummy/Rakefile", __dir__)
4
- load "rails/tasks/engine.rake"
5
-
6
- require "bundler/gem_tasks"
@@ -1,36 +0,0 @@
1
- # A collection of helper to display root resources as a Bootstrap-styled navbar.
2
- module NavigableHelper
3
- # Boostrap icons to be used for specific resources.
4
- NAVIGATION_ICONS = {
5
- 'Agents' => 'robot',
6
- 'Answers' => 'question-circle', 'Apps' => 'window', 'Assessments' => 'clipboard-check',
7
- 'Bookings' => 'calendar-check', 'Brands' => 'buildings', 'Campaigns' => 'megaphone',
8
- 'Contacts' => 'person-rolodex', 'Contract' => 'file-earmark-check', 'CRM' => 'plugin',
9
- 'Conversations' => 'chat-dots', 'Counties' => 'map', 'Episodes' => 'collection-play',
10
- 'Evaluations' => 'speedometer2', 'Franchises' => 'shop', 'Home' => 'home',
11
- 'Inquiries' => 'magic',
12
- 'Logout' => 'box-arrow-right', 'Markets' => 'pin-map', 'Offer questions' => 'gift',
13
- 'Optimizations' => 'sliders', 'Platforms' => 'plugin',
14
- 'Profile' => 'person-circle', 'Prompts' => 'terminal',
15
- 'Providers' => 'briefcase', 'Satisfaction questions' => 'emoji-smile', 'Searches' => 'search',
16
- 'Settings' => 'gear', 'Sources'=> 'signpost',
17
- 'Specialties' => 'award', 'Specialty matches' => 'award',
18
- 'Verticals' => 'bar-chart', 'ZIPs' => 'geo-alt-fill',
19
- }
20
-
21
- # @return [Array<String, String>] caption and URL of each link a top-level resource.
22
- def navigation_links
23
- Recourse.resources.select { |k, v| v[:routes].include? :index }.map do |resource, options|
24
- caption = resource.to_s.singularize.humanize.pluralize
25
- [caption, url_for(resource), navigation_icon_for(caption)]
26
- end
27
- end
28
-
29
- private
30
-
31
- # @return [String] a meaningful icon based on the resource name, or a generic one if not found.
32
- def navigation_icon_for(caption, style: nil)
33
- icon = NAVIGATION_ICONS.fetch caption, 'house-door-fill'
34
- tag.i class: "bi bi-#{icon}", style: style
35
- end
36
- end
@@ -1,10 +0,0 @@
1
- # A collection of helper methods used for navigation link in the admin-only section
2
- module RecoursiveHelper
3
- def column(header:, **options, &block)
4
- if @recourse_headers
5
- tag.th header, **options.merge(scope: :col)
6
- else
7
- tag.td **options, &block
8
- end
9
- end
10
- end
@@ -1,54 +0,0 @@
1
- # A collection of helper methods used to search resources with Ransack.
2
- module SearchableHelper
3
- # Renders a form with a field to search within +model+ that uses +placeholder+.
4
- # @param [String] q the search query.
5
- # @param [ApplicationRecord] model the model of each object returned by the search
6
- def search_form(q:, model:, url: url_for(model))
7
- search_form_for(q, search_form_params(url: url)) do |form|
8
- safe_join [*filter_fields_for(form, model:), search_field_for(form, model:)].compact
9
- end
10
- end
11
-
12
- # Highlights the search query within the text of the matched content.
13
- def search_highlight(content, model:) = highlight content.to_s, params.dig(:q, model.search_field)
14
-
15
- private
16
-
17
- def filter_fields_for(form, model:)
18
- selects = model.filter_fields.map do |method, options = {}|
19
- choices = options.delete :choices
20
- form.select method, choices, options, filter_field_params if choices
21
- end
22
- safe_join selects.compact
23
- end
24
-
25
- def search_field_for(form, model:)
26
- return unless model.search_field
27
- adorn = tag.svg width: 16, height: 16, viewBox: '0 0 16 16', xmlns: 'http://www.w3.org/2000/svg' do
28
- tag.path d: 'M11.742 10.344a6.5 6.5 0 1 0-1.397 1.398h-.001q.044.06.098.115l3.85 3.85a1 1 0 0 0 1.415-1.414l-3.85-3.85a1 1 0 0 0-.115-.1zM12 6.5a5.5 5.5 0 1 1-11 0 5.5 5.5 0 0 1 11 0'
29
- end
30
- field = form.search_field model.search_field, search_field_params(placeholder: model.search_prompt)
31
- tag.div safe_join([adorn, field]), class: 'form-control form-control-sm form-adorn'
32
- end
33
-
34
- def search_form_params(url:)
35
- {
36
- url: url, class: 'col-6 d-flex pe-4', role: 'search',
37
- data: { turbo_frame: :results, turbo_action: :advance },
38
- }
39
- end
40
-
41
- def search_field_params(placeholder:)
42
- {
43
- class: 'form-ghost', placeholder: placeholder,
44
- oninput: 'debouncedSubmit(this.form)', aria: { label: 'Search' }
45
- }
46
- end
47
-
48
- def filter_field_params
49
- {
50
- aria: { label: 'Filter' }, class: 'form-control form-control-sm me-3',
51
- onchange: 'debouncedSubmit(this.form)',
52
- }
53
- end
54
- end
@@ -1,5 +0,0 @@
1
- class AddBabyToPosts < ActiveRecord::Migration[8.1]
2
- def change
3
- add_reference :posts, :baby, null: true, foreign_key: true
4
- end
5
- end