Class: FriendlyId::Tasks
- Inherits:
-
Object
- Object
- FriendlyId::Tasks
- Defined in:
- lib/friendly_id/tasks.rb
Class Method Summary collapse
- .delete_old_slugs(days = nil, class_name = nil) ⇒ Object
- .delete_slugs_for(klass) ⇒ Object
- .make_slugs(klass, options = {}) ⇒ Object
- .make_slugs_faster(klass, options = {}) ⇒ Object
- .parse_class_name(class_name) ⇒ Object
Class Method Details
.delete_old_slugs(days = nil, class_name = nil) ⇒ Object
64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/friendly_id/tasks.rb', line 64 def delete_old_slugs(days = nil, class_name = nil) days = days.blank? ? 45 : days.to_i klass = class_name.blank? ? nil : parse_class_name(class_name.to_s) conditions = ["created_at < ?", DateTime.now - days.days] if klass conditions[0] << " AND sluggable_type = ?" conditions << klass.to_s end slugs = Slug.find :all, :conditions => conditions slugs.each { |s| s.destroy unless s.is_most_recent? } end |
.delete_slugs_for(klass) ⇒ Object
55 56 57 58 59 60 61 62 |
# File 'lib/friendly_id/tasks.rb', line 55 def delete_slugs_for(klass) klass = parse_class_name(klass) validate_uses_slugs(klass) Slug.destroy_all(["sluggable_type = ?", klass.to_s]) if klass.cache_column klass.update_all("#{klass.cache_column} = NULL") end end |
.make_slugs(klass, options = {}) ⇒ Object
5 6 7 8 9 10 11 12 13 14 15 16 |
# File 'lib/friendly_id/tasks.rb', line 5 def make_slugs(klass, = {}) klass = parse_class_name(klass) validate_uses_slugs(klass) = {:limit => 100, :include => :slugs, :conditions => "slugs.id IS NULL"}.merge() while records = klass.find(:all, ) do break if records.size == 0 records.each do |r| r.save! yield(r) if block_given? end end end |
.make_slugs_faster(klass, options = {}) ⇒ Object
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/friendly_id/tasks.rb', line 18 def make_slugs_faster(klass, = {}) klass = parse_class_name(klass) validate_uses_slugs(klass) = {:limit => 100, :include => :slugs, :conditions => "slugs.id IS NULL"}.merge() while records = klass.find(:all, ) do break if records.size == 0 slugs = [] records.each do |r| slug = r.slugs.build :name => r.slug_text slug.send :set_sequence r.instance_eval do if [:scope] scope = send([:scope]) slug.scope = scope.respond_to?(:to_param) ? scope.to_param : scope.to_s end end r.instance_eval do slugs.reverse.each do |mem_slug| if mem_slug.name == slug.name if [:scope] slug.sequence = mem_slug.sequence + 1 if mem_slug.scope == slug.scope break else slug.sequence = mem_slug.sequence + 1 break end end end end klass.update_all({:cached_slug => slug.to_friendly_id}, :id => r.id) slugs << slug yield(r) if block_given? end Slug.import slugs, :validate => false end end |
.parse_class_name(class_name) ⇒ Object
76 77 78 79 80 81 82 83 |
# File 'lib/friendly_id/tasks.rb', line 76 def parse_class_name(class_name) return class_name if class_name.class == Class if (class_name.split('::').size > 1) class_name.split('::').inject(Kernel) {|scope, const_name| scope.const_get(const_name)} else Object.const_get(class_name) end end |