Module: Stringex::ActsAsUrl::ClassMethods

### Home Classes Methods

### In Files

- lib/stringex/acts_as_url.rb

### Methods

- #acts_as_url
- #initialize_urls

### Files

- MIT-LICENSE

### Class/Module Index

Quicksearch

- Stringex
- Stringex::ActsAsUrl
- Stringex::ActsAsUrl::ClassMethods
- Stringex::ActsAsUrl::Configuration

No matching classes.

# Stringex::ActsAsUrl::ClassMethods

### Public Instance Methods

acts_as_url(attribute, options = {}) click to toggle source

Creates a callback to automatically create an url-friendly representation of the `attribute` argument. Example:

    acts_as_url :title

will use the string contents of the `title` attribute to create the permalink. <strong>Note:</strong> you can also use a non-database-backed method to supply the string contents for the permalink. Just use that method's name as the argument as you would an attribute.

The default attribute `acts_as_url` uses to save the permalink is `url` but this can be changed in the options hash. Available options are:

`:allow_slash` | If true, allow the generated url to contain slashes. Default is false.
`:allow_duplicates` | If true, allow duplicate urls instead of appending numbers to differentiate between urls. Default is false.
`:duplicate_count_separator` | String to use when forcing unique urls from non-unique strings. Default is "-".
`:exclude_list` | List of complete strings that should not be transformed by `acts_as_url`. Default is empty.
`:only_when_blank` | If true, the url generation will only happen when `:url_attribute` is blank. Default is false (meaning url generation will happen always).
`:scope` | The name of model attribute to scope unique urls to. There is no default here.
`:sync_url` | If set to true, the url field will be updated when changes are made to the attribute it is based on. Default is false.
`:url_attribute` | The name of the attribute to use for storing the generated url string. Default is `:url`.
`:url_limit` | The maximum size a generated url should be. <strong>Note:</strong> this does not include the characters needed to enforce uniqueness on duplicate urls. Default is nil.

    # File lib/stringex/acts_as_url.rb, line 93
    def acts_as_url(attribute, options = {})
      cattr_accessor :acts_as_url_configuration

      options[:attribute] = attribute
      self.acts_as_url_configuration = ActsAsUrl::Configuration.new(self, options)

      if acts_as_url_configuration.sync_url
        before_validation(:ensure_unique_url)
      else
        if defined?(ActiveModel::Callbacks)
          before_validation(:ensure_unique_url, :on => :create)
        else
          before_validation_on_create(:ensure_unique_url)
        end
      end

      class_eval           def #{acts_as_url_configuration.url_attribute}            if !new_record? && errors[acts_as_url_configuration.attribute_to_urlify].present?              self.class.find(id).send(acts_as_url_configuration.url_attribute)            else              read_attribute(acts_as_url_configuration.url_attribute)            end          end
    end

initialize_urls() click to toggle source

Initialize the url fields for the records that need it. Designed for people who add `acts_as_url` support once there's already development/production data they'd like to keep around.

Note: This method can get very expensive, very fast. If you're planning on using this on a large selection, you will get much better results writing your own version with using pagination.

    # File lib/stringex/acts_as_url.rb, line 127
    def initialize_urls
      find_each(:conditions => {acts_as_url_configuration.url_attribute => nil}) do |instance|
        instance.send :ensure_unique_url
        instance.save
      end
    end

[Validate]

Generated with the Darkfish Rdoc Generator 2.