Active Record Dynamic Finder Match

Refer to ActiveRecord::Base documentation for Dynamic attribute-based finders for detailed info

Methods
B
C
F
I
M
N
S
Attributes
[R] attribute_names
[R] finder
[R] instantiator
Class Public methods
match(method)
# File activerecord/lib/active_record/dynamic_finder_match.rb, line 8
def self.match(method)
  finder       = :first
  bang         = false
  instantiator = nil

  case method.to_s
  when /^find_(all_|last_)?by_([_a-zA-Z]\w*)$/
    finder = :last if $1 == 'last_'
    finder = :all if $1 == 'all_'
    names = $2
  when /^find_by_([_a-zA-Z]\w*)\!$/
    bang = true
    names = $1
  when /^find_or_create_by_([_a-zA-Z]\w*)\!$/
    bang = true
    instantiator = :create
    names = $1
  when /^find_or_(initialize|create)_by_([_a-zA-Z]\w*)$/
    instantiator = $1 == 'initialize' ? :new : :create
    names = $2
  else
    return nil
  end

  new(finder, instantiator, bang, names.split('_and_'))
end
new(finder, instantiator, bang, attribute_names)
# File activerecord/lib/active_record/dynamic_finder_match.rb, line 35
def initialize(finder, instantiator, bang, attribute_names)
  @finder          = finder
  @instantiator    = instantiator
  @bang            = bang
  @attribute_names = attribute_names
end
Instance Public methods
bang?()
# File activerecord/lib/active_record/dynamic_finder_match.rb, line 56
def bang?
  @bang
end
creator?()
# File activerecord/lib/active_record/dynamic_finder_match.rb, line 52
def creator?
  @finder == :first && @instantiator == :create
end
finder?()
# File activerecord/lib/active_record/dynamic_finder_match.rb, line 44
def finder?
  @finder && !@instantiator
end
instantiator?()
# File activerecord/lib/active_record/dynamic_finder_match.rb, line 48
def instantiator?
  @finder == :first && @instantiator
end
save_method()
# File activerecord/lib/active_record/dynamic_finder_match.rb, line 64
def save_method
  bang? ? :save! : :save
end
save_record?()
# File activerecord/lib/active_record/dynamic_finder_match.rb, line 60
def save_record?
  @instantiator == :create
end