tagz 0.0.2 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/tagz.rb +99 -115
- data/test/tagz.rb +5 -6
- metadata +41 -36
- data/a.rb +0 -12
- data/tidy +0 -3
data/lib/tagz.rb
CHANGED
@@ -1,20 +1,19 @@
|
|
1
1
|
module Tagz
|
2
|
-
Tagz::VERSION = '0.0.
|
2
|
+
Tagz::VERSION = '0.0.4' unless defined? Tagz::VERSION
|
3
3
|
def self.version() VERSION end
|
4
4
|
|
5
5
|
class NotOpen < StandardError; end
|
6
6
|
class StillOpen < StandardError; end
|
7
7
|
|
8
8
|
class << self
|
9
|
-
#--{{{
|
10
9
|
def default_non_container_tag_list
|
10
|
+
# http://www.w3schools.com/xhtml/xhtml_ref_byfunc.asp
|
11
11
|
%w[
|
12
12
|
br hr input img area base basefont
|
13
13
|
]
|
14
14
|
end
|
15
15
|
|
16
16
|
def non_container_tag_list *argv
|
17
|
-
#--{{{
|
18
17
|
if argv.first
|
19
18
|
@non_container_tag_list = [argv.first].flatten.uniq.map{|arg| arg.to_s}
|
20
19
|
@non_container_tags = @non_container_tag_list.inject(Hash.new){|h,k| h.update k => true}
|
@@ -27,35 +26,34 @@ module Tagz
|
|
27
26
|
@non_container_tag_list
|
28
27
|
end
|
29
28
|
end
|
30
|
-
#--}}}
|
31
29
|
end
|
30
|
+
|
32
31
|
def non_container_tags
|
33
|
-
#--{{{
|
34
32
|
if defined?(@non_container_tags) and @non_container_tags
|
35
33
|
@non_container_tags
|
36
34
|
else
|
37
35
|
non_container_tag_list
|
38
36
|
@non_container_tags
|
39
37
|
end
|
40
|
-
#--}}}
|
41
38
|
end
|
39
|
+
|
42
40
|
def container? tag
|
43
41
|
not(non_container_tags[tag.to_s] or false)
|
44
42
|
end
|
43
|
+
|
45
44
|
def emtpy? tag
|
46
45
|
not container?(tag)
|
47
46
|
end
|
48
|
-
#--}}}
|
49
47
|
end
|
50
48
|
|
51
|
-
module Fragment
|
49
|
+
module Fragment
|
52
50
|
attr_accessor 'tag'
|
53
51
|
attr_accessor 'open'
|
54
52
|
attr_accessor 'added'
|
55
53
|
attr_accessor 'created_at'
|
56
54
|
alias_method 'open?', 'open'
|
57
55
|
|
58
|
-
def self.new str='', tag='', options = {}
|
56
|
+
def self.new str='', tag='', options = {}
|
59
57
|
return str if Fragment === str
|
60
58
|
str.extend Fragment
|
61
59
|
str.tag = tag.to_s
|
@@ -65,13 +63,7 @@ module Tagz
|
|
65
63
|
options.each{|k,v| str.send "#{ k }=", v}
|
66
64
|
str.created_at = caller
|
67
65
|
str
|
68
|
-
end #--}}}
|
69
|
-
|
70
|
-
=begin
|
71
|
-
def tag
|
72
|
-
stack.last
|
73
66
|
end
|
74
|
-
=end
|
75
67
|
|
76
68
|
def stack
|
77
69
|
@stack ||= []
|
@@ -87,31 +79,86 @@ module Tagz
|
|
87
79
|
stack.pop
|
88
80
|
end
|
89
81
|
|
90
|
-
def closes? other
|
82
|
+
def closes? other
|
91
83
|
tag.to_s == other.tag.to_s
|
92
|
-
end
|
84
|
+
end
|
93
85
|
|
94
|
-
def << content
|
86
|
+
def << content
|
95
87
|
super content.to_s
|
96
|
-
end
|
88
|
+
end
|
97
89
|
|
98
|
-
def add fragment
|
90
|
+
def add fragment
|
99
91
|
push fragment
|
100
92
|
oid = fragment.object_id
|
101
93
|
self << fragment unless added[oid]
|
102
94
|
self
|
103
95
|
ensure
|
104
96
|
added[oid] = true
|
105
|
-
end
|
106
|
-
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
107
100
|
|
101
|
+
module Abilities
|
102
|
+
private
|
103
|
+
def tagz *argv, &block
|
104
|
+
stack = __tag_stack__
|
105
|
+
top = stack.last
|
106
|
+
size = stack.size
|
108
107
|
|
109
|
-
|
110
|
-
|
108
|
+
unless block
|
109
|
+
top ||= Fragment()
|
110
|
+
if argv.empty?
|
111
|
+
top
|
112
|
+
else
|
113
|
+
string = argv.join
|
114
|
+
top.add string
|
115
|
+
string
|
116
|
+
end
|
117
|
+
else
|
118
|
+
obj = Tagz === self ? self : clone.instance_eval{ extend Tagz; self }
|
119
|
+
stack << (top=Fragment())
|
120
|
+
top = stack.last
|
121
|
+
tid = top.object_id
|
122
|
+
|
123
|
+
string = obj.instance_eval(&block)
|
124
|
+
|
125
|
+
until stack.last.object_id == tid
|
126
|
+
pop = stack.pop
|
127
|
+
last = stack.last
|
128
|
+
last.add pop
|
129
|
+
end
|
130
|
+
|
131
|
+
top = stack.pop
|
132
|
+
|
133
|
+
content_was_added = top.size > 0
|
134
|
+
top.add string unless content_was_added
|
135
|
+
|
136
|
+
top
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
def method_missing m, *a, &b
|
141
|
+
case m.to_s
|
142
|
+
when %r/^(.*[^_])_(!)?$/o
|
143
|
+
m, bang = $1, $2
|
144
|
+
unless bang
|
145
|
+
__tag_start__ m, *a, &b
|
146
|
+
else
|
147
|
+
__tag_start__(m, *a){}
|
148
|
+
end
|
149
|
+
when %r/^_([^_].*)$/o
|
150
|
+
m = $1
|
151
|
+
__tag_stop__ m, *a, &b
|
152
|
+
else
|
153
|
+
super
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
def __tag_stack__
|
111
158
|
@__tag_stack__ ||= []
|
112
|
-
end
|
159
|
+
end
|
113
160
|
|
114
|
-
def __tag_attrs__ attrs = {}
|
161
|
+
def __tag_attrs__ attrs = {}
|
115
162
|
return nil if attrs.empty?
|
116
163
|
( 42 - 10 ).chr <<
|
117
164
|
case attrs
|
@@ -120,9 +167,9 @@ module Tagz
|
|
120
167
|
else
|
121
168
|
attrs.to_s
|
122
169
|
end
|
123
|
-
end
|
170
|
+
end
|
124
171
|
|
125
|
-
def __tag_start__ *argv, &block
|
172
|
+
def __tag_start__ *argv, &block
|
126
173
|
tag = argv.shift
|
127
174
|
|
128
175
|
case argv.size
|
@@ -235,9 +282,9 @@ module Tagz
|
|
235
282
|
|
236
283
|
content
|
237
284
|
end
|
238
|
-
end
|
285
|
+
end
|
239
286
|
|
240
|
-
def __tag_stop__ tag
|
287
|
+
def __tag_stop__ tag
|
241
288
|
stack = __tag_stack__
|
242
289
|
top = stack.last
|
243
290
|
stop = Fragment( "</#{ tag }>", tag, :open => false )
|
@@ -255,68 +302,10 @@ module Tagz
|
|
255
302
|
else
|
256
303
|
raise NotOpen, tag.to_s
|
257
304
|
end
|
258
|
-
end
|
259
|
-
|
260
|
-
def method_missing m, *a, &b #--{{{
|
261
|
-
case m.to_s
|
262
|
-
when %r/^(.*[^_])_(!)?$/o
|
263
|
-
m, bang = $1, $2
|
264
|
-
unless bang
|
265
|
-
__tag_start__ m, *a, &b
|
266
|
-
else
|
267
|
-
__tag_start__(m, *a){}
|
268
|
-
end
|
269
|
-
when %r/^_([^_].*)$/o
|
270
|
-
m = $1
|
271
|
-
__tag_stop__ m, *a, &b
|
272
|
-
else
|
273
|
-
super
|
274
|
-
end
|
275
|
-
end #--}}}
|
276
|
-
|
277
|
-
def tagz *argv, &block #--{{{
|
278
|
-
stack = __tag_stack__
|
279
|
-
top = stack.last
|
280
|
-
size = stack.size
|
281
|
-
|
282
|
-
unless block
|
283
|
-
top ||= Fragment()
|
284
|
-
if argv.empty?
|
285
|
-
top
|
286
|
-
else
|
287
|
-
string = argv.join
|
288
|
-
top.add string
|
289
|
-
string
|
290
|
-
end
|
291
|
-
else
|
292
|
-
obj = Tagz === self ? self : clone.instance_eval{ extend Tagz; self }
|
293
|
-
stack << (top=Fragment())
|
294
|
-
top = stack.last
|
295
|
-
tid = top.object_id
|
296
|
-
|
297
|
-
string = obj.instance_eval(&block)
|
298
|
-
|
299
|
-
until stack.last.object_id == tid
|
300
|
-
pop = stack.pop
|
301
|
-
last = stack.last
|
302
|
-
last.add pop
|
303
|
-
end
|
304
|
-
|
305
|
-
top = stack.pop
|
306
|
-
|
307
|
-
content_was_added = top.size > 0
|
308
|
-
top.add string unless content_was_added
|
309
|
-
|
310
|
-
top
|
311
|
-
end
|
312
|
-
end #--}}}
|
313
|
-
alias_method "markup", "tagz"
|
314
|
-
alias_method "__", "tagz"
|
315
|
-
alias_method "_", "tagz"
|
305
|
+
end
|
316
306
|
|
317
307
|
def Fragment(*a, &b) Fragment.new(*a, &b) end
|
318
308
|
|
319
|
-
### TODO - i'd like to use 'tag' for these but action view has eaten it!
|
320
309
|
def element tag, *a, &b
|
321
310
|
__tag_stack__ << (top=Fragment())
|
322
311
|
__tag_start__ tag, *a, &b
|
@@ -354,36 +343,15 @@ module Tagz
|
|
354
343
|
'xml:lang' => 'en'
|
355
344
|
decl << html_(attrs, &b)
|
356
345
|
end
|
357
|
-
end
|
358
|
-
|
359
|
-
|
360
|
-
### OLD CRAP
|
361
|
-
=begin
|
362
|
-
def concat s #--{{{
|
363
|
-
tagz << s.to_s
|
364
|
-
self
|
365
|
-
end #--}}}
|
366
|
-
def tag *a, &b #--{{{
|
367
|
-
__tag_start__ *a, &b
|
368
|
-
end #--}}}
|
369
|
-
def tag! *a, &b #--{{{
|
370
|
-
__tag_start__(*a){}
|
371
|
-
end #--}}}
|
372
|
-
def tag_ *a, &b #--{{{
|
373
|
-
__tag_start__ *a, &b
|
374
|
-
end #--}}}
|
375
|
-
def _tag *a, &b #--{{{
|
376
|
-
__tag_stop__ *a, &b
|
377
|
-
end #--}}}
|
378
|
-
=end
|
346
|
+
end
|
379
347
|
|
380
|
-
def self.included other
|
348
|
+
def self.included other
|
381
349
|
other.module_eval{ include Abilities }
|
382
|
-
end
|
350
|
+
end
|
383
351
|
|
384
|
-
def self.extend_object other
|
352
|
+
def self.extend_object other
|
385
353
|
other.extend Abilities
|
386
|
-
end
|
354
|
+
end
|
387
355
|
|
388
356
|
class ::String
|
389
357
|
include Tagz
|
@@ -416,7 +384,23 @@ module Tagz
|
|
416
384
|
tagz{ __tag_start__(self, *a){} }
|
417
385
|
end
|
418
386
|
end
|
387
|
+
end
|
419
388
|
|
389
|
+
class Object
|
390
|
+
def Tagz &block
|
391
|
+
const = Object.const_get :Tagz
|
392
|
+
if block
|
393
|
+
if const === self
|
394
|
+
this = self
|
395
|
+
else
|
396
|
+
this = eval('self', block).dup
|
397
|
+
this.send :extend, Tagz
|
398
|
+
end
|
399
|
+
this.send :tagz, &block
|
400
|
+
else
|
401
|
+
const
|
402
|
+
end
|
403
|
+
end
|
420
404
|
end
|
421
405
|
|
422
406
|
require File.join(File.dirname(__FILE__), 'tagz', 'rails') if defined? Rails
|
data/test/tagz.rb
CHANGED
@@ -301,7 +301,7 @@ class TagzTest < Test::Unit::TestCase
|
|
301
301
|
html_{
|
302
302
|
body_{
|
303
303
|
div_ :k => :v
|
304
|
-
|
304
|
+
tagz << "content"
|
305
305
|
_div
|
306
306
|
}
|
307
307
|
}
|
@@ -331,16 +331,15 @@ class TagzTest < Test::Unit::TestCase
|
|
331
331
|
def test_280 #--{{{
|
332
332
|
expected = 'content'
|
333
333
|
actual = (
|
334
|
-
|
334
|
+
tagz << "content"
|
335
335
|
)
|
336
336
|
assert_equal expected, actual
|
337
337
|
end #--}}}
|
338
338
|
def test_290 #--{{{
|
339
339
|
expected = 'foobar'
|
340
340
|
actual = (
|
341
|
-
|
342
|
-
|
343
|
-
__ 'bar'
|
341
|
+
tagz {
|
342
|
+
tagz << 'foo' << 'bar'
|
344
343
|
}
|
345
344
|
)
|
346
345
|
assert_equal expected, actual
|
@@ -348,7 +347,7 @@ class TagzTest < Test::Unit::TestCase
|
|
348
347
|
def test_300 #--{{{
|
349
348
|
expected = 'foobar'
|
350
349
|
actual = (
|
351
|
-
|
350
|
+
tagz{ tagz 'foo', 'bar' }
|
352
351
|
)
|
353
352
|
assert_equal expected, actual
|
354
353
|
end #--}}}
|
metadata
CHANGED
@@ -1,35 +1,27 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.9.2
|
3
|
-
specification_version: 1
|
4
2
|
name: tagz
|
5
3
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.0.
|
7
|
-
date: 2007-07-18 00:00:00 -06:00
|
8
|
-
summary: tagz
|
9
|
-
require_paths:
|
10
|
-
- lib
|
11
|
-
email: ara.t.howard@noaa.gov
|
12
|
-
homepage: http://codeforpeople.com/lib/ruby/tagz/
|
13
|
-
rubyforge_project:
|
14
|
-
description:
|
15
|
-
autorequire: tagz
|
16
|
-
default_executable:
|
17
|
-
bindir: bin
|
18
|
-
has_rdoc: false
|
19
|
-
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
-
requirements:
|
21
|
-
- - ">"
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version: 0.0.0
|
24
|
-
version:
|
4
|
+
version: 0.0.4
|
25
5
|
platform: ruby
|
26
|
-
signing_key:
|
27
|
-
cert_chain:
|
28
|
-
post_install_message:
|
29
6
|
authors:
|
30
7
|
- Ara T. Howard
|
8
|
+
autorequire: tagz
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2008-02-14 00:00:00 -07:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description:
|
17
|
+
email: ara.t.howard@noaa.gov
|
18
|
+
executables: []
|
19
|
+
|
20
|
+
extensions: []
|
21
|
+
|
22
|
+
extra_rdoc_files: []
|
23
|
+
|
31
24
|
files:
|
32
|
-
- a.rb
|
33
25
|
- gemspec.rb
|
34
26
|
- gen_readme.rb
|
35
27
|
- install.rb
|
@@ -144,18 +136,31 @@ files:
|
|
144
136
|
- sample/a.rb
|
145
137
|
- test
|
146
138
|
- test/tagz.rb
|
147
|
-
|
148
|
-
|
149
|
-
|
139
|
+
has_rdoc: false
|
140
|
+
homepage: http://codeforpeople.com/lib/ruby/tagz/
|
141
|
+
post_install_message:
|
150
142
|
rdoc_options: []
|
151
143
|
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
144
|
+
require_paths:
|
145
|
+
- lib
|
146
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
147
|
+
requirements:
|
148
|
+
- - ">="
|
149
|
+
- !ruby/object:Gem::Version
|
150
|
+
version: "0"
|
151
|
+
version:
|
152
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
153
|
+
requirements:
|
154
|
+
- - ">="
|
155
|
+
- !ruby/object:Gem::Version
|
156
|
+
version: "0"
|
157
|
+
version:
|
158
158
|
requirements: []
|
159
159
|
|
160
|
-
|
161
|
-
|
160
|
+
rubyforge_project:
|
161
|
+
rubygems_version: 1.0.1
|
162
|
+
signing_key:
|
163
|
+
specification_version: 2
|
164
|
+
summary: tagz
|
165
|
+
test_files:
|
166
|
+
- test/tagz.rb
|
data/a.rb
DELETED