garterbelt 0.0.6 → 0.0.7
Sign up to get free protection for your applications and to get access to all the features.
- data/TODO +8 -2
- data/VERSION +1 -1
- data/garterbelt.gemspec +4 -1
- data/lib/renderers/text.rb +3 -6
- data/spec/integration/expectations/unescaping_view.html +3 -0
- data/spec/integration/templates/unescaping_view.rb +12 -0
- data/spec/integration/view_spec.rb +7 -0
- data/spec/performance/vs_erector.rb +24 -6
- metadata +6 -3
data/TODO
CHANGED
@@ -1,5 +1,11 @@
|
|
1
1
|
increase performance ~10%
|
2
2
|
partial passes down params from parent view
|
3
|
-
anonymous
|
3
|
+
anonymous views
|
4
4
|
|
5
|
-
|
5
|
+
rails style helpers
|
6
|
+
|
7
|
+
render styles
|
8
|
+
- pretty: current and default
|
9
|
+
- compact: argument content in the tags, not new line
|
10
|
+
- minified: no new lines or indenting
|
11
|
+
- text only: no tags, appropriate new lines according to tag type
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.7
|
data/garterbelt.gemspec
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{garterbelt}
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.7"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Kane Baccigalupi"]
|
@@ -44,12 +44,14 @@ Gem::Specification.new do |s|
|
|
44
44
|
"lib/view.rb",
|
45
45
|
"spec/garterbelt_spec.rb",
|
46
46
|
"spec/integration/expectations/general_view.html",
|
47
|
+
"spec/integration/expectations/unescaping_view.html",
|
47
48
|
"spec/integration/expectations/variables/view_with_user_and_params.html",
|
48
49
|
"spec/integration/expectations/variables/view_with_user_email.html",
|
49
50
|
"spec/integration/expectations/view_partial_nest.html",
|
50
51
|
"spec/integration/expectations/view_with_forms.html",
|
51
52
|
"spec/integration/expectations/view_with_tags.html",
|
52
53
|
"spec/integration/templates/form.rb",
|
54
|
+
"spec/integration/templates/unescaping_view.rb",
|
53
55
|
"spec/integration/templates/view_partial_nest.rb",
|
54
56
|
"spec/integration/templates/view_with_cache.rb",
|
55
57
|
"spec/integration/templates/view_with_forms.rb",
|
@@ -87,6 +89,7 @@ Gem::Specification.new do |s|
|
|
87
89
|
s.test_files = [
|
88
90
|
"spec/garterbelt_spec.rb",
|
89
91
|
"spec/integration/templates/form.rb",
|
92
|
+
"spec/integration/templates/unescaping_view.rb",
|
90
93
|
"spec/integration/templates/view_partial_nest.rb",
|
91
94
|
"spec/integration/templates/view_with_cache.rb",
|
92
95
|
"spec/integration/templates/view_with_forms.rb",
|
data/lib/renderers/text.rb
CHANGED
@@ -1,11 +1,12 @@
|
|
1
1
|
module Garterbelt
|
2
2
|
class Text < Renderer
|
3
|
-
attr_accessor :content
|
3
|
+
attr_accessor :content, :escape
|
4
4
|
|
5
5
|
def initialize(opts)
|
6
6
|
super
|
7
7
|
raise ArgumentError, ":content option required for #{self.class} initialization" unless opts[:content]
|
8
8
|
self.content = opts[:content]
|
9
|
+
self.escape = view.escape
|
9
10
|
end
|
10
11
|
|
11
12
|
def raise_with_block_content
|
@@ -18,11 +19,7 @@ module Garterbelt
|
|
18
19
|
end
|
19
20
|
|
20
21
|
def escaped_content
|
21
|
-
escape
|
22
|
-
end
|
23
|
-
|
24
|
-
def escape?
|
25
|
-
!!view.escape
|
22
|
+
escape ? ERB::Util.h(content) : content
|
26
23
|
end
|
27
24
|
end
|
28
25
|
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
class UnescapingView < Garterbelt::View
|
2
|
+
requires :format_text
|
3
|
+
|
4
|
+
def content
|
5
|
+
format_text.gsub!(/<[^>]*>/, '')
|
6
|
+
format_text.gsub!(/\b((https?|mailto):(\/\/)?\S+)/, "<a class=\"user_generated_link\" href=\"\\1\">\\1</a>")
|
7
|
+
format_text.gsub!("\n", "<br>\n")
|
8
|
+
format_text.gsub!(/ {2,1000}/, '')
|
9
|
+
|
10
|
+
raw_text format_text
|
11
|
+
end
|
12
|
+
end
|
@@ -9,6 +9,13 @@ describe Garterbelt::View, "Integration" do
|
|
9
9
|
ViewWithContentTags.new.render.should == file("view_with_tags")
|
10
10
|
end
|
11
11
|
|
12
|
+
it 'properly unescapes text' do
|
13
|
+
format_text = "You should check out my rad new site:
|
14
|
+
http://foo.com
|
15
|
+
It will blow your mind!"
|
16
|
+
UnescapingView.new(:format_text => format_text).render.should == file('unescaping_view')
|
17
|
+
end
|
18
|
+
|
12
19
|
describe 'variables' do
|
13
20
|
it 'calls methods on passed objects' do
|
14
21
|
user = Hashie::Mash.new(:email => 'foo@example.com')
|
@@ -10,7 +10,7 @@ require File.dirname(__FILE__) + "/../../lib/garterbelt"
|
|
10
10
|
require File.dirname(__FILE__) + '/templates/garterbelt'
|
11
11
|
require File.dirname(__FILE__) + '/templates/erector'
|
12
12
|
|
13
|
-
TIMES =
|
13
|
+
TIMES = 500_000
|
14
14
|
|
15
15
|
RBench.run(TIMES) do
|
16
16
|
column :garterbelt
|
@@ -27,13 +27,31 @@ RBench.run(TIMES) do
|
|
27
27
|
garterbelt { GarterbeltTemplate.new(:user => user).render }
|
28
28
|
erector { ErectorTemplate.new(:user => user).to_html }
|
29
29
|
end
|
30
|
-
|
31
|
-
report "Simple Page, class level rendering" do
|
32
|
-
garterbelt { GarterbeltTemplate.render(:user => user) }
|
33
|
-
erector { ErectorTemplate.new(:user => user).to_html }
|
34
|
-
end
|
35
30
|
end
|
36
31
|
|
32
|
+
# 4/13/2011, more stuff checking for 0.0.6
|
33
|
+
# 10_000 GARTERBELT | ERECTOR | PERCENT DIFFERENCE
|
34
|
+
# --------------------------------------------------------------------------
|
35
|
+
# Simple Page Initializing 0.178 | 0.170 | 4.5% slower
|
36
|
+
# Simple Page Rendering 6.971 | 6.613 | 5.1% slower
|
37
|
+
#
|
38
|
+
# 50_000 GARTERBELT | ERECTOR | PERCENT DIFFERENCE
|
39
|
+
# --------------------------------------------------------------------------
|
40
|
+
# Simple Page Initializing 0.856 | 1.016 | 15.7% faster
|
41
|
+
# Simple Page Rendering 34.804 | 33.547 | 3.6% slower
|
42
|
+
#
|
43
|
+
# 100_000 GARTERBELT | ERECTOR | PERCENT DIFFERENCE
|
44
|
+
# --------------------------------------------------------------------------
|
45
|
+
# Simple Page Initializing 1.678 | 1.911 | 12% faster
|
46
|
+
# Simple Page Rendering 69.654 | 67.422 | 3.2% slower
|
47
|
+
#
|
48
|
+
# 500_0000 GARTERBELT | ERECTOR | PERCENT DIFFERENCE
|
49
|
+
# --------------------------------------------------------------------------
|
50
|
+
# Simple Page Initializing 8.465 | 9.656 | 12.4% faster
|
51
|
+
# Simple Page Rendering 350.409 | 338.026 | 3.5% slower
|
52
|
+
|
53
|
+
|
54
|
+
|
37
55
|
# 4/13/2011, version 0.0.4, Removing RuPol from the lib, totally a flacid chick :(
|
38
56
|
# more work on performance later
|
39
57
|
# GARTERBELT | ERECTOR |
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: garterbelt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 17
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 7
|
10
|
+
version: 0.0.7
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Kane Baccigalupi
|
@@ -241,12 +241,14 @@ files:
|
|
241
241
|
- lib/view.rb
|
242
242
|
- spec/garterbelt_spec.rb
|
243
243
|
- spec/integration/expectations/general_view.html
|
244
|
+
- spec/integration/expectations/unescaping_view.html
|
244
245
|
- spec/integration/expectations/variables/view_with_user_and_params.html
|
245
246
|
- spec/integration/expectations/variables/view_with_user_email.html
|
246
247
|
- spec/integration/expectations/view_partial_nest.html
|
247
248
|
- spec/integration/expectations/view_with_forms.html
|
248
249
|
- spec/integration/expectations/view_with_tags.html
|
249
250
|
- spec/integration/templates/form.rb
|
251
|
+
- spec/integration/templates/unescaping_view.rb
|
250
252
|
- spec/integration/templates/view_partial_nest.rb
|
251
253
|
- spec/integration/templates/view_with_cache.rb
|
252
254
|
- spec/integration/templates/view_with_forms.rb
|
@@ -312,6 +314,7 @@ summary: Garterbelt is a Ruby HTML/XML markup framework. It is san DSL. Just all
|
|
312
314
|
test_files:
|
313
315
|
- spec/garterbelt_spec.rb
|
314
316
|
- spec/integration/templates/form.rb
|
317
|
+
- spec/integration/templates/unescaping_view.rb
|
315
318
|
- spec/integration/templates/view_partial_nest.rb
|
316
319
|
- spec/integration/templates/view_with_cache.rb
|
317
320
|
- spec/integration/templates/view_with_forms.rb
|