sinatra-reloader 0.4.0.a → 0.4.0.b
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/README.md +12 -0
- data/lib/sinatra/reloader.rb +14 -21
- data/spec/sinatra/reloader_spec.rb +17 -7
- data/spec/spec_helper.rb +0 -2
- metadata +80 -38
data/README.md
CHANGED
@@ -16,9 +16,21 @@ Check it out if you are looking for other fancy Sinatra extensions.
|
|
16
16
|
|
17
17
|
BigBand will setup the reloader automatically, but only in development mode.
|
18
18
|
|
19
|
+
Installation
|
20
|
+
------------
|
21
|
+
|
22
|
+
gem install sinatra-reloader --prerelease
|
23
|
+
|
19
24
|
Usage
|
20
25
|
-----
|
21
26
|
|
27
|
+
Simple example:
|
28
|
+
|
29
|
+
require "sinatra"
|
30
|
+
require "sinatra/reloader" if development?
|
31
|
+
|
32
|
+
More complex:
|
33
|
+
|
22
34
|
require "sinatra/base"
|
23
35
|
require "sinatra/reloader"
|
24
36
|
|
data/lib/sinatra/reloader.rb
CHANGED
@@ -6,23 +6,6 @@ require "sinatra/advanced_routes"
|
|
6
6
|
module Sinatra
|
7
7
|
Base.ignore_caller
|
8
8
|
|
9
|
-
# Advanced reloader for sinatra. Reloads only files that have changed and automatically
|
10
|
-
# detects orphaned routes that have to be removed. Files defining routes will be added
|
11
|
-
# to the reload list per default. Avoid reloading with dont_reload. Add other files to
|
12
|
-
# the reload list with also_reload.
|
13
|
-
#
|
14
|
-
# Usage:
|
15
|
-
#
|
16
|
-
# require "big_band"
|
17
|
-
# class Foo < Sinatra::Base
|
18
|
-
# configure(:development) do
|
19
|
-
# register BigBand::Reloader
|
20
|
-
# also_reload "app/models/*.rb"
|
21
|
-
# dont_reload "lib/**/*.rb"
|
22
|
-
# end
|
23
|
-
# end
|
24
|
-
#
|
25
|
-
# Per default this will only be acitvated in development mode.
|
26
9
|
module Reloader
|
27
10
|
|
28
11
|
class FileWatcher < Array
|
@@ -37,7 +20,12 @@ module Sinatra
|
|
37
20
|
end
|
38
21
|
|
39
22
|
def self.new(file)
|
40
|
-
|
23
|
+
file = file.expand_path
|
24
|
+
begin
|
25
|
+
file = file.realpath
|
26
|
+
rescue Errno::ENOENT
|
27
|
+
end
|
28
|
+
@map[file] ||= super
|
41
29
|
end
|
42
30
|
|
43
31
|
class << self
|
@@ -49,8 +37,8 @@ module Sinatra
|
|
49
37
|
end
|
50
38
|
|
51
39
|
def initialize(file)
|
52
|
-
@reload = true
|
53
|
-
@
|
40
|
+
@reload, @file = true, file
|
41
|
+
@mtime = File.exist?(file) ? File.mtime(file) : Time.at(0)
|
54
42
|
super()
|
55
43
|
end
|
56
44
|
|
@@ -88,7 +76,9 @@ module Sinatra
|
|
88
76
|
else dont = true
|
89
77
|
end
|
90
78
|
files.flatten.each do |file|
|
91
|
-
|
79
|
+
# Rubinius and JRuby ignore block passed to glob.
|
80
|
+
Dir.glob(file).each { |f| FileWatcher[f].dont_reload! dont }
|
81
|
+
FileWatcher[file].dont_reload! dont
|
92
82
|
end
|
93
83
|
end
|
94
84
|
|
@@ -118,4 +108,7 @@ module Sinatra
|
|
118
108
|
end
|
119
109
|
|
120
110
|
end
|
111
|
+
|
112
|
+
register Reloader
|
113
|
+
|
121
114
|
end
|
@@ -3,22 +3,32 @@ require File.expand_path("../../spec_helper", __FILE__)
|
|
3
3
|
describe Sinatra::Reloader do
|
4
4
|
|
5
5
|
def app_file(file, content, go_sleeping = true)
|
6
|
-
sleep 1 if go_sleeping
|
7
6
|
file = File.expand_path(file, @temp_dir)
|
8
|
-
File.
|
7
|
+
old_mtime = File.exist?(file) ? File.mtime(file) : Time.at(0)
|
8
|
+
new_mtime = old_mtime
|
9
|
+
# this is eventually faster than a hard coded sleep 1, also it adjusts to the systems
|
10
|
+
# mtime granularity
|
11
|
+
until new_mtime > old_mtime
|
12
|
+
File.open(file, "w") { |f| f << "class ::ExampleApp < Sinatra::Base; #{content}; end" }
|
13
|
+
new_mtime = File.mtime file
|
14
|
+
# ok, let's not generate too much io
|
15
|
+
sleep 0.1 if new_mtime == old_mtime
|
16
|
+
end
|
9
17
|
require file
|
10
18
|
file
|
11
19
|
end
|
12
20
|
|
13
21
|
def app
|
14
|
-
ExampleApp
|
22
|
+
::ExampleApp
|
15
23
|
end
|
16
24
|
|
17
|
-
before
|
25
|
+
before do
|
18
26
|
@temp_dir ||= File.expand_path "../../temp", __FILE__
|
19
27
|
rm_rf @temp_dir
|
20
28
|
mkdir_p @temp_dir
|
21
|
-
|
29
|
+
$LOADED_FEATURES.reject! { |f| f =~ /^#{@temp_dir}/ }
|
30
|
+
class ::ExampleApp < Sinatra::Base
|
31
|
+
reset!
|
22
32
|
register Sinatra::Reloader
|
23
33
|
end
|
24
34
|
end
|
@@ -36,14 +46,14 @@ describe Sinatra::Reloader do
|
|
36
46
|
|
37
47
|
it "should not affact other routes" do
|
38
48
|
app_file("example_app.rb", "get('/foo') { 'foo' }")
|
39
|
-
app_file("example_app2.rb", "get('/bar') { 'bar' }"
|
49
|
+
app_file("example_app2.rb", "get('/bar') { 'bar' }")
|
40
50
|
browse_route(:get, '/bar').body.should == 'bar'
|
41
51
|
app_file("example_app.rb", "get('/foo') { 'bar' }")
|
42
52
|
browse_route(:get, '/bar').body.should == 'bar'
|
43
53
|
end
|
44
54
|
|
45
55
|
it "should respect dont_reload" do
|
46
|
-
file = app_file("example_app3.rb", "get('/baz') { 'foo' }"
|
56
|
+
file = app_file("example_app3.rb", "get('/baz') { 'foo' }")
|
47
57
|
app.dont_reload file
|
48
58
|
app_file("example_app3.rb", "get('/baz') { 'bar' }")
|
49
59
|
browse_route(:get, '/baz').body.should == 'foo'
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sinatra-reloader
|
3
|
-
version:
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: true
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 4
|
8
|
+
- 0
|
9
|
+
- b
|
10
|
+
version: 0.4.0.b
|
5
11
|
platform: ruby
|
6
12
|
authors:
|
7
13
|
- Konstantin Haase
|
@@ -9,65 +15,97 @@ autorequire:
|
|
9
15
|
bindir: bin
|
10
16
|
cert_chain: []
|
11
17
|
|
12
|
-
date: 2010-
|
18
|
+
date: 2010-03-26 00:00:00 +01:00
|
13
19
|
default_executable:
|
14
20
|
dependencies:
|
15
21
|
- !ruby/object:Gem::Dependency
|
16
22
|
name: monkey-lib
|
17
|
-
|
18
|
-
|
19
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
20
25
|
requirements:
|
21
|
-
- -
|
22
|
-
-
|
23
|
-
|
26
|
+
- - ~>
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
segments:
|
29
|
+
- 0
|
30
|
+
- 4
|
31
|
+
- 0
|
32
|
+
- a
|
33
|
+
version: 0.4.0.a
|
34
|
+
type: :runtime
|
35
|
+
version_requirements: *id001
|
24
36
|
- !ruby/object:Gem::Dependency
|
25
37
|
name: sinatra-advanced-routes
|
26
|
-
|
27
|
-
|
28
|
-
version_requirements: !ruby/object:Gem::Requirement
|
38
|
+
prerelease: false
|
39
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
29
40
|
requirements:
|
30
|
-
- -
|
31
|
-
-
|
32
|
-
|
41
|
+
- - ~>
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
segments:
|
44
|
+
- 0
|
45
|
+
- 4
|
46
|
+
- 0
|
47
|
+
- a
|
48
|
+
version: 0.4.0.a
|
49
|
+
type: :runtime
|
50
|
+
version_requirements: *id002
|
33
51
|
- !ruby/object:Gem::Dependency
|
34
52
|
name: sinatra-sugar
|
35
|
-
|
36
|
-
|
37
|
-
version_requirements: !ruby/object:Gem::Requirement
|
53
|
+
prerelease: false
|
54
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
38
55
|
requirements:
|
39
|
-
- -
|
40
|
-
-
|
41
|
-
|
56
|
+
- - ~>
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
segments:
|
59
|
+
- 0
|
60
|
+
- 4
|
61
|
+
- 0
|
62
|
+
- a
|
63
|
+
version: 0.4.0.a
|
64
|
+
type: :runtime
|
65
|
+
version_requirements: *id003
|
42
66
|
- !ruby/object:Gem::Dependency
|
43
67
|
name: sinatra-test-helper
|
44
|
-
|
45
|
-
|
46
|
-
version_requirements: !ruby/object:Gem::Requirement
|
68
|
+
prerelease: false
|
69
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
47
70
|
requirements:
|
48
|
-
- -
|
49
|
-
-
|
50
|
-
|
71
|
+
- - ~>
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
segments:
|
74
|
+
- 0
|
75
|
+
- 4
|
76
|
+
- 0
|
77
|
+
- a
|
78
|
+
version: 0.4.0.a
|
79
|
+
type: :development
|
80
|
+
version_requirements: *id004
|
51
81
|
- !ruby/object:Gem::Dependency
|
52
82
|
name: sinatra
|
53
|
-
|
54
|
-
|
55
|
-
version_requirements: !ruby/object:Gem::Requirement
|
83
|
+
prerelease: false
|
84
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
56
85
|
requirements:
|
57
86
|
- - ">="
|
58
87
|
- !ruby/object:Gem::Version
|
88
|
+
segments:
|
89
|
+
- 0
|
90
|
+
- 9
|
91
|
+
- 4
|
59
92
|
version: 0.9.4
|
60
|
-
|
93
|
+
type: :runtime
|
94
|
+
version_requirements: *id005
|
61
95
|
- !ruby/object:Gem::Dependency
|
62
96
|
name: rspec
|
63
|
-
|
64
|
-
|
65
|
-
version_requirements: !ruby/object:Gem::Requirement
|
97
|
+
prerelease: false
|
98
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
66
99
|
requirements:
|
67
100
|
- - ">="
|
68
101
|
- !ruby/object:Gem::Version
|
102
|
+
segments:
|
103
|
+
- 1
|
104
|
+
- 3
|
105
|
+
- 0
|
69
106
|
version: 1.3.0
|
70
|
-
|
107
|
+
type: :development
|
108
|
+
version_requirements: *id006
|
71
109
|
description: Smart and fast code reloader for Sinatra (part of BigBand).
|
72
110
|
email: konstantin.mailinglists@googlemail.com
|
73
111
|
executables: []
|
@@ -94,18 +132,22 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
94
132
|
requirements:
|
95
133
|
- - ">="
|
96
134
|
- !ruby/object:Gem::Version
|
135
|
+
segments:
|
136
|
+
- 0
|
97
137
|
version: "0"
|
98
|
-
version:
|
99
138
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
100
139
|
requirements:
|
101
140
|
- - ">"
|
102
141
|
- !ruby/object:Gem::Version
|
142
|
+
segments:
|
143
|
+
- 1
|
144
|
+
- 3
|
145
|
+
- 1
|
103
146
|
version: 1.3.1
|
104
|
-
version:
|
105
147
|
requirements: []
|
106
148
|
|
107
149
|
rubyforge_project:
|
108
|
-
rubygems_version: 1.3.
|
150
|
+
rubygems_version: 1.3.6
|
109
151
|
signing_key:
|
110
152
|
specification_version: 3
|
111
153
|
summary: Smart and fast code reloader for Sinatra (part of BigBand).
|