Sha256: 93d9f2d20c9b01672b443b36ce8f8247022568d3f4b1aa45df5ffdded5cdc683

Contents?: true

Size: 1.12 KB

Versions: 1

Compression:

Stored size: 1.12 KB

Contents

module SluggableFinder
  # This module is included by the base class as well as AR asociation collections
  #
  module Finder
    def find_sluggable(opts,*args)
      key = args.first
      if key.is_a?(String) and not (opts[:allow_numerical] == false and key =~ /\A\d+\Z/)
        options = {:conditions => ["#{opts[:to]} = ?", key]}
        error = "There is no #{opts[:sluggable_type]} with #{opts[:to]} '#{key}'"
        with_scope(:find => options) do
          find_without_slug(:first) or
          raise SluggableFinder.not_found_exception.new(error)
        end
      else
        find_without_slug(*args)
      end
    end
  end

  module BaseFinder

    def find_with_slug(*args)
      return find_without_slug(*args) unless respond_to?(:sluggable_finder_options)
      options = sluggable_finder_options
      find_sluggable(options,*args)
    end
  end

  module AssociationProxyFinder
    def find_with_slug(*args)
      return find_without_slug(*args) unless @reflection.klass.respond_to?(:sluggable_finder_options)
      options = @reflection.klass.sluggable_finder_options
      find_sluggable(options,*args)
    end
  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
nagybence-sluggable_finder-2.0.6 lib/sluggable_finder/finder.rb