Sha256: 6f2d4ede5e9cdfe5f9f195cf83267342481540d5e393da0f2f29bde086215327
Contents?: true
Size: 1.21 KB
Versions: 3
Compression:
Stored size: 1.21 KB
Contents
module ActiveRecord # = Active Record Dynamic Finder Match # # Refer to ActiveRecord::Base documentation for Dynamic attribute-based finders for detailed info # class DynamicFinderMatch def self.match(method) df_match = self.new(method) df_match.finder ? df_match : nil end def initialize(method) @finder = :first @bang = false @instantiator = nil case method.to_s when /^find_(all_by|last_by|by)_([_a-zA-Z]\w*)$/ @finder = :last if $1 == 'last_by' @finder = :all if $1 == 'all_by' names = $2 when /^find_by_([_a-zA-Z]\w*)\!$/ @bang = true names = $1 when /^find_or_(initialize|create)_by_([_a-zA-Z]\w*)$/ @instantiator = $1 == 'initialize' ? :new : :create names = $2 else @finder = nil end @attribute_names = names && names.split('_and_') end attr_reader :finder, :attribute_names, :instantiator def finder? !@finder.nil? && @instantiator.nil? end def instantiator? @finder == :first && !@instantiator.nil? end def creator? @finder == :first && @instantiator == :create end def bang? @bang end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
activerecord-3.0.1 | lib/active_record/dynamic_finder_match.rb |
activerecord-3.0.0 | lib/active_record/dynamic_finder_match.rb |
activerecord-3.0.0.rc2 | lib/active_record/dynamic_finder_match.rb |