module Risky::CronList
Public Class Methods
included(base)
click to toggle source
# File lib/risky/cron_list.rb, line 41 def self.included(base) base.value :items, :default => [] base.extend ClassMethods end
new(*a)
click to toggle source
Calls superclass method
# File lib/risky/cron_list.rb, line 46 def initialize(*a) super *a @added_items ||= [] @removed_items ||= [] end
Public Instance Methods
<<(item)
click to toggle source
# File lib/risky/cron_list.rb, line 53 def <<(item) if self.class.item_class === item # Item is already an object; ensure it has a key. item.key ||= new_item_key(item) else # Create a new item with <item> as the data. item = self.class.item_class.new(new_item_key(item), item) end add_item item trim end
Also aliased as: add
add_item(item)
click to toggle source
# File lib/risky/cron_list.rb, line 68 def add_item(item) @added_items << item @removed_items.delete item.key unless items.include? item.key items.unshift item.key if self.class.sort_items(items[0,2]).first != item.key # We must reorder. self.items = self.class.sort_items(items) end end end
added_items()
click to toggle source
# File lib/risky/cron_list.rb, line 82 def added_items @added_items end
added_items=(items)
click to toggle source
# File lib/risky/cron_list.rb, line 86 def added_items=(items) @added_items = items end
after_delete()
click to toggle source
Calls superclass method
# File lib/risky/cron_list.rb, line 90 def after_delete super (@removed_items + items).each do |item| delete_item(item) rescue nil end @removed_items.clear end
after_save()
click to toggle source
Calls superclass method
# File lib/risky/cron_list.rb, line 100 def after_save super @removed_items.each do |item| delete_item(item) rescue nil end @added_items.clear @removed_items.clear end
all()
click to toggle source
# File lib/risky/cron_list.rb, line 111 def all items.map { |item| self.class.item_class[item] } end
before_save()
click to toggle source
Calls superclass method
# File lib/risky/cron_list.rb, line 115 def before_save super @added_items.each do |item| item.save(:w => :all) or raise "unable to save #{item}" end end
clear()
click to toggle source
Remove all items. Items will actually be deleted on save
# File lib/risky/cron_list.rb, line 124 def clear @removed_items += items items.clear end
delete_item(item)
click to toggle source
Takes an entry of items and deletes it.
# File lib/risky/cron_list.rb, line 153 def delete_item(item) self.class.item_class.delete item end
limit()
click to toggle source
Remove dangling references. Items will actually be deleted on #save TODO...
def cleanup end
# File lib/risky/cron_list.rb, line 134 def limit self.class.limit end
new_item_key(item = nil)
click to toggle source
Generates a key for a newly added item.
# File lib/risky/cron_list.rb, line 158 def new_item_key(item = nil) # Re-use existing time begin t = item['created_at'] if t.kind_of? String time = Time.iso8601(t) elsif t.kind_of? Time time = t end rescue end time ||= Time.now "k#{key}_t#{time.to_f}#{rand(10**5)}" end
remove(item_key)
click to toggle source
Remove an item by key.
# File lib/risky/cron_list.rb, line 139 def remove(item_key) if key = items.delete(item_key) # This item existed. @added_items.reject! do |item| item['key'] == item_key end @removed_items << key end key end
removed_items()
click to toggle source
# File lib/risky/cron_list.rb, line 174 def removed_items @removed_items end
removed_items=(items)
click to toggle source
# File lib/risky/cron_list.rb, line 178 def removed_items=(items) @removed_items = items end
trim()
click to toggle source
# File lib/risky/cron_list.rb, line 182 def trim # Remove expired items if limit = self.limit if removed = items.slice!(limit..-1) @removed_items += removed end end self end