sinatra-reloader 0.5.0 → 1.0

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.
metadata CHANGED
@@ -1,133 +1,55 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: sinatra-reloader
3
- version: !ruby/object:Gem::Version
4
- hash: 11
5
- prerelease: false
6
- segments:
7
- - 0
8
- - 5
9
- - 0
10
- version: 0.5.0
3
+ version: !ruby/object:Gem::Version
4
+ version: '1.0'
5
+ prerelease:
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Konstantin Haase
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2010-07-09 00:00:00 +02:00
19
- default_executable:
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
22
- name: sinatra-advanced-routes
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
- - 0
32
- - 5
33
- - 0
34
- version: 0.5.0
35
- type: :runtime
36
- version_requirements: *id001
37
- - !ruby/object:Gem::Dependency
38
- name: sinatra-test-helper
39
- prerelease: false
40
- requirement: &id002 !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
43
- - - ~>
44
- - !ruby/object:Gem::Version
45
- hash: 11
46
- segments:
47
- - 0
48
- - 5
49
- - 0
50
- version: 0.5.0
51
- type: :development
52
- version_requirements: *id002
53
- - !ruby/object:Gem::Dependency
54
- name: sinatra
55
- prerelease: false
56
- requirement: &id003 !ruby/object:Gem::Requirement
12
+ date: 2011-10-28 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: sinatra-contrib
16
+ requirement: &2152420600 !ruby/object:Gem::Requirement
57
17
  none: false
58
- requirements:
59
- - - ~>
60
- - !ruby/object:Gem::Version
61
- hash: 15
62
- segments:
63
- - 1
64
- - 0
65
- version: "1.0"
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
66
22
  type: :runtime
67
- version_requirements: *id003
68
- - !ruby/object:Gem::Dependency
69
- name: rspec
70
23
  prerelease: false
71
- requirement: &id004 !ruby/object:Gem::Requirement
72
- none: false
73
- requirements:
74
- - - ">="
75
- - !ruby/object:Gem::Version
76
- hash: 27
77
- segments:
78
- - 1
79
- - 3
80
- - 0
81
- version: 1.3.0
82
- type: :development
83
- version_requirements: *id004
84
- description: Smart and fast code reloader for Sinatra (part of BigBand).
24
+ version_requirements: *2152420600
25
+ description: ! 'Dummy gem, sinatra-reloader is now part of sinatra-contrib: http://www.sinatrarb.com/contrib/'
85
26
  email: konstantin.mailinglists@googlemail.com
86
27
  executables: []
87
-
88
28
  extensions: []
89
-
90
29
  extra_rdoc_files: []
91
-
92
- files:
93
- - lib/sinatra/reloader.rb
94
- - spec/sinatra/reloader_spec.rb
95
- - spec/spec_helper.rb
96
- - README.md
97
- - LICENSE
98
- has_rdoc: yard
99
- homepage: http://github.com/rkh/sinatra-reloader
30
+ files: []
31
+ homepage: http://github.com/sinatra/sinatra-contrib
100
32
  licenses: []
101
-
102
33
  post_install_message:
103
34
  rdoc_options: []
104
-
105
- require_paths:
35
+ require_paths:
106
36
  - lib
107
- required_ruby_version: !ruby/object:Gem::Requirement
37
+ required_ruby_version: !ruby/object:Gem::Requirement
108
38
  none: false
109
- requirements:
110
- - - ">="
111
- - !ruby/object:Gem::Version
112
- hash: 3
113
- segments:
114
- - 0
115
- version: "0"
116
- required_rubygems_version: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - ! '>='
41
+ - !ruby/object:Gem::Version
42
+ version: '0'
43
+ required_rubygems_version: !ruby/object:Gem::Requirement
117
44
  none: false
118
- requirements:
119
- - - ">="
120
- - !ruby/object:Gem::Version
121
- hash: 3
122
- segments:
123
- - 0
124
- version: "0"
45
+ requirements:
46
+ - - ! '>='
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
125
49
  requirements: []
126
-
127
50
  rubyforge_project:
128
- rubygems_version: 1.3.7
51
+ rubygems_version: 1.8.10
129
52
  signing_key:
130
53
  specification_version: 3
131
- summary: Smart and fast code reloader for Sinatra (part of BigBand).
54
+ summary: Dummy gem, sinatra-reloader is now part of sinatra-contrib.
132
55
  test_files: []
133
-
data/LICENSE DELETED
@@ -1,27 +0,0 @@
1
- copyright (c) 2010 Konstantin Haase. All rights reserved.
2
-
3
- Developed by: Konstantin Haase
4
- http://github.com/rkh/big_band
5
-
6
- Permission is hereby granted, free of charge, to any person obtaining a copy
7
- of this software and associated documentation files (the "Software"), to
8
- deal with the Software without restriction, including without limitation the
9
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
10
- sell copies of the Software, and to permit persons to whom the Software is
11
- furnished to do so, subject to the following conditions:
12
- 1. Redistributions of source code must retain the above copyright notice,
13
- this list of conditions and the following disclaimers.
14
- 2. Redistributions in binary form must reproduce the above copyright
15
- notice, this list of conditions and the following disclaimers in the
16
- documentation and/or other materials provided with the distribution.
17
- 3. Neither the name of Konstantin Haase, nor the names of other contributors
18
- may be used to endorse or promote products derived from this Software without
19
- specific prior written permission.
20
-
21
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24
- CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
26
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
27
- WITH THE SOFTWARE.
data/README.md DELETED
@@ -1,43 +0,0 @@
1
- Sinatra::Reloader
2
- =================
3
-
4
- Advanced code reloader for [Sinatra](http://sinatrarb.com). Reloads only files that have
5
- changed and automatically detects orphaned routes that have to be removed. Most other
6
- implementations delete all routes and reload all code if one file changed, which takes way
7
- more time than reloading only one file, especially in larger projects. Files defining
8
- routes will be added to the reload list per default. Avoid reloading with dont_reload. Add
9
- other files to the reload list with also_reload.
10
-
11
- BigBand
12
- -------
13
-
14
- Sinatra::Reloader is part of the [BigBand](http://github.com/rkh/big_band) stack.
15
- Check it out if you are looking for other fancy Sinatra extensions.
16
-
17
- BigBand will setup the reloader automatically, but only in development mode.
18
-
19
- Installation
20
- ------------
21
-
22
- gem install sinatra-reloader
23
-
24
- Usage
25
- -----
26
-
27
- Simple example:
28
-
29
- require "sinatra"
30
- require "sinatra/reloader" if development?
31
-
32
- More complex:
33
-
34
- require "sinatra/base"
35
- require "sinatra/reloader"
36
-
37
- class Foo < Sinatra::Base
38
- configure(:development) do
39
- register Sinatra::Reloader
40
- also_reload "app/models/*.rb"
41
- dont_reload "lib/**/*.rb"
42
- end
43
- end
@@ -1,124 +0,0 @@
1
- require "monkey-lib"
2
- require "sinatra/base"
3
- require "sinatra/sugar"
4
- require "sinatra/advanced_routes"
5
-
6
- module Sinatra
7
- Base.ignore_caller
8
-
9
- module Reloader
10
- class FileWatcher < Array
11
- attr_reader :file, :mtime, :inline_templates, :app
12
- extend Enumerable
13
- @map ||= {}
14
-
15
- def self.register(route)
16
- new(route.file, route.app) << route if route.file?
17
- end
18
-
19
- def self.new(file, app)
20
- file = file.expand_path
21
- begin
22
- file = file.realpath
23
- rescue Errno::ENOENT
24
- end
25
- @map[file] ||= super
26
- end
27
-
28
- class << self
29
- alias [] new
30
- end
31
-
32
- def self.each(&block)
33
- @map.values.each(&block)
34
- end
35
-
36
- def initialize(file, app)
37
- @reload, @file, @app = true, file, app
38
- @mtime = File.exist?(file) ? File.mtime(file) : Time.at(0)
39
- super()
40
- end
41
-
42
- def changed?
43
- !File.exist? file or @mtime != File.mtime(file)
44
- end
45
-
46
- def dont_reload!(dont = true)
47
- @reload = !dont
48
- end
49
-
50
- def reload?
51
- @reload and changed?
52
- end
53
-
54
- def reload
55
- reload! if reload?
56
- end
57
-
58
- def inline_templates?
59
- !!inline_templates
60
- end
61
-
62
- def inline_templates!
63
- @inline_templates = true
64
- end
65
-
66
- def reload!
67
- each { |route| route.deactivate }
68
- $LOADED_FEATURES.delete file
69
- clear
70
- if File.exist? file
71
- app.set :inline_templates, file if inline_templates?
72
- @mtime = File.mtime(file)
73
- require file
74
- end
75
- end
76
- end
77
-
78
- module ClassMethods
79
- def dont_reload(*files)
80
- if [true, false].include? files.last then dont = files.pop
81
- else dont = true
82
- end
83
- files.flatten.each do |file|
84
- # Rubinius and JRuby ignore block passed to glob.
85
- Dir.glob(file).each { |f| FileWatcher[f, self].dont_reload! dont }
86
- FileWatcher[file, self].dont_reload! dont
87
- end
88
- end
89
-
90
- def also_reload(*files)
91
- dont_reload(files, false)
92
- end
93
-
94
- def inline_templates=(file = nil)
95
- file = (file.nil? || file == true) ? caller_files.first : (file || $0)
96
- FileWatcher[file, self].inline_templates!
97
- super
98
- end
99
- end
100
-
101
- def self.registered(klass)
102
- klass.register AdvancedRoutes
103
- klass.extend ClassMethods
104
- klass.each_route { |route| advanced_route_added(route) }
105
- klass.enable :reload_templates
106
- klass.before { Reloader.reload_routes }
107
- end
108
-
109
- def self.advanced_route_added(route)
110
- FileWatcher.register(route)
111
- end
112
-
113
- def self.thread_safe?
114
- Thread and Thread.list.size > 1 and Thread.respond_to? :exclusive
115
- end
116
-
117
- def self.reload_routes(thread_safe = true)
118
- return Thread.exclusive { reload_routes(false) } if thread_safe and thread_safe?
119
- FileWatcher.each { |file| file.reload }
120
- end
121
- end
122
-
123
- register Reloader
124
- end
@@ -1,89 +0,0 @@
1
- require File.expand_path("../../spec_helper", __FILE__)
2
-
3
- describe Sinatra::Reloader do
4
- it_should_behave_like 'sinatra'
5
-
6
- def app_file(file, content)
7
- file = File.expand_path(file, @temp_dir)
8
- old_mtime = File.exist?(file) ? File.mtime(file) : Time.at(0)
9
- new_mtime = old_mtime
10
- # this is eventually faster than a hard coded sleep 1, also it adjusts to the systems
11
- # mtime granularity
12
- until new_mtime > old_mtime
13
- File.open(file, "w") do |f|
14
- f << "class ::ExampleApp < Sinatra::Base; #{content}; end\n"
15
- yield f if block_given?
16
- end
17
- File.utime File.atime(file), old_mtime + 10, file unless ENV['MTIME']
18
- new_mtime = File.mtime file
19
- # ok, let's not generate too much io
20
- sleep 0.1 if new_mtime == old_mtime
21
- end
22
- require file
23
- file
24
- end
25
-
26
- def app
27
- ::ExampleApp
28
- end
29
-
30
- before do
31
- @temp_dir ||= File.expand_path "../../temp", __FILE__
32
- rm_rf @temp_dir
33
- mkdir_p @temp_dir
34
- $LOADED_FEATURES.reject! { |f| f =~ /^#{@temp_dir}/ }
35
- class ::ExampleApp < Sinatra::Base
36
- reset!
37
- register Sinatra::Reloader
38
- end
39
- end
40
-
41
- after :all do
42
- rm_rf @temp_dir
43
- end
44
-
45
- it "should reload files" do
46
- app_file("example_app.rb", "get('/foo') { 'foo' }")
47
- browse_route(:get, '/foo').body.should == 'foo'
48
- app_file("example_app.rb", "get('/foo') { 'bar' }")
49
- browse_route(:get, '/foo').body.should == 'bar'
50
- end
51
-
52
- it "should not affact other routes" do
53
- app_file("example_app.rb", "get('/foo') { 'foo' }")
54
- app_file("example_app2.rb", "get('/bar') { 'bar' }")
55
- browse_route(:get, '/bar').body.should == 'bar'
56
- app_file("example_app.rb", "get('/foo') { 'bar' }")
57
- browse_route(:get, '/bar').body.should == 'bar'
58
- end
59
-
60
- it "should respect dont_reload" do
61
- file = app_file("example_app3.rb", "get('/baz') { 'foo' }")
62
- app.dont_reload file
63
- app_file("example_app3.rb", "get('/baz') { 'bar' }")
64
- browse_route(:get, '/baz').body.should == 'foo'
65
- end
66
-
67
- it "reloads inline templates" do
68
- file = app_file("example_app4.rb", "get('/foo') { haml :foo }") { |f| f.puts "__END__", "@@foo", "foo" }
69
- app.set :inline_templates, file
70
- browse_route(:get, '/foo').body.strip.should == "foo"
71
- app_file("example_app4.rb", "get('/foo') { haml :foo }") { |f| f.puts "__END__", "@@foo", "bar" }
72
- browse_route(:get, '/foo').body.strip.should == "bar"
73
- end
74
-
75
- it "should not readd middleware" do
76
- 3.times do
77
- app_file "example_app5.rb", <<-RUBY
78
- use Rack::Config do |env|
79
- env['some.counter'] ||= 0
80
- env['some.counter'] += 1
81
- $counter = env['some.counter']
82
- end
83
- RUBY
84
- browse_route :get, '/foo'
85
- end
86
- $counter.should == 1
87
- end
88
-
89
- end
@@ -1,4 +0,0 @@
1
- require "sinatra/rspec/shared"
2
- require "sinatra/reloader"
3
- require "fileutils"
4
- include FileUtils