stasis 0.1.4 → 0.1.5

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