Sha256: b1ffe75d764f42608cca342059a98dbe88e54801e6ac9d7c93cdb758df8ed74f
Contents?: true
Size: 970 Bytes
Versions: 1
Compression:
Stored size: 970 Bytes
Contents
module Kangaroo module Model module DynamicFinder def respond_to? name, *args case name.to_s when /^find_(all|first|last|)_?by_(.+)$/ true else super end end protected def method_missing name, *args name = name.to_s case name when /^find_(all|first|last|)_?by_(.+)$/ finder = $1.blank? ? :first : $1 fields = $2.split '_and_' define_dynamic_finder name, fields do |relation| relation.send finder end send name, *args else super end end def define_dynamic_finder name, keys singleton_class.send :define_method, name do |*values| conditions = {} keys.each_with_index do |key, i| conditions[key] = values[i] end yield where(conditions) end end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
kangaroo-0.1.0.alpha1 | lib/kangaroo/model/dynamic_finder.rb |