Skip to content

Instantly share code, notes, and snippets.

@anithri
Created March 7, 2012 23:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anithri/1997252 to your computer and use it in GitHub Desktop.
Save anithri/1997252 to your computer and use it in GitHub Desktop.
operations dispatch?
def clause(op, field, data)
out = []
out << ops_table[op][:field_proc].call(field)
out << ops_table[op][:data_proc].call(data)
out
end
#later
model.where(*clause(op, field, data))
{
"eq" => {
:name => "equal",
:field_proc => lambda{|field| "#{field} = ?"},
:data_proc => lambda{|data| data}
},
"cn" => {
:name => "contains",
:field_proc => lambda{|field| "#{field} LIKE ?"},
:data_proc => lambda{|data| "%#{data}%}
}
"ne" => {
:name => "not equal",
:field_proc => nil,
:data_proc => nil
},
"lt" => {
:name => "less",
:field_proc => nil,
:data_proc => nil
},
"le" => {
:name => "less or equal",
:field_proc => nil,
:data_proc => nil
},
"gt" => {
:name => "greater",
:field_proc => nil,
:data_proc => nil
},
"ge" => {
:name => "greater or equal",
:field_proc => nil,
:data_proc => nil
},
"bw" => {
:name => "begins with",
:field_proc => nil,
:data_proc => nil
},
"bn" => {
:name => "does not begin with",
:field_proc => nil,
:data_proc => nil
},
"in" => {
:name => "is in",
:field_proc => nil,
:data_proc => nil
},
"ni" => {
:name => "is not in",
:field_proc => nil,
:data_proc => nil
},
"ew" => {
:name => "ends with",
:field_proc => nil,
:data_proc => nil
},
"en" => {
:name => "does not end with",
:field_proc => nil,
:data_proc => nil
},
"cn" => {
:name => "contains",
:field_proc => nil,
:data_proc => nil
},
"nc" => {
:name => "does not contain",
:field_proc => nil,
:data_proc => nil
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment