Module: Risky::CronList
- Defined in:
- lib/risky/cron_list.rb
Defined Under Namespace
Modules: ClassMethods
Class Method Summary collapse
Instance Method Summary collapse
- #<<(item) ⇒ Object (also: #add)
- #add_item(item) ⇒ Object
- #added_items ⇒ Object
- #added_items=(items) ⇒ Object
- #after_delete ⇒ Object
- #after_save ⇒ Object
- #all ⇒ Object
- #before_save ⇒ Object
-
#clear ⇒ Object
Remove all items.
-
#delete_item(item) ⇒ Object
Takes an entry of items and deletes it.
- #initialize(*a) ⇒ Object
-
#new_item_key(item = nil) ⇒ Object
Generates a key for a newly added item.
-
#remove(item_key) ⇒ Object
Remove an item by key.
- #removed_items ⇒ Object
- #removed_items=(items) ⇒ Object
- #trim ⇒ Object
Class Method Details
.included(base) ⇒ Object
47 48 49 50 |
# File 'lib/risky/cron_list.rb', line 47 def self.included(base) base.value :items, :default => [] base.extend ClassMethods end |
Instance Method Details
#<<(item) ⇒ Object Also known as: add
59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/risky/cron_list.rb', line 59 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 |
#add_item(item) ⇒ Object
74 75 76 77 78 79 80 81 82 83 84 85 86 |
# File 'lib/risky/cron_list.rb', line 74 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 ⇒ Object
88 89 90 |
# File 'lib/risky/cron_list.rb', line 88 def added_items @added_items end |
#added_items=(items) ⇒ Object
92 93 94 |
# File 'lib/risky/cron_list.rb', line 92 def added_items=(items) @added_items = items end |
#after_delete ⇒ Object
96 97 98 99 100 101 102 103 104 |
# File 'lib/risky/cron_list.rb', line 96 def after_delete super (@removed_items + items).each do |item| delete_item(item) rescue nil end @removed_items.clear end |
#after_save ⇒ Object
106 107 108 109 110 111 112 113 114 115 |
# File 'lib/risky/cron_list.rb', line 106 def after_save super @removed_items.each do |item| delete_item(item) rescue nil end @added_items.clear @removed_items.clear end |
#all ⇒ Object
117 118 119 |
# File 'lib/risky/cron_list.rb', line 117 def all items.map { |item| self.class.item_class[item] } end |
#before_save ⇒ Object
121 122 123 124 125 126 127 |
# File 'lib/risky/cron_list.rb', line 121 def before_save super @added_items.each do |item| item.save(:w => :all) or raise "unable to save #{item}" end end |
#clear ⇒ Object
Remove all items. Items will actually be deleted on #save
130 131 132 133 |
# File 'lib/risky/cron_list.rb', line 130 def clear @removed_items += items items.clear end |
#delete_item(item) ⇒ Object
Takes an entry of items and deletes it.
155 156 157 |
# File 'lib/risky/cron_list.rb', line 155 def delete_item(item) self.class.item_class.delete item end |
#initialize(*a) ⇒ Object
52 53 54 55 56 57 |
# File 'lib/risky/cron_list.rb', line 52 def initialize(*a) super *a @added_items ||= [] @removed_items ||= [] end |
#new_item_key(item = nil) ⇒ Object
Generates a key for a newly added item.
160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 |
# File 'lib/risky/cron_list.rb', line 160 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) ⇒ Object
Remove an item by key.
141 142 143 144 145 146 147 148 149 150 151 152 |
# File 'lib/risky/cron_list.rb', line 141 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 ⇒ Object
176 177 178 |
# File 'lib/risky/cron_list.rb', line 176 def removed_items @removed_items end |
#removed_items=(items) ⇒ Object
180 181 182 |
# File 'lib/risky/cron_list.rb', line 180 def removed_items=(items) @removed_items = items end |
#trim ⇒ Object
184 185 186 187 188 189 190 191 192 193 |
# File 'lib/risky/cron_list.rb', line 184 def trim # Remove expired items if limit = self.class.limit if removed = items.slice!(limit..-1) @removed_items += removed end end self end |