goat 0.3.34 → 0.3.35

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. data/goat.gemspec +10 -1
  2. data/lib/goat.rb +1 -0
  3. data/lib/goat/autoreload.rb +84 -0
  4. metadata +116 -6
@@ -1,6 +1,6 @@
1
1
  spec = Gem::Specification.new do |s|
2
2
  s.name = 'goat'
3
- s.version = '0.3.34'
3
+ s.version = '0.3.35'
4
4
  s.summary = 'Pre-release beta version of Goat'
5
5
  s.author = 'Patrick Collison'
6
6
  s.email = 'patrick@collison.ie'
@@ -10,6 +10,14 @@ spec = Gem::Specification.new do |s|
10
10
  s.executables = %w{yodel state-srv channel-srv}
11
11
  s.require_paths = %w{lib}
12
12
 
13
+ s.add_dependency('io-extra', '>= 1.2')
14
+ s.add_dependency('eventmachine', '>= 0.12.10')
15
+ s.add_dependency('thin', '>= 1.2.7')
16
+ s.add_dependency('term-ansicolor', '>= 1.0.5')
17
+ s.add_dependency('tilt', '>= 1.1')
18
+ s.add_dependency('diff-lcs', '>= 1.1.2')
19
+ s.add_dependency('RubyInline', '>= 3.8.6')
20
+
13
21
  s.files = %w{
14
22
  bin/channel-srv
15
23
  bin/press
@@ -18,6 +26,7 @@ spec = Gem::Specification.new do |s|
18
26
  goat.gemspec
19
27
  examples/jq.js
20
28
  lib/goat/autobind.rb
29
+ lib/goat/autoreload.rb
21
30
  lib/goat/common.rb
22
31
  lib/goat/dynamic.rb
23
32
  lib/goat/extn.rb
@@ -19,6 +19,7 @@ require 'inline'
19
19
 
20
20
  $:.unshift(File.dirname(__FILE__))
21
21
 
22
+ require 'goat/autoreload'
22
23
  require 'goat/common'
23
24
  require 'goat/net-common'
24
25
  require 'goat/notifications'
@@ -0,0 +1,84 @@
1
+ require 'io/extra'
2
+
3
+ module Goat
4
+ class Autoreload
5
+ def self.full_loadpaths
6
+ paths = []
7
+
8
+ $LOADED_FEATURES.each do |f|
9
+ next if f =~ /\.(so|bundle)$/
10
+
11
+ if f =~ /^\//
12
+ paths << f
13
+ else
14
+ maybe = []
15
+ $LOAD_PATH.each do |p|
16
+ if File.exists?(File.join(p, f))
17
+ maybe << File.expand_path(File.join(p, f))
18
+ end
19
+ end
20
+
21
+ if maybe.empty?
22
+ $stderr.puts "Couldn't find #{f}"
23
+ elsif maybe.size > 1
24
+ #$stderr.puts "Ambiguous #{f}: #{maybe.inspect}"
25
+ # ignore ambiguous files -- usually a gem or something
26
+ else
27
+ paths << maybe.first
28
+ end
29
+ end
30
+ end
31
+
32
+ paths
33
+ end
34
+
35
+ def self.schedule(dir, interval)
36
+ self.new(dir, interval).schedule
37
+ end
38
+
39
+ def initialize(dir, interval)
40
+ @dir = dir
41
+ @interval = interval
42
+ @cache = {}
43
+ end
44
+
45
+ def filter_loadpaths
46
+ self.class.full_loadpaths.select {|f| f.downcase.start_with?(@dir.downcase)}
47
+ end
48
+
49
+ def watchpaths
50
+ @paths ||= filter_loadpaths
51
+ end
52
+
53
+ def update_cache
54
+ watchpaths.each do |path|
55
+ @cache[path] = File.stat(path).mtime
56
+ end
57
+ end
58
+
59
+ def reload
60
+ #$server.stop!
61
+ EM.stop
62
+ IO.closefrom(3)
63
+ Kernel.exec("ruby #{$0} #{ARGV.join(' ')}") # no execv in ruby :/
64
+ end
65
+
66
+ def maybe_reload
67
+ watchpaths.each do |path|
68
+ if File.stat(path).mtime > @cache[path]
69
+ $stderr.puts "Reloading after change in #{path}..."
70
+ reload
71
+ end
72
+ end
73
+ end
74
+
75
+ def schedule
76
+ update_cache
77
+ EM.next_tick do
78
+ EM.add_periodic_timer(@interval) do
79
+ maybe_reload
80
+ end
81
+ end
82
+ end
83
+ end
84
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: goat
3
3
  version: !ruby/object:Gem::Version
4
- hash: 87
4
+ hash: 85
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 3
9
- - 34
10
- version: 0.3.34
9
+ - 35
10
+ version: 0.3.35
11
11
  platform: ruby
12
12
  authors:
13
13
  - Patrick Collison
@@ -15,10 +15,119 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-01-18 00:00:00 +00:00
18
+ date: 2011-01-25 00:00:00 +00:00
19
19
  default_executable:
20
- dependencies: []
21
-
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: io-extra
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 11
30
+ segments:
31
+ - 1
32
+ - 2
33
+ version: "1.2"
34
+ type: :runtime
35
+ version_requirements: *id001
36
+ - !ruby/object:Gem::Dependency
37
+ name: eventmachine
38
+ prerelease: false
39
+ requirement: &id002 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ hash: 59
45
+ segments:
46
+ - 0
47
+ - 12
48
+ - 10
49
+ version: 0.12.10
50
+ type: :runtime
51
+ version_requirements: *id002
52
+ - !ruby/object:Gem::Dependency
53
+ name: thin
54
+ prerelease: false
55
+ requirement: &id003 !ruby/object:Gem::Requirement
56
+ none: false
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ hash: 17
61
+ segments:
62
+ - 1
63
+ - 2
64
+ - 7
65
+ version: 1.2.7
66
+ type: :runtime
67
+ version_requirements: *id003
68
+ - !ruby/object:Gem::Dependency
69
+ name: term-ansicolor
70
+ prerelease: false
71
+ requirement: &id004 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ hash: 29
77
+ segments:
78
+ - 1
79
+ - 0
80
+ - 5
81
+ version: 1.0.5
82
+ type: :runtime
83
+ version_requirements: *id004
84
+ - !ruby/object:Gem::Dependency
85
+ name: tilt
86
+ prerelease: false
87
+ requirement: &id005 !ruby/object:Gem::Requirement
88
+ none: false
89
+ requirements:
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ hash: 13
93
+ segments:
94
+ - 1
95
+ - 1
96
+ version: "1.1"
97
+ type: :runtime
98
+ version_requirements: *id005
99
+ - !ruby/object:Gem::Dependency
100
+ name: diff-lcs
101
+ prerelease: false
102
+ requirement: &id006 !ruby/object:Gem::Requirement
103
+ none: false
104
+ requirements:
105
+ - - ">="
106
+ - !ruby/object:Gem::Version
107
+ hash: 23
108
+ segments:
109
+ - 1
110
+ - 1
111
+ - 2
112
+ version: 1.1.2
113
+ type: :runtime
114
+ version_requirements: *id006
115
+ - !ruby/object:Gem::Dependency
116
+ name: RubyInline
117
+ prerelease: false
118
+ requirement: &id007 !ruby/object:Gem::Requirement
119
+ none: false
120
+ requirements:
121
+ - - ">="
122
+ - !ruby/object:Gem::Version
123
+ hash: 43
124
+ segments:
125
+ - 3
126
+ - 8
127
+ - 6
128
+ version: 3.8.6
129
+ type: :runtime
130
+ version_requirements: *id007
22
131
  description: Sinatra live
23
132
  email: patrick@collison.ie
24
133
  executables:
@@ -37,6 +146,7 @@ files:
37
146
  - goat.gemspec
38
147
  - examples/jq.js
39
148
  - lib/goat/autobind.rb
149
+ - lib/goat/autoreload.rb
40
150
  - lib/goat/common.rb
41
151
  - lib/goat/dynamic.rb
42
152
  - lib/goat/extn.rb