ruhl 0.8.1 → 0.8.2
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/VERSION +1 -1
- data/lib/ruhl.rb +18 -5
- data/ruhl.gemspec +2 -1
- data/spec/html/loop.html +11 -0
- data/spec/ruhl_spec.rb +12 -0
- data/spec/spec_helper.rb +71 -17
- metadata +2 -1
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.8.
|
1
|
+
0.8.2
|
data/lib/ruhl.rb
CHANGED
@@ -25,7 +25,7 @@ module Ruhl
|
|
25
25
|
def render(current_scope)
|
26
26
|
set_scope(current_scope)
|
27
27
|
|
28
|
-
parse_doc(
|
28
|
+
parse_doc(document)
|
29
29
|
|
30
30
|
if @layout
|
31
31
|
render_with_layout
|
@@ -54,9 +54,10 @@ module Ruhl
|
|
54
54
|
render_file( File.read(file) )
|
55
55
|
end
|
56
56
|
|
57
|
-
def render_collection(tag, code)
|
57
|
+
def render_collection(tag, code, actions = nil)
|
58
58
|
results = execute_ruby(tag, code)
|
59
59
|
|
60
|
+
tag['data-ruhl'] = actions if actions.to_s.strip.length > 0
|
60
61
|
html = tag.to_html
|
61
62
|
|
62
63
|
new_content = results.collect do |item|
|
@@ -73,7 +74,7 @@ module Ruhl
|
|
73
74
|
end
|
74
75
|
|
75
76
|
def parse_doc(doc)
|
76
|
-
if (nodes = doc.xpath('
|
77
|
+
if (nodes = doc.xpath('*[@data-ruhl][1]')).empty?
|
77
78
|
nodes = doc.search('*[@data-ruhl]')
|
78
79
|
end
|
79
80
|
|
@@ -86,7 +87,8 @@ module Ruhl
|
|
86
87
|
end
|
87
88
|
|
88
89
|
def process_attribute(tag, code)
|
89
|
-
code.split(',')
|
90
|
+
actions = code.split(',')
|
91
|
+
actions.dup.each_with_index do |pair, ndx|
|
90
92
|
attribute, value = pair.split(':')
|
91
93
|
|
92
94
|
if value.nil?
|
@@ -98,7 +100,9 @@ module Ruhl
|
|
98
100
|
when "_partial"
|
99
101
|
tag.inner_html = render_partial(tag, value)
|
100
102
|
when "_collection"
|
101
|
-
|
103
|
+
actions.delete_at(ndx)
|
104
|
+
render_collection(tag, value, actions.join(','))
|
105
|
+
return
|
102
106
|
when "_if"
|
103
107
|
return unless process_if(tag, value)
|
104
108
|
when "_unless"
|
@@ -141,6 +145,15 @@ module Ruhl
|
|
141
145
|
else
|
142
146
|
_render_
|
143
147
|
end
|
148
|
+
rescue NoMethodError => e
|
149
|
+
puts <<CONTEXT
|
150
|
+
Context:
|
151
|
+
tag : #{tag.inspect}
|
152
|
+
code : #{code.inspect}
|
153
|
+
local_object : #{local_object.inspect}
|
154
|
+
scope : #{scope.inspect}
|
155
|
+
CONTEXT
|
156
|
+
raise e
|
144
157
|
end
|
145
158
|
|
146
159
|
def set_scope(current_scope)
|
data/ruhl.gemspec
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{ruhl}
|
8
|
-
s.version = "0.8.
|
8
|
+
s.version = "0.8.2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Andrew Stone"]
|
@@ -29,6 +29,7 @@ Gem::Specification.new do |s|
|
|
29
29
|
"spec/html/fragment.html",
|
30
30
|
"spec/html/if.html",
|
31
31
|
"spec/html/layout.html",
|
32
|
+
"spec/html/loop.html",
|
32
33
|
"spec/html/main_with_sidebar.html",
|
33
34
|
"spec/html/medium.html",
|
34
35
|
"spec/html/seo.html",
|
data/spec/html/loop.html
ADDED
data/spec/ruhl_spec.rb
CHANGED
@@ -126,6 +126,18 @@ describe Ruhl do
|
|
126
126
|
end
|
127
127
|
end
|
128
128
|
end
|
129
|
+
|
130
|
+
describe "loop.html" do
|
131
|
+
before do
|
132
|
+
@html = File.read html(:loop)
|
133
|
+
end
|
134
|
+
|
135
|
+
it "will be injected into layout.html" do
|
136
|
+
doc = create_doc( html(:loop) )
|
137
|
+
options = doc.xpath('/html/body/select//option')
|
138
|
+
options.children.length.should == @co.states_for_select.length
|
139
|
+
end
|
140
|
+
end
|
129
141
|
end
|
130
142
|
|
131
143
|
|
data/spec/spec_helper.rb
CHANGED
@@ -1,5 +1,23 @@
|
|
1
1
|
require File.expand_path(File.join(File.dirname(__FILE__), %w[.. lib ruhl]))
|
2
2
|
|
3
|
+
def html(name)
|
4
|
+
File.join( File.dirname(__FILE__), 'html', "#{name}.html" )
|
5
|
+
end
|
6
|
+
|
7
|
+
def create_doc(layout = nil)
|
8
|
+
options = {:layout => layout}
|
9
|
+
|
10
|
+
html = Ruhl::Engine.new(@html, :layout => layout).
|
11
|
+
render(ContextObject.new)
|
12
|
+
|
13
|
+
do_parse(html)
|
14
|
+
end
|
15
|
+
|
16
|
+
def do_parse(html)
|
17
|
+
Nokogiri::HTML(html)
|
18
|
+
end
|
19
|
+
|
20
|
+
|
3
21
|
class TestUser
|
4
22
|
attr_accessor :first_name, :last_name, :email
|
5
23
|
|
@@ -52,23 +70,59 @@ class ContextObject
|
|
52
70
|
def no_users_message(tag = nil)
|
53
71
|
"Sorry no users found"
|
54
72
|
end
|
55
|
-
end
|
56
|
-
|
57
|
-
|
58
|
-
def html(name)
|
59
|
-
File.join( File.dirname(__FILE__), 'html', "#{name}.html" )
|
60
|
-
end
|
61
|
-
|
62
|
-
def create_doc(layout = nil)
|
63
|
-
options = {:layout => layout}
|
64
73
|
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
74
|
+
def states_for_select(tag = nil)
|
75
|
+
state = Struct.new(:abbr, :name)
|
76
|
+
[ state.new('AL', 'Alabama'),
|
77
|
+
state.new('AK', 'Alaska'),
|
78
|
+
state.new('AZ', 'Arizona'),
|
79
|
+
state.new('AR', 'Arkansas'),
|
80
|
+
state.new('CA', 'California'),
|
81
|
+
state.new('CO', 'Colorado'),
|
82
|
+
state.new('CT', 'Connecticut'),
|
83
|
+
state.new('DE', 'Delaware'),
|
84
|
+
state.new('FL', 'Florida'),
|
85
|
+
state.new('GA', 'Georgia'),
|
86
|
+
state.new('HI', 'Hawaii'),
|
87
|
+
state.new('ID', 'Idaho'),
|
88
|
+
state.new('IL', 'Illinois'),
|
89
|
+
state.new('IN', 'Indiana'),
|
90
|
+
state.new('IA', 'Iowa'),
|
91
|
+
state.new('KS', 'Kansas'),
|
92
|
+
state.new('KY', 'Kentucky'),
|
93
|
+
state.new('LA', 'Louisiana'),
|
94
|
+
state.new('ME', 'Maine'),
|
95
|
+
state.new('MD', 'Maryland'),
|
96
|
+
state.new('MA', 'Massachusetts'),
|
97
|
+
state.new('MI', 'Michigan'),
|
98
|
+
state.new('MN', 'Minnesota'),
|
99
|
+
state.new('MS', 'Mississippi'),
|
100
|
+
state.new('MO', 'Missouri'),
|
101
|
+
state.new('MT', 'Montana'),
|
102
|
+
state.new('NE', 'Nebraska'),
|
103
|
+
state.new('NV', 'Nevada'),
|
104
|
+
state.new('NH', 'New Hampshire'),
|
105
|
+
state.new('NJ', 'New Jersey'),
|
106
|
+
state.new('NM', 'New Mexico'),
|
107
|
+
state.new('NY', 'New York'),
|
108
|
+
state.new('NC', 'North Carolina'),
|
109
|
+
state.new('ND', 'North Dakota'),
|
110
|
+
state.new('OH', 'Ohio'),
|
111
|
+
state.new('OK', 'Oklahoma'),
|
112
|
+
state.new('OR', 'Oregon'),
|
113
|
+
state.new('PA', 'Pennsylvania'),
|
114
|
+
state.new('RI', 'Rhode Island'),
|
115
|
+
state.new('SC', 'South Carolina'),
|
116
|
+
state.new('SD', 'South Dakota'),
|
117
|
+
state.new('TN', 'Tennessee'),
|
118
|
+
state.new('TX', 'Texas'),
|
119
|
+
state.new('UT', 'Utah'),
|
120
|
+
state.new('VT', 'Vermont'),
|
121
|
+
state.new('VA', 'Virginia'),
|
122
|
+
state.new('WA', 'Washington'),
|
123
|
+
state.new('WV', 'West Virginia'),
|
124
|
+
state.new('WI', 'Wisconsin'),
|
125
|
+
state.new('WY', 'Wyoming')]
|
126
|
+
end
|
70
127
|
|
71
|
-
def do_parse(html)
|
72
|
-
Nokogiri::HTML(html)
|
73
128
|
end
|
74
|
-
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruhl
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Stone
|
@@ -54,6 +54,7 @@ files:
|
|
54
54
|
- spec/html/fragment.html
|
55
55
|
- spec/html/if.html
|
56
56
|
- spec/html/layout.html
|
57
|
+
- spec/html/loop.html
|
57
58
|
- spec/html/main_with_sidebar.html
|
58
59
|
- spec/html/medium.html
|
59
60
|
- spec/html/seo.html
|