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 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
@@ -0,0 +1,9 @@
1
+ module PathObserver
2
+ module VERSION #:nodoc:
3
+ MAJOR = 0
4
+ MINOR = 0
5
+ TINY = 1
6
+
7
+ STRING = [MAJOR, MINOR, TINY].join('.')
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ require 'observer'
2
+ require 'pathname'
3
+
4
+ $LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__)))
5
+ require 'path_observer/observer'
6
+ require 'path_observer/observe_manager'
7
+
8
+ module PathObserver
9
+ 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
+