Class: Nite::Owl::Action

Inherits:
Object
  • Object
show all
Defined in:
lib/nite/owl/niteowl.rb

Direct Known Subclasses

FilesAction, HasFlags, NiteOwl, PredicateAction

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeAction

Returns a new instance of Action.



204
205
206
207
208
# File 'lib/nite/owl/niteowl.rb', line 204

def initialize
  @actions = []
  @parent=nil
  @delay=nil
end

Instance Attribute Details

#parentObject

Returns the value of attribute parent.



203
204
205
# File 'lib/nite/owl/niteowl.rb', line 203

def parent
  @parent
end

Class Method Details

.call_all_deferred_actionsObject



223
224
225
226
227
228
229
# File 'lib/nite/owl/niteowl.rb', line 223

def self.call_all_deferred_actions
  unless $deferred_actions.empty?
    $deferred_actions.dup.each do |a,event|
      a.call(event[0],event[1])
    end
  end
end

Instance Method Details

#add(a) ⇒ Object



240
241
242
243
244
245
246
# File 'lib/nite/owl/niteowl.rb', line 240

def add(a)
  @actions << a
  if a.is_a?(Action)
    a.parent = self
  end
  a
end

#after(delay) ⇒ Object



297
298
299
# File 'lib/nite/owl/niteowl.rb', line 297

def after(delay)
  add(After.new(delay))
end

#alsoObject



237
238
239
# File 'lib/nite/owl/niteowl.rb', line 237

def also
  root
end

#call(name, flags) ⇒ Object



259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
# File 'lib/nite/owl/niteowl.rb', line 259

def call(name,flags)
  $current_action = self
  @actions.each do |n|
    begin
      n.call(name,flags)
    rescue Cancel => c
      undefer()
    rescue Delay => d
      handle_delay(d)
      defer(name,flags)
    rescue Exception => e
      STDERR.puts e.message
      STDERR.puts e.backtrace
    end
  end
end

#cancelObject

Raises:



212
213
214
# File 'lib/nite/owl/niteowl.rb', line 212

def cancel
  raise Cancel.new
end

#changesObject



312
313
314
# File 'lib/nite/owl/niteowl.rb', line 312

def changes
  add(HasFlags.new([:create,:delete,:modify,:rename]))
end

#contains?(a) ⇒ Boolean

Returns:

  • (Boolean)


247
248
249
# File 'lib/nite/owl/niteowl.rb', line 247

def contains?(a)
  @actions.find { |b| a == b or (b.is_a?(Action) and b.contains?(a)) }
end

#createdObject



300
301
302
# File 'lib/nite/owl/niteowl.rb', line 300

def created
  add(HasFlags.new([:create]))
end

#current_actionObject



209
210
211
# File 'lib/nite/owl/niteowl.rb', line 209

def current_action
  $current_action
end

#defer(name, flags) ⇒ Object



215
216
217
218
219
# File 'lib/nite/owl/niteowl.rb', line 215

def defer(name,flags)
  unless $deferred_actions.has_key?(self)
    $deferred_actions[self] = [name,flags] 
  end
end

#delay(time) ⇒ Object



275
276
277
278
279
280
281
282
283
284
285
# File 'lib/nite/owl/niteowl.rb', line 275

def delay(time)
  if @delay
    if Time.now >= @delay
      @delay = nil
    else
      raise Delay.new(0)
    end
  else
    raise Delay.new(time)
  end
end

#deletedObject



306
307
308
# File 'lib/nite/owl/niteowl.rb', line 306

def deleted
  add(HasFlags.new([:delete]))
end

#handle_delay(d) ⇒ Object



286
287
288
289
290
# File 'lib/nite/owl/niteowl.rb', line 286

def handle_delay(d)
  unless @delay
    @delay = Time.now + d.time
  end
end

#if_not(&block) ⇒ Object



318
319
320
# File 'lib/nite/owl/niteowl.rb', line 318

def if_not(&block)
  add(IfNot.new(block))
end

#ignore(files) ⇒ Object



294
295
296
# File 'lib/nite/owl/niteowl.rb', line 294

def ignore(files)
  add(NameIsNot.new(files))
end

#modifiedObject



303
304
305
# File 'lib/nite/owl/niteowl.rb', line 303

def modified
  add(HasFlags.new([:modify]))
end

#only_if(&block) ⇒ Object



315
316
317
# File 'lib/nite/owl/niteowl.rb', line 315

def only_if(&block)
  add(OnlyIf.new(block))
end

#only_onceObject



291
292
293
# File 'lib/nite/owl/niteowl.rb', line 291

def only_once
  run { root.parent.remove(self) }
end

#remove(a) ⇒ Object



250
251
252
253
254
# File 'lib/nite/owl/niteowl.rb', line 250

def remove(a)
  @actions.delete_if { |b| a == b }
  @actions.each { |b| b.is_a?(Action) and b.remove(a) }
  a
end

#renamedObject



309
310
311
# File 'lib/nite/owl/niteowl.rb', line 309

def renamed
  add(HasFlags.new([:rename]))
end

#rootObject



230
231
232
233
234
235
236
# File 'lib/nite/owl/niteowl.rb', line 230

def root
  r = self
  while r.parent.parent
    r = r.parent
  end
  r
end

#run(&block) ⇒ Object



255
256
257
258
# File 'lib/nite/owl/niteowl.rb', line 255

def run(&block)
  add(block)
  self
end

#undeferObject



220
221
222
# File 'lib/nite/owl/niteowl.rb', line 220

def undefer
  $deferred_actions.delete(self)
end