0
@@ -6,11 +6,6 @@ module ActsAsUrlParam
0
def acts_as_url_param(*args, &block)
0
- include InstanceMethods
0
- include Caring::Utilities::UrlUtils
0
- extend Caring::Utilities::UrlUtils
0
class_inheritable_accessor :acts_as_url_options, :acts_as_url_param_base
0
# No extract options in rails 1.2.x
0
options = args.respond_to?(:extract_options!) ? args.extract_options! : extract_options_from_args!(args)
0
@@ -18,11 +13,8 @@ module ActsAsUrlParam
0
options[:column] = args.first || 'url_name'
0
options[:from] ||= default_from_column
0
- if options[:redirectable]
0
- options[:on] ||= :update
0
+ # This won't work, as the from could be a method, and it would have to be defined before acts_as_url_param
0
+ # raise ArgumentError, "No columns found to use for setting the url_param" unless column_or_method_exists? options[:from]
0
options[:on] ||= :create
0
options[:block] = block if block_given?
0
callback = "before_validation"
0
@@ -31,76 +23,39 @@ module ActsAsUrlParam
0
before_validation :set_url_param_if_non_existant
0
send callback, :set_url_param
0
+ include InstanceMethods
0
+ include Caring::Utilities::UrlUtils
0
+ extend Caring::Utilities::UrlUtils
0
validates_presence_of(options[:from], :if => :empty_param?) unless options[:allow_blank]
0
- define_url_param_setter
0
- define_availability_check
0
+ self.acts_as_url_options = options
0
- alias_method_chain :validate, :unique_url unless method_defined? :validate_without_unique_url
0
- has_many :redirects, :as => :redirectable
0
- before_save :add_redirect
0
- class_def :add_redirect do
0
- if @name_changed && @old_name
0
- redirects.create(:url_name => @old_name)
0
+ define_method("#{options[:column]}=") do |value|
0
+ write_attribute(options[:column], url_safe(value))
0
+ alias_method_chain :validate, :unique_url unless method_defined? :validate_without_unique_url
0
- meta_def :find_redirect do |name|
0
- redirect = Redirect.find(:all, :conditions => ["redirectable_class = ? AND url_name = ?", self.class.to_s, name])
0
- redirect.redirectable if redirect
0
- meta_def :find_by_url do |*args|
0
- send("find_by_#{acts_as_url_options[:column]}", *args)
0
- def define_url_param_setter
0
- class_def "#{acts_as_url_options[:column]}=" do |value|
0
- @url_name_manually_set = true if value
0
- @old_name = read_attribute(acts_as_url_options[:column])
0
- write_attribute(acts_as_url_options[:column], url_safe(value))
0
- @name_changed = true unless read_attribute(acts_as_url_options[:column]) == @old_name || !@old_name
0
- def define_availability_check
0
- meta_def :url_param_available_for_model? do |*args|
0
- conditions = acts_as_url_options[:conditions] + ' AND ' if acts_as_url_options[:conditions]
0
- conditions += "#{acts_as_url_options[:column]} = ?"
0
- conditions += " AND id != ?" if id
0
- conditions = [conditions, candidate]
0
- conditions << id if id
0
- available = if descends_from_active_record? or self == klass
0
- count(:conditions => conditions) == 0
0
- base_class.count(:conditions => conditions) == 0
0
+ (class << self; self; end).module_eval do
0
+ define_method(:url_param_available_for_model?) do |*args|
0
+ conditions = acts_as_url_options[:conditions] + ' AND ' if acts_as_url_options[:conditions]
0
+ conditions += "#{acts_as_url_options[:column]} = ?"
0
+ conditions += " AND id != ?" if id
0
+ conditions = [conditions, candidate]
0
+ conditions << id if id
0
+ if descends_from_active_record? or self == klass
0
+ count(:conditions => conditions) == 0
0
+ base_class.count(:conditions => conditions) == 0
0
- if acts_as_url_options[:redirectable] && available
0
- re_conditions = "url_name = ? AND redirectable_class = ?"
0
- re_conditions += "AND redirectable_id != ?" if id
0
- re_conditions = [re_conditions, candidate, self.to_s]
0
- re_conditions << id if id
0
- available = Redirect.count(:conditions => re_conditions) == 0
0
def default_from_column
0
%W(name label title).detect do |column_name|
0
column_or_method_exists?(column_name) and self.acts_as_url_options[:to].to_s != column_name
0
@@ -159,11 +114,10 @@ module ActsAsUrlParam
0
- if url_param.blank? or
(acts_as_url_options[:on] != :create && !@url_name_manually_set)0
+ if url_param.blank? or
acts_as_url_options[:on] != :create0
url = compute_url_param
0
-
send("#{acts_as_url_options[:column]}=", url) unless url.blank?
0
+
write_attribute(acts_as_url_options[:column], url) unless url.blank?
0
- @url_name_manually_set = false
0
@url_param_validated = true
Comments
No one has commented yet.