module Mongoid::Urls::ClassMethods

Methods avaiable at the model

Public Instance Methods

create_url_validations(options) click to toggle source
# File lib/mongoid/urls.rb, line 33
def create_url_validations(options)
  before_validation :create_urls
  reserve = Set.new(%w(new edit)) + (options[:reserved] || [])
  reserve << I18n.available_locales if Object.const_defined?('I18n')
  self.reserved_words = reserve.flatten
  validates :url, uniqueness: true, presence: true,
                  format: { with: /[a-z\d-]+/ }
end
find_by_url(u)
Alias for: find_url
find_url(u) click to toggle source
# File lib/mongoid/urls.rb, line 42
def find_url(u)
  find_by(url: u) || (!url_simple && find_by(urls: u))
rescue Mongoid::Errors::DocumentNotFound
  nil
end
Also aliased as: find_by_url
url(*args) click to toggle source

The url

url :title

:simple    ->   Only one url per instance
:reserve   ->   Defaults to %w( new edit ) + I18n.locales
# File lib/mongoid/urls.rb, line 24
def url(*args)
  options = args.extract_options!
  raise 'Only one #url per model!' if url_keys
  self.url_keys = args # .first.to_s
  self.url_simple = options[:simple]
  create_url_fields
  create_url_validations(options)
end

Private Instance Methods

create_url_fields() click to toggle source
# File lib/mongoid/urls.rb, line 52
def create_url_fields
  field :url, type: String
  index({ url: 1 }, unique: true)
  define_method('url=') do |val|
    self[:url] = val.parameterize
  end
  return if url_simple
  field :urls, type: Array, default: []
  index(urls: 1)
end