brochure 0.4.0 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -1,5 +1,5 @@
1
- Brochure
2
- ========
1
+ <img src="https://github.com/downloads/sstephenson/brochure/logo.png"
2
+ width="250" height="135" alt="Brochure">
3
3
 
4
4
  Brochure is a Rack application for serving static sites with ERB
5
5
  templates (or any of the many [template languages supported by
@@ -29,7 +29,7 @@ Sample `config.ru`:
29
29
  run Brochure.app(root)
30
30
 
31
31
 
32
- ## URL mapping and template rendering
32
+ ## Automatic URL mapping
33
33
 
34
34
  URLs are automatically mapped to template names:
35
35
 
@@ -37,10 +37,17 @@ URLs are automatically mapped to template names:
37
37
  * `/signup` &rarr; `templates/signup.html.erb`
38
38
  * `/help/` &rarr; `templates/help/index.html.erb`
39
39
 
40
+
41
+ ## Partials and helpers
42
+
40
43
  Templates can render partials. A partial is denoted by a leading
41
44
  underscore in its filename. So `<%= render "shared/header" %>` will
42
45
  render `templates/shared/_header.html.erb` inline.
43
46
 
47
+ Partials can `<%= yield %>` back to the templates that render
48
+ them. You can use this technique to extract common header and footer
49
+ markup into a single layout file, for example.
50
+
44
51
  Templates have access to the Rack environment via the `env` method and
45
52
  to the Brochure application via the `application`
46
53
  method. Additionally, a `Rack::Request` wrapper around the Rack
@@ -3,7 +3,7 @@ require "rack"
3
3
  require "tilt"
4
4
 
5
5
  module Brochure
6
- VERSION = "0.4.0"
6
+ VERSION = "0.5.0"
7
7
 
8
8
  autoload :Application, "brochure/application"
9
9
  autoload :Context, "brochure/context"
@@ -32,12 +32,29 @@ module Brochure
32
32
  Rack::Utils.escape_html(html)
33
33
  end
34
34
 
35
- def render(logical_path, locals = {})
35
+ def render(logical_path, locals = {}, &block)
36
36
  if partial = application.find_partial(logical_path, template.format_extension)
37
- partial.render(env, locals)
37
+ if block_given?
38
+ print partial.render(env, locals) { capture(&block) }
39
+ else
40
+ partial.render(env, locals)
41
+ end
38
42
  else
39
43
  raise TemplateNotFound, "no such template '#{logical_path}'"
40
44
  end
41
45
  end
46
+
47
+ def print(str)
48
+ @_out_buf << str
49
+ end
50
+
51
+ def capture
52
+ buf = ""
53
+ old_buf, @_out_buf = @_out_buf, buf
54
+ yield
55
+ buf
56
+ ensure
57
+ @_out_buf = old_buf
58
+ end
42
59
  end
43
60
  end
@@ -8,7 +8,7 @@ module Brochure
8
8
  end
9
9
 
10
10
  def template
11
- @template ||= Tilt.new(path)
11
+ @template ||= Tilt.new(path, nil, :outvar => '@_out_buf')
12
12
  end
13
13
 
14
14
  def engine_extension
@@ -29,8 +29,8 @@ module Brochure
29
29
  end
30
30
  end
31
31
 
32
- def render(env, locals = {})
33
- template.render(app.context_for(self, env), locals)
32
+ def render(env, locals = {}, &block)
33
+ template.render(app.context_for(self, env), locals, &block)
34
34
  end
35
35
  end
36
36
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: brochure
3
3
  version: !ruby/object:Gem::Version
4
- hash: 15
4
+ hash: 11
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 4
8
+ - 5
9
9
  - 0
10
- version: 0.4.0
10
+ version: 0.5.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Sam Stephenson
@@ -16,7 +16,7 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2010-10-27 00:00:00 -05:00
19
+ date: 2010-11-04 00:00:00 -05:00
20
20
  default_executable:
21
21
  dependencies:
22
22
  - !ruby/object:Gem::Dependency