Sha256: ffb3536f1a7d9b2773a69055ade466a23db8b1bb0f5d18703a3342a1809a24b1

Contents?: true

Size: 961 Bytes

Versions: 80

Compression:

Stored size: 961 Bytes

Contents

module ActiveRecord
  class DynamicFinderMatch
    def self.match(method)
      df_match = self.new(method)
      df_match.finder ? df_match : nil
    end

    def initialize(method)
      @finder = :first
      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 bang?
      @bang
    end
  end
end

Version data entries

80 entries across 77 versions & 17 rubygems

Version Path
p8-castronaut-0.6.1.1 vendor/activerecord/lib/active_record/dynamic_finder_match.rb
relevance-castronaut-0.6.0 vendor/activerecord/lib/active_record/dynamic_finder_match.rb
relevance-castronaut-0.6.1 vendor/activerecord/lib/active_record/dynamic_finder_match.rb
relevance-castronaut-0.7.4 vendor/activerecord/lib/active_record/dynamic_finder_match.rb
relevance-castronaut-0.7.5 vendor/activerecord/lib/active_record/dynamic_finder_match.rb
activerecord-2.3.18 lib/active_record/dynamic_finder_match.rb
activerecord_csi-2.3.5.p8 lib/active_record/dynamic_finder_match.rb
activerecord-2.3.17 lib/active_record/dynamic_finder_match.rb
activerecord_csi-2.3.5.p7 lib/active_record/dynamic_finder_match.rb
activerecord_csi-2.3.5.p6 lib/active_record/dynamic_finder_match.rb
activerecord-2.3.16 lib/active_record/dynamic_finder_match.rb
activerecord-2.3.15 lib/active_record/dynamic_finder_match.rb
radiant-1.0.0 ruby-debug/ruby/1.8/gems/activerecord-2.3.14/lib/active_record/dynamic_finder_match.rb
vanity-1.7.1 vendor/ruby/1.9.1/gems/activerecord-2.3.12/lib/active_record/dynamic_finder_match.rb
activerecord-2.3.14 lib/active_record/dynamic_finder_match.rb
kajam-1.0.3.rc2 vendor/rails/activerecord/lib/active_record/dynamic_finder_match.rb
activerecord-2.3.12 lib/active_record/dynamic_finder_match.rb
radiant-1.0.0.rc2 vendor/rails/activerecord/lib/active_record/dynamic_finder_match.rb
radiant-1.0.0.rc1 vendor/rails/activerecord/lib/active_record/dynamic_finder_match.rb
webroar-0.5.0 src/admin_panel/vendor/rails/activerecord/lib/active_record/dynamic_finder_match.rb