stasis 0.1.4 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -209,7 +209,7 @@ Change the public (destination) directory:
209
209
 
210
210
  ### Ruby Library
211
211
 
212
- Instanciate a `Stasis` object:
212
+ Instantiate a `Stasis` object:
213
213
 
214
214
  stasis = Stasis.new('/path/to/project/root')
215
215
 
@@ -282,6 +282,9 @@ Push to the server (in Ruby):
282
282
  # Return rendered templates (false by default)
283
283
  :return => false,
284
284
 
285
+ # Cache ttl for returned templates (nil by default)
286
+ :ttl => nil,
287
+
285
288
  # Block until templates generate (false by default)
286
289
  :wait => false,
287
290
 
data/config/gemspec.yml CHANGED
@@ -1,5 +1,5 @@
1
1
  name: stasis
2
- version: 0.1.4
2
+ version: 0.1.5
3
3
  authors:
4
4
  - Winton Welsh
5
5
  email: mail@wintoni.us
data/lib/stasis/server.rb CHANGED
@@ -19,22 +19,39 @@ class Stasis
19
19
  request = redis.lpop('stasis:requests')
20
20
 
21
21
  if request
22
+ files = {}
22
23
  request = Yajl::Parser.parse(request)
23
24
 
24
- params = request['paths'] + [
25
- {
26
- :collect => request['return'],
27
- :write => request['write']
28
- }
29
- ]
30
- files = stasis.render(*params)
25
+ paths = request['paths'].reject do |path|
26
+ files[path] = redis.get("stasis:caches:#{root}:#{path}")
27
+ end
28
+
29
+ if paths.empty? && !request['paths'].empty?
30
+ new_files = {}
31
+ else
32
+ params = request['paths'] + [
33
+ {
34
+ :collect => request['return'],
35
+ :write => request['write']
36
+ }
37
+ ]
38
+ new_files = stasis.render(*params)
39
+ end
40
+
41
+ if request['ttl']
42
+ new_files.each do |path, body|
43
+ key = "stasis:caches:#{root}:#{path}"
44
+ redis.set(key, body)
45
+ redis.expire(key, request['ttl'])
46
+ end
47
+ end
31
48
 
32
- if request['return'] && request['paths'] && !request['paths'].empty?
49
+ if request['return']
33
50
  request['wait'] = true
34
51
  end
35
52
 
36
53
  if request['wait']
37
- response = files
54
+ response = files.merge(new_files)
38
55
  redis.publish(self.class.response_key(request['id']), Yajl::Encoder.encode(response))
39
56
  end
40
57
  end
@@ -26,4 +26,29 @@ describe Stasis::Server do
26
26
  new_time_from_file.should == new_time
27
27
  new_time_from_file.should_not == time
28
28
  end
29
+
30
+ it "should expire after ttl" do
31
+ time = Stasis::Server.push(
32
+ :paths => [ 'time.html.haml' ],
33
+ :redis => 'localhost:6379/0',
34
+ :return => true,
35
+ :ttl => 1,
36
+ :write => false
37
+ )['time.html.haml'].split("time")[1].strip
38
+ time2 = Stasis::Server.push(
39
+ :paths => [ 'time.html.haml' ],
40
+ :redis => 'localhost:6379/0',
41
+ :return => true,
42
+ :write => false
43
+ )['time.html.haml'].split("time")[1].strip
44
+ time.should == time2
45
+ sleep 2
46
+ time3 = Stasis::Server.push(
47
+ :paths => [ 'time.html.haml' ],
48
+ :redis => 'localhost:6379/0',
49
+ :return => true,
50
+ :write => false
51
+ )['time.html.haml'].split("time")[1].strip
52
+ time2.should_not == time3
53
+ end
29
54
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stasis
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-08-26 00:00:00.000000000Z
12
+ date: 2011-09-09 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: directory_watcher
16
- requirement: &70320984055060 !ruby/object:Gem::Requirement
16
+ requirement: &70211207276660 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 1.4.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70320984055060
24
+ version_requirements: *70211207276660
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: redis
27
- requirement: &70320984054600 !ruby/object:Gem::Requirement
27
+ requirement: &70211207276200 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 2.2.1
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70320984054600
35
+ version_requirements: *70211207276200
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: slop
38
- requirement: &70320984054160 !ruby/object:Gem::Requirement
38
+ requirement: &70211207275760 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 2.1.0
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70320984054160
46
+ version_requirements: *70211207275760
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: tilt
49
- requirement: &70320984053720 !ruby/object:Gem::Requirement
49
+ requirement: &70211207275320 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '1.3'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *70320984053720
57
+ version_requirements: *70211207275320
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: yajl-ruby
60
- requirement: &70320984053280 !ruby/object:Gem::Requirement
60
+ requirement: &70211207274880 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ~>
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: 0.8.2
66
66
  type: :runtime
67
67
  prerelease: false
68
- version_requirements: *70320984053280
68
+ version_requirements: *70211207274880
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rake
71
- requirement: &70320984052700 !ruby/object:Gem::Requirement
71
+ requirement: &70211207274300 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: 0.8.7
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *70320984052700
79
+ version_requirements: *70211207274300
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: rspec
82
- requirement: &70320984052260 !ruby/object:Gem::Requirement
82
+ requirement: &70211207273860 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ~>
@@ -87,7 +87,7 @@ dependencies:
87
87
  version: '1.0'
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *70320984052260
90
+ version_requirements: *70211207273860
91
91
  description: Stasis is a dynamic framework for static sites.
92
92
  email: mail@wintoni.us
93
93
  executables: