stasis 0.1.23 → 0.2.0.pre
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 +2 -38
- data/bin/stasis +6 -10
- data/lib/ext/string.rb +20 -0
- data/lib/stasis.rb +11 -7
- data/lib/stasis/dev_mode.rb +28 -23
- data/spec/fixtures/project/_locals.html.haml +1 -0
- data/spec/fixtures/project/before_render_locals.html.haml +1 -0
- data/spec/fixtures/project/controller.rb +4 -0
- data/spec/fixtures/project/render_locals.html.haml +1 -0
- data/spec/fixtures/project/subdirectory/_locals.html.haml +1 -0
- data/spec/fixtures/project/subdirectory/before_render_locals.html.haml +1 -0
- data/spec/fixtures/project/subdirectory/controller.rb +4 -0
- data/spec/fixtures/project/subdirectory/render_locals.html.haml +1 -0
- data/spec/stasis/plugins/render_spec.rb +16 -0
- data/stasis.gemspec +4 -6
- metadata +165 -188
- data/lib/stasis/server.rb +0 -116
- data/spec/stasis/server_spec.rb +0 -65
data/README.md
CHANGED
@@ -3,6 +3,8 @@ Stasis
|
|
3
3
|
|
4
4
|
Stasis is a dynamic framework for static sites.
|
5
5
|
|
6
|
+
[](http://travis-ci.org/winton/stasis)
|
7
|
+
|
6
8
|
Install
|
7
9
|
-------
|
8
10
|
|
@@ -266,44 +268,6 @@ Stasis uses [Tilt](https://github.com/rtomayko/tilt) to support the following te
|
|
266
268
|
WikiCloth (Wiki markup) .wiki, .mediawiki, .mw
|
267
269
|
Yajl .yajl
|
268
270
|
|
269
|
-
### Server Mode
|
270
|
-
|
271
|
-
Stasis can run as a server that uses [redis](http://redis.io) to wait for render jobs.
|
272
|
-
|
273
|
-
Stasis server that uses redis on port 6379:
|
274
|
-
|
275
|
-
<!-- highlight:-s language:console -->
|
276
|
-
|
277
|
-
$ stasis -s localhost:6379/0
|
278
|
-
|
279
|
-
Push to the server (in Ruby):
|
280
|
-
|
281
|
-
Stasis::Server.push(
|
282
|
-
# Paths to render
|
283
|
-
:paths => [ "index.html.haml", "subdirectory" ],
|
284
|
-
|
285
|
-
# Made available to views as `params`
|
286
|
-
:params => {},
|
287
|
-
|
288
|
-
# Redis address
|
289
|
-
:redis => "localhost:6379/0",
|
290
|
-
|
291
|
-
# Return rendered templates (false by default)
|
292
|
-
:return => false,
|
293
|
-
|
294
|
-
# Block until templates generate (false by default)
|
295
|
-
:wait => false,
|
296
|
-
|
297
|
-
# Write to the filesystem (true by default)
|
298
|
-
:write => true,
|
299
|
-
|
300
|
-
# Cache ttl for returned templates (nil by default)
|
301
|
-
:ttl => nil,
|
302
|
-
|
303
|
-
# Force write even if cached (false by default)
|
304
|
-
:force => false
|
305
|
-
)
|
306
|
-
|
307
271
|
### This Web Site
|
308
272
|
|
309
273
|
[Take a look at the Stasis project](https://github.com/winton/stasis/tree/master/site) that automatically generated this web site from the project [README](https://github.com/winton/stasis/blob/master/README.md).
|
data/bin/stasis
CHANGED
@@ -2,18 +2,17 @@
|
|
2
2
|
|
3
3
|
require File.expand_path(File.dirname(__FILE__) + "/../lib/stasis")
|
4
4
|
|
5
|
-
gem "slop", "
|
5
|
+
gem "slop", "3.3.2"
|
6
6
|
require 'slop'
|
7
7
|
|
8
|
-
slop = Slop.parse :help => true do
|
9
|
-
on :d, :development, "Development mode
|
10
|
-
on :o, :only, "Only generate specific files
|
11
|
-
on :p, :public, "Public directory path"
|
12
|
-
on :s, :server, "Server mode\t\t\t(default redis host: localhost:6379/0)", :optional => true, :default => "localhost:6379/0"
|
8
|
+
slop = Slop.parse :help => true, :optional_arguments => true do
|
9
|
+
on :d, :development, "Development mode", :as => Integer
|
10
|
+
on :o, :only, "Only generate specific files (comma-separated)", :as => Array
|
11
|
+
on :p, :public, "Public directory path"
|
13
12
|
end
|
14
13
|
|
14
|
+
exit if slop.help?
|
15
15
|
options = slop.to_hash
|
16
|
-
options.delete(:server) unless slop.server?
|
17
16
|
|
18
17
|
if slop.development?
|
19
18
|
require 'stasis/dev_mode'
|
@@ -22,9 +21,6 @@ elsif slop.only? && slop.public?
|
|
22
21
|
Stasis.new(Dir.pwd, slop[:public], options).render(*slop[:only])
|
23
22
|
elsif slop.only?
|
24
23
|
Stasis.new(Dir.pwd, options).render(*slop[:only])
|
25
|
-
elsif slop.server?
|
26
|
-
require 'stasis/server'
|
27
|
-
Stasis::Server.new(Dir.pwd, options)
|
28
24
|
elsif slop.public?
|
29
25
|
Stasis.new(Dir.pwd, slop[:public], options).render(*(slop[:only].to_a))
|
30
26
|
else
|
data/lib/ext/string.rb
ADDED
data/lib/stasis.rb
CHANGED
@@ -18,7 +18,7 @@ end
|
|
18
18
|
|
19
19
|
# Activate the [Tilt][ti] gem.
|
20
20
|
|
21
|
-
gem "tilt", "
|
21
|
+
gem "tilt", "1.3.3"
|
22
22
|
|
23
23
|
# Add the project directory to the load paths.
|
24
24
|
|
@@ -28,6 +28,8 @@ $:.unshift File.dirname(__FILE__)
|
|
28
28
|
# 'stasis/server'. Those are demand-loaded when the corresponding command-line
|
29
29
|
# options are passed.
|
30
30
|
|
31
|
+
require 'ext/string'
|
32
|
+
|
31
33
|
require 'stasis/options'
|
32
34
|
require 'stasis/plugin'
|
33
35
|
|
@@ -115,7 +117,7 @@ class Stasis
|
|
115
117
|
@controller = Controller.new(self)
|
116
118
|
|
117
119
|
# Reload controllers
|
118
|
-
Dir["#{@root}/**/controller.rb"].each do |path|
|
120
|
+
Dir["#{@root}/**/controller.rb"].sort.each do |path|
|
119
121
|
@controller._add(path) unless path[0..@destination.length-1] == @destination
|
120
122
|
end
|
121
123
|
end
|
@@ -179,6 +181,9 @@ class Stasis
|
|
179
181
|
Tilt.mappings.keys.detect do |ext|
|
180
182
|
File.extname(@path)[1..-1] == ext
|
181
183
|
end
|
184
|
+
|
185
|
+
# Change current working directory.
|
186
|
+
Dir.chdir(File.dirname(@path))
|
182
187
|
|
183
188
|
# Trigger all plugin `before_render` events.
|
184
189
|
trigger(:before_render)
|
@@ -186,9 +191,6 @@ class Stasis
|
|
186
191
|
# Skip if `@path` set to `nil`.
|
187
192
|
next unless @path
|
188
193
|
|
189
|
-
# Change current working directory.
|
190
|
-
Dir.chdir(File.dirname(@path))
|
191
|
-
|
192
194
|
# Render the view.
|
193
195
|
view =
|
194
196
|
# If the path has an extension supported by [Tilt][ti]...
|
@@ -294,8 +296,10 @@ class Stasis
|
|
294
296
|
# Add a plugin to all existing controller instances. This method should be called by
|
295
297
|
# all external plugins.
|
296
298
|
def self.register(plugin)
|
297
|
-
@instances
|
298
|
-
stasis
|
299
|
+
if @instances
|
300
|
+
@instances.each do |stasis|
|
301
|
+
stasis.add_plugin(plugin)
|
302
|
+
end
|
299
303
|
end
|
300
304
|
end
|
301
305
|
|
data/lib/stasis/dev_mode.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
gem
|
1
|
+
gem 'directory_watcher', '1.4.1'
|
2
2
|
require 'directory_watcher'
|
3
3
|
|
4
4
|
require 'logger'
|
@@ -10,43 +10,48 @@ class Stasis
|
|
10
10
|
def initialize(dir, options={})
|
11
11
|
trap("INT") { exit }
|
12
12
|
|
13
|
-
puts "\nDevelopment mode enabled:
|
13
|
+
puts "\nDevelopment mode enabled: ".green + dir
|
14
14
|
$stdout.flush
|
15
15
|
|
16
|
-
@dir = dir
|
17
16
|
@options = options
|
18
17
|
@options[:development] ||= true
|
19
18
|
|
20
|
-
@stasis = Stasis.new(*[
|
19
|
+
@stasis = Stasis.new(*[ dir, @options[:public], @options ].compact)
|
21
20
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
21
|
+
glob =
|
22
|
+
Dir.chdir(@stasis.root) do
|
23
|
+
# If destination is within root
|
24
|
+
if @stasis.destination[0..@stasis.root.length] == "#{@stasis.root}/"
|
25
|
+
relative = @stasis.destination[@stasis.root.length+1..-1] rescue nil
|
26
|
+
Dir["*"].inject(["*"]) do |array, path|
|
27
|
+
if File.directory?(path) && path != relative
|
28
|
+
array.push("#{path}/**/*")
|
29
|
+
end
|
30
|
+
array
|
31
|
+
end
|
32
|
+
else
|
33
|
+
[ "*", "**/*" ]
|
31
34
|
end
|
32
|
-
array
|
33
35
|
end
|
34
|
-
end
|
35
36
|
|
37
|
+
dw = DirectoryWatcher.new(@stasis.root)
|
36
38
|
dw.add_observer { render }
|
39
|
+
dw.glob = glob
|
40
|
+
dw.interval = 0.1
|
37
41
|
dw.start
|
38
42
|
|
39
|
-
if options[:development].is_a?(::Integer)
|
43
|
+
if @options[:development].is_a?(::Integer)
|
40
44
|
mime_types = WEBrick::HTTPUtils::DefaultMimeTypes
|
41
45
|
mime_types.store 'js', 'application/javascript'
|
42
46
|
|
43
|
-
outfile = (RUBY_PLATFORM =~ /mswin|mingw/) ? 'NUL:' : '/dev/null'
|
44
47
|
server = WEBrick::HTTPServer.new(
|
45
48
|
:AccessLog => [ nil, nil ],
|
46
49
|
:DocumentRoot => @stasis.destination,
|
47
|
-
:Logger => WEBrick::Log.new(
|
50
|
+
:Logger => WEBrick::Log.new(
|
51
|
+
(RUBY_PLATFORM =~ /mswin|mingw/) ? 'NUL:' : '/dev/null'
|
52
|
+
),
|
48
53
|
:MimeTypes => mime_types,
|
49
|
-
:Port => options[:development]
|
54
|
+
:Port => @options[:development]
|
50
55
|
)
|
51
56
|
|
52
57
|
['INT', 'TERM'].each do |signal|
|
@@ -55,24 +60,24 @@ class Stasis
|
|
55
60
|
|
56
61
|
server.start
|
57
62
|
else
|
58
|
-
loop { sleep
|
63
|
+
loop { sleep 1 }
|
59
64
|
end
|
60
65
|
end
|
61
66
|
|
62
67
|
private
|
63
68
|
|
64
69
|
def render
|
65
|
-
puts "\n[#{Time.now.strftime("%Y-%m-%d %H:%M:%S")}] Regenerating #{@options[:only] ? @options[:only].join(', ') : 'project'}..."
|
70
|
+
puts "\n[#{Time.now.strftime("%Y-%m-%d %H:%M:%S")}]" + " Regenerating #{@options[:only] ? @options[:only].join(', ') : 'project'}...".yellow
|
66
71
|
begin
|
67
72
|
@stasis.load_paths
|
68
73
|
@stasis.trigger(:reset)
|
69
74
|
@stasis.load_controllers
|
70
75
|
@stasis.render(*[ @options[:only] ].flatten.compact)
|
71
76
|
rescue Exception => e
|
72
|
-
puts "\n[#{Time.now.strftime("%Y-%m-%d %H:%M:%S")}] Error: #{e.message}`"
|
77
|
+
puts "\n[#{Time.now.strftime("%Y-%m-%d %H:%M:%S")}]" + " Error: #{e.message}`".red
|
73
78
|
puts "\t#{e.backtrace.join("\n\t")}"
|
74
79
|
else
|
75
|
-
puts "\n[#{Time.now.strftime("%Y-%m-%d %H:%M:%S")}] Complete"
|
80
|
+
puts "\n[#{Time.now.strftime("%Y-%m-%d %H:%M:%S")}]" + " Complete".green
|
76
81
|
end
|
77
82
|
$stdout.flush
|
78
83
|
end
|
@@ -0,0 +1 @@
|
|
1
|
+
= x
|
@@ -0,0 +1 @@
|
|
1
|
+
fail
|
@@ -41,6 +41,10 @@ before 'before_non_existent.html' do
|
|
41
41
|
instead render(:path => '_partial.html.haml')
|
42
42
|
end
|
43
43
|
|
44
|
+
before 'before_render_locals.html.haml' do
|
45
|
+
instead render(:path => '_locals.html.haml', :locals => { :x => true })
|
46
|
+
end
|
47
|
+
|
44
48
|
# Helpers
|
45
49
|
|
46
50
|
helpers do
|
@@ -0,0 +1 @@
|
|
1
|
+
= render :path => '_locals.html.haml', :locals => { :x => true }
|
@@ -0,0 +1 @@
|
|
1
|
+
= x
|
@@ -0,0 +1 @@
|
|
1
|
+
fail
|
@@ -31,6 +31,10 @@ before 'before_render_partial.html.haml', 'before_non_existent.html' do
|
|
31
31
|
instead render(:path => '_partial.html.haml')
|
32
32
|
end
|
33
33
|
|
34
|
+
before 'before_render_locals.html.haml' do
|
35
|
+
instead render(:path => '_locals.html.haml', :locals => { :x => true })
|
36
|
+
end
|
37
|
+
|
34
38
|
# Helpers
|
35
39
|
|
36
40
|
helpers do
|
@@ -0,0 +1 @@
|
|
1
|
+
= render :path => '_locals.html.haml', :locals => { :x => true }
|
@@ -20,4 +20,20 @@ describe Stasis::Render do
|
|
20
20
|
$files['no_controller/index.html'].should =~ /render from root\nroot/
|
21
21
|
$files['no_controller/index.html'].should =~ /render from subdirectory\nsubdirectory/
|
22
22
|
end
|
23
|
+
|
24
|
+
it "should render locals into before_render_locals.html" do
|
25
|
+
$files['before_render_locals.html'].should =~ /true/
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should render locals into subdirectory/before_render_locals.html" do
|
29
|
+
$files['subdirectory/before_render_locals.html'].should =~ /true/
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should render locals into render_locals.html" do
|
33
|
+
$files['render_locals.html'].should =~ /true/
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should render locals into subdirectory/render_locals.html" do
|
37
|
+
$files['subdirectory/render_locals.html'].should =~ /true/
|
38
|
+
end
|
23
39
|
end
|
data/stasis.gemspec
CHANGED
@@ -6,7 +6,7 @@ $:.unshift lib unless $:.include?(lib)
|
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "stasis"
|
9
|
-
s.version = '0.
|
9
|
+
s.version = '0.2.0.pre'
|
10
10
|
s.platform = Gem::Platform::RUBY
|
11
11
|
s.authors = [ 'Winton Welsh' ]
|
12
12
|
s.email = [ 'mail@wintoni.us' ]
|
@@ -27,9 +27,7 @@ Gem::Specification.new do |s|
|
|
27
27
|
s.add_development_dependency "rocco"
|
28
28
|
s.add_development_dependency "rspec", "~> 1.0"
|
29
29
|
|
30
|
-
s.add_dependency "directory_watcher", "
|
31
|
-
s.add_dependency "
|
32
|
-
s.add_dependency "
|
33
|
-
s.add_dependency "tilt", "~> 1.3.3"
|
34
|
-
s.add_dependency "yajl-ruby", "~> 1.0.0"
|
30
|
+
s.add_dependency "directory_watcher", "1.4.1"
|
31
|
+
s.add_dependency "slop", "3.3.2"
|
32
|
+
s.add_dependency "tilt", "1.3.3"
|
35
33
|
end
|
metadata
CHANGED
@@ -1,211 +1,184 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: stasis
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 1
|
9
|
-
- 23
|
10
|
-
version: 0.1.23
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.0.pre
|
5
|
+
prerelease: 6
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Winton Welsh
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
- !ruby/object:Gem::Dependency
|
21
|
-
version_requirements: &id001 !ruby/object:Gem::Requirement
|
22
|
-
none: false
|
23
|
-
requirements:
|
24
|
-
- - ">="
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
hash: 3
|
27
|
-
segments:
|
28
|
-
- 0
|
29
|
-
version: "0"
|
30
|
-
prerelease: false
|
31
|
-
type: :development
|
12
|
+
date: 2012-07-09 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
32
15
|
name: albino
|
33
|
-
requirement:
|
34
|
-
- !ruby/object:Gem::Dependency
|
35
|
-
version_requirements: &id002 !ruby/object:Gem::Requirement
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
36
17
|
none: false
|
37
|
-
requirements:
|
38
|
-
- -
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
|
41
|
-
segments:
|
42
|
-
- 0
|
43
|
-
version: "0"
|
44
|
-
prerelease: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
45
22
|
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
46
31
|
name: coffee-script
|
47
|
-
requirement:
|
48
|
-
- !ruby/object:Gem::Dependency
|
49
|
-
version_requirements: &id003 !ruby/object:Gem::Requirement
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
50
33
|
none: false
|
51
|
-
requirements:
|
52
|
-
- -
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
|
55
|
-
segments:
|
56
|
-
- 0
|
57
|
-
version: "0"
|
58
|
-
prerelease: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
59
38
|
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
60
47
|
name: haml
|
61
|
-
requirement:
|
62
|
-
- !ruby/object:Gem::Dependency
|
63
|
-
version_requirements: &id004 !ruby/object:Gem::Requirement
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
64
49
|
none: false
|
65
|
-
requirements:
|
66
|
-
- -
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
|
69
|
-
segments:
|
70
|
-
- 0
|
71
|
-
version: "0"
|
72
|
-
prerelease: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
73
54
|
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
74
63
|
name: nokogiri
|
75
|
-
requirement:
|
76
|
-
- !ruby/object:Gem::Dependency
|
77
|
-
version_requirements: &id005 !ruby/object:Gem::Requirement
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
78
65
|
none: false
|
79
|
-
requirements:
|
80
|
-
- -
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
|
83
|
-
segments:
|
84
|
-
- 0
|
85
|
-
version: "0"
|
86
|
-
prerelease: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
87
70
|
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
- !ruby/object:Gem::Dependency
|
88
79
|
name: rake
|
89
|
-
requirement:
|
90
|
-
- !ruby/object:Gem::Dependency
|
91
|
-
version_requirements: &id006 !ruby/object:Gem::Requirement
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
92
81
|
none: false
|
93
|
-
requirements:
|
94
|
-
- -
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
|
97
|
-
segments:
|
98
|
-
- 0
|
99
|
-
version: "0"
|
100
|
-
prerelease: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
101
86
|
type: :development
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
- !ruby/object:Gem::Dependency
|
102
95
|
name: rocco
|
103
|
-
requirement:
|
104
|
-
- !ruby/object:Gem::Dependency
|
105
|
-
version_requirements: &id007 !ruby/object:Gem::Requirement
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
106
97
|
none: false
|
107
|
-
requirements:
|
108
|
-
- -
|
109
|
-
- !ruby/object:Gem::Version
|
110
|
-
|
111
|
-
segments:
|
112
|
-
- 1
|
113
|
-
- 0
|
114
|
-
version: "1.0"
|
115
|
-
prerelease: false
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
116
102
|
type: :development
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
- !ruby/object:Gem::Dependency
|
117
111
|
name: rspec
|
118
|
-
requirement:
|
119
|
-
- !ruby/object:Gem::Dependency
|
120
|
-
version_requirements: &id008 !ruby/object:Gem::Requirement
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
121
113
|
none: false
|
122
|
-
requirements:
|
114
|
+
requirements:
|
123
115
|
- - ~>
|
124
|
-
- !ruby/object:Gem::Version
|
125
|
-
|
126
|
-
|
127
|
-
- 1
|
128
|
-
- 4
|
129
|
-
- 1
|
130
|
-
version: 1.4.1
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '1.0'
|
118
|
+
type: :development
|
131
119
|
prerelease: false
|
132
|
-
|
133
|
-
name: directory_watcher
|
134
|
-
requirement: *id008
|
135
|
-
- !ruby/object:Gem::Dependency
|
136
|
-
version_requirements: &id009 !ruby/object:Gem::Requirement
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
137
121
|
none: false
|
138
|
-
requirements:
|
122
|
+
requirements:
|
139
123
|
- - ~>
|
140
|
-
- !ruby/object:Gem::Version
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
- 2
|
146
|
-
version: 2.2.2
|
147
|
-
prerelease: false
|
148
|
-
type: :runtime
|
149
|
-
name: redis
|
150
|
-
requirement: *id009
|
151
|
-
- !ruby/object:Gem::Dependency
|
152
|
-
version_requirements: &id010 !ruby/object:Gem::Requirement
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '1.0'
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: directory_watcher
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
153
129
|
none: false
|
154
|
-
requirements:
|
155
|
-
- -
|
156
|
-
- !ruby/object:Gem::Version
|
157
|
-
|
158
|
-
segments:
|
159
|
-
- 2
|
160
|
-
- 1
|
161
|
-
- 0
|
162
|
-
version: 2.1.0
|
163
|
-
prerelease: false
|
130
|
+
requirements:
|
131
|
+
- - '='
|
132
|
+
- !ruby/object:Gem::Version
|
133
|
+
version: 1.4.1
|
164
134
|
type: :runtime
|
135
|
+
prerelease: false
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
138
|
+
requirements:
|
139
|
+
- - '='
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: 1.4.1
|
142
|
+
- !ruby/object:Gem::Dependency
|
165
143
|
name: slop
|
166
|
-
requirement:
|
167
|
-
- !ruby/object:Gem::Dependency
|
168
|
-
version_requirements: &id011 !ruby/object:Gem::Requirement
|
144
|
+
requirement: !ruby/object:Gem::Requirement
|
169
145
|
none: false
|
170
|
-
requirements:
|
171
|
-
- -
|
172
|
-
- !ruby/object:Gem::Version
|
173
|
-
|
174
|
-
segments:
|
175
|
-
- 1
|
176
|
-
- 3
|
177
|
-
- 3
|
178
|
-
version: 1.3.3
|
179
|
-
prerelease: false
|
146
|
+
requirements:
|
147
|
+
- - '='
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: 3.3.2
|
180
150
|
type: :runtime
|
151
|
+
prerelease: false
|
152
|
+
version_requirements: !ruby/object:Gem::Requirement
|
153
|
+
none: false
|
154
|
+
requirements:
|
155
|
+
- - '='
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: 3.3.2
|
158
|
+
- !ruby/object:Gem::Dependency
|
181
159
|
name: tilt
|
182
|
-
requirement:
|
183
|
-
- !ruby/object:Gem::Dependency
|
184
|
-
version_requirements: &id012 !ruby/object:Gem::Requirement
|
160
|
+
requirement: !ruby/object:Gem::Requirement
|
185
161
|
none: false
|
186
|
-
requirements:
|
187
|
-
- -
|
188
|
-
- !ruby/object:Gem::Version
|
189
|
-
|
190
|
-
segments:
|
191
|
-
- 1
|
192
|
-
- 0
|
193
|
-
- 0
|
194
|
-
version: 1.0.0
|
195
|
-
prerelease: false
|
162
|
+
requirements:
|
163
|
+
- - '='
|
164
|
+
- !ruby/object:Gem::Version
|
165
|
+
version: 1.3.3
|
196
166
|
type: :runtime
|
197
|
-
|
198
|
-
|
167
|
+
prerelease: false
|
168
|
+
version_requirements: !ruby/object:Gem::Requirement
|
169
|
+
none: false
|
170
|
+
requirements:
|
171
|
+
- - '='
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: 1.3.3
|
199
174
|
description: Stasis is a dynamic framework for static sites.
|
200
|
-
email:
|
175
|
+
email:
|
201
176
|
- mail@wintoni.us
|
202
|
-
executables:
|
177
|
+
executables:
|
203
178
|
- stasis
|
204
179
|
extensions: []
|
205
|
-
|
206
180
|
extra_rdoc_files: []
|
207
|
-
|
208
|
-
files:
|
181
|
+
files:
|
209
182
|
- .gitignore
|
210
183
|
- .travis.yml
|
211
184
|
- Gemfile
|
@@ -213,6 +186,7 @@ files:
|
|
213
186
|
- README.md
|
214
187
|
- Rakefile
|
215
188
|
- bin/stasis
|
189
|
+
- lib/ext/string.rb
|
216
190
|
- lib/stasis.rb
|
217
191
|
- lib/stasis/dev_mode.rb
|
218
192
|
- lib/stasis/options.rb
|
@@ -227,7 +201,6 @@ files:
|
|
227
201
|
- lib/stasis/scope.rb
|
228
202
|
- lib/stasis/scope/action.rb
|
229
203
|
- lib/stasis/scope/controller.rb
|
230
|
-
- lib/stasis/server.rb
|
231
204
|
- site/arrow.png
|
232
205
|
- site/controller.rb
|
233
206
|
- site/github.png
|
@@ -237,7 +210,9 @@ files:
|
|
237
210
|
- site/stasis.js.coffee
|
238
211
|
- site/stasis.png
|
239
212
|
- spec/fixtures/project/.dotfile
|
213
|
+
- spec/fixtures/project/_locals.html.haml
|
240
214
|
- spec/fixtures/project/_partial.html.haml
|
215
|
+
- spec/fixtures/project/before_render_locals.html.haml
|
241
216
|
- spec/fixtures/project/before_render_partial.html.haml
|
242
217
|
- spec/fixtures/project/before_render_text.html.haml
|
243
218
|
- spec/fixtures/project/controller.rb
|
@@ -254,7 +229,10 @@ files:
|
|
254
229
|
- spec/fixtures/project/not_dynamic.html
|
255
230
|
- spec/fixtures/project/params.html.haml
|
256
231
|
- spec/fixtures/project/plugin.rb
|
232
|
+
- spec/fixtures/project/render_locals.html.haml
|
233
|
+
- spec/fixtures/project/subdirectory/_locals.html.haml
|
257
234
|
- spec/fixtures/project/subdirectory/_partial.html.haml
|
235
|
+
- spec/fixtures/project/subdirectory/before_render_locals.html.haml
|
258
236
|
- spec/fixtures/project/subdirectory/before_render_partial.html.haml
|
259
237
|
- spec/fixtures/project/subdirectory/before_render_text.html.haml
|
260
238
|
- spec/fixtures/project/subdirectory/controller.rb
|
@@ -265,6 +243,7 @@ files:
|
|
265
243
|
- spec/fixtures/project/subdirectory/layout_action_from_root.html.haml
|
266
244
|
- spec/fixtures/project/subdirectory/layout_controller.html.haml
|
267
245
|
- spec/fixtures/project/subdirectory/layout_controller_from_root.html.haml
|
246
|
+
- spec/fixtures/project/subdirectory/render_locals.html.haml
|
268
247
|
- spec/fixtures/project/time.html.haml
|
269
248
|
- spec/spec_helper.rb
|
270
249
|
- spec/stasis/plugins/before_spec.rb
|
@@ -273,45 +252,40 @@ files:
|
|
273
252
|
- spec/stasis/plugins/layout_spec.rb
|
274
253
|
- spec/stasis/plugins/priority_spec.rb
|
275
254
|
- spec/stasis/plugins/render_spec.rb
|
276
|
-
- spec/stasis/server_spec.rb
|
277
255
|
- spec/stasis_spec.rb
|
278
256
|
- stasis.gemspec
|
279
257
|
homepage: http://stasis.me
|
280
258
|
licenses: []
|
281
|
-
|
282
259
|
post_install_message:
|
283
260
|
rdoc_options: []
|
284
|
-
|
285
|
-
require_paths:
|
261
|
+
require_paths:
|
286
262
|
- lib
|
287
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
263
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
288
264
|
none: false
|
289
|
-
requirements:
|
290
|
-
- -
|
291
|
-
- !ruby/object:Gem::Version
|
292
|
-
|
293
|
-
segments:
|
265
|
+
requirements:
|
266
|
+
- - ! '>='
|
267
|
+
- !ruby/object:Gem::Version
|
268
|
+
version: '0'
|
269
|
+
segments:
|
294
270
|
- 0
|
295
|
-
|
296
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
271
|
+
hash: -658786105732867218
|
272
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
297
273
|
none: false
|
298
|
-
requirements:
|
299
|
-
- -
|
300
|
-
- !ruby/object:Gem::Version
|
301
|
-
|
302
|
-
segments:
|
303
|
-
- 0
|
304
|
-
version: "0"
|
274
|
+
requirements:
|
275
|
+
- - ! '>'
|
276
|
+
- !ruby/object:Gem::Version
|
277
|
+
version: 1.3.1
|
305
278
|
requirements: []
|
306
|
-
|
307
279
|
rubyforge_project:
|
308
280
|
rubygems_version: 1.8.24
|
309
281
|
signing_key:
|
310
282
|
specification_version: 3
|
311
283
|
summary: Static sites made powerful
|
312
|
-
test_files:
|
284
|
+
test_files:
|
313
285
|
- spec/fixtures/project/.dotfile
|
286
|
+
- spec/fixtures/project/_locals.html.haml
|
314
287
|
- spec/fixtures/project/_partial.html.haml
|
288
|
+
- spec/fixtures/project/before_render_locals.html.haml
|
315
289
|
- spec/fixtures/project/before_render_partial.html.haml
|
316
290
|
- spec/fixtures/project/before_render_text.html.haml
|
317
291
|
- spec/fixtures/project/controller.rb
|
@@ -328,7 +302,10 @@ test_files:
|
|
328
302
|
- spec/fixtures/project/not_dynamic.html
|
329
303
|
- spec/fixtures/project/params.html.haml
|
330
304
|
- spec/fixtures/project/plugin.rb
|
305
|
+
- spec/fixtures/project/render_locals.html.haml
|
306
|
+
- spec/fixtures/project/subdirectory/_locals.html.haml
|
331
307
|
- spec/fixtures/project/subdirectory/_partial.html.haml
|
308
|
+
- spec/fixtures/project/subdirectory/before_render_locals.html.haml
|
332
309
|
- spec/fixtures/project/subdirectory/before_render_partial.html.haml
|
333
310
|
- spec/fixtures/project/subdirectory/before_render_text.html.haml
|
334
311
|
- spec/fixtures/project/subdirectory/controller.rb
|
@@ -339,6 +316,7 @@ test_files:
|
|
339
316
|
- spec/fixtures/project/subdirectory/layout_action_from_root.html.haml
|
340
317
|
- spec/fixtures/project/subdirectory/layout_controller.html.haml
|
341
318
|
- spec/fixtures/project/subdirectory/layout_controller_from_root.html.haml
|
319
|
+
- spec/fixtures/project/subdirectory/render_locals.html.haml
|
342
320
|
- spec/fixtures/project/time.html.haml
|
343
321
|
- spec/spec_helper.rb
|
344
322
|
- spec/stasis/plugins/before_spec.rb
|
@@ -347,5 +325,4 @@ test_files:
|
|
347
325
|
- spec/stasis/plugins/layout_spec.rb
|
348
326
|
- spec/stasis/plugins/priority_spec.rb
|
349
327
|
- spec/stasis/plugins/render_spec.rb
|
350
|
-
- spec/stasis/server_spec.rb
|
351
328
|
- spec/stasis_spec.rb
|
data/lib/stasis/server.rb
DELETED
@@ -1,116 +0,0 @@
|
|
1
|
-
gem "redis", "~> 2.2.2"
|
2
|
-
gem "yajl-ruby", "~> 1.0.0"
|
3
|
-
|
4
|
-
require 'digest/sha1'
|
5
|
-
require 'redis'
|
6
|
-
require 'yajl'
|
7
|
-
|
8
|
-
class Stasis
|
9
|
-
class Server
|
10
|
-
|
11
|
-
def initialize(root, options={})
|
12
|
-
puts "\nStarting Stasis server (redis @ #{options[:server]})..."
|
13
|
-
|
14
|
-
redis = Redis.connect(:url => "redis://#{options[:server]}")
|
15
|
-
stasis = Stasis.new(*[ root, options[:public], options ].compact)
|
16
|
-
retries = 0
|
17
|
-
|
18
|
-
begin
|
19
|
-
while true
|
20
|
-
sleep(1.0 / 1000.0)
|
21
|
-
request = redis.lpop('stasis:requests')
|
22
|
-
|
23
|
-
if request
|
24
|
-
files = {}
|
25
|
-
request = Yajl::Parser.parse(request)
|
26
|
-
paths = request['paths']
|
27
|
-
|
28
|
-
unless request['force']
|
29
|
-
paths = request['paths'].reject do |path|
|
30
|
-
files[path] = redis.get("stasis:caches:#{root}:#{path}")
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
if paths.empty? && !request['paths'].empty?
|
35
|
-
new_files = {}
|
36
|
-
else
|
37
|
-
params = request['paths'] + [
|
38
|
-
{
|
39
|
-
:collect => request['return'] || request['force'],
|
40
|
-
:params => request['params'],
|
41
|
-
:write => request['write']
|
42
|
-
}
|
43
|
-
]
|
44
|
-
new_files = stasis.render(*params) || {}
|
45
|
-
end
|
46
|
-
|
47
|
-
if request['ttl']
|
48
|
-
new_files.each do |path, body|
|
49
|
-
key = "stasis:caches:#{root}:#{path}"
|
50
|
-
redis.set(key, body)
|
51
|
-
redis.expire(key, request['ttl'])
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
if request['return']
|
56
|
-
request['wait'] = true
|
57
|
-
end
|
58
|
-
|
59
|
-
if request['wait']
|
60
|
-
response = files.merge(new_files)
|
61
|
-
redis.publish(self.class.response_key(request['id']), Yajl::Encoder.encode(response))
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
65
|
-
rescue Interrupt
|
66
|
-
shut_down
|
67
|
-
rescue Exception => e
|
68
|
-
puts "\nError: #{e.message}"
|
69
|
-
puts "\t#{e.backtrace.join("\n\t")}"
|
70
|
-
retries += 1
|
71
|
-
shut_down if retries >= 10
|
72
|
-
retry
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
def shut_down
|
77
|
-
puts "\nShutting down Stasis server..."
|
78
|
-
exit
|
79
|
-
end
|
80
|
-
|
81
|
-
class <<self
|
82
|
-
def push(options)
|
83
|
-
options[:id] = Digest::SHA1.hexdigest("#{options['paths']}#{rand}")
|
84
|
-
redis_url = "redis://#{options.delete(:redis) || "localhost:6379/0"}"
|
85
|
-
response = nil
|
86
|
-
|
87
|
-
redis_1 = Redis.connect(:url => redis_url)
|
88
|
-
redis_2 = Redis.connect(:url => redis_url)
|
89
|
-
|
90
|
-
if options[:return] || options[:wait]
|
91
|
-
redis_1.subscribe(response_key(options[:id])) do |on|
|
92
|
-
on.subscribe do |channel, subscriptions|
|
93
|
-
redis_2.rpush("stasis:requests", Yajl::Encoder.encode(options))
|
94
|
-
end
|
95
|
-
|
96
|
-
on.message do |channel, message|
|
97
|
-
response = Yajl::Parser.parse(message)
|
98
|
-
redis_1.unsubscribe
|
99
|
-
end
|
100
|
-
end
|
101
|
-
else
|
102
|
-
redis_1.rpush("stasis:requests", Yajl::Encoder.encode(options))
|
103
|
-
end
|
104
|
-
|
105
|
-
redis_1.quit
|
106
|
-
redis_2.quit
|
107
|
-
|
108
|
-
response
|
109
|
-
end
|
110
|
-
|
111
|
-
def response_key(id)
|
112
|
-
"stasis:response:#{id}"
|
113
|
-
end
|
114
|
-
end
|
115
|
-
end
|
116
|
-
end
|
data/spec/stasis/server_spec.rb
DELETED
@@ -1,65 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'stasis/server'
|
3
|
-
|
4
|
-
describe Stasis::Server do
|
5
|
-
|
6
|
-
before(:all) do
|
7
|
-
generate
|
8
|
-
@thread = Thread.new do
|
9
|
-
Stasis::Server.new($fixture, :server => 'localhost:6379/0')
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
after(:all) do
|
14
|
-
@thread.kill
|
15
|
-
end
|
16
|
-
|
17
|
-
it "should change time.html" do
|
18
|
-
time = $files['time.html'].split("time")[1].strip
|
19
|
-
new_time = Stasis::Server.push(
|
20
|
-
:paths => [ 'time.html.haml' ],
|
21
|
-
:redis => 'localhost:6379/0',
|
22
|
-
:return => true
|
23
|
-
)['time.html.haml'].split("time")[1].strip
|
24
|
-
time.should_not == new_time
|
25
|
-
generate_files
|
26
|
-
new_time_from_file = $files['time.html'].split("time")[1].strip
|
27
|
-
new_time_from_file.should == new_time
|
28
|
-
new_time_from_file.should_not == time
|
29
|
-
end
|
30
|
-
|
31
|
-
it "should pass params" do
|
32
|
-
params = Stasis::Server.push(
|
33
|
-
:paths => [ 'params.html.haml' ],
|
34
|
-
:params => { :test => true },
|
35
|
-
:redis => 'localhost:6379/0',
|
36
|
-
:return => true
|
37
|
-
)['params.html.haml'].split("params")[1].strip
|
38
|
-
eval(params).should == { :test => true }
|
39
|
-
end
|
40
|
-
|
41
|
-
it "should expire after ttl" do
|
42
|
-
time = Stasis::Server.push(
|
43
|
-
:paths => [ 'time.html.haml' ],
|
44
|
-
:redis => 'localhost:6379/0',
|
45
|
-
:return => true,
|
46
|
-
:ttl => 1,
|
47
|
-
:write => false
|
48
|
-
)['time.html.haml'].split("time")[1].strip
|
49
|
-
time2 = Stasis::Server.push(
|
50
|
-
:paths => [ 'time.html.haml' ],
|
51
|
-
:redis => 'localhost:6379/0',
|
52
|
-
:return => true,
|
53
|
-
:write => false
|
54
|
-
)['time.html.haml'].split("time")[1].strip
|
55
|
-
time.should == time2
|
56
|
-
sleep 2
|
57
|
-
time3 = Stasis::Server.push(
|
58
|
-
:paths => [ 'time.html.haml' ],
|
59
|
-
:redis => 'localhost:6379/0',
|
60
|
-
:return => true,
|
61
|
-
:write => false
|
62
|
-
)['time.html.haml'].split("time")[1].strip
|
63
|
-
time2.should_not == time3
|
64
|
-
end
|
65
|
-
end
|