path_observer 0.0.1
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/Rakefile +68 -0
- data/lib/path_observer/observe_manager.rb +58 -0
- data/lib/path_observer/observer.rb +35 -0
- data/lib/path_observer/version.rb +9 -0
- data/lib/path_observer.rb +9 -0
- metadata +52 -0
data/Rakefile
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
require 'rake/testtask'
|
4
|
+
require 'rake/rdoctask'
|
5
|
+
require 'rake/packagetask'
|
6
|
+
require 'rake/gempackagetask'
|
7
|
+
require 'rake/contrib/rubyforgepublisher'
|
8
|
+
|
9
|
+
PROJECT_NAME = 'pathobserver'
|
10
|
+
PACKAGE_NAME = 'path_observer'
|
11
|
+
require File.join(File.dirname(__FILE__), 'lib', PACKAGE_NAME, 'version')
|
12
|
+
PACKAGE_VERSION = PathObserver::VERSION::STRING
|
13
|
+
PACKAGE_FILE_NAME = "#{PACKAGE_NAME}-#{PACKAGE_VERSION}"
|
14
|
+
|
15
|
+
RELEASE_NAME = "REL #{PACKAGE_VERSION}"
|
16
|
+
|
17
|
+
PACKAGE_FILES = FileList["lib/**/*", "test/**/*", "doc/**/*", "Rakefile"]
|
18
|
+
|
19
|
+
desc "publish gem to Rubyforge"
|
20
|
+
task :release => [:package] do
|
21
|
+
%x{rubyforge login}
|
22
|
+
|
23
|
+
%w(zip tgz gem).each do |ext|
|
24
|
+
release_command = "rubyforge add_release 3197 3818 '#{RELEASE_NAME}' pkg/#{PACKAGE_FILE_NAME}.#{ext}"
|
25
|
+
puts release_command
|
26
|
+
system(release_command)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
Rake::TestTask.new do |t|
|
31
|
+
t.libs << "test"
|
32
|
+
t.pattern = "test/**/*_test.rb"
|
33
|
+
t.verbose = true
|
34
|
+
end
|
35
|
+
|
36
|
+
Rake::RDocTask.new do |rdoc|
|
37
|
+
rdoc.rdoc_dir = 'doc'
|
38
|
+
rdoc.title = 'PathObserver -- observing some files or directories'
|
39
|
+
rdoc.options << '--line-numbers' << '--inline-source'
|
40
|
+
rdoc.rdoc_files.include('README')
|
41
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
42
|
+
end
|
43
|
+
|
44
|
+
spec = Gem::Specification.new do |s|
|
45
|
+
s.name = PACKAGE_NAME
|
46
|
+
s.version = PACKAGE_VERSION
|
47
|
+
s.summary = "observing some files or directories"
|
48
|
+
s.description = "This library helps you writing program observing for some files or directorys easily."
|
49
|
+
s.files = FileList["lib/**/*", "test/**/*", "Rakefile"]
|
50
|
+
s.require_path = 'lib'
|
51
|
+
s.autorequire = 'path_observer'
|
52
|
+
|
53
|
+
s.has_rdoc = true
|
54
|
+
s.rdoc_options.concat ['--main', 'README']
|
55
|
+
|
56
|
+
s.author = "Keiji Yoshimi"
|
57
|
+
s.email = "walf443__AT__gmail.com"
|
58
|
+
s.homepage = "http://d.hatena.ne.jp/walf443/"
|
59
|
+
s.rubyforge_project = PROJECT_NAME
|
60
|
+
end
|
61
|
+
|
62
|
+
Rake::GemPackageTask.new(spec) do |p|
|
63
|
+
p.gem_spec = spec
|
64
|
+
p.need_tar = true
|
65
|
+
p.need_zip = true
|
66
|
+
end
|
67
|
+
|
68
|
+
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'path_observer'))
|
2
|
+
|
3
|
+
module PathObserver
|
4
|
+
class ObserveManager
|
5
|
+
include Observable
|
6
|
+
|
7
|
+
def initialize glob_expr=nil, interval=1, &event_action
|
8
|
+
@interval = interval
|
9
|
+
|
10
|
+
if glob_expr
|
11
|
+
add_paths glob_expr, &event_action
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
attr_accessor :interval
|
16
|
+
|
17
|
+
def add_path path, &event_action
|
18
|
+
add_observer(PathObserver::Observer.new(path, &event_action))
|
19
|
+
end
|
20
|
+
|
21
|
+
def add_paths glob_expr, &event_action
|
22
|
+
Path.glob(glob_expr).each do |path|
|
23
|
+
add_path path, &event_action
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def observe method
|
28
|
+
last_result_of = {}
|
29
|
+
@observer_peers.each do |observer|
|
30
|
+
last_result_of[observer.path.to_s] = observer.path __send__(method)
|
31
|
+
end
|
32
|
+
|
33
|
+
loop do
|
34
|
+
begin
|
35
|
+
sleep @interval
|
36
|
+
|
37
|
+
current_result_of = {}
|
38
|
+
@observer_peers.each do |observer|
|
39
|
+
current_result_of[observer.path.to_s] = observer.path.__send__(method)
|
40
|
+
end
|
41
|
+
|
42
|
+
temp_touple = current_result_of.select {|key, val| val != last_result_of[key] }
|
43
|
+
if temp_touple.size > 0
|
44
|
+
temp_touple.each do |hash|
|
45
|
+
changed
|
46
|
+
notify_observers hash.first, hash.last
|
47
|
+
end
|
48
|
+
last_result_of = current_result_of
|
49
|
+
end
|
50
|
+
rescue Interrupt
|
51
|
+
return
|
52
|
+
rescue Exception
|
53
|
+
next
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '..', 'path_observer')
|
2
|
+
|
3
|
+
module PathObserver
|
4
|
+
# PathObserver::Observer observe a Pathname Object.
|
5
|
+
#
|
6
|
+
#== SYNOPSYS
|
7
|
+
# observe_manager = PathObserver::ObserveManager.new
|
8
|
+
# observe_manager.add_observer(PathObserver::Observer.new('hoge.txt') do |path, result|
|
9
|
+
# puts "#{path} was updated on #{result}"
|
10
|
+
# end
|
11
|
+
#
|
12
|
+
#== SEE ALSO
|
13
|
+
# PathObserver::ObserveManager, Observable, Pathname
|
14
|
+
class Observer
|
15
|
+
# event_action will be called by update in actually. path is a target
|
16
|
+
# for observing.
|
17
|
+
def initialize path, &event_action
|
18
|
+
@path = Pathname.new path
|
19
|
+
unless @path.exist?
|
20
|
+
raise ArgumentError
|
21
|
+
end
|
22
|
+
|
23
|
+
@proc = event_action
|
24
|
+
end
|
25
|
+
|
26
|
+
attr_reader :path
|
27
|
+
|
28
|
+
# upgrade is called by ObserveManager#notify_observers
|
29
|
+
def upgrade path, result
|
30
|
+
if @path.to_s == path.to_s
|
31
|
+
@proc.call @path.to_s, result
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
metadata
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
rubygems_version: 0.9.2
|
3
|
+
specification_version: 1
|
4
|
+
name: path_observer
|
5
|
+
version: !ruby/object:Gem::Version
|
6
|
+
version: 0.0.1
|
7
|
+
date: 2007-03-04 00:00:00 +09:00
|
8
|
+
summary: observing some files or directories
|
9
|
+
require_paths:
|
10
|
+
- lib
|
11
|
+
email: walf443__AT__gmail.com
|
12
|
+
homepage: http://d.hatena.ne.jp/walf443/
|
13
|
+
rubyforge_project: pathobserver
|
14
|
+
description: This library helps you writing program observing for some files or directorys easily.
|
15
|
+
autorequire: path_observer
|
16
|
+
default_executable:
|
17
|
+
bindir: bin
|
18
|
+
has_rdoc: true
|
19
|
+
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">"
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 0.0.0
|
24
|
+
version:
|
25
|
+
platform: ruby
|
26
|
+
signing_key:
|
27
|
+
cert_chain:
|
28
|
+
post_install_message:
|
29
|
+
authors:
|
30
|
+
- Keiji Yoshimi
|
31
|
+
files:
|
32
|
+
- lib/path_observer
|
33
|
+
- lib/path_observer.rb
|
34
|
+
- lib/path_observer/observe_manager.rb
|
35
|
+
- lib/path_observer/observer.rb
|
36
|
+
- lib/path_observer/version.rb
|
37
|
+
- Rakefile
|
38
|
+
test_files: []
|
39
|
+
|
40
|
+
rdoc_options:
|
41
|
+
- --main
|
42
|
+
- README
|
43
|
+
extra_rdoc_files: []
|
44
|
+
|
45
|
+
executables: []
|
46
|
+
|
47
|
+
extensions: []
|
48
|
+
|
49
|
+
requirements: []
|
50
|
+
|
51
|
+
dependencies: []
|
52
|
+
|