tidings 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 228de1321d524ee89a186eace9228e3623b196427da359390c4ea1cbd41a7895
4
- data.tar.gz: 362d9e11a2c6787945ae39b2871a05e2e86dfe4f4e65380597a743189f5490dc
3
+ metadata.gz: 39ab6e749612d49a63cd3c2794d6c9fd66af4d96695c0487c77068cc9a7465f5
4
+ data.tar.gz: '09326f79c9abc7982d48a8cc24e2c8a3a54ddf22f23b9e54b2230afea55d47c5'
5
5
  SHA512:
6
- metadata.gz: 695ca41270ccf3733528294f19e4763fb2161d01b58923d21b89a8c790305a203e4b3e8c81bd21ee71a3f5a5906ba85dbeb2a3f9a1bc8008e9b840f332cfa760
7
- data.tar.gz: 790e9090ee80303967de22507844ca594267386a89918d24a11b66a2e17f9f2eb8c7ce99f632d166c9f0e78ada63e535e50a985464fbdb92fd98f22097f5d115
6
+ metadata.gz: 884c3fe4f465b7c159ea25ea1f2341d7e1c847afb7c853cb90ae8c9ef50183d2df20e1f2aab03c59cc55321fa11492e2c26ab83a29cda4f9235dfeedc0f0694f
7
+ data.tar.gz: a152a046499ee07075503eddc1630341da08144066b9d8da50a2bfc68d90a1ee5e7dc1c65f536c487d726c5076b935e77f7a6c338da194388de08d914cc6fda7
data/README.md CHANGED
@@ -4,13 +4,15 @@ A platform optimized file-change watcher.
4
4
 
5
5
  ## Installation
6
6
 
7
- $ gem install tidings
7
+ gem install tidings
8
8
 
9
- ## Short example
9
+ ## Examples
10
+
11
+ Tidings registers with the operating system to receive callbacks for changes to the filesystem relative to a path. For every change it reports to anything that responds to: `call(file_or_path, flags)`. For example, a block:
10
12
 
11
13
  ```ruby
12
14
  Tidings.watch('/Users/janice/Code') do |file_or_path, flags|
13
- if flags.include(:dir)
15
+ if flags.include?(:dir)
14
16
  puts "Change to directory: #{file_or_path}"
15
17
  else
16
18
  puts "Change to file: #{file_or_path}"
@@ -18,7 +20,7 @@ Tidings.watch('/Users/janice/Code') do |file_or_path, flags|
18
20
  end
19
21
  ```
20
22
 
21
- ## Long example
23
+ Or a class:
22
24
 
23
25
  ```ruby
24
26
  module MyFileWatcher
@@ -28,4 +30,40 @@ module MyFileWatcher
28
30
  end
29
31
 
30
32
  Tidings.watch('/Users/janice/Code', MyFileWatcher)
31
- ````
33
+ ```
34
+
35
+ Tidings swallows exceptions raised by the watcher because that's useful for ad-hoc scripts. If you don't want this you can either catch them yourself or drop down to Tidings internals.
36
+
37
+ ```ruby
38
+ Tidings.watch(__dir__) do |file|
39
+ do_something(file)
40
+ rescue Exception => e
41
+ $stderr.write("🤕 #{e.message}")
42
+ end
43
+ ```
44
+
45
+ You can drop down to use the low-level implementation directly. Either `FSEvent` or `Inotify` will be defined depending on what compiled on your operating system.
46
+
47
+ ```ruby
48
+ require 'tidings'
49
+
50
+ def watch(path, &block)
51
+ if const_defined?(:FSEvent)
52
+ def watch
53
+ FSEvent.watch(path, block)
54
+ end
55
+ elsif const_defined?(:Inotify)
56
+ def watch
57
+ Inotify.watch(path, block)
58
+ end
59
+ end
60
+ end
61
+
62
+ watch(__dir__) do |file|
63
+ puts "Change: #{file}"
64
+ end
65
+ ```
66
+
67
+ ## Copyright
68
+
69
+ MIT license, see COPYING.
data/ext/Makefile CHANGED
@@ -12,12 +12,12 @@ NULLCMD = :
12
12
  #### Start of system configuration section. ####
