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 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