1301: def self.watch_file(filename, handler=nil, *args)
1302: klass = if (handler and handler.is_a?(Class))
1303: raise ArgumentError, 'must provide module or subclass of EventMachine::FileWatch' unless FileWatch > handler
1304: handler
1305: else
1306: Class.new( FileWatch ) {handler and include handler}
1307: end
1308:
1309: arity = klass.instance_method(:initialize).arity
1310: expected = arity >= 0 ? arity : -(arity + 1)
1311: if (arity >= 0 and args.size != expected) or (arity < 0 and args.size < expected)
1312: raise ArgumentError, "wrong number of arguments for #{klass}#initialize (#{args.size} for #{expected})"
1313: end
1314:
1315: s = EM::watch_filename(filename)
1316: c = klass.new s, *args
1317:
1318: c.instance_variable_set("@path", filename)
1319: @conns[s] = c
1320: block_given? and yield c
1321: c
1322: end