13
13
 
14
14
  srcdir = fs_event
15
- topdir = /Users/manfred/.rbenv/versions/2.5.1/include/ruby-2.5.0
15
+ topdir = /Users/manfred/.rbenv/versions/2.7.2/include/ruby-2.7.0
16
16
  hdrdir = $(topdir)
17
- arch_hdrdir = /Users/manfred/.rbenv/versions/2.5.1/include/ruby-2.5.0/x86_64-darwin17
17
+ arch_hdrdir = /Users/manfred/.rbenv/versions/2.7.2/include/ruby-2.7.0/x86_64-darwin20
18
18
  PATH_SEPARATOR = :
19
19
  VPATH = $(srcdir):$(arch_hdrdir)/ruby:$(hdrdir)/ruby
20
- prefix = $(DESTDIR)/Users/manfred/.rbenv/versions/2.5.1
20
+ prefix = $(DESTDIR)/Users/manfred/.rbenv/versions/2.7.2
21
21
  rubysitearchprefix = $(rubylibprefix)/$(sitearch)
22
22
  rubyarchprefix = $(rubylibprefix)/$(arch)
23
23
  rubylibprefix = $(libdir)/$(RUBY_BASE_NAME)
@@ -52,6 +52,7 @@ infodir = $(datarootdir)/info
52
52
  docdir = $(datarootdir)/doc/$(PACKAGE)
53
53
  oldincludedir = $(SDKROOT)/usr/include
54
54
  includedir = $(prefix)/include
55
+ runstatedir = $(localstatedir)/run
55
56
  localstatedir = $(prefix)/var
56
57
  sharedstatedir = $(prefix)/com
57
58
  sysconfdir = $(prefix)/etc
@@ -63,12 +64,13 @@ bindir = $(exec_prefix)/bin
63
64
  archdir = $(rubyarchdir)
64
65
 
65
66
 
67
+ CC_WRAPPER =
66
68
  CC = clang
67
69
  CXX = clang++
68
- LIBRUBY = $(LIBRUBY_A)
70
+ LIBRUBY = $(LIBRUBY_SO)
69
71
  LIBRUBY_A = lib$(RUBY_SO_NAME)-static.a
70
- LIBRUBYARG_SHARED =
71
- LIBRUBYARG_STATIC = -l$(RUBY_SO_NAME)-static -framework Foundation
72
+ LIBRUBYARG_SHARED = -l$(RUBY_SO_NAME)
73
+ LIBRUBYARG_STATIC = -l$(RUBY_SO_NAME)-static -framework Security -framework Foundation $(MAINLIBS)
72
74
  empty =
73
75
  OUTFLAG = -o $(empty)
74
76
  COUTFLAG = -o $(empty)
@@ -76,18 +78,19 @@ CSRCFLAG = $(empty)
76
78
 
77
79
  RUBY_EXTCONF_H =
78
80
  cflags = $(optflags) $(debugflags) $(warnflags)
79
- cxxflags = $(optflags) $(debugflags) $(warnflags)
81
+ cxxflags =
80
82
  optflags = -O3
81
83
  debugflags = -ggdb3
82
- warnflags = -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wno-tautological-compare -Wno-parentheses-equality -Wno-constant-logical-operand -Wno-self-assign -Wunused-variable -Wimplicit-int -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wshorten-64-to-32 -Wimplicit-function-declaration -Wdivision-by-zero -Wdeprecated-declarations -Wextra-tokens
84
+ warnflags = -Wall -Wextra -Wdeprecated-declarations -Wdivision-by-zero -Wimplicit-function-declaration -Wimplicit-int -Wmisleading-indentation -Wpointer-arith -Wshorten-64-to-32 -Wwrite-strings -Wmissing-noreturn -Wno-constant-logical-operand -Wno-long-long -Wno-missing-field-initializers -Wno-overlength-strings -Wno-parentheses-equality -Wno-self-assign -Wno-tautological-compare -Wno-unused-parameter -Wno-unused-value -Wunused-variable -Wextra-tokens
85
+ cppflags =
83
86
  CCDLFLAGS = -fno-common
