goat 0.3.34 → 0.3.35

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.
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