tagz 0.0.2 → 0.0.4
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/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