84
- CFLAGS = $(CCDLFLAGS) -O3 -Wno-error=shorten-64-to-32 -pipe $(ARCH_FLAG)
87
+ CFLAGS = $(CCDLFLAGS) $(cflags) -fno-common -pipe $(ARCH_FLAG)
85
88
  INCFLAGS = -I. -I$(arch_hdrdir) -I$(hdrdir)/ruby/backward -I$(hdrdir) -I$(srcdir)
86
89
  DEFS =
87
- CPPFLAGS = -I/Users/manfred/.rbenv/versions/2.5.1/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT $(DEFS) $(cppflags)
88
- CXXFLAGS = $(CCDLFLAGS) $(cxxflags) $(ARCH_FLAG)
90
+ CPPFLAGS = -I/Users/manfred/.rbenv/versions/2.7.2/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT $(DEFS) $(cppflags)
91
+ CXXFLAGS = $(CCDLFLAGS) -g -O2 $(ARCH_FLAG)
89
92
  ldflags = -framework CoreServices
90
- dldflags = -L/Users/manfred/.rbenv/versions/2.5.1/lib -Wl,-undefined,dynamic_lookup -Wl,-multiply_defined,suppress
93
+ dldflags = -L/Users/manfred/.rbenv/versions/2.7.2/lib -Wl,-undefined,dynamic_lookup -Wl,-multiply_defined,suppress
91
94
  ARCH_FLAG =
92
95
  DLDFLAGS = $(ldflags) $(dldflags) $(ARCH_FLAG)
93
96
  LDSHARED = $(CC) -dynamic -bundle
@@ -96,15 +99,15 @@ AR = libtool -static
96
99
  EXEEXT =
97
100
 
98
101
  RUBY_INSTALL_NAME = $(RUBY_BASE_NAME)
99
- RUBY_SO_NAME = ruby.2.5.1
102
+ RUBY_SO_NAME = ruby.2.7
100
103
  RUBYW_INSTALL_NAME =
101
104
  RUBY_VERSION_NAME = $(RUBY_BASE_NAME)-$(ruby_version)
102
105
  RUBYW_BASE_NAME = rubyw
103
106
  RUBY_BASE_NAME = ruby
104
107
 
105
- arch = x86_64-darwin17
108
+ arch = x86_64-darwin20
106
109
  sitearch = $(arch)
107
- ruby_version = 2.5.0
110
+ ruby_version = 2.7.0
108
111
  ruby = $(bindir)/$(RUBY_BASE_NAME)
109
112
  RUBY = $(ruby)
110
113
  ruby_headers = $(hdrdir)/ruby.h $(hdrdir)/ruby/backward.h $(hdrdir)/ruby/ruby.h $(hdrdir)/ruby/defines.h $(hdrdir)/ruby/missing.h $(hdrdir)/ruby/intern.h $(hdrdir)/ruby/st.h $(hdrdir)/ruby/subst.h $(arch_hdrdir)/ruby/config.h
@@ -134,7 +137,7 @@ extout =
134
137
  extout_prefix =
135
138
  target_prefix =
136
139
  LOCAL_LIBS =
137
- LIBS = -lpthread -ldl -lobjc
140
+ LIBS = $(LIBRUBYARG_SHARED)
138
141
  ORIG_SRCS = fs_event.c
139
142
  SRCS = $(ORIG_SRCS)
140
143
  OBJS = fs_event.o
data/ext/extconf.rb CHANGED
@@ -1,10 +1,12 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'mkmf'
2
4
 
3
5
  case RUBY_PLATFORM
4
6
  when /darwin/
5
- with_ldflags("-framework CoreServices") do
6
- create_makefile("fs_event", "fs_event")
7
+ with_ldflags('-framework CoreServices') do
8
+ create_makefile('fs_event', 'fs_event')
7
9
  end
8
10
  when /linux/
9
- create_makefile("inotify", "inotify")
10
- end
11
+ create_makefile('inotify', 'inotify')
12
+ end
data/ext/fs_event.bundle CHANGED
Binary file
data/ext/fs_event.o CHANGED
Binary file
data/lib/tidings.rb CHANGED
@@ -1,23 +1,28 @@
1
+ # frozen_string_literal: true
2
+
1
3
  case RUBY_PLATFORM
2
4
  when /darwin/
3
5
  require 'fs_event'
4
6
  when /linux/
5
7
  require 'inotify'
6
8
  else
7
- raise RuntimeError, "Your platform is currently not supported (#{RUBY_PLATFORM})"
9
+ raise "Your platform is currently not supported (#{RUBY_PLATFORM})"
8
10
  end
9
11
 
12
+ # Contains the complete Tidings implementation.
13
+ #
14
+ # Tidings.watch(File.expand_path('~/Code`)) { |file| pp file }
10
15
  module Tidings
11
16
  autoload :VERSION, 'tidings/version'
12
17
  autoload :Watcher, 'tidings/watcher'
13
18
 
14
19
  def self.log(message)
15
- $stderr.puts('Tidings: ' + message.to_s) if $DEBUG
20
+ warn("Tidings: #{message}") if $DEBUG
16
21
  end
17
22
 
18
- def self.watch(path, processor=nil, &block)
23
+ def self.watch(path, processor = nil, &block)
19
24
  watcher = Tidings::Watcher.new(path, processor || block)
20
25
  watcher.start
21
26
  watcher
22
27
  end
23
- end
28
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Tidings
2
- VERSION = '0.3.0'
3
- end
4
+ VERSION = '0.4.0'
5
+ end
@@ -1,29 +1,34 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Tidings
4
+ # Starts a file watcher in a separate process.
2
5
  class Watcher
3
6
  def initialize(path, processor)
4
- @path, @processor, @pid = path, processor, nil
7
+ @path = path
8
+ @processor = processor
9
+ @pid = nil
5
10
  end
6
11
 
7
12
  def start
8
- Signal.trap("HUP") { stop }
9
- Signal.trap("SIGINT") { stop }
13
+ Signal.trap('HUP') { stop }
14
+ Signal.trap('SIGINT') { stop }
10
15
  @pid = fork do
11
16
  begin
12
17
  watch
13
- rescue Exception => exception
18
+ rescue Exception => e
14
19
  Tidings.log(
15
- "Tidings encountered an uncaught exeption: #{exception.message}"
20
+ "Tidings encountered an uncaught exeption: #{e.message}"
16
21
  )
17
22
  exit
18
23
  end
19
24
  end
20
25
  Tidings.log("Tidings running on PID: #{@pid}")
21
26
  Process.waitpid(@pid)
22
- Tidings.log("Tidings stopped running")
27
+ Tidings.log('Tidings stopped running')
23
28
  end
24
29
 
25
30
  def stop
26
- Process.kill("KILL", @pid)
31
+ Process.kill('KILL', @pid)
27
32
  rescue Errno::ESRCH
28
33
  end
29
34
 
@@ -37,4 +42,4 @@ module Tidings
37
42
  end
38
43
  end
39
44
  end
40
- end
45
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tidings
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Manfred Stienstra
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-06-21 00:00:00.000000000 Z
11
+ date: 2021-03-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fakefs
@@ -63,8 +63,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
63
63
  - !ruby/object:Gem::Version
64
64
  version: '0'
65
65
  requirements: []
66
- rubyforge_project:
67
- rubygems_version: 2.7.6
66
+ rubygems_version: 3.1.4
68
67
  signing_key:
69
68
  specification_version: 4
70
69
  summary: A platform optimized file-change watcher.