This repository has been archived by the owner on Mar 30, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 140
Handy way to develop and test creating a new "Where" without restarting your server everytime
jlemonier edited this page Mar 25, 2012
·
8 revisions
Goal: Write and experiment with your first new MetaSearch "Where" in 10 minutes
- Create new MetaSearch Where predicate suffix :gt_da for :greater_than_days_ago so form element :created_gt_da = 7 will work as expected
- MonkeyPatch MetaSearch::Where class to support delete & list @@wheres
- In controller index function, call: rebuild_meta_were_additions
- Now code/test/experiment with a new "Where" with a page refresh instead of server restart
Monkey Patch:
# In controller developing/testing:
# call rebuild_meta_were_additions which executes: load 'meta_search/where.rb'
# Handy so we can delete/re-add our own "Wheres" for testing without restarting
module MetaSearch
class Where
class << self
def delete key, all_three = true
@@wheres.delete key
if all_three
@@wheres.delete "#{key}_any"
@@wheres.delete "#{key}_all"
end
end
def list_where_keys
@@wheres
end
end
end
end
Delete/Re-add "Where" Definition for quick dev & testing
###########################################################################
# https://github.com/ernie/meta_search
## awesome plugin for searching
## Extending it with some new "Wheres"
##
## User types "7" to mean >= 7 days ago
## :greater_than_days_ago - :gt_da
## Predicates: http://rubydoc.info/github/rails/arel/master/Arel/Attributes/Attribute
###########################################################################
class MyController
def index
rebuild_meta_were_additions
# ... try out the new where ...
end
## load 'meta_search/where.rb' adds delete method to class and list_where_keys
# Now we can delete & re-add where clause and experiment with every page load without restart
# Have this in same class as controller for development
def rebuild_meta_were_additions
load 'meta_search/where.rb'
@meta_search_status = "?"
@ms_wheres = MetaSearch::Where.list_where_keys
begin
MetaSearch::Where.delete :gt_da
MetaSearch::Where.add :gt_da, :greater_than_days_ago,
:predicate => :gt,
:types => [:date, :datetime, :timestamp],
:formatter => Proc.new {|param|
# Rails.logger.warn "param in gt_da formatter: [#{param}] "
param.to_i.days.ago },
:validator => Proc.new {|param| param.to_i > 0 },
# User types 7, formatter turns it into a date
# Without the cast specifying integer, our input is casted/cleared in search object
# With "hot-reload" via delete/add, it took ~15 minutes to figure it out
:cast => :integer
@meta_search_status = "Got it!"
rescue Exception => e
@meta_search_status = "Failed. #{e.message}"
end
end