middleman 0.2.5 → 0.2.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -7,3 +7,6 @@
7
7
  [submodule "vendor/rack-test"]
8
8
  path = vendor/rack-test
9
9
  url = git://github.com/brynary/rack-test.git
10
+ [submodule "vendor/sinatra-content-for"]
11
+ path = vendor/sinatra-content-for
12
+ url = git://github.com/foca/sinatra-content-for.git
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.5
1
+ 0.2.6
@@ -9,6 +9,9 @@ require File.join(File.dirname(__FILE__), '..', 'vendor', 'sinatra-markaby', 'li
9
9
  # Include maruku support
10
10
  require File.join(File.dirname(__FILE__), '..', 'vendor', 'sinatra-maruku', 'lib', 'sinatra', 'maruku')
11
11
 
12
+ # Include content_for support
13
+ require File.join(File.dirname(__FILE__), '..', 'vendor', 'sinatra-content-for', 'lib', 'sinatra', 'content_for')
14
+
12
15
  class Middleman < Sinatra::Base
13
16
  set :app_file, __FILE__
14
17
  set :static, true
@@ -17,6 +20,13 @@ class Middleman < Sinatra::Base
17
20
 
18
21
  helpers Sinatra::Markaby
19
22
  helpers Sinatra::Maruku
23
+ helpers Sinatra::ContentFor
24
+
25
+ helpers do
26
+ def link_to(title, url="#")
27
+ %Q{<a href="#{url}">#{title}</a>}
28
+ end
29
+ end
20
30
 
21
31
  def self.run!(options={}, &block)
22
32
  set options
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{middleman}
5
- s.version = "0.2.5"
5
+ s.version = "0.2.6"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Thomas Reynolds"]
@@ -64,6 +64,12 @@ Gem::Specification.new do |s|
64
64
  "vendor/rack-test/spec/rcov.opts",
65
65
  "vendor/rack-test/spec/spec.opts",
66
66
  "vendor/rack-test/spec/spec_helper.rb",
67
+ "vendor/sinatra-content-for/LICENSE",
68
+ "vendor/sinatra-content-for/README.rdoc",
69
+ "vendor/sinatra-content-for/Rakefile",
70
+ "vendor/sinatra-content-for/lib/sinatra/content_for.rb",
71
+ "vendor/sinatra-content-for/sinatra-content-for.gemspec",
72
+ "vendor/sinatra-content-for/test/content_for_test.rb",
67
73
  "vendor/sinatra-markaby/CHANGES",
68
74
  "vendor/sinatra-markaby/LICENSE",
69
75
  "vendor/sinatra-markaby/README.rdoc",
@@ -0,0 +1,22 @@
1
+ (The MIT License)
2
+
3
+ Copyright (c) 2008-2009 Nicolas Sanguinetti, entp.com
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ 'Software'), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
20
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
21
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
22
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,49 @@
1
+ = ContentFor
2
+
3
+ Small extension for the Sinatra[http://sinatrarb.com] web framework
4
+ that allows you to use the following helpers in your views:
5
+
6
+ <% content_for :some_key do %>
7
+ <chunk of="html">...</chunk>
8
+ <% end %>
9
+
10
+ <% yield_content :some_key %>
11
+
12
+ This allows you to capture blocks inside views to be rendered later
13
+ in this request. For example, to populate different parts of your
14
+ layout from your view.
15
+
16
+ When using this with the Haml rendering engine, you should do the
17
+ following:
18
+
19
+ - content_for :some_key do
20
+ %chunk{ :of => "html" } ...
21
+
22
+ = yield_content :some_key
23
+
24
+ <b>Note</b> that with ERB <tt>yield_content</tt> is called <b>without</b>
25
+ an '=' block (<tt><%= %></tt>), but with Haml it uses <tt>= yield_content</tt>.
26
+
27
+ Using an '=' block in ERB will output the content twice for each block,
28
+ so if you have problems with that, make sure to check for this.
29
+
30
+ == Usage
31
+
32
+ If you're writing "classic" style apps, then requring
33
+ <tt>sinatra/content_for</tt> should be enough. If you're writing
34
+ "classy" apps, then you also need to call
35
+ <tt>helpers Sinatra::ContentFor</tt> in your app definition.
36
+
37
+ == And how is this useful?
38
+
39
+ For example, some of your views might need a few javascript tags and
40
+ stylesheets, but you don't want to force this files in all your pages.
41
+ Then you can put <tt><% yield_content :scripts_and_styles %></tt> on
42
+ your layout, inside the <head> tag, and each view can call
43
+ <tt>content_for</tt> setting the appropriate set of tags that should
44
+ be added to the layout.
45
+
46
+ == Credits
47
+
48
+ Code by foca[http://github.com/foca], inspired on the Ruby on Rails
49
+ helpers with the same name. Haml support by mattly[http://github.com/mattly].
@@ -0,0 +1,33 @@
1
+ require "rake/testtask"
2
+
3
+ begin
4
+ require "hanna/rdoctask"
5
+ rescue LoadError
6
+ require "rake/rdoctask"
7
+ end
8
+
9
+ begin
10
+ require "metric_fu"
11
+ rescue LoadError
12
+ end
13
+
14
+ begin
15
+ require "mg"
16
+ MG.new("sinatra-content-for.gemspec")
17
+ rescue LoadError
18
+ end
19
+
20
+ desc "Default: run all tests"
21
+ task :default => :test
22
+
23
+ desc "Run library tests"
24
+ Rake::TestTask.new do |t|
25
+ t.test_files = FileList['test/**/*_test.rb']
26
+ end
27
+
28
+ Rake::RDocTask.new do |rd|
29
+ rd.main = "README"
30
+ rd.title = "Documentation for ContentFor"
31
+ rd.rdoc_files.include("README.rdoc", "LICENSE", "lib/**/*.rb")
32
+ rd.rdoc_dir = "doc"
33
+ end
@@ -0,0 +1,58 @@
1
+ module Sinatra
2
+ module ContentFor
3
+ # Capture a block of content to be rendered later. For example:
4
+ #
5
+ # <% content_for :head do %>
6
+ # <script type="text/javascript" src="/foo.js"></script>
7
+ # <% end %>
8
+ #
9
+ # You can call +content_for+ multiple times with the same key
10
+ # (in the example +:head+), and when you render the blocks for
11
+ # that key all of them will be rendered, in the same order you
12
+ # captured them.
13
+ #
14
+ # Your blocks can also receive values, which are passed to them
15
+ # by <tt>yield_content</tt>
16
+ def content_for(key, &block)
17
+ content_blocks[key.to_sym] << block
18
+ end
19
+
20
+ # Render the captured blocks for a given key. For example:
21
+ #
22
+ # <head>
23
+ # <title>Example</title>
24
+ # <% yield_content :head %>
25
+ # </head>
26
+ #
27
+ # Would render everything you declared with <tt>content_for
28
+ # :head</tt> before closing the <tt><head></tt> tag.
29
+ #
30
+ # You can also pass values to the content blocks by passing them
31
+ # as arguments after the key:
32
+ #
33
+ # <% yield_content :head, 1, 2 %>
34
+ #
35
+ # Would pass <tt>1</tt> and <tt>2</tt> to all the blocks registered
36
+ # for <tt>:head</tt>.
37
+ #
38
+ # *NOTICE* that you call this without an <tt>=</tt> sign. IE,
39
+ # in a <tt><% %></tt> block, and not in a <tt><%= %></tt> block.
40
+ def yield_content(key, *args)
41
+ content_blocks[key.to_sym].map do |content|
42
+ if respond_to?(:block_is_haml?) && block_is_haml?(content)
43
+ capture_haml(*args, &content)
44
+ else
45
+ content.call(*args)
46
+ end
47
+ end.join
48
+ end
49
+
50
+ private
51
+
52
+ def content_blocks
53
+ @content_blocks ||= Hash.new {|h,k| h[k] = [] }
54
+ end
55
+ end
56
+
57
+ helpers ContentFor
58
+ end
@@ -0,0 +1,34 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = "sinatra-content-for"
3
+ s.version = "0.2"
4
+ s.date = "2009-05-09"
5
+
6
+ s.description = "Small Sinatra extension to add a content_for helper similar to Rails'"
7
+ s.summary = "Small Sinatra extension to add a content_for helper similar to Rails'"
8
+ s.homepage = "http://sinatrarb.com"
9
+
10
+ s.authors = ["Nicolás Sanguinetti"]
11
+ s.email = "contacto@nicolassanguinetti.info"
12
+
13
+ s.require_paths = ["lib"]
14
+ s.rubyforge_project = "sinatra-ditties"
15
+ s.has_rdoc = true
16
+ s.rubygems_version = "1.3.1"
17
+
18
+ s.add_dependency "sinatra"
19
+
20
+ if s.respond_to?(:add_development_dependency)
21
+ s.add_development_dependency "contest"
22
+ s.add_development_dependency "sr-mg"
23
+ s.add_development_dependency "redgreen"
24
+ end
25
+
26
+ s.files = %w[
27
+ .gitignore
28
+ LICENSE
29
+ README.rdoc
30
+ sinatra-content-for.gemspec
31
+ lib/sinatra/content_for.rb
32
+ test/content_for_test.rb
33
+ ]
34
+ end
@@ -0,0 +1,156 @@
1
+ ENV['RACK_ENV'] = 'test'
2
+
3
+ begin
4
+ require 'rack'
5
+ rescue LoadError
6
+ require 'rubygems'
7
+ require 'rack'
8
+ end
9
+
10
+ require 'contest'
11
+ require 'sinatra/test'
12
+ require 'haml'
13
+
14
+ begin
15
+ require 'redgreen'
16
+ rescue LoadError
17
+ end
18
+
19
+ require File.dirname(__FILE__) + '/../lib/sinatra/content_for'
20
+
21
+ Sinatra::Base.set :environment, :test
22
+
23
+ module Sinatra
24
+ class Base
25
+ set :environment, :test
26
+ helpers ContentFor
27
+ end
28
+ end
29
+
30
+ class Test::Unit::TestCase
31
+ include Sinatra::Test
32
+
33
+ class << self
34
+ alias_method :it, :test
35
+ end
36
+
37
+ def mock_app(base=Sinatra::Base, &block)
38
+ @app = Sinatra.new(base, &block)
39
+ end
40
+ end
41
+
42
+ class ContentForTest < Test::Unit::TestCase
43
+ context 'using erb' do
44
+ def erb_app(view)
45
+ mock_app {
46
+ layout { '<% yield_content :foo %>' }
47
+ get('/') { erb view }
48
+ }
49
+ end
50
+
51
+ it 'renders blocks declared with the same key you use when rendering' do
52
+ erb_app '<% content_for :foo do %>foo<% end %>'
53
+
54
+ get '/'
55
+ assert ok?
56
+ assert_equal 'foo', body
57
+ end
58
+
59
+ it 'does not render a block with a different key' do
60
+ erb_app '<% content_for :bar do %>bar<% end %>'
61
+
62
+ get '/'
63
+ assert ok?
64
+ assert_equal '', body
65
+ end
66
+
67
+ it 'renders multiple blocks with the same key' do
68
+ erb_app <<-erb_snippet
69
+ <% content_for :foo do %>foo<% end %>
70
+ <% content_for :foo do %>bar<% end %>
71
+ <% content_for :baz do %>WON'T RENDER ME<% end %>
72
+ <% content_for :foo do %>baz<% end %>
73
+ erb_snippet
74
+
75
+ get '/'
76
+ assert ok?
77
+ assert_equal 'foobarbaz', body
78
+ end
79
+
80
+ it 'passes values to the blocks' do
81
+ mock_app {
82
+ layout { '<% yield_content :foo, 1, 2 %>' }
83
+ get('/') { erb '<% content_for :foo do |a, b| %><i><%= a %></i> <%= b %><% end %>' }
84
+ }
85
+
86
+ get '/'
87
+ assert ok?
88
+ assert_equal '<i>1</i> 2', body
89
+ end
90
+ end
91
+
92
+ context 'with haml' do
93
+ def haml_app(view)
94
+ mock_app {
95
+ layout { '= yield_content :foo' }
96
+ get('/') { haml view }
97
+ }
98
+ end
99
+
100
+ it 'renders blocks declared with the same key you use when rendering' do
101
+ haml_app <<-haml_end
102
+ - content_for :foo do
103
+ foo
104
+ haml_end
105
+
106
+ get '/'
107
+ assert ok?
108
+ assert_equal "foo\n", body
109
+ end
110
+
111
+ it 'does not render a block with a different key' do
112
+ haml_app <<-haml_end
113
+ - content_for :bar do
114
+ bar
115
+ haml_end
116
+
117
+ get '/'
118
+ assert ok?
119
+ assert_equal "\n", body
120
+ end
121
+
122
+ it 'renders multiple blocks with the same key' do
123
+ haml_app <<-haml_end
124
+ - content_for :foo do
125
+ foo
126
+ - content_for :foo do
127
+ bar
128
+ - content_for :baz do
129
+ WON'T RENDER ME
130
+ - content_for :foo do
131
+ baz
132
+ haml_end
133
+
134
+ get '/'
135
+ assert ok?
136
+ assert_equal "foo\nbar\nbaz\n", body
137
+ end
138
+
139
+ it 'passes values to the blocks' do
140
+ mock_app {
141
+ layout { '= yield_content :foo, 1, 2' }
142
+ get('/') {
143
+ haml <<-haml_end
144
+ - content_for :foo do |a, b|
145
+ %i= a
146
+ =b
147
+ haml_end
148
+ }
149
+ }
150
+
151
+ get '/'
152
+ assert ok?
153
+ assert_equal "<i>1</i>\n2\n", body
154
+ end
155
+ end
156
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: middleman
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.5
4
+ version: 0.2.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thomas Reynolds
@@ -134,6 +134,12 @@ files:
134
134
  - vendor/rack-test/spec/rcov.opts
135
135
  - vendor/rack-test/spec/spec.opts
136
136
  - vendor/rack-test/spec/spec_helper.rb
137
+ - vendor/sinatra-content-for/LICENSE
138
+ - vendor/sinatra-content-for/README.rdoc
139
+ - vendor/sinatra-content-for/Rakefile
140
+ - vendor/sinatra-content-for/lib/sinatra/content_for.rb
141
+ - vendor/sinatra-content-for/sinatra-content-for.gemspec
142
+ - vendor/sinatra-content-for/test/content_for_test.rb
137
143
  - vendor/sinatra-markaby/CHANGES
138
144
  - vendor/sinatra-markaby/LICENSE
139
145
  - vendor/sinatra-markaby/README.rdoc