jugyo-filetter 0.2.1 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/filetter.rb +24 -9
- data/lib/filetter/observer.rb +39 -21
- data/lib/filetter/version.rb +1 -1
- metadata +1 -1
data/lib/filetter.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
|
-
$:.unshift(File.dirname(__FILE__) + '/modes')
|
2
|
+
$:.unshift(File.expand_path(File.dirname(__FILE__) + '/modes'))
|
3
3
|
|
4
4
|
require 'optparse'
|
5
5
|
require 'rubygems'
|
@@ -18,21 +18,31 @@ module Filetter
|
|
18
18
|
pattern = './**/*'
|
19
19
|
interval = 1
|
20
20
|
debug = false
|
21
|
-
config_file = '.filetter'
|
22
21
|
mode = nil
|
23
|
-
|
22
|
+
load_path = nil
|
23
|
+
load_file = '.filetter'
|
24
|
+
work_dir = nil
|
24
25
|
|
25
26
|
OptionParser.new do |opt|
|
26
27
|
opt.version = VERSION
|
27
28
|
opt.program_name = self.to_s
|
28
|
-
opt.on('-m', '--mode=mode', 'Run mode'
|
29
|
-
opt.on('-
|
30
|
-
opt.on('-
|
31
|
-
opt.on('-
|
32
|
-
opt.on('-
|
29
|
+
opt.on('-m', '--mode=mode', 'Run mode' ) {|v| mode = v }
|
30
|
+
opt.on('-l', '--loadpath=path', 'Library load path' ) {|v| load_path = v }
|
31
|
+
opt.on('-f', '--loadfile=file', 'File to load' ) {|v| load_file = v }
|
32
|
+
opt.on('-c', '--cd=directory', 'cd to directory' ) {|v| work_dir = v }
|
33
|
+
opt.on('-p', '--pattern=pattern', 'Pattern of target files' ) {|v| pattern = v }
|
34
|
+
opt.on('-i', '--interval=interval', 'Interval of check files', Integer ) {|v| interval = v }
|
35
|
+
opt.on('-d', '--debug', 'Enable debug mode' ) {|v| debug = true }
|
33
36
|
opt.parse!(ARGV)
|
34
37
|
end
|
35
38
|
|
39
|
+
$:.unshift(File.expand_path(load_path)) if load_path
|
40
|
+
|
41
|
+
if work_dir
|
42
|
+
Dir.chdir(work_dir)
|
43
|
+
puts "=> cd to #{work_dir}"
|
44
|
+
end
|
45
|
+
|
36
46
|
begin
|
37
47
|
unless mode || load_file
|
38
48
|
puts '=> Run as "sample" mode'
|
@@ -42,13 +52,18 @@ module Filetter
|
|
42
52
|
puts "=> Run as \"#{mode}\" mode"
|
43
53
|
require mode
|
44
54
|
end
|
45
|
-
if load_file
|
55
|
+
if load_file && File.exist?(load_file)
|
46
56
|
puts "=> load \"#{load_file}\""
|
47
57
|
load load_file
|
48
58
|
end
|
49
59
|
end
|
50
60
|
rescue LoadError => e
|
51
61
|
puts e
|
62
|
+
raise if debug
|
63
|
+
exit!
|
64
|
+
rescue => e
|
65
|
+
puts e
|
66
|
+
raise if debug
|
52
67
|
exit!
|
53
68
|
end
|
54
69
|
|
data/lib/filetter/observer.rb
CHANGED
@@ -14,13 +14,10 @@ module Filetter
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def self.run(options = {})
|
17
|
-
options
|
18
|
-
instance.__send__("#{k.to_s}=".to_sym, v) if instance.respond_to?(k)
|
19
|
-
end
|
20
|
-
instance.run
|
17
|
+
instance.run(options)
|
21
18
|
end
|
22
19
|
|
23
|
-
attr_accessor :pattern, :interval, :debug
|
20
|
+
attr_accessor :pattern, :interval, :debug, :prompt
|
24
21
|
|
25
22
|
def initialize
|
26
23
|
@pattern = './**/*'
|
@@ -28,29 +25,23 @@ module Filetter
|
|
28
25
|
@work = true
|
29
26
|
@file_infos = {}
|
30
27
|
@hooks = {}
|
28
|
+
@prompt = '> '
|
31
29
|
end
|
32
30
|
|
33
|
-
def run
|
34
|
-
|
35
|
-
|
36
|
-
@observe_thread = Thread.new do
|
37
|
-
while @work
|
38
|
-
begin
|
39
|
-
check_files
|
40
|
-
rescue => e
|
41
|
-
handle_error(e)
|
42
|
-
ensure
|
43
|
-
sleep @interval
|
44
|
-
end
|
45
|
-
end
|
31
|
+
def run(options = {})
|
32
|
+
options.each do |k, v|
|
33
|
+
self.__send__("#{k.to_s}=".to_sym, v) if self.respond_to?(k)
|
46
34
|
end
|
47
35
|
|
36
|
+
puts "=> initializing. please wait..."
|
37
|
+
collect_files(true)
|
38
|
+
|
48
39
|
@input_thread = Thread.new do
|
49
40
|
Readline.completion_proc = lambda {|input|
|
50
41
|
self.methods.map{|i|i.to_s}.grep(/^#{Regexp.quote(input)}/)
|
51
42
|
}
|
52
43
|
puts '=> Enter "exit" to exit.'
|
53
|
-
while @work && line = Readline.readline(
|
44
|
+
while @work && line = Readline.readline(@prompt, true)
|
54
45
|
begin
|
55
46
|
eval(line) unless line.empty?
|
56
47
|
rescue => e
|
@@ -59,6 +50,20 @@ module Filetter
|
|
59
50
|
end
|
60
51
|
end
|
61
52
|
|
53
|
+
sleep interval
|
54
|
+
|
55
|
+
@observe_thread = Thread.new do
|
56
|
+
while @work
|
57
|
+
begin
|
58
|
+
check_files
|
59
|
+
rescue => e
|
60
|
+
handle_error(e)
|
61
|
+
ensure
|
62
|
+
sleep @interval
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
62
67
|
@observe_thread.join
|
63
68
|
@input_thread.join
|
64
69
|
end
|
@@ -82,8 +87,21 @@ module Filetter
|
|
82
87
|
|
83
88
|
private
|
84
89
|
|
85
|
-
def collect_files
|
86
|
-
real_files = Pathname.glob(@pattern).map
|
90
|
+
def collect_files(init = false)
|
91
|
+
real_files = Pathname.glob(@pattern).map do |i|
|
92
|
+
if init || debug
|
93
|
+
print "\e[1K\e[0G#{i.basename.to_s}"
|
94
|
+
$stdout.flush
|
95
|
+
end
|
96
|
+
i.realpath
|
97
|
+
end
|
98
|
+
|
99
|
+
if init || debug
|
100
|
+
print "\e[1K\e[0G"
|
101
|
+
print @prompt unless init
|
102
|
+
$stdout.flush
|
103
|
+
end
|
104
|
+
|
87
105
|
current_files = @file_infos.keys
|
88
106
|
created_files = real_files - current_files
|
89
107
|
deleted_files = current_files - real_files
|
data/lib/filetter/version.rb
CHANGED