about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--Gemfile1
-rw-r--r--Gemfile.lock5
-rw-r--r--app/controllers/quotes_controller.rb14
-rw-r--r--app/models/quote.rb9
-rw-r--r--app/views/quotes/search_form.html.haml6
-rw-r--r--config/routes.rb2
6 files changed, 37 insertions, 0 deletions
diff --git a/Gemfile b/Gemfile index 74a0c62..5fa14f7 100644 --- a/Gemfile +++ b/Gemfile
@@ -88,3 +88,4 @@ gem 'whenever', "~> 1.0.0", require: false
88gem "webmention" 88gem "webmention"
89gem 'microformats', '~> 4.0', '>= 4.2.1' 89gem 'microformats', '~> 4.0', '>= 4.2.1'
90gem 'recaptcha' 90gem 'recaptcha'
91gem 'ransack'
diff --git a/Gemfile.lock b/Gemfile.lock index 0afbc47..6b672bc 100644 --- a/Gemfile.lock +++ b/Gemfile.lock
@@ -296,6 +296,10 @@ GEM
296 thor (~> 1.0, >= 1.2.2) 296 thor (~> 1.0, >= 1.2.2)
297 zeitwerk (~> 2.6) 297 zeitwerk (~> 2.6)
298 rake (13.1.0) 298 rake (13.1.0)
299 ransack (4.3.0)
300 activerecord (>= 6.1.5)
301 activesupport (>= 6.1.5)
302 i18n
299 rb-fsevent (0.11.2) 303 rb-fsevent (0.11.2)
300 rb-inotify (0.10.1) 304 rb-inotify (0.10.1)
301 ffi (~> 1.0) 305 ffi (~> 1.0)
@@ -417,6 +421,7 @@ DEPENDENCIES
417 paperclip 421 paperclip
418 rails (~> 7.1.0) 422 rails (~> 7.1.0)
419 rails_autolink 423 rails_autolink
424 ransack
420 recaptcha 425 recaptcha
421 redcarpet 426 redcarpet
422 rouge 427 rouge
diff --git a/app/controllers/quotes_controller.rb b/app/controllers/quotes_controller.rb index d4800cb..468f6ea 100644 --- a/app/controllers/quotes_controller.rb +++ b/app/controllers/quotes_controller.rb
@@ -30,6 +30,20 @@ class QuotesController < ApplicationController
30 end 30 end
31 end 31 end
32 32
33 def search_form
34 @q = Quote.published.ransack
35 end
36
37 def search
38 @quotes = Quote.published.ransack(params[:q]).result(distinct: true).paginate(page: params[:page], per_page: 10)
39
40 respond_to do |format|
41 format.html { render :list }
42 format.json { render :json => @quotes }
43 format.xml { render :xml => @quotes }
44 end
45 end
46
33 def random 47 def random
34 picked = Quote.where(state: :published).ids.sample 48 picked = Quote.where(state: :published).ids.sample
35 redirect_to quote_url(picked) 49 redirect_to quote_url(picked)
diff --git a/app/models/quote.rb b/app/models/quote.rb index 3301667..b1d25b4 100644 --- a/app/models/quote.rb +++ b/app/models/quote.rb
@@ -36,4 +36,13 @@ class Quote < ApplicationRecord
36 def has_tags? 36 def has_tags?
37 !tags.empty? 37 !tags.empty?
38 end 38 end
39
40 def self.ransackable_attributes(auth_object = nil)
41 ["content", "notes"]
42 end
43
44 def self.ransackable_associations(auth_object = nil)
45 []
46 end
47
39end 48end
diff --git a/app/views/quotes/search_form.html.haml b/app/views/quotes/search_form.html.haml new file mode 100644 index 0000000..74cdd20 --- /dev/null +++ b/app/views/quotes/search_form.html.haml
@@ -0,0 +1,6 @@
1%h3 Search
2= search_form_for @q, url: search_quotes_url do |f|
3 .form-field
4 = f.label :content_or_notes_cont, "Query:"
5 = f.search_field :content_or_notes_cont
6 .form-field= f.submit
diff --git a/config/routes.rb b/config/routes.rb index 76378c4..9e62ebb 100644 --- a/config/routes.rb +++ b/config/routes.rb
@@ -74,6 +74,8 @@ Rails.application.routes.draw do
74 get 'tags' 74 get 'tags'
75 get 'tags/:id', :action => "tag", :as => "tag" 75 get 'tags/:id', :action => "tag", :as => "tag"
76 get 'stats' 76 get 'stats'
77 get 'search_form'
78 get 'search'
77 end 79 end
78 80
79 member do 81 member do