jugyo-filetter 0.2.1 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
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
- load_file = nil
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' ) {|v| mode = v }
29
- opt.on('-f', '--load=file', 'File to load' ) {|v| load_file = v }
30
- opt.on('-p', '--pattern=pattern', 'Pattern of target files' ) {|v| pattern = v }
31
- opt.on('-i', '--interval=interval', 'Interval of check files' ) {|v| interval = v }
32
- opt.on('-d', '--debug', 'Enable debug mode' ) {|v| debug = true }
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
 
@@ -14,13 +14,10 @@ module Filetter
14
14
  end
15
15
 
16
16
  def self.run(options = {})
17
- options.each do |k, v|
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
- collect_files
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('> ', true)
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{|i|i.realpath}
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
@@ -1,4 +1,4 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  module Filetter
3
- VERSION = '0.2.1'
3
+ VERSION = '0.2.2'
4
4
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jugyo-filetter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - jugyo