herbie 0.0.3 → 0.1.1
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/lib/herbie/erb_helpers.rb +1 -1
- data/lib/herbie/html_helpers.rb +28 -3
- data/lib/herbie.rb +2 -1
- data/spec/herbie_spec.rb +78 -30
- metadata +13 -2
data/lib/herbie/erb_helpers.rb
CHANGED
data/lib/herbie/html_helpers.rb
CHANGED
|
@@ -2,14 +2,39 @@ module Herbie
|
|
|
2
2
|
module Helpers
|
|
3
3
|
def tag(name, attrs={}, &block)
|
|
4
4
|
if block_given?
|
|
5
|
-
erb_concat "<#{name}#{' ' + attributes(attrs) unless attrs.nil? || attrs.empty?}>#{capture_erb(&block)}</#{name}>"
|
|
5
|
+
erb_concat "<#{name}#{' ' + attributes(attrs) unless attrs.nil? || attrs.empty?}>#{capture_erb(&block)}</#{name}>" # if we're capturing ERB...
|
|
6
|
+
"<#{name}#{' ' + attributes(attrs) unless attrs.empty?}>#{block.call}</#{name}>" # if we're nesting function calls...
|
|
6
7
|
elsif !attrs[:content].nil?
|
|
7
8
|
content = attrs.delete :content
|
|
8
|
-
"<#{name}#{' ' + attributes(attrs) unless attrs.
|
|
9
|
+
"<#{name}#{' ' + attributes(attrs) unless attrs.empty?}>#{content}</#{name}>"
|
|
9
10
|
else
|
|
10
|
-
"<#{name}#{' ' + attributes(attrs) unless attrs.
|
|
11
|
+
"<#{name}#{' ' + attributes(attrs) unless attrs.empty?}>"
|
|
11
12
|
end
|
|
12
13
|
end
|
|
14
|
+
|
|
15
|
+
# work in progress...
|
|
16
|
+
def tags(name, collection, attrs={}, &block)
|
|
17
|
+
cycle = attrs.delete :cycle
|
|
18
|
+
result = ""
|
|
19
|
+
collection.each_with_index do |item, i|
|
|
20
|
+
a = attrs.dup
|
|
21
|
+
|
|
22
|
+
unless cycle.nil?
|
|
23
|
+
c = a.delete :class
|
|
24
|
+
classes = []
|
|
25
|
+
classes << c unless c.nil?
|
|
26
|
+
classes << cycle[:even] if i.even? && cycle.key?(:even)
|
|
27
|
+
classes << cycle[:odd] if i.odd? && cycle.key?(:odd)
|
|
28
|
+
a[:class] = classes.join " " unless classes.empty?
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
result += tag name, a do
|
|
32
|
+
block.call(item)
|
|
33
|
+
end
|
|
34
|
+
result += "\n"
|
|
35
|
+
end
|
|
36
|
+
result
|
|
37
|
+
end
|
|
13
38
|
|
|
14
39
|
def script(source=nil, &block)
|
|
15
40
|
attrs = {
|
data/lib/herbie.rb
CHANGED
data/spec/herbie_spec.rb
CHANGED
|
@@ -4,37 +4,85 @@ require_relative "../lib/herbie.rb"
|
|
|
4
4
|
describe Herbie::Helpers do
|
|
5
5
|
include Herbie::Helpers
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
7
|
+
describe "tag helpers" do
|
|
8
|
+
it "should be able to output a simple tag" do
|
|
9
|
+
attrs = {
|
|
10
|
+
:src => "/path/to/image.jpg",
|
|
11
|
+
:height => 320,
|
|
12
|
+
:width => 640,
|
|
13
|
+
:alt => "An image of something"
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
tag(:img, attrs).should == "<img src=\"#{attrs[:src]}\" height=\"#{attrs[:height]}\" width=\"#{attrs[:width]}\" alt=\"#{attrs[:alt]}\">"
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it "should not output attributes whose values are nil" do
|
|
20
|
+
attrs = {
|
|
21
|
+
:type => "checkbox",
|
|
22
|
+
:name => "stay_logged_in",
|
|
23
|
+
:value => "true",
|
|
24
|
+
:checked => nil
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
tag(:input, attrs).should == "<input type=\"#{attrs[:type]}\" name=\"#{attrs[:name]}\" value=\"#{attrs[:value]}\">"
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it "should output just the property name for attributes with a boolean value of true" do
|
|
31
|
+
attrs = {
|
|
32
|
+
:type => "checkbox",
|
|
33
|
+
:name => "stay_logged_in",
|
|
34
|
+
:value => "true",
|
|
35
|
+
:checked => true
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
tag(:input, attrs).should == "<input type=\"#{attrs[:type]}\" name=\"#{attrs[:name]}\" value=\"#{attrs[:value]}\" checked>"
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it "should output all nested tag method calls" do
|
|
42
|
+
markup = "<div class=\"container\"><h1>Status Report</h1></div>"
|
|
43
|
+
result = tag :div, :class => "container" do
|
|
44
|
+
tag :h1, :content => "Status Report"
|
|
45
|
+
end
|
|
46
|
+
result.should == markup
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
it "should output a collection of tags" do
|
|
50
|
+
markup = <<-MARKUP
|
|
51
|
+
<li><a href="/" title="Back to the homepage">Home</a></li>
|
|
52
|
+
<li><a href="/shop" title="View all our products">Shop</a></li>
|
|
53
|
+
<li><a href="/orders" title="View your existing orders">Orders</a></li>
|
|
54
|
+
<li><a href="/contactus" title="Get in touch with us">Contact Us</a></li>
|
|
55
|
+
<li><a href="/help" title="Can't find what you need? Get help here">Help</a></li>
|
|
56
|
+
MARKUP
|
|
57
|
+
|
|
58
|
+
navigation_items = [
|
|
59
|
+
{:text => "Home", :href => "/", :title => "Back to the homepage"},
|
|
60
|
+
{:text => "Shop", :href => "/shop", :title => "View all our products"},
|
|
61
|
+
{:text => "Orders", :href => "/orders", :title => "View your existing orders"},
|
|
62
|
+
{:text => "Contact Us", :href => "/contactus", :title => "Get in touch with us"},
|
|
63
|
+
{:text => "Help", :href => "/help", :title => "Can't find what you need? Get help here"}
|
|
64
|
+
]
|
|
65
|
+
result = tags :li, navigation_items do |item|
|
|
66
|
+
link_to item[:href], item[:text], :title => item[:title]
|
|
67
|
+
end
|
|
68
|
+
result.should == markup
|
|
69
|
+
end
|
|
36
70
|
|
|
37
|
-
|
|
71
|
+
it "should allow an arbitrary class to be added to alternating elements within the collection" do
|
|
72
|
+
markup = <<-MARKUP
|
|
73
|
+
<li class="even">Annie</li>
|
|
74
|
+
<li>Brenda</li>
|
|
75
|
+
<li class="even">Charlie</li>
|
|
76
|
+
<li>Davinia</li>
|
|
77
|
+
<li class="even">Emma</li>
|
|
78
|
+
MARKUP
|
|
79
|
+
|
|
80
|
+
names = ['Annie', 'Brenda', 'Charlie', 'Davinia', 'Emma']
|
|
81
|
+
result = tags :li, names, :cycle => {:even => "even"} do |name|
|
|
82
|
+
name
|
|
83
|
+
end
|
|
84
|
+
result.should == markup
|
|
85
|
+
end
|
|
38
86
|
end
|
|
39
87
|
|
|
40
88
|
describe "script helpers" do
|
metadata
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: herbie
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease:
|
|
5
|
-
version: 0.
|
|
5
|
+
version: 0.1.1
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
8
8
|
- Ben Darlow
|
|
@@ -10,7 +10,7 @@ autorequire:
|
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
12
|
|
|
13
|
-
date: 2011-10-
|
|
13
|
+
date: 2011-10-10 00:00:00 +01:00
|
|
14
14
|
default_executable:
|
|
15
15
|
dependencies:
|
|
16
16
|
- !ruby/object:Gem::Dependency
|
|
@@ -24,6 +24,17 @@ dependencies:
|
|
|
24
24
|
version: "2.6"
|
|
25
25
|
type: :development
|
|
26
26
|
version_requirements: *id001
|
|
27
|
+
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: colored
|
|
29
|
+
prerelease: false
|
|
30
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
|
31
|
+
none: false
|
|
32
|
+
requirements:
|
|
33
|
+
- - ">="
|
|
34
|
+
- !ruby/object:Gem::Version
|
|
35
|
+
version: "0"
|
|
36
|
+
type: :development
|
|
37
|
+
version_requirements: *id002
|
|
27
38
|
description: Lovable HTML view helpers for use with ERB.
|
|
28
39
|
email: ben@kapowaz.net
|
|
29
40
|
executables: []
|