tiny 0.2.6 → 0.2.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/lib/tiny.rb +8 -2
- data/lib/tiny/tag.rb +1 -1
- data/lib/tiny/version.rb +1 -1
- data/spec/erubis_spec.rb +8 -8
- data/spec/helpers_spec.rb +69 -70
- data/spec/integration/erb_spec.rb +10 -10
- data/spec/integration/haml_spec.rb +6 -6
- data/spec/integration/rails_spec.rb +4 -4
- data/spec/integration/sinatra_spec.rb +4 -6
- data/spec/spec_helper.rb +24 -19
- data/spec/widget_spec.rb +24 -23
- data/tiny.gemspec +6 -9
- metadata +31 -95
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 0a25f5692ba1dfbb0a1d206402dc725ef45c0493
|
4
|
+
data.tar.gz: c520045fc273ddb2257ce4e6fe6047bd3513da39
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 98043c8f9fd4d1cc7a19a06c11f5c617797228a854119636551490192aa7688a63fa374539ffb1cf6c015b1730b3625a0bd5a8173469490186068a02b003b15c
|
7
|
+
data.tar.gz: 020ea10b6826e86b562f0d99e1dcd58f998f70a721e5b18f2610911f30e2bdf5cf1a027ae6fa901d01490017f5474d2adf81ff9abad82e7b8705668ecba10133
|
data/lib/tiny.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'erubis'
|
2
2
|
require 'tilt'
|
3
|
-
require '
|
3
|
+
require 'cgi'
|
4
4
|
|
5
5
|
require 'tiny/version'
|
6
6
|
require 'tiny/erubis'
|
@@ -43,6 +43,8 @@ module Tiny
|
|
43
43
|
# # => <textarea disabled></textarea>
|
44
44
|
# html_tag(:textarea, :disabled => false)
|
45
45
|
# # => <textarea></textarea>
|
46
|
+
# html_tag(:textarea, :disabled => nil)
|
47
|
+
# # => <textarea></textarea>
|
46
48
|
#
|
47
49
|
# @example HTML-escaping
|
48
50
|
#
|
@@ -350,9 +352,13 @@ module Tiny
|
|
350
352
|
if value.respond_to?(:html_safe?) && value.html_safe?
|
351
353
|
value.to_s
|
352
354
|
else
|
353
|
-
|
355
|
+
escape_html value.to_s
|
354
356
|
end
|
355
357
|
end
|
358
|
+
|
359
|
+
def self.escape_html html
|
360
|
+
CGI.escapeHTML html.to_s
|
361
|
+
end
|
356
362
|
end
|
357
363
|
|
358
364
|
# Support for HTML markup generation for classes, can be included in
|
data/lib/tiny/tag.rb
CHANGED
data/lib/tiny/version.rb
CHANGED
data/spec/erubis_spec.rb
CHANGED
@@ -2,28 +2,28 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe 'markup helpers' do
|
4
4
|
it "should register tiny erubis templates for '.erubis' files" do
|
5
|
-
Tilt['erubis'].
|
6
|
-
Tilt['erb'].
|
5
|
+
expect(Tilt['erubis']).to eq(Tiny::Erubis::ErubisTemplate)
|
6
|
+
expect(Tilt['erb']).to eq(Tiny::Erubis::ErubisTemplate)
|
7
7
|
end
|
8
8
|
|
9
9
|
it 'should default to tiny erubis engine' do
|
10
10
|
engine = Tilt['erb'].new{}.instance_variable_get(:@engine)
|
11
|
-
engine.
|
11
|
+
expect(engine).to be_a Tiny::Erubis::Eruby
|
12
12
|
end
|
13
13
|
|
14
14
|
it 'should use tiny escaped erubis engine for escaping html' do
|
15
15
|
engine = Tilt['erb'].new(nil, :escape_html => true){}.instance_variable_get(:@engine)
|
16
|
-
engine.
|
16
|
+
expect(engine).to be_a Tiny::Erubis::EscapedEruby
|
17
17
|
end
|
18
18
|
|
19
19
|
it 'should escape html when passing :escape_html => true option' do
|
20
20
|
template = Tilt['erb'].new(nil, :escape_html => true) { %(<%= "<p>Hello World!</p>" %>) }
|
21
|
-
template.render.
|
21
|
+
expect(template.render).to eq("<p>Hello World!</p>")
|
22
22
|
end
|
23
23
|
|
24
24
|
it 'should not escape htmle when passing :escape_html => false option' do
|
25
25
|
template = Tilt['erb'].new(nil, :escape_html => false) { %(<%= "<p>Hello World!</p>" %>) }
|
26
|
-
template.render.
|
26
|
+
expect(template.render).to eq("<p>Hello World!</p>")
|
27
27
|
end
|
28
28
|
|
29
29
|
it 'should allow block with explicit output' do
|
@@ -33,7 +33,7 @@ describe 'markup helpers' do
|
|
33
33
|
<% end %>
|
34
34
|
ERB
|
35
35
|
end
|
36
|
-
template.render.
|
36
|
+
expect(template.render).to include "[1, 2]"
|
37
37
|
end
|
38
38
|
|
39
39
|
it 'should allow block with explicit output' do
|
@@ -43,6 +43,6 @@ describe 'markup helpers' do
|
|
43
43
|
<% end %>
|
44
44
|
ERB
|
45
45
|
end
|
46
|
-
template.render.
|
46
|
+
expect(template.render).to include "[1, 2]"
|
47
47
|
end
|
48
48
|
end
|
data/spec/helpers_spec.rb
CHANGED
@@ -14,45 +14,45 @@ describe 'markup helpers' do
|
|
14
14
|
before do
|
15
15
|
@output = tag(:li, :class => 'item', :id => 'hello') { text 'Hello' }
|
16
16
|
end
|
17
|
-
it { output.
|
18
|
-
it { output.
|
19
|
-
it { output.
|
20
|
-
it { output.
|
17
|
+
it { expect(output).to have_css 'li', :count => 1 }
|
18
|
+
it { expect(output).to have_css 'li', :text => "Hello" }
|
19
|
+
it { expect(output).to have_css 'li.item' }
|
20
|
+
it { expect(output).to have_css 'li#hello' }
|
21
21
|
end
|
22
22
|
|
23
23
|
it 'should not use blank attribute values' do
|
24
24
|
output = tag(:li, :class => [], :id => nil)
|
25
|
-
output.
|
25
|
+
expect(output).to eq("<li></li>")
|
26
26
|
end
|
27
27
|
|
28
28
|
it 'should not emit value for an atribute value of true' do
|
29
29
|
output = tag(:li, 'data-something' => true)
|
30
|
-
output.
|
30
|
+
expect(output).to eq("<li data-something></li>")
|
31
31
|
end
|
32
32
|
|
33
33
|
it 'should not emit value if value is false' do
|
34
34
|
output = tag(:li, 'data-something' => false)
|
35
|
-
output.
|
35
|
+
expect(output).to eq("<li></li>")
|
36
36
|
end
|
37
37
|
|
38
38
|
it 'should not allow passing text without #text' do
|
39
39
|
output = tag(:li) { 'Hello' }
|
40
|
-
output.
|
40
|
+
expect(output).to eq('<li></li>')
|
41
41
|
end
|
42
42
|
|
43
43
|
it 'should output multiple classes passing an array' do
|
44
44
|
output = tag(:li, :class => %w(item in-stock))
|
45
|
-
output.
|
45
|
+
expect(output).to eq('<li class="item in-stock"></li>')
|
46
46
|
end
|
47
47
|
|
48
48
|
it 'should allow passing content as string' do
|
49
|
-
tag(:h1, "Hello").
|
50
|
-
tag(:h1, "Hello", :class => 'main').
|
49
|
+
expect(tag(:h1, "Hello")).to eq("<h1>Hello</h1>")
|
50
|
+
expect(tag(:h1, "Hello", :class => 'main')).to eq(%{<h1 class="main">Hello</h1>})
|
51
51
|
end
|
52
52
|
|
53
53
|
it 'should escape attribute html' do
|
54
|
-
tag(:a, :href => '<script>').
|
55
|
-
tag(:a, :href => 'art©').
|
54
|
+
expect(tag(:a, :href => '<script>')).to eq('<a href="<script>"></a>')
|
55
|
+
expect(tag(:a, :href => 'art©')).to eq('<a href="art&copy"></a>')
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
@@ -61,9 +61,9 @@ describe 'markup helpers' do
|
|
61
61
|
before do
|
62
62
|
@output = tag(:div) { tag(:a) { text 'Hello' } }
|
63
63
|
end
|
64
|
-
it { output.
|
65
|
-
it { output.
|
66
|
-
it { output.
|
64
|
+
it { expect(output).to have_css 'div', :count => 1 }
|
65
|
+
it { expect(output).to have_css 'a', :count => 1 }
|
66
|
+
it { expect(output).to have_css 'div > a', :text => 'Hello' }
|
67
67
|
end
|
68
68
|
|
69
69
|
describe 'deeper blocks' do
|
@@ -75,12 +75,12 @@ describe 'markup helpers' do
|
|
75
75
|
end
|
76
76
|
end
|
77
77
|
end
|
78
|
-
it { output.
|
79
|
-
it { output.
|
80
|
-
it { output.
|
81
|
-
it { output.
|
82
|
-
it { output.
|
83
|
-
it { output.
|
78
|
+
it { expect(output).to have_css 'div', :count => 1 }
|
79
|
+
it { expect(output).to have_css 'a', :count => 1 }
|
80
|
+
it { expect(output).to have_css 'div > a' }
|
81
|
+
it { expect(output).to have_css 'div > a', :text => 'Hello' }
|
82
|
+
it { expect(output).to have_css 'img', :count => 1 }
|
83
|
+
it { expect(output).to have_css 'div > a > img' }
|
84
84
|
end
|
85
85
|
end
|
86
86
|
|
@@ -94,9 +94,9 @@ describe 'markup helpers' do
|
|
94
94
|
end
|
95
95
|
end
|
96
96
|
|
97
|
-
it { output.
|
98
|
-
it { output.
|
99
|
-
it { output.
|
97
|
+
it { expect(output).to have_css 'ul', :count => 1 }
|
98
|
+
it { expect(output).to have_css 'li', :count => 3 }
|
99
|
+
it { expect(output).to have_css 'ul > li', :count => 3 }
|
100
100
|
end
|
101
101
|
|
102
102
|
describe 'concatenation with text' do
|
@@ -108,12 +108,12 @@ describe 'markup helpers' do
|
|
108
108
|
end
|
109
109
|
end
|
110
110
|
|
111
|
-
it { output.
|
112
|
-
it { output.
|
113
|
-
it { output.
|
114
|
-
it { output.
|
115
|
-
it { output.
|
116
|
-
it { output.
|
111
|
+
it { expect(output).to have_css 'ul', :count => 1 }
|
112
|
+
it { expect(output).to have_css 'li', :count => 3 }
|
113
|
+
it { expect(output).to have_css 'ul > li', :count => 3 }
|
114
|
+
it { expect(output).to have_css 'ul > li', :text => 'One' }
|
115
|
+
it { expect(output).to have_css 'ul > li', :text => 'Two' }
|
116
|
+
it { expect(output).to have_css 'ul > li', :text => 'Three' }
|
117
117
|
end
|
118
118
|
|
119
119
|
describe 'nested' do
|
@@ -125,19 +125,19 @@ describe 'markup helpers' do
|
|
125
125
|
end
|
126
126
|
end
|
127
127
|
|
128
|
-
it { output.
|
129
|
-
it { output.
|
130
|
-
it { output.
|
131
|
-
it { output.
|
132
|
-
it { output.
|
133
|
-
it { output.
|
134
|
-
it { output.
|
128
|
+
it { expect(output).to have_css 'ul', :count => 1 }
|
129
|
+
it { expect(output).to have_css 'li', :count => 3 }
|
130
|
+
it { expect(output).to have_css 'ul > li', :count => 3 }
|
131
|
+
it { expect(output).to have_css 'a', :count => 3 }
|
132
|
+
it { expect(output).to have_css 'ul > li > a', :text => 'One' }
|
133
|
+
it { expect(output).to have_css 'ul > li > a', :text => 'Two' }
|
134
|
+
it { expect(output).to have_css 'ul > li > a', :text => 'Three' }
|
135
135
|
end
|
136
136
|
|
137
137
|
describe 'outside content block' do
|
138
138
|
it 'should not buffer contiguous tags' do
|
139
139
|
tag(:span)
|
140
|
-
tag(:a).
|
140
|
+
expect(tag(:a)).to eq('<a></a>')
|
141
141
|
end
|
142
142
|
end
|
143
143
|
end
|
@@ -145,12 +145,12 @@ describe 'markup helpers' do
|
|
145
145
|
describe 'text' do
|
146
146
|
it 'should escape text' do
|
147
147
|
@output = tag(:li){ text '&<>' }
|
148
|
-
@output.
|
148
|
+
expect(@output).to match(/&<>/)
|
149
149
|
end
|
150
150
|
|
151
151
|
it 'should allow not scaped text' do
|
152
152
|
@output = tag(:li){ append! '&<>' }
|
153
|
-
@output.
|
153
|
+
expect(@output).to match(/&<>/)
|
154
154
|
end
|
155
155
|
end
|
156
156
|
|
@@ -160,7 +160,7 @@ describe 'markup helpers' do
|
|
160
160
|
tag :li
|
161
161
|
tag :li
|
162
162
|
end
|
163
|
-
output.
|
163
|
+
expect(output).to eq("<ul>\n <li></li>\n <li></li>\n</ul>")
|
164
164
|
end
|
165
165
|
|
166
166
|
it 'should buffer with newlines after text' do
|
@@ -170,7 +170,7 @@ describe 'markup helpers' do
|
|
170
170
|
append! 'Hi'
|
171
171
|
end
|
172
172
|
end
|
173
|
-
output.
|
173
|
+
expect(output).to eq("<ul>\n <li>\n Hi\n Hi\n </li>\n</ul>")
|
174
174
|
end
|
175
175
|
end
|
176
176
|
end
|
@@ -178,44 +178,44 @@ describe 'markup helpers' do
|
|
178
178
|
describe 'special nodes' do
|
179
179
|
describe 'comments' do
|
180
180
|
it 'should emit comment' do
|
181
|
-
comment('Hello').
|
182
|
-
comment('Hello -- world').
|
183
|
-
comment('Hello -- -- world').
|
181
|
+
expect(comment('Hello')).to eq("<!-- Hello -->")
|
182
|
+
expect(comment('Hello -- world')).to eq("<!-- Hello - - world -->")
|
183
|
+
expect(comment('Hello -- -- world')).to eq("<!-- Hello - - - - world -->")
|
184
184
|
end
|
185
185
|
|
186
186
|
it 'should buffer comments' do
|
187
|
-
tag(:div) do
|
187
|
+
expect(tag(:div) do
|
188
188
|
comment 'foo'
|
189
189
|
comment 'bar'
|
190
|
-
end.
|
190
|
+
end).to eq("<div>\n <!-- foo -->\n <!-- bar -->\n</div>")
|
191
191
|
end
|
192
192
|
end
|
193
193
|
|
194
194
|
describe 'cdata' do
|
195
195
|
it 'should emit cdata' do
|
196
|
-
cdata('Hello').
|
196
|
+
expect(cdata('Hello')).to eq("<![CDATA[Hello]]>")
|
197
197
|
end
|
198
198
|
|
199
199
|
it 'should buffer cdata' do
|
200
|
-
tag(:div) do
|
200
|
+
expect(tag(:div) do
|
201
201
|
cdata('foo')
|
202
202
|
cdata('bar')
|
203
|
-
end.
|
203
|
+
end).to eq("<div>\n <![CDATA[foo]]>\n <![CDATA[bar]]>\n</div>")
|
204
204
|
end
|
205
205
|
|
206
206
|
it 'should not "escape" cdata terminator' do
|
207
|
-
cdata(']]>').
|
207
|
+
expect(cdata(']]>')).to eq("<![CDATA[]]]]><![CDATA[>]]>")
|
208
208
|
end
|
209
209
|
end
|
210
210
|
|
211
211
|
describe 'doctype' do
|
212
212
|
it 'should emit html5 doctype' do
|
213
|
-
doctype.
|
213
|
+
expect(doctype).to eq('<!DOCTYPE html>')
|
214
214
|
end
|
215
215
|
|
216
216
|
it 'should buffer doctype' do
|
217
217
|
output = with_buffer{ doctype and tag(:html) }
|
218
|
-
output.
|
218
|
+
expect(output).to eq("<!DOCTYPE html>\n<html></html>\n")
|
219
219
|
|
220
220
|
end
|
221
221
|
end
|
@@ -224,18 +224,18 @@ describe 'markup helpers' do
|
|
224
224
|
describe 'tag closing' do
|
225
225
|
describe 'void tags' do
|
226
226
|
it 'should define void tags' do
|
227
|
-
Tiny::HTML.void_tags.
|
227
|
+
expect(Tiny::HTML.void_tags).to eq(%w(area base br col hr img input link meta param embed))
|
228
228
|
end
|
229
229
|
|
230
230
|
Tiny::HTML.void_tags.each do |tag_name|
|
231
231
|
describe tag_name do
|
232
232
|
it 'sould autoclose' do
|
233
|
-
tag(tag_name).
|
234
|
-
tag(tag_name.to_sym).
|
233
|
+
expect(tag(tag_name)).to eq("<#{tag_name} />")
|
234
|
+
expect(tag(tag_name.to_sym)).to eq("<#{tag_name} />")
|
235
235
|
end
|
236
236
|
|
237
237
|
it 'should omit content' do
|
238
|
-
tag(tag_name){ text 'hi' }.
|
238
|
+
expect(tag(tag_name){ text 'hi' }).to eq("<#{tag_name} />")
|
239
239
|
end
|
240
240
|
end
|
241
241
|
end
|
@@ -253,13 +253,13 @@ describe 'markup helpers' do
|
|
253
253
|
ruby s samp script select small span strike strong style sub sup table
|
254
254
|
tbody td textarea tfoot th thead time title tr tt u ul var
|
255
255
|
)
|
256
|
-
Tiny::HTML.content_tags.
|
256
|
+
expect(Tiny::HTML.content_tags).to eq(tags)
|
257
257
|
end
|
258
258
|
|
259
259
|
Tiny::HTML.content_tags.each do |tag_name|
|
260
260
|
it "should not autoclose #{tag_name} if not empty" do
|
261
|
-
tag(tag_name).
|
262
|
-
tag(tag_name.to_sym).
|
261
|
+
expect(tag(tag_name)).to eq("<#{tag_name}></#{tag_name}>")
|
262
|
+
expect(tag(tag_name.to_sym)).to eq("<#{tag_name}></#{tag_name}>")
|
263
263
|
end
|
264
264
|
end
|
265
265
|
end
|
@@ -273,10 +273,9 @@ describe 'markup helpers' do
|
|
273
273
|
end
|
274
274
|
end
|
275
275
|
|
276
|
-
it { output.
|
277
|
-
it { output.
|
278
|
-
it { output.
|
279
|
-
it { output.should have_css 'body > h1', :text => "Hello Tiny!", :count => 1 }
|
276
|
+
it { expect(output).to have_title "Tiny Page!" }
|
277
|
+
it { expect(output).to have_css 'body', :count => 1 }
|
278
|
+
it { expect(output).to have_css 'body > h1', :text => "Hello Tiny!", :count => 1 }
|
280
279
|
end
|
281
280
|
|
282
281
|
describe 'dsl' do
|
@@ -285,25 +284,25 @@ describe 'markup helpers' do
|
|
285
284
|
describe 'void tags' do
|
286
285
|
Tiny::HTML.void_tags.each do |tag_name|
|
287
286
|
it "should render '#{tag_name}'" do
|
288
|
-
self.send(tag_name).
|
287
|
+
expect(self.send(tag_name)).to eq("<#{tag_name} />")
|
289
288
|
end
|
290
289
|
end
|
291
290
|
|
292
291
|
it "should render attributes" do
|
293
|
-
link(:href => "some.css").
|
292
|
+
expect(link(:href => "some.css")).to eq('<link href="some.css" />')
|
294
293
|
end
|
295
294
|
end
|
296
295
|
|
297
296
|
describe 'content tags' do
|
298
297
|
Tiny::HTML.content_tags.each do |tag_name|
|
299
298
|
it "should render '#{tag_name}'" do
|
300
|
-
self.send(tag_name).
|
299
|
+
expect(self.send(tag_name)).to eq("<#{tag_name}></#{tag_name}>")
|
301
300
|
end
|
302
301
|
end
|
303
302
|
|
304
303
|
it "should render content and attributes" do
|
305
|
-
h1(:class => 'main') { text "Hello" }.
|
306
|
-
h1("Hello", :class => 'main').
|
304
|
+
expect(h1(:class => 'main') { text "Hello" }).to eq(%{<h1 class="main">\n Hello\n</h1>})
|
305
|
+
expect(h1("Hello", :class => 'main')).to eq(%{<h1 class="main">Hello</h1>})
|
307
306
|
end
|
308
307
|
end
|
309
308
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
require 'spec_helper'
|
3
3
|
|
4
|
-
describe 'markup helpers' do
|
4
|
+
describe 'markup helpers', :type => :request do
|
5
5
|
include Tiny::Helpers
|
6
6
|
|
7
7
|
let(:output) do
|
@@ -15,7 +15,7 @@ describe 'markup helpers' do
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def check_block &block
|
18
|
-
erb_block?(block).
|
18
|
+
expect(erb_block?(block)).to be_truthy
|
19
19
|
end
|
20
20
|
|
21
21
|
it 'should determine block origin' do
|
@@ -23,29 +23,29 @@ describe 'markup helpers' do
|
|
23
23
|
end
|
24
24
|
|
25
25
|
it 'should capture erb' do
|
26
|
-
Tilt['erb'].new { '<% mk = with_buffer("Tiny!") do |s| %>Hello <%= s %><% end %><%- mk.
|
26
|
+
Tilt['erb'].new { '<% mk = with_buffer("Tiny!") do |s| %>Hello <%= s %><% end %><%- expect(mk).to eq "Hello Tiny!" %>' }.render(self)
|
27
27
|
end
|
28
28
|
|
29
29
|
it 'should emit tag' do
|
30
30
|
@output = Tilt['erb'].new { '<%= tag(:div) %>' }.render(self)
|
31
|
-
output.
|
31
|
+
expect(output).to have_css 'div', :count => 1
|
32
32
|
end
|
33
33
|
|
34
34
|
it 'should not buffer multiple tags' do
|
35
35
|
template = Tilt['erb'].new { '<%= yield %>' }
|
36
36
|
output = template.render(self) { tag(:span); tag(:a) }
|
37
|
-
output.
|
37
|
+
expect(output).to eq('<a></a>')
|
38
38
|
end
|
39
39
|
|
40
40
|
it 'should buffer multiple tags inside with_buffer block' do
|
41
41
|
template = Tilt['erb'].new { '<%= yield %>' }
|
42
42
|
output = template.render(self) { with_buffer { tag(:span); tag(:a) } }
|
43
|
-
output.
|
43
|
+
expect(output).to eq("<span></span>\n<a></a>\n")
|
44
44
|
end
|
45
45
|
|
46
46
|
it 'should concat erb block' do
|
47
47
|
template = Tilt['erb'].new(:outvar => '@_out_buf') { '<%= span do %>Hello<% end %>' }
|
48
|
-
template.render(self).
|
48
|
+
expect(template.render(self)).to eq("<span>\n Hello\n</span>\n")
|
49
49
|
end
|
50
50
|
|
51
51
|
describe 'block passing' do
|
@@ -61,9 +61,9 @@ describe 'markup helpers' do
|
|
61
61
|
ERB
|
62
62
|
end.render(self)
|
63
63
|
end
|
64
|
-
it { output.
|
65
|
-
it { output.
|
66
|
-
it { output.
|
64
|
+
it { expect(output).to have_css 'div', :count => 1 }
|
65
|
+
it { expect(output).to have_css 'a', :count => 1 }
|
66
|
+
it { expect(output).to have_css 'div > a', :text => 'Hello' }
|
67
67
|
end
|
68
68
|
|
69
69
|
describe 'nested' do
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
require 'spec_helper'
|
3
3
|
|
4
|
-
describe 'markup helpers' do
|
4
|
+
describe 'markup helpers', :type => :request do
|
5
5
|
include Tiny::Helpers
|
6
6
|
|
7
7
|
let(:output) do
|
@@ -11,7 +11,7 @@ describe 'markup helpers' do
|
|
11
11
|
describe 'tag' do
|
12
12
|
it 'should emit tag' do
|
13
13
|
@output = Tilt['haml'].new { '= tag(:div)' }.render(self)
|
14
|
-
output.
|
14
|
+
expect(output).to have_css 'div', :count => 1
|
15
15
|
end
|
16
16
|
|
17
17
|
it 'should emit haml block' do
|
@@ -21,7 +21,7 @@ describe 'markup helpers' do
|
|
21
21
|
Hello
|
22
22
|
HAML
|
23
23
|
end.render(self)
|
24
|
-
output.
|
24
|
+
expect(output).to have_css 'div', :text => "Hello", :count => 1
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
@@ -36,9 +36,9 @@ describe 'markup helpers' do
|
|
36
36
|
HAML
|
37
37
|
end.render(self)
|
38
38
|
end
|
39
|
-
it { output.
|
40
|
-
it { output.
|
41
|
-
it { output.
|
39
|
+
it { expect(output).to have_css 'div', :count => 1 }
|
40
|
+
it { expect(output).to have_css 'a', :count => 1 }
|
41
|
+
it { expect(output).to have_css 'div > a', :text => 'Hello' }
|
42
42
|
end
|
43
43
|
|
44
44
|
describe 'nested' do
|
@@ -16,27 +16,27 @@ describe 'Rails compatibility', :type => :request do
|
|
16
16
|
before do
|
17
17
|
visit '/erb'
|
18
18
|
end
|
19
|
-
|
19
|
+
it_behaves_like 'it renders my list'
|
20
20
|
end
|
21
21
|
|
22
22
|
describe 'using Tiny helpers from erb template' do
|
23
23
|
before do
|
24
24
|
visit '/erb_helpers'
|
25
25
|
end
|
26
|
-
|
26
|
+
it_behaves_like 'it renders my list'
|
27
27
|
end
|
28
28
|
|
29
29
|
describe 'using Tiny from haml template' do
|
30
30
|
before do
|
31
31
|
visit '/haml'
|
32
32
|
end
|
33
|
-
|
33
|
+
it_behaves_like 'it renders my list'
|
34
34
|
end
|
35
35
|
|
36
36
|
describe 'using Tiny helpers from haml template' do
|
37
37
|
before do
|
38
38
|
visit '/haml_helpers'
|
39
39
|
end
|
40
|
-
|
40
|
+
it_behaves_like 'it renders my list'
|
41
41
|
end
|
42
42
|
end
|
@@ -2,8 +2,6 @@ require 'spec_helper'
|
|
2
2
|
require "#{SUPPORT}/sinatra_app"
|
3
3
|
|
4
4
|
describe 'Sinatra compatibility', :type => :request do
|
5
|
-
include Rack::Test::Methods
|
6
|
-
|
7
5
|
let(:output) do
|
8
6
|
Capybara::Node::Simple.new(page.body)
|
9
7
|
end
|
@@ -16,27 +14,27 @@ describe 'Sinatra compatibility', :type => :request do
|
|
16
14
|
before do
|
17
15
|
visit '/erb'
|
18
16
|
end
|
19
|
-
|
17
|
+
it_behaves_like 'it renders my list'
|
20
18
|
end
|
21
19
|
|
22
20
|
describe 'using Tiny helpers from erb template' do
|
23
21
|
before do
|
24
22
|
visit '/erb_helpers'
|
25
23
|
end
|
26
|
-
|
24
|
+
it_behaves_like 'it renders my list'
|
27
25
|
end
|
28
26
|
|
29
27
|
describe 'using Tiny from haml template' do
|
30
28
|
before do
|
31
29
|
visit '/haml'
|
32
30
|
end
|
33
|
-
|
31
|
+
it_behaves_like 'it renders my list'
|
34
32
|
end
|
35
33
|
|
36
34
|
describe 'using Tiny helpers from haml template' do
|
37
35
|
before do
|
38
36
|
visit '/haml_helpers'
|
39
37
|
end
|
40
|
-
|
38
|
+
it_behaves_like 'it renders my list'
|
41
39
|
end
|
42
40
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -12,32 +12,37 @@ require 'tiny'
|
|
12
12
|
$:.unshift File.dirname(__FILE__)
|
13
13
|
require 'support/list_helper'
|
14
14
|
|
15
|
+
RSpec.configure do |config|
|
16
|
+
config.include Capybara::DSL, type: :request
|
17
|
+
config.include Rack::Test::Methods, type: :request
|
18
|
+
end
|
19
|
+
|
15
20
|
FIXTURES = "#{File.dirname __FILE__}/fixtures"
|
16
21
|
SUPPORT = "#{File.dirname __FILE__}/support"
|
17
22
|
|
18
23
|
shared_examples_for 'it renders my list' do
|
19
|
-
it { output.
|
20
|
-
it { output.
|
21
|
-
it { output.
|
22
|
-
it { output.
|
23
|
-
it { output.
|
24
|
-
it { output.
|
25
|
-
it { output.
|
26
|
-
it { output.
|
27
|
-
it { output.
|
28
|
-
it { output.
|
29
|
-
it { output.
|
30
|
-
it { output.
|
24
|
+
it { expect(output).to have_css 'ul', :count => 1 }
|
25
|
+
it { expect(output).to have_css 'li', :count => 3 }
|
26
|
+
it { expect(output).to have_css 'a', :count => 3 }
|
27
|
+
it { expect(output).to have_css 'span', :count => 3 }
|
28
|
+
it { expect(output).to have_css 'ul > li' }
|
29
|
+
it { expect(output).to have_css 'ul > li > a' }
|
30
|
+
it { expect(output).to have_css 'ul > li > a', :text => 'A' }
|
31
|
+
it { expect(output).to have_css 'ul > li > a > span', :text => '1' }
|
32
|
+
it { expect(output).to have_css 'ul > li > a', :text => 'B' }
|
33
|
+
it { expect(output).to have_css 'ul > li > a > span', :text => '2' }
|
34
|
+
it { expect(output).to have_css 'ul > li > a', :text => 'C' }
|
35
|
+
it { expect(output).to have_css 'ul > li > a > span', :text => '3' }
|
31
36
|
end
|
32
37
|
|
33
38
|
shared_examples_for 'it renders my form' do
|
34
|
-
it { output.
|
35
|
-
it { output.
|
36
|
-
it { output.
|
37
|
-
it { output.
|
38
|
-
it { output.
|
39
|
-
it { output.
|
40
|
-
it { output.
|
39
|
+
it { expect(output).to have_css 'form', :count => 1 }
|
40
|
+
it { expect(output).to have_css 'form[action="/login"]', :count => 1 }
|
41
|
+
it { expect(output).to have_css 'form > fieldset', :count => 1 }
|
42
|
+
it { expect(output).to have_css 'form > fieldset > label', :count => 1}
|
43
|
+
it { expect(output).to have_css 'form > fieldset > label[for=email]', :text => 'Email', :count => 1}
|
44
|
+
it { expect(output).to have_css 'form > fieldset > input', :count => 1}
|
45
|
+
it { expect(output).to have_css 'form > fieldset > input#email[type=text][value="email@example.com"]', :count => 1 }
|
41
46
|
end
|
42
47
|
|
43
48
|
class Renderer
|
data/spec/widget_spec.rb
CHANGED
@@ -16,8 +16,8 @@ describe Tiny::Widget do
|
|
16
16
|
append! '<div></div>'
|
17
17
|
end
|
18
18
|
end.new.to_html
|
19
|
-
output.
|
20
|
-
output.
|
19
|
+
expect(output).to eq("<div></div>\n")
|
20
|
+
expect(output).to be_html_safe
|
21
21
|
end
|
22
22
|
|
23
23
|
it 'should output content with block' do
|
@@ -28,7 +28,7 @@ describe Tiny::Widget do
|
|
28
28
|
append! "</div>"
|
29
29
|
end
|
30
30
|
end.new.to_html { text 'Hello' }
|
31
|
-
output.
|
31
|
+
expect(output).to eq("<div>\nHello\n</div>\n")
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
@@ -36,16 +36,17 @@ describe Tiny::Widget do
|
|
36
36
|
before do
|
37
37
|
@output = Class.new(Tiny::Widget) do
|
38
38
|
def markup
|
39
|
-
|
40
|
-
|
39
|
+
html {
|
40
|
+
head { title "Tiny Page!" }
|
41
|
+
body { h1 "Hello Tiny!" }
|
42
|
+
}
|
41
43
|
end
|
42
44
|
end.new.to_html
|
43
45
|
end
|
44
46
|
|
45
|
-
it { output.
|
46
|
-
it { output.
|
47
|
-
it { output.
|
48
|
-
it { output.should have_css 'body > h1', :text => "Hello Tiny!", :count => 1 }
|
47
|
+
it { expect(output).to have_title "Tiny Page!" }
|
48
|
+
it { expect(output).to have_css 'body', :count => 1 }
|
49
|
+
it { expect(output).to have_css 'body > h1', :text => "Hello Tiny!", :count => 1 }
|
49
50
|
end
|
50
51
|
|
51
52
|
describe 'content from different methods' do
|
@@ -70,10 +71,10 @@ describe Tiny::Widget do
|
|
70
71
|
end.new.to_html
|
71
72
|
end
|
72
73
|
|
73
|
-
it { output.
|
74
|
-
it { output.
|
75
|
-
it { output.
|
76
|
-
it { output.
|
74
|
+
it { expect(output).to have_css 'div#notices', :count => 1 }
|
75
|
+
it { expect(output).to have_css 'div#notices > h1', :text => "Notices", :count => 1 }
|
76
|
+
it { expect(output).to have_css 'div#content', :count => 1 }
|
77
|
+
it { expect(output).to have_css 'div#content > h1', :text => "Content", :count => 1 }
|
77
78
|
end
|
78
79
|
|
79
80
|
describe 'rendering a tag from outside' do
|
@@ -88,8 +89,8 @@ describe Tiny::Widget do
|
|
88
89
|
end.new.to_html { tag :h1, @title }
|
89
90
|
end
|
90
91
|
|
91
|
-
it { output.
|
92
|
-
it { output.
|
92
|
+
it { expect(output).to have_css 'div#content', :count => 1 }
|
93
|
+
it { expect(output).to have_css 'div#content > h1', :text => "Content", :count => 1 }
|
93
94
|
end
|
94
95
|
|
95
96
|
describe 'rendering a block from outside with concatenated tags' do
|
@@ -101,9 +102,9 @@ describe Tiny::Widget do
|
|
101
102
|
end.new.to_html { tag(:h1, "Title"); tag(:p, "Content") }
|
102
103
|
end
|
103
104
|
|
104
|
-
it { output.
|
105
|
-
it { output.
|
106
|
-
it { output.
|
105
|
+
it { expect(output).to have_css 'div#content', :count => 1 }
|
106
|
+
it { expect(output).to have_css 'div#content > h1', :text => "Title", :count => 1 }
|
107
|
+
it { expect(output).to have_css 'div#content > p', :text => "Content", :count => 1 }
|
107
108
|
end
|
108
109
|
|
109
110
|
describe 'rendering an erb block' do
|
@@ -116,16 +117,16 @@ describe Tiny::Widget do
|
|
116
117
|
@output = Tilt['erb'].new { '<%= widget.to_html do %><h1>Title</h1><p>Content</p><% end %>' }.render(self, :widget => widget)
|
117
118
|
end
|
118
119
|
|
119
|
-
it { output.
|
120
|
-
it { output.
|
121
|
-
it { output.
|
120
|
+
it { expect(output).to have_css 'div#content', :count => 1 }
|
121
|
+
it { expect(output).to have_css 'div#content > h1', :text => "Title", :count => 1 }
|
122
|
+
it { expect(output).to have_css 'div#content > p', :text => "Content", :count => 1 }
|
122
123
|
end
|
123
124
|
|
124
125
|
describe 'widget with no content overriden' do
|
125
126
|
it 'should raise not implemented' do
|
126
|
-
|
127
|
+
expect do
|
127
128
|
Class.new(Tiny::Widget).new.to_html
|
128
|
-
end.
|
129
|
+
end.to raise_error(NotImplementedError)
|
129
130
|
end
|
130
131
|
end
|
131
132
|
|
data/tiny.gemspec
CHANGED
@@ -18,15 +18,12 @@ Gem::Specification.new do |s|
|
|
18
18
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
19
|
s.require_paths = ["lib"]
|
20
20
|
|
21
|
-
s.add_runtime_dependency 'tilt'
|
22
|
-
s.add_runtime_dependency 'erubis'
|
23
|
-
s.add_runtime_dependency 'escape_utils' # simple api
|
21
|
+
s.add_runtime_dependency 'tilt'
|
22
|
+
s.add_runtime_dependency 'erubis'
|
24
23
|
|
25
|
-
s.add_development_dependency 'rspec', '~>
|
26
|
-
s.add_development_dependency '
|
27
|
-
s.add_development_dependency 'capybara', '~> 1.1'
|
24
|
+
s.add_development_dependency 'rspec', '~> 3.1.0'
|
25
|
+
s.add_development_dependency 'capybara', '~> 2.4.0'
|
28
26
|
s.add_development_dependency 'haml', '~> 3.1'
|
29
|
-
s.add_development_dependency '
|
30
|
-
s.add_development_dependency '
|
31
|
-
s.add_development_dependency 'rails', '~> 3.2'
|
27
|
+
s.add_development_dependency 'sinatra'
|
28
|
+
s.add_development_dependency 'rails', '~> 4.1.0'
|
32
29
|
end
|
metadata
CHANGED
@@ -1,176 +1,113 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tiny
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
5
|
-
prerelease:
|
4
|
+
version: 0.2.7
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Macario
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2014-11-06 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: tilt
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - ">="
|
20
18
|
- !ruby/object:Gem::Version
|
21
|
-
version: '
|
19
|
+
version: '0'
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - ">="
|
28
25
|
- !ruby/object:Gem::Version
|
29
|
-
version: '
|
26
|
+
version: '0'
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: erubis
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
|
-
requirements:
|
35
|
-
- - ~>
|
36
|
-
- !ruby/object:Gem::Version
|
37
|
-
version: '2.7'
|
38
|
-
type: :runtime
|
39
|
-
prerelease: false
|
40
|
-
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
30
|
requirements:
|
43
|
-
- -
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
version: '2.7'
|
46
|
-
- !ruby/object:Gem::Dependency
|
47
|
-
name: escape_utils
|
48
|
-
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
|
-
requirements:
|
51
|
-
- - ! '>='
|
31
|
+
- - ">="
|
52
32
|
- !ruby/object:Gem::Version
|
53
33
|
version: '0'
|
54
34
|
type: :runtime
|
55
35
|
prerelease: false
|
56
36
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
37
|
requirements:
|
59
|
-
- -
|
38
|
+
- - ">="
|
60
39
|
- !ruby/object:Gem::Version
|
61
40
|
version: '0'
|
62
41
|
- !ruby/object:Gem::Dependency
|
63
42
|
name: rspec
|
64
43
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
|
-
requirements:
|
67
|
-
- - ~>
|
68
|
-
- !ruby/object:Gem::Version
|
69
|
-
version: '2.11'
|
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: '2.11'
|
78
|
-
- !ruby/object:Gem::Dependency
|
79
|
-
name: nokogiri
|
80
|
-
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
44
|
requirements:
|
83
|
-
- -
|
45
|
+
- - "~>"
|
84
46
|
- !ruby/object:Gem::Version
|
85
|
-
version: 1.
|
47
|
+
version: 3.1.0
|
86
48
|
type: :development
|
87
49
|
prerelease: false
|
88
50
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
51
|
requirements:
|
91
|
-
- -
|
52
|
+
- - "~>"
|
92
53
|
- !ruby/object:Gem::Version
|
93
|
-
version: 1.
|
54
|
+
version: 3.1.0
|
94
55
|
- !ruby/object:Gem::Dependency
|
95
56
|
name: capybara
|
96
57
|
requirement: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
58
|
requirements:
|
99
|
-
- - ~>
|
59
|
+
- - "~>"
|
100
60
|
- !ruby/object:Gem::Version
|
101
|
-
version:
|
61
|
+
version: 2.4.0
|
102
62
|
type: :development
|
103
63
|
prerelease: false
|
104
64
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
65
|
requirements:
|
107
|
-
- - ~>
|
66
|
+
- - "~>"
|
108
67
|
- !ruby/object:Gem::Version
|
109
|
-
version:
|
68
|
+
version: 2.4.0
|
110
69
|
- !ruby/object:Gem::Dependency
|
111
70
|
name: haml
|
112
71
|
requirement: !ruby/object:Gem::Requirement
|
113
|
-
none: false
|
114
72
|
requirements:
|
115
|
-
- - ~>
|
73
|
+
- - "~>"
|
116
74
|
- !ruby/object:Gem::Version
|
117
75
|
version: '3.1'
|
118
76
|
type: :development
|
119
77
|
prerelease: false
|
120
78
|
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
none: false
|
122
79
|
requirements:
|
123
|
-
- - ~>
|
80
|
+
- - "~>"
|
124
81
|
- !ruby/object:Gem::Version
|
125
82
|
version: '3.1'
|
126
|
-
- !ruby/object:Gem::Dependency
|
127
|
-
name: tilt
|
128
|
-
requirement: !ruby/object:Gem::Requirement
|
129
|
-
none: false
|
130
|
-
requirements:
|
131
|
-
- - ~>
|
132
|
-
- !ruby/object:Gem::Version
|
133
|
-
version: '1.3'
|
134
|
-
type: :development
|
135
|
-
prerelease: false
|
136
|
-
version_requirements: !ruby/object:Gem::Requirement
|
137
|
-
none: false
|
138
|
-
requirements:
|
139
|
-
- - ~>
|
140
|
-
- !ruby/object:Gem::Version
|
141
|
-
version: '1.3'
|
142
83
|
- !ruby/object:Gem::Dependency
|
143
84
|
name: sinatra
|
144
85
|
requirement: !ruby/object:Gem::Requirement
|
145
|
-
none: false
|
146
86
|
requirements:
|
147
|
-
- -
|
87
|
+
- - ">="
|
148
88
|
- !ruby/object:Gem::Version
|
149
89
|
version: '0'
|
150
90
|
type: :development
|
151
91
|
prerelease: false
|
152
92
|
version_requirements: !ruby/object:Gem::Requirement
|
153
|
-
none: false
|
154
93
|
requirements:
|
155
|
-
- -
|
94
|
+
- - ">="
|
156
95
|
- !ruby/object:Gem::Version
|
157
96
|
version: '0'
|
158
97
|
- !ruby/object:Gem::Dependency
|
159
98
|
name: rails
|
160
99
|
requirement: !ruby/object:Gem::Requirement
|
161
|
-
none: false
|
162
100
|
requirements:
|
163
|
-
- - ~>
|
101
|
+
- - "~>"
|
164
102
|
- !ruby/object:Gem::Version
|
165
|
-
version:
|
103
|
+
version: 4.1.0
|
166
104
|
type: :development
|
167
105
|
prerelease: false
|
168
106
|
version_requirements: !ruby/object:Gem::Requirement
|
169
|
-
none: false
|
170
107
|
requirements:
|
171
|
-
- - ~>
|
108
|
+
- - "~>"
|
172
109
|
- !ruby/object:Gem::Version
|
173
|
-
version:
|
110
|
+
version: 4.1.0
|
174
111
|
description: Tiny is a tiny framework agnostic markup builder, useful for building
|
175
112
|
view helpers on inclusion only adds three public methods, tag (for generating html
|
176
113
|
tags), capture and concat, works as pure ruby and with erb and haml
|
@@ -180,8 +117,8 @@ executables: []
|
|
180
117
|
extensions: []
|
181
118
|
extra_rdoc_files: []
|
182
119
|
files:
|
183
|
-
- .gitignore
|
184
|
-
- .rspec
|
120
|
+
- ".gitignore"
|
121
|
+
- ".rspec"
|
185
122
|
- Gemfile
|
186
123
|
- README.md
|
187
124
|
- Rakefile
|
@@ -210,27 +147,26 @@ files:
|
|
210
147
|
- tiny.gemspec
|
211
148
|
homepage: ''
|
212
149
|
licenses: []
|
150
|
+
metadata: {}
|
213
151
|
post_install_message:
|
214
152
|
rdoc_options: []
|
215
153
|
require_paths:
|
216
154
|
- lib
|
217
155
|
required_ruby_version: !ruby/object:Gem::Requirement
|
218
|
-
none: false
|
219
156
|
requirements:
|
220
|
-
- -
|
157
|
+
- - ">="
|
221
158
|
- !ruby/object:Gem::Version
|
222
159
|
version: '0'
|
223
160
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
224
|
-
none: false
|
225
161
|
requirements:
|
226
|
-
- -
|
162
|
+
- - ">="
|
227
163
|
- !ruby/object:Gem::Version
|
228
164
|
version: '0'
|
229
165
|
requirements: []
|
230
166
|
rubyforge_project: tiny
|
231
|
-
rubygems_version:
|
167
|
+
rubygems_version: 2.2.2
|
232
168
|
signing_key:
|
233
|
-
specification_version:
|
169
|
+
specification_version: 4
|
234
170
|
summary: Framework agnostic markup builder, useful for building view helpers or as
|
235
171
|
a micro templating dsl, plays nice with erb and haml
|
236
172
|
test_files:
|