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
-
#limit ⇒ Object
Remove dangling references.
-
#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
41 42 43 44 |
# File 'lib/risky/cron_list.rb', line 41 def self.included(base) base.value :items, :default => [] base.extend ClassMethods end |
Instance Method Details
#<<(item) ⇒ Object Also known as: add
53 54 55 56 57 58 59 60 61 62 63 64 65 |
# 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 |
#add_item(item) ⇒ Object
68 69 70 71 72 73 74 75 76 77 78 79 80 |
# 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 ⇒ Object
82 83 84 |
# File 'lib/risky/cron_list.rb', line 82 def added_items @added_items end |
#added_items=(items) ⇒ Object
86 87 88 |
# File 'lib/risky/cron_list.rb', line 86 def added_items=(items) @added_items = items end |
#after_delete ⇒ Object
90 91 92 93 94 95 96 97 98 |
# 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 ⇒ Object
100 101 102 103 104 105 106 107 108 109 |
# 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 ⇒ Object
111 112 113 |
# File 'lib/risky/cron_list.rb', line 111 def all items.map { |item| self.class.item_class[item] } end |
#before_save ⇒ Object
115 116 117 118 119 120 121 |
# 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 ⇒ Object
Remove all items. Items will actually be deleted on #save
124 125 126 127 |
# File 'lib/risky/cron_list.rb', line 124 def clear @removed_items += items items.clear end |
#delete_item(item) ⇒ Object
Takes an entry of items and deletes it.
153 154 155 |
# File 'lib/risky/cron_list.rb', line 153 def delete_item(item) self.class.item_class.delete item end |
#initialize(*a) ⇒ Object
46 47 48 49 50 51 |
# File 'lib/risky/cron_list.rb', line 46 def initialize(*a) super *a @added_items ||= [] @removed_items ||= [] end |
#limit ⇒ Object
Remove dangling references. Items will actually be deleted on #save TODO… def cleanup end
134 135 136 |
# File 'lib/risky/cron_list.rb', line 134 def limit self.class.limit end |
#new_item_key(item = nil) ⇒ Object
Generates a key for a newly added item.
158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 |
# 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) ⇒ Object
Remove an item by key.
139 140 141 142 143 144 145 146 147 148 149 150 |
# 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 ⇒ Object
174 175 176 |
# File 'lib/risky/cron_list.rb', line 174 def removed_items @removed_items end |
#removed_items=(items) ⇒ Object
178 179 180 |
# File 'lib/risky/cron_list.rb', line 178 def removed_items=(items) @removed_items = items end |
#trim ⇒ Object
182 183 184 185 186 187 188 189 190 191 |
# 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 |