aurita-gui 0.3.4 → 0.3.5
Sign up to get free protection for your applications and to get access to all the features.
- data/TODO +6 -2
- data/aurita-gui.gemspec +2 -1
- data/lib/aurita-gui/element.rb +163 -56
- data/lib/aurita-gui/form/options_field.rb +1 -0
- data/lib/aurita-gui/html.rb +3 -0
- data/{cheatsheet.rb → samples/cheatsheet.rb} +0 -0
- data/samples/pushtest.rb +17 -0
- data/samples/putstest.rb +22 -0
- data/samples/recurse.rb +21 -0
- data/{valuetest.rb → samples/valuetest.rb} +0 -0
- data/spec/element.rb +15 -14
- data/spec/html.rb +3 -3
- metadata +8 -4
data/TODO
CHANGED
@@ -5,7 +5,6 @@
|
|
5
5
|
- Fixme: Setting values only works after all elements have been added
|
6
6
|
(values won't be set for elements added after form.values=)
|
7
7
|
|
8
|
-
- Implement element.sibling[:dom_id] --> element
|
9
8
|
- Implement XPath1.0 method (parent, sibling, descendant, following ...)
|
10
9
|
|
11
10
|
- Implement field visibility using
|
@@ -20,6 +19,11 @@
|
|
20
19
|
|
21
20
|
= DONE =============================================
|
22
21
|
|
22
|
+
- Element should implement / delegate to Array,
|
23
|
+
so it can be used like any container.
|
24
|
+
|
25
|
+
- Implement element.sibling[:dom_id] --> element
|
26
|
+
|
23
27
|
- Provide markaby-like syntax, Example:
|
24
28
|
|
25
29
|
HTML.div 'content here' :class => :highlight
|
@@ -27,7 +31,7 @@
|
|
27
31
|
and
|
28
32
|
|
29
33
|
HTML.build {
|
30
|
-
div
|
34
|
+
div.header {
|
31
35
|
h1 'header'
|
32
36
|
}
|
33
37
|
}
|
data/aurita-gui.gemspec
CHANGED
@@ -14,7 +14,7 @@ as stand-alone library in any context (such as rails).
|
|
14
14
|
As there seems to be a lack of ruby form generators, i decided to release this
|
15
15
|
part of Aurita in a single gem with no dependencies.
|
16
16
|
EOF
|
17
|
-
s.version = '0.3.
|
17
|
+
s.version = '0.3.5'
|
18
18
|
s.author = 'Tobias Fuchs'
|
19
19
|
s.email = 'fuchs@atomnode.net'
|
20
20
|
s.date = Time.now
|
@@ -25,6 +25,7 @@ part of Aurita in a single gem with no dependencies.
|
|
25
25
|
'lib/aurita-gui/*',
|
26
26
|
'lib/aurita-gui/form/*',
|
27
27
|
'bin/*',
|
28
|
+
'samples/*',
|
28
29
|
'spec/*'].to_a
|
29
30
|
|
30
31
|
s.has_rdoc = true
|
data/lib/aurita-gui/element.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
|
2
|
+
require('delegate')
|
3
|
+
|
2
4
|
module Aurita
|
3
5
|
module GUI
|
4
6
|
|
@@ -14,11 +16,46 @@ module GUI
|
|
14
16
|
# via parameter :content or using a
|
15
17
|
# block or by #content and #content=.
|
16
18
|
#
|
19
|
+
# == Usage as container
|
20
|
+
#
|
21
|
+
# Element implements all features expected from a
|
22
|
+
# container class.
|
23
|
+
# It delegates access to @content to class Array,
|
24
|
+
# so an element can be used as Array instance, too:
|
25
|
+
#
|
26
|
+
# e = Element.new { Element.new { 'first' } + Element.new { 'second' } }
|
27
|
+
# puts e.join(' -- ')
|
28
|
+
# -->
|
29
|
+
# 'first -- second'
|
30
|
+
#
|
31
|
+
# You can also push elements into an element:
|
32
|
+
#
|
33
|
+
# e1 = HTML.div { 'Foo' }
|
34
|
+
# e2 = HTML.div { 'Bar' }
|
35
|
+
#
|
36
|
+
# assert_equal(e[0], 'Foo')
|
37
|
+
# assert_equal(e[1], e2)
|
38
|
+
#
|
39
|
+
# It also keeps track of parent classes:
|
40
|
+
#
|
41
|
+
# assert_equal(e1[1].parent, e1)
|
42
|
+
#
|
43
|
+
# Random access operators are redefined, so you
|
44
|
+
# can either access elements by array index, as usual,
|
45
|
+
# as well as by their DOM id:
|
46
|
+
#
|
47
|
+
# e = Element.new { Element.new(:tag => :p, :id => :foo) { 'nested element' } }
|
48
|
+
# puts e[:foo].to_s
|
49
|
+
# -->
|
50
|
+
# '<p id="foo">nested element</p>'
|
51
|
+
#
|
52
|
+
# == Builder
|
53
|
+
#
|
17
54
|
# Most methods invoked on an Element instance are
|
18
55
|
# redirected to return or set a tag attribute.
|
19
56
|
# Example:
|
20
57
|
#
|
21
|
-
# link = Element(:tag => :a) { '
|
58
|
+
# link = Element.new(:tag => :a) { 'click me' }
|
22
59
|
# link.href = '/link/to/somewhere'
|
23
60
|
#
|
24
61
|
# Same as
|
@@ -108,11 +145,11 @@ module GUI
|
|
108
145
|
# e.onclick == 'alert("message");'
|
109
146
|
# e.to_s == '<div onclick="alert(\"message\");"></div>'
|
110
147
|
#
|
111
|
-
class Element
|
148
|
+
class Element < DelegateClass(Array)
|
112
149
|
|
113
150
|
@@element_count = 0
|
114
151
|
|
115
|
-
attr_accessor :attrib, :
|
152
|
+
attr_accessor :attrib, :parent, :force_closing_tag, :tag
|
116
153
|
|
117
154
|
def initialize(*args, &block)
|
118
155
|
|
@@ -144,52 +181,73 @@ module GUI
|
|
144
181
|
end
|
145
182
|
@content = [ @content ] unless (@content.kind_of? Array or @content.to_s.length == 0)
|
146
183
|
@content ||= []
|
184
|
+
|
185
|
+
@content.each { |c|
|
186
|
+
if c.is_a?(Element) then
|
187
|
+
c.parent = self
|
188
|
+
end
|
189
|
+
}
|
147
190
|
params.delete(:content)
|
148
191
|
params.delete(:tag)
|
149
|
-
# params[:id] = self.class.to_s.split('::')[-1].downcase + '_' << @@element_count.to_s if params[:id].nil?
|
150
|
-
# params[:onclick] << ';' unless params[:onclick].nil? or params[:onclick].include?(';')
|
151
192
|
|
152
193
|
@attrib = params
|
153
|
-
|
154
|
-
|
194
|
+
|
195
|
+
super(@content)
|
196
|
+
|
155
197
|
end
|
156
198
|
|
157
199
|
def has_content?
|
158
|
-
(
|
200
|
+
(length > 0)
|
159
201
|
end
|
160
202
|
|
161
|
-
# Return DOM id of this element.
|
162
|
-
def dom_id
|
163
|
-
@attrib[:id] if @attrib
|
164
|
-
end
|
165
|
-
# Set DOM id of this element.
|
166
|
-
def dom_id=(value)
|
167
|
-
@attrib[:id] = value if @attrib
|
168
|
-
end
|
169
203
|
# Alias definition for #dom_id=(value)
|
170
204
|
# Define explicitly so built-in method #id
|
171
205
|
# is not invoked instead
|
172
206
|
def id=(value)
|
173
|
-
@attrib[:id] = value
|
207
|
+
@attrib[:id] = value if @attrib
|
174
208
|
end
|
209
|
+
alias dom_id= id=
|
175
210
|
# Alias definition for #dom_id()
|
176
211
|
def id
|
177
|
-
@attrib[:id]
|
212
|
+
@attrib[:id] if @attrib
|
178
213
|
end
|
214
|
+
alias dom_id id
|
179
215
|
|
180
|
-
#
|
181
|
-
#
|
216
|
+
# Return [ self, other ] so concatenation of
|
217
|
+
# Element instances works as expected;
|
218
|
+
#
|
219
|
+
# HTML.build {
|
220
|
+
# div { 'first' } + div { 'second' }
|
221
|
+
# }
|
222
|
+
# --> <Element [ <Element 'first'>, <Element 'second'> ] >
|
223
|
+
#
|
182
224
|
def +(other)
|
183
|
-
# return string << other.string if other.kind_of? Element
|
184
225
|
return [ self, other ]
|
185
226
|
end
|
186
|
-
alias << +
|
187
227
|
|
228
|
+
# Append object to array of nested elements.
|
229
|
+
# Object to append (other) does not have to
|
230
|
+
# be an Element instance.
|
231
|
+
# If so, however, other#parent will be set
|
232
|
+
# to this instance.
|
233
|
+
def <<(other)
|
234
|
+
other.parent = self if other.is_a?(Element)
|
235
|
+
__getobj__().push(other)
|
236
|
+
end
|
237
|
+
|
238
|
+
# Returns [ self ], so concatenation with
|
239
|
+
# Arrays and other Element instances works
|
240
|
+
# as expected (see #<<(other).
|
188
241
|
def to_ary
|
189
242
|
[ self ]
|
190
243
|
end
|
191
244
|
alias to_a to_ary
|
192
245
|
|
246
|
+
# Returns nested content as array.
|
247
|
+
def get_content
|
248
|
+
__getobj__()
|
249
|
+
end
|
250
|
+
|
193
251
|
# Redirect methods to setting or retreiving tag
|
194
252
|
# attributes.
|
195
253
|
# There are several possible routings for method_missing:
|
@@ -220,16 +278,20 @@ module GUI
|
|
220
278
|
if block_given? then
|
221
279
|
@attrib[:class] = meth
|
222
280
|
@attrib.update(value) if value.is_a? Hash
|
223
|
-
|
281
|
+
c = yield
|
282
|
+
c = [ c ] unless c.is_a?(Array)
|
283
|
+
__setobj__(c)
|
224
284
|
return self
|
225
285
|
elsif !value.nil? && !meth.to_s.include?('=') then
|
226
286
|
@attrib[:class] = meth
|
227
287
|
case value
|
228
288
|
when Hash then
|
229
289
|
@attrib.update(value)
|
230
|
-
|
290
|
+
c = value[:content]
|
291
|
+
c = [ c ] if (c && !c.is_a?(Array))
|
292
|
+
__setobj__(c) if c
|
231
293
|
when String then
|
232
|
-
|
294
|
+
__setobj__([value])
|
233
295
|
end
|
234
296
|
return self
|
235
297
|
else
|
@@ -240,9 +302,11 @@ module GUI
|
|
240
302
|
|
241
303
|
# Set enclosed content of this element.
|
242
304
|
# Will be automatically wrapped in an array.
|
243
|
-
def
|
244
|
-
|
305
|
+
def set_content(obj)
|
306
|
+
return __setobj__([ obj ]) unless (obj.is_a?(Array))
|
307
|
+
__setobj__(obj)
|
245
308
|
end
|
309
|
+
alias content= set_content
|
246
310
|
|
247
311
|
# Define explicitly so built-in method #type
|
248
312
|
# is not invoked instead
|
@@ -252,7 +316,7 @@ module GUI
|
|
252
316
|
|
253
317
|
# Do not redirect random access operators.
|
254
318
|
def [](index)
|
255
|
-
return
|
319
|
+
return super(index) if (index.is_a?(Fixnum))
|
256
320
|
return find_by_dom_id(index)
|
257
321
|
end
|
258
322
|
|
@@ -260,7 +324,7 @@ module GUI
|
|
260
324
|
# its dom_id
|
261
325
|
def find_by_dom_id(dom_id)
|
262
326
|
dom_id = dom_id.to_sym
|
263
|
-
|
327
|
+
each { |c|
|
264
328
|
if c.is_a? Element then
|
265
329
|
return c if (c.dom_id == dom_id)
|
266
330
|
sub = c.find_by_dom_id(dom_id)
|
@@ -272,16 +336,10 @@ module GUI
|
|
272
336
|
|
273
337
|
# Do not redirect random access operators.
|
274
338
|
def []=(index,element)
|
275
|
-
|
339
|
+
super(index,element) if (index.is_a? Numeric)
|
276
340
|
e = find_by_dom_id(index)
|
277
341
|
e.swap(element)
|
278
342
|
end
|
279
|
-
def length
|
280
|
-
@content.length
|
281
|
-
end
|
282
|
-
def empty?
|
283
|
-
@content.length == 0
|
284
|
-
end
|
285
343
|
|
286
344
|
# Copy constructor. Replace self with
|
287
345
|
# other element.
|
@@ -290,7 +348,7 @@ module GUI
|
|
290
348
|
@tag = other.tag
|
291
349
|
@attrib = other.attrib
|
292
350
|
@attrib[:id] = save_own_id
|
293
|
-
|
351
|
+
__setobj__(other.get_content)
|
294
352
|
end
|
295
353
|
alias copy swap
|
296
354
|
|
@@ -302,43 +360,37 @@ module GUI
|
|
302
360
|
|
303
361
|
# Render this element to a string.
|
304
362
|
def string
|
305
|
-
return
|
363
|
+
return get_content.to_s if @tag == :pseudo
|
306
364
|
|
307
365
|
attrib_string = ''
|
308
366
|
@attrib.each_pair { |name,value|
|
309
367
|
if value.instance_of?(Array) then
|
310
368
|
value = value.join(' ')
|
311
|
-
elsif
|
312
|
-
value.instance_of?(TrueClass) then
|
369
|
+
elsif value.instance_of?(TrueClass) then
|
313
370
|
value = name
|
314
371
|
end
|
315
372
|
if !value.nil? then
|
316
|
-
value = value.to_s
|
317
|
-
attrib_string <<
|
373
|
+
value = value.to_s.gsub('"','\"')
|
374
|
+
attrib_string << " #{name}=\"#{value}\""
|
318
375
|
end
|
319
376
|
}
|
320
377
|
|
321
|
-
out = ''
|
322
378
|
if (!(@force_closing_tag.instance_of?(FalseClass)) &&
|
323
379
|
[ :div, :label, :button, :textarea ].include?(@tag)) then
|
324
380
|
@force_closing_tag = true
|
325
381
|
end
|
326
|
-
if @force_closing_tag ||
|
327
|
-
|
328
|
-
out << attrib_string if attrib_string.length > 0
|
329
|
-
out << ">#{content}"
|
330
|
-
out << "</#{@tag}>"
|
382
|
+
if @force_closing_tag || has_content? then
|
383
|
+
return "<#{@tag}#{attrib_string}>#{__getobj__}</#{@tag}>"
|
331
384
|
else
|
332
|
-
|
385
|
+
return "<#{@tag.to_s}#{attrib_string} />"
|
333
386
|
end
|
334
|
-
return out
|
335
387
|
end
|
336
388
|
alias to_s string
|
389
|
+
alias to_str string
|
337
390
|
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
391
|
+
# Return CSS classes as array. Note that
|
392
|
+
# Element#class is not redefined to return
|
393
|
+
# attribute :class, for obvious reasons.
|
342
394
|
def css_classes
|
343
395
|
css_classes = @attrib[:class]
|
344
396
|
if css_classes.kind_of? Array
|
@@ -348,21 +400,76 @@ module GUI
|
|
348
400
|
else # e.g. Symbol
|
349
401
|
css_classes = [ css_classes ]
|
350
402
|
end
|
351
|
-
css_classes.
|
403
|
+
css_classes.map! { |c| c.to_sym if c }
|
352
404
|
return css_classes
|
353
405
|
end
|
354
406
|
alias css_class css_classes
|
355
407
|
|
408
|
+
# Add CSS class to this Element instance.
|
409
|
+
# e = Element.new(:class => :first)
|
410
|
+
# e.add_class(:second
|
411
|
+
# e.to_s
|
412
|
+
# -->
|
413
|
+
# <div class="first second"></div>
|
356
414
|
def add_class(css_class_name)
|
357
415
|
@attrib[:class] = (css_classes << css_class_name.to_sym)
|
358
416
|
end
|
417
|
+
alias add_css_class add_class
|
359
418
|
|
419
|
+
# Remove CSS class from this Element instance.
|
420
|
+
# Add CSS class to this Element instance.
|
421
|
+
# e = Element.new(:class => [ :first, :second ])
|
422
|
+
# e.to_s
|
423
|
+
# -->
|
424
|
+
# <div class="first second"></div>
|
425
|
+
#
|
426
|
+
# e.remove_class(:second)
|
427
|
+
# e.to_s
|
428
|
+
# -->
|
429
|
+
# <div class="first"></div>
|
360
430
|
def remove_class(css_class_name)
|
361
431
|
classes = css_classes
|
362
432
|
classes.delete(css_class_name.to_sym)
|
363
433
|
@attrib[:class] = classes
|
364
434
|
end
|
365
|
-
|
435
|
+
alias remove_css_class remove_class
|
436
|
+
|
437
|
+
# Iterates over all Elements in this
|
438
|
+
# instances object tree (depth first).
|
439
|
+
#
|
440
|
+
# x = HTML.build {
|
441
|
+
# div.main {
|
442
|
+
# h2.header { 'Title' } +
|
443
|
+
# div.lead { 'Intro here' } +
|
444
|
+
# div.body {
|
445
|
+
# p.section { 'First' } +
|
446
|
+
# p.section { 'Second' }
|
447
|
+
# }
|
448
|
+
# }
|
449
|
+
# }
|
450
|
+
#
|
451
|
+
# x.recurse { |element|
|
452
|
+
# p element.css_class
|
453
|
+
# }
|
454
|
+
#
|
455
|
+
# -->
|
456
|
+
#
|
457
|
+
# :main
|
458
|
+
# :header
|
459
|
+
# :lead
|
460
|
+
# :body
|
461
|
+
# :section
|
462
|
+
# :section
|
463
|
+
#
|
464
|
+
def recurse(&block)
|
465
|
+
each { |c|
|
466
|
+
if c.is_a?(Element) then
|
467
|
+
yield(c)
|
468
|
+
c.recurse(&block)
|
469
|
+
end
|
470
|
+
}
|
471
|
+
end
|
472
|
+
|
366
473
|
end # class
|
367
474
|
|
368
475
|
end # module
|
data/lib/aurita-gui/html.rb
CHANGED
File without changes
|
data/samples/pushtest.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
|
2
|
+
require 'rubygems'
|
3
|
+
require 'aurita-gui'
|
4
|
+
|
5
|
+
include Aurita::GUI
|
6
|
+
|
7
|
+
e1 = HTML.div.outer { 'Foo' }
|
8
|
+
e2 = HTML.div.inner { 'Bar' }
|
9
|
+
|
10
|
+
e1 << e2
|
11
|
+
|
12
|
+
puts e1.to_s
|
13
|
+
p e1[0] == 'Foo'
|
14
|
+
p e1[1] == e2
|
15
|
+
|
16
|
+
p e1[1].parent == e1
|
17
|
+
p e2.parent == e1
|
data/samples/putstest.rb
ADDED
data/samples/recurse.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
|
2
|
+
require 'rubygems'
|
3
|
+
require 'aurita-gui'
|
4
|
+
|
5
|
+
include Aurita::GUI
|
6
|
+
|
7
|
+
x = HTML.build {
|
8
|
+
div.main {
|
9
|
+
h2.header { 'Title' } +
|
10
|
+
div.lead { 'Intro here' } +
|
11
|
+
div.body {
|
12
|
+
p.section { 'First' } +
|
13
|
+
p.section { 'Second' } +
|
14
|
+
p.section { 'Third' }
|
15
|
+
}
|
16
|
+
}
|
17
|
+
}
|
18
|
+
|
19
|
+
x.recurse { |element|
|
20
|
+
p element.css_class
|
21
|
+
}
|
File without changes
|
data/spec/element.rb
CHANGED
@@ -41,8 +41,9 @@ describe Aurita::GUI::Element, "basic rendering" do
|
|
41
41
|
e1 = Element.new(:id => :first)
|
42
42
|
e2 = Element.new(:id => :second)
|
43
43
|
|
44
|
-
(e1 << e2).should == [ e1, e2 ]
|
45
44
|
(e1 + e2).should == [ e1, e2 ]
|
45
|
+
e1 << e2
|
46
|
+
e1[0].should == e2
|
46
47
|
end
|
47
48
|
|
48
49
|
it "should be able to render to string" do
|
@@ -51,14 +52,14 @@ describe Aurita::GUI::Element, "basic rendering" do
|
|
51
52
|
end
|
52
53
|
|
53
54
|
it "should have enclosed content that is an array" do
|
54
|
-
@e1.
|
55
|
+
@e1.get_content.length.should == 0
|
55
56
|
@e1.has_content?().should == false
|
56
|
-
@e1.
|
57
|
+
@e1.get_content.should == []
|
57
58
|
end
|
58
59
|
|
59
60
|
it "should close the tag depending on content" do
|
60
61
|
@e1.content = 'the content'
|
61
|
-
@e1.
|
62
|
+
@e1.get_content.should == [ 'the content' ]
|
62
63
|
@e1.to_s.should == '<tagname>the content</tagname>'
|
63
64
|
end
|
64
65
|
|
@@ -97,7 +98,7 @@ describe Aurita::GUI::Element, "basic rendering" do
|
|
97
98
|
|
98
99
|
it "should accept parameter :content" do
|
99
100
|
e = Element.new(:tag => :bar, :content => 'content here', :name => :wombat)
|
100
|
-
e.
|
101
|
+
e.get_content.should == ['content here']
|
101
102
|
e.name.should == :wombat
|
102
103
|
e.to_s.should == '<bar name="wombat">content here</bar>'
|
103
104
|
end
|
@@ -105,7 +106,7 @@ describe Aurita::GUI::Element, "basic rendering" do
|
|
105
106
|
it "should accept content as block, maintaining object identity" do
|
106
107
|
test_obj_identity = 'lorem_ipsum'
|
107
108
|
e = Element.new(:tag => :jada) { test_obj_identity }
|
108
|
-
e.
|
109
|
+
e.get_content.should == [ test_obj_identity ]
|
109
110
|
e.tag.should == :jada
|
110
111
|
end
|
111
112
|
|
@@ -117,18 +118,18 @@ describe Aurita::GUI::Element, "basic rendering" do
|
|
117
118
|
end
|
118
119
|
|
119
120
|
it "should accept other element instances as content" do
|
120
|
-
@outer.
|
121
|
+
@outer.get_content.should == [ @inner ]
|
121
122
|
@outer.to_s.should == '<p class="outer"><h2>i am an inner header</h2></p>'
|
122
123
|
end
|
123
124
|
|
124
125
|
it "should maintain an object hierarchy" do
|
125
|
-
@outer.
|
126
|
-
@outer.
|
126
|
+
@outer.get_content.first.new_attrib = 23
|
127
|
+
@outer.get_content.first.new_attrib.should == 23
|
127
128
|
end
|
128
129
|
|
129
130
|
it "should be possible to alter an enclosed element after adding it as content" do
|
130
131
|
@inner.decorated_attrib = 'decorated'
|
131
|
-
@inner.
|
132
|
+
@inner.get_content << ' with decoration'
|
132
133
|
|
133
134
|
@outer.to_s.should == '<p class="outer"><h2 decorated_attrib="decorated">i am an inner header with decoration</h2></p>'
|
134
135
|
|
@@ -157,10 +158,10 @@ describe Aurita::GUI::Element, "basic rendering" do
|
|
157
158
|
dwa = 'two'
|
158
159
|
tri = 'three'
|
159
160
|
e.content = ras
|
160
|
-
e.
|
161
|
-
e
|
162
|
-
e
|
163
|
-
e.
|
161
|
+
e.get_content.should == [ ras ]
|
162
|
+
e << dwa
|
163
|
+
e << tri
|
164
|
+
e.get_content.should == [ ras, dwa, tri ]
|
164
165
|
end
|
165
166
|
|
166
167
|
end
|
data/spec/html.rb
CHANGED
@@ -38,15 +38,15 @@ describe Aurita::GUI::HTML, "basic rendering" do
|
|
38
38
|
@e[0].css_class.first.should == :outer
|
39
39
|
@e[0][0].id.should == :header
|
40
40
|
@e[0][1].id.should == :content
|
41
|
-
@e[0][1].
|
41
|
+
@e[0][1].get_content.should == [ 'Content' ]
|
42
42
|
@e[0][1].content = 'Altered'
|
43
|
-
@e[0][1].
|
43
|
+
@e[0][1].get_content.should == [ 'Altered' ]
|
44
44
|
@e.to_s.should == '<div class="outer"><h2 id="header">Header</h2><p id="content">Altered</p></div>'
|
45
45
|
end
|
46
46
|
|
47
47
|
it "should be possible to retreive elements just by DOM id" do
|
48
48
|
e = @e[:header]
|
49
|
-
e.
|
49
|
+
e.get_content.first.should == 'Header'
|
50
50
|
end
|
51
51
|
|
52
52
|
it "should escape double-quotes in tag parameters" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: aurita-gui
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tobias Fuchs
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-01-
|
12
|
+
date: 2009-01-27 00:00:00 +01:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -22,15 +22,14 @@ extensions: []
|
|
22
22
|
extra_rdoc_files: []
|
23
23
|
|
24
24
|
files:
|
25
|
-
- cheatsheet.rb
|
26
25
|
- spec
|
27
26
|
- History.txt
|
28
27
|
- lib
|
28
|
+
- samples
|
29
29
|
- aurita-gui.gemspec
|
30
30
|
- bin
|
31
31
|
- TODO
|
32
32
|
- test
|
33
|
-
- valuetest.rb
|
34
33
|
- LICENSE
|
35
34
|
- lib/aurita-gui
|
36
35
|
- lib/aurita-gui.rb
|
@@ -59,6 +58,11 @@ files:
|
|
59
58
|
- lib/aurita-gui/form/template_helper.rb
|
60
59
|
- lib/aurita-gui/form/input_field.rb
|
61
60
|
- lib/aurita-gui/form/date_field.rb
|
61
|
+
- samples/putstest.rb
|
62
|
+
- samples/recurse.rb
|
63
|
+
- samples/cheatsheet.rb
|
64
|
+
- samples/valuetest.rb
|
65
|
+
- samples/pushtest.rb
|
62
66
|
- spec/marshal.rb
|
63
67
|
- spec/javascript.rb
|
64
68
|
- spec/form.rb
|