alki-reload 0.2.0 → 0.3.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.
- checksums.yaml +4 -4
- data/alki-reload.gemspec +2 -1
- data/config/assembly.rb +10 -7
- data/lib/alki/reload/assembly_delegator.rb +8 -6
- data/lib/alki/reload/listen_watcher.rb +31 -49
- data/lib/alki/reload/null_watcher.rb +11 -0
- data/lib/alki/reload/version.rb +1 -1
- metadata +19 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: be36a892fb4393ecba3d020801a03c8b985a6310
|
4
|
+
data.tar.gz: 2de7375d65893da50750ad67b2e24d3ff7619cb0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 22a60b747ee36f7ac4fdbe5ce3eaedcd7b00af3e90b8fc84e6132d22d695f6e14f0b7c84b4363340d8158bae5b755f5833b9f40bdb7f1a10e5586f35716a86d8
|
7
|
+
data.tar.gz: eb07452afb7353eb4e2a44343a3a03ff83233015886f4d83382daa9d1a5fadac9d6b83fc58e7638fed37db5ea94d000e03ec054988d99b66230200b53397665f
|
data/alki-reload.gemspec
CHANGED
@@ -23,5 +23,6 @@ Gem::Specification.new do |spec|
|
|
23
23
|
spec.add_development_dependency "bundler", "~> 1.13"
|
24
24
|
spec.add_development_dependency "rake", "~> 10.0"
|
25
25
|
spec.add_dependency "listen", "~> 3.0"
|
26
|
-
spec.add_dependency "alki", "~> 0.
|
26
|
+
spec.add_dependency "alki", "~> 0.12"
|
27
|
+
spec.add_dependency "alki-testing", "~> 0.1"
|
27
28
|
end
|
data/config/assembly.rb
CHANGED
@@ -71,22 +71,25 @@ Alki do
|
|
71
71
|
Alki::Reload::Unloader.new handlers, whitelist
|
72
72
|
end
|
73
73
|
|
74
|
+
tag :stop_on_reload
|
74
75
|
service :watcher do
|
75
|
-
|
76
|
-
|
76
|
+
if watch
|
77
|
+
require 'alki/reload/listen_watcher'
|
78
|
+
Alki::Reload::ListenWatcher.new assembly, watch_dirs
|
79
|
+
else
|
80
|
+
require 'alki/reload/null_watcher'
|
81
|
+
Alki::Reload::NullWatcher.new
|
82
|
+
end
|
77
83
|
end
|
78
84
|
|
79
|
-
overlay
|
85
|
+
overlay '%stop_on_reload', :on_reload, :stop
|
80
86
|
|
81
87
|
overlay 'root.assembly_instance', :assembly_delegator
|
82
88
|
|
83
89
|
factory :assembly_delegator do
|
84
90
|
require 'alki/reload/assembly_delegator'
|
85
|
-
if watch
|
86
|
-
self.watcher.start!
|
87
|
-
end
|
88
91
|
-> obj {
|
89
|
-
Alki::Reload::AssemblyDelegator.new obj, reloader
|
92
|
+
Alki::Reload::AssemblyDelegator.new obj, watcher, reloader
|
90
93
|
}
|
91
94
|
end
|
92
95
|
|
@@ -3,20 +3,22 @@ require 'delegate'
|
|
3
3
|
module Alki
|
4
4
|
module Reload
|
5
5
|
class AssemblyDelegator < Delegator
|
6
|
-
def initialize(obj,reloader)
|
6
|
+
def initialize(obj,watcher,reloader)
|
7
7
|
@obj = obj
|
8
|
+
@loaded = false
|
9
|
+
@watcher = watcher
|
8
10
|
@reloader = reloader
|
9
11
|
end
|
10
12
|
|
11
|
-
def
|
12
|
-
if @obj.respond_to? :__reload__
|
13
|
-
return false unless @obj.__reload__
|
14
|
-
end
|
15
|
-
|
13
|
+
def __unload__
|
16
14
|
@reloader.reload
|
17
15
|
end
|
18
16
|
|
19
17
|
def __getobj__
|
18
|
+
unless @loaded
|
19
|
+
@loaded = true
|
20
|
+
@watcher.start
|
21
|
+
end
|
20
22
|
@obj
|
21
23
|
end
|
22
24
|
end
|
@@ -1,71 +1,53 @@
|
|
1
1
|
require 'listen'
|
2
|
-
require '
|
2
|
+
require 'concurrent'
|
3
3
|
|
4
4
|
module Alki
|
5
5
|
module Reload
|
6
6
|
class ListenWatcher
|
7
7
|
@listeners = {}
|
8
8
|
|
9
|
-
def
|
10
|
-
@
|
11
|
-
@dirs = dirs
|
9
|
+
def self.listener(dirs,reloader)
|
10
|
+
@listeners[dirs] ||= Listener.new(dirs,reloader)
|
12
11
|
end
|
13
12
|
|
14
|
-
def
|
15
|
-
|
13
|
+
def initialize(reloader,dirs)
|
14
|
+
@listener = self.class.listener dirs, reloader
|
15
|
+
@started = false
|
16
16
|
end
|
17
17
|
|
18
|
-
def
|
19
|
-
|
20
|
-
@
|
21
|
-
@
|
22
|
-
@thread.join
|
18
|
+
def start
|
19
|
+
unless @started
|
20
|
+
@listener.start
|
21
|
+
@started = true
|
23
22
|
end
|
24
23
|
end
|
25
24
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
unless @listeners[dir]
|
31
|
-
qs = []
|
32
|
-
@listeners[dir] = [qs,Listen.to(dir) do
|
33
|
-
qs.delete_if do |q|
|
34
|
-
begin
|
35
|
-
q << :reload
|
36
|
-
false
|
37
|
-
rescue WeakRef::RefError
|
38
|
-
true
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end.tap{|l| l.start }]
|
25
|
+
def stop
|
26
|
+
if @started
|
27
|
+
@listener.stop
|
28
|
+
@started = false
|
42
29
|
end
|
43
|
-
@listeners[dir][0] << WeakRef.new(queue)
|
44
30
|
end
|
45
31
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
@
|
50
|
-
|
51
|
-
|
52
|
-
begin
|
53
|
-
cmd = @queue.pop
|
54
|
-
if cmd == :done
|
55
|
-
done = true
|
56
|
-
elsif cmd == :reload
|
57
|
-
if @reloader.reload
|
58
|
-
done = true
|
59
|
-
end
|
60
|
-
end
|
61
|
-
rescue => e
|
62
|
-
$stderr.puts e
|
63
|
-
$stderr.puts e.backtrace.join("\n")
|
32
|
+
class Listener
|
33
|
+
def initialize(dirs,reloader)
|
34
|
+
@count = 0
|
35
|
+
@listen = Listen.to(*dirs) do |modified, _added, _removed|
|
36
|
+
if @count > 0 && modified
|
37
|
+
reloader.reload
|
64
38
|
end
|
65
39
|
end
|
66
|
-
|
67
|
-
|
68
|
-
|
40
|
+
end
|
41
|
+
|
42
|
+
def start
|
43
|
+
if @count == 0
|
44
|
+
@listen.start
|
45
|
+
end
|
46
|
+
@count += 1
|
47
|
+
end
|
48
|
+
|
49
|
+
def stop
|
50
|
+
@count -= 1
|
69
51
|
end
|
70
52
|
end
|
71
53
|
end
|
data/lib/alki/reload/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: alki-reload
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Edlefsen
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-05-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -58,14 +58,28 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '0.
|
61
|
+
version: '0.12'
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '0.
|
68
|
+
version: '0.12'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: alki-testing
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0.1'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0.1'
|
69
83
|
description:
|
70
84
|
email:
|
71
85
|
- matt.edlefsen@gmail.com
|
@@ -86,6 +100,7 @@ files:
|
|
86
100
|
- lib/alki/reload/listen_watcher.rb
|
87
101
|
- lib/alki/reload/load_path_handler.rb
|
88
102
|
- lib/alki/reload/loader_handler.rb
|
103
|
+
- lib/alki/reload/null_watcher.rb
|
89
104
|
- lib/alki/reload/reloadable_delegator.rb
|
90
105
|
- lib/alki/reload/reloader.rb
|
91
106
|
- lib/alki/reload/unloader.rb
|