tagz 5.0.1 → 6.0.0

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.
Files changed (13) hide show
  1. data/README +40 -249
  2. data/Rakefile +228 -0
  3. data/lib/tagz.rb +234 -154
  4. data/readme.erb +154 -0
  5. data/samples/d.rb +4 -4
  6. data/tagz.gemspec +26 -0
  7. data/test/tagz.rb +154 -0
  8. metadata +6 -8
  9. data/a.rb +0 -12
  10. data/gemspec.rb +0 -44
  11. data/gen_readme.rb +0 -34
  12. data/install.rb +0 -214
  13. data/prof.rb +0 -25
@@ -0,0 +1,154 @@
1
+ NAME
2
+
3
+ tagz.rb
4
+
5
+ SYNOPSIS
6
+
7
+ require Tagz
8
+
9
+ include Tagz.globally
10
+
11
+ a_(:href => "/foo"){ "bar" } #=> <a href="/foo">bar</a>
12
+
13
+ DESCRIPTION
14
+
15
+ tagz.rb is generates html, xml, or any sgml variant like a small ninja
16
+ running across the backs of a herd of giraffes swatting of heads like a
17
+ mark-up weedwacker. weighing in at less than 300 lines of code tagz.rb adds
18
+ an html/xml/sgml syntax to ruby that is both unobtrusive, safe, and available
19
+ globally to objects without the need for any builder or superfluous objects.
20
+ tagz.rb is designed for applications that generate html to be able to do so
21
+ easily in any context without heavyweight syntax or scoping issues, like a
22
+ ninja sword through butter.
23
+
24
+ FEATURES
25
+
26
+ - use as a library or mixin
27
+
28
+ - simple, clean and consistent mark-up that is easy to visually
29
+ distinguish from other ruby methods
30
+
31
+ - auto-compatibility with rails/actionview
32
+
33
+ - ability to independently open and close tagz in markup
34
+
35
+ - intelligent auto-escaping of both attributes and content for both html
36
+ and xml
37
+
38
+ - validate your html/xml with 'ruby -c' syntax check
39
+
40
+ - generally bitchin
41
+
42
+ - no lame method_missing approach that prevents tagz like 'type' from being
43
+ generated
44
+
45
+ RAILS
46
+
47
+ in config/environment.rb
48
+
49
+ require 'tagz'
50
+
51
+ in a helper
52
+
53
+ def list_of_users
54
+ ul_(:class => 'users'){
55
+ @users.each{|user| li_{ user }}
56
+ }
57
+ end
58
+
59
+ in a view
60
+
61
+ table_{
62
+ rows.each do |row|
63
+ tr_{
64
+ row.each do |cell|
65
+ td_{ cell }
66
+ end
67
+ }
68
+ end
69
+ }
70
+
71
+ in a controller
72
+
73
+ def ajax_responder
74
+ text =
75
+ tagz{
76
+ table_{
77
+ rows.each do |row|
78
+ tr_{
79
+ row.each do |cell|
80
+ td_{ cell }
81
+ end
82
+ }
83
+ end
84
+ }
85
+ }
86
+
87
+ render :text => text
88
+ end
89
+
90
+ INSTALL
91
+
92
+ gem install tagz
93
+
94
+ URIS
95
+
96
+ http://github.com/ahoward/tagz/tree/master
97
+ http://rubyforge.org/projects/codeforpeople
98
+
99
+ HISTORY
100
+ 6.0.0
101
+ - reorganize lib to avoid dumping a few constants into the includee - aka
102
+ don't absolutely minimize namespace pollution. there is now reason to
103
+ thing this version shouldn't be backwards compat - i bumped the version
104
+ just in case
105
+
106
+ 5.1.0
107
+ - attribute/content auto-escaping can be turned off with
108
+
109
+ Tagz.i_know_what_the_hell_i_am_doing!
110
+
111
+ and turned back on with
112
+
113
+ Tagz.i_do_not_know_what_the_hell_i_am_doing!
114
+
115
+ attribute and content escaping can be configured individually too. see
116
+ tests for examples
117
+
118
+
119
+ thanks Dan Fitzpatrick
120
+
121
+ - << and concat escape (if configured) while puts and push and write do not
122
+
123
+ thanks JoelVanderWerf
124
+
125
+ 5.0.0
126
+ - introduce better escaping for attributes using xchar.rb approach
127
+ - indroduce smart escaping for content
128
+ - make Tagz.globally kick ass more hard
129
+ - note that this version is not backward compatibile if you were relying
130
+ on tagz never escaping any content should be an ok upgrade for most
131
+ applications
132
+
133
+ 4.6.0
134
+ - fix a bug with self closing tagz that had crept in 1.0.0 -> 4.2.0. thx
135
+ jeremy hinegardner
136
+
137
+ - added tests from 1.0.0 back into svn
138
+
139
+ 4.4.0
140
+ - remove dependancy on cgi lib, tagz is now completely standalone
141
+
142
+ 4.3.0
143
+ - detect rails and auto-include into ActionController::Base and include
144
+ globally into ActionView::Base
145
+
146
+ 4.2.0
147
+ - general lib cleanup
148
+ - introduction of dual-mixin technique (Tagz.globally)
149
+ - few small bug fixes
150
+ - ninja tales
151
+
152
+ SAMPLES
153
+
154
+ <%= @samples %>
@@ -12,16 +12,16 @@ def header
12
12
  html_
13
13
  body_(:class => 'ninja-like', :id => 'giraffe-slayer')
14
14
 
15
- ___ "<!-- this is the header -->"
15
+ __ "<!-- this is the header -->"
16
16
  }
17
17
  end
18
18
 
19
19
  def footer
20
20
  tagz{
21
- ___ "<!-- this is the footer -->"
21
+ __ "<!-- this is the footer -->"
22
22
 
23
- body_
24
- html_
23
+ _body
24
+ _html
25
25
  }
26
26
  end
27
27
 
@@ -0,0 +1,26 @@
1
+ ## tagz.gemspec
2
+ #
3
+
4
+ Gem::Specification::new do |spec|
5
+ spec.name = "tagz"
6
+ spec.version = "6.0.0"
7
+ spec.platform = Gem::Platform::RUBY
8
+ spec.summary = "tagz"
9
+
10
+ spec.files = ["lib", "lib/tagz.rb", "Rakefile", "README", "readme.erb", "samples", "samples/a.rb", "samples/b.rb", "samples/c.rb", "samples/d.rb", "samples/e.rb", "samples/f.rb", "samples/g.rb", "tagz.gemspec", "test", "test/tagz.rb"]
11
+ spec.executables = []
12
+
13
+ spec.require_path = "lib"
14
+
15
+ spec.has_rdoc = true
16
+ spec.test_files = "test/tagz.rb"
17
+ #spec.add_dependency 'lib', '>= version'
18
+ #spec.add_dependency 'fattr'
19
+
20
+ spec.extensions.push(*[])
21
+
22
+ spec.rubyforge_project = "codeforpeople"
23
+ spec.author = "Ara T. Howard"
24
+ spec.email = "ara.t.howard@gmail.com"
25
+ spec.homepage = "http://github.com/ahoward/tagz/tree/master"
26
+ end
@@ -550,4 +550,158 @@ class TagzTest < Test::Unit::TestCase
550
550
  assert_equal expected, actual
551
551
  assert_nothing_raised{ c.b }
552
552
  end
553
+
554
+ def test_460
555
+ c = Class.new{
556
+ include Tagz.globally
557
+ def a
558
+ div_( 'a>b' => 'a>b' ){ 'content' }
559
+ end
560
+ }.new
561
+
562
+ actual = nil
563
+ assert_nothing_raised{ actual=c.a}
564
+ expected = %(<div a&gt;b="a&gt;b">content</div>)
565
+ assert_equal expected, actual
566
+
567
+ original = Tagz.escape_attribute! false
568
+ assert original
569
+ actual = nil
570
+ assert_nothing_raised{ actual=c.a}
571
+ expected = %(<div a>b="a>b">content</div>)
572
+ assert_equal expected, actual
573
+
574
+ Tagz.escape_attribute! original
575
+ actual = nil
576
+ assert_nothing_raised{ actual=c.a}
577
+ expected = %(<div a&gt;b="a&gt;b">content</div>)
578
+ assert_equal expected, actual
579
+
580
+ upcased = Tagz.escape_attribute! lambda{|value| original.call(value).upcase}
581
+ assert upcased
582
+ actual = nil
583
+ assert_nothing_raised{ actual=c.a}
584
+ expected = %(<div A&GT;B="A&GT;B">content</div>)
585
+ assert_equal expected, actual
586
+
587
+ Tagz.escape_attributes! lambda{|value| upcased.call(value).downcase}
588
+ actual = nil
589
+ assert_nothing_raised{ actual=c.a}
590
+ expected = %(<div a&gt;b="a&gt;b">content</div>)
591
+ assert_equal expected, actual
592
+ ensure
593
+ Tagz.escape_attributes!(original)
594
+ end
595
+
596
+ def test_470
597
+ c = Class.new{
598
+ include Tagz.globally
599
+ def a
600
+ div_( ){ 'a>b' }
601
+ end
602
+ }.new
603
+
604
+ actual = nil
605
+ assert_nothing_raised{ actual=c.a}
606
+ expected = %(<div>a&gt;b</div>)
607
+ assert_equal expected, actual
608
+
609
+ original = Tagz.escape_content! false
610
+ assert original
611
+ actual = nil
612
+ assert_nothing_raised{ actual=c.a}
613
+ expected = %(<div>a>b</div>)
614
+ assert_equal expected, actual
615
+
616
+ upcased = Tagz.escape_content! lambda{|value| original.call(value).upcase}
617
+ assert upcased
618
+ actual = nil
619
+ assert_nothing_raised{ actual=c.a}
620
+ expected = %(<div>A&GT;B</div>)
621
+ assert_equal expected, actual
622
+
623
+ Tagz.escape_content! original
624
+ actual = nil
625
+ assert_nothing_raised{ actual=c.a}
626
+ expected = %(<div>a&gt;b</div>)
627
+ assert_equal expected, actual
628
+ ensure
629
+ Tagz.escape_content!(original)
630
+ end
631
+
632
+ def test_480
633
+ c = Class.new{
634
+ include Tagz.globally
635
+ def a
636
+ div_( 'a>b' => '<>'){ 'a>b' }
637
+ end
638
+ }.new
639
+
640
+ Tagz.i_know_what_the_hell_i_am_doing!
641
+ actual = nil
642
+ assert_nothing_raised{ actual=c.a}
643
+ expected = %(<div a>b="<>">a>b</div>)
644
+ assert_equal expected, actual
645
+ ensure
646
+ Tagz.i_do_not_know_what_the_hell_i_am_doing!
647
+ end
648
+
649
+ def test_490
650
+ c = Class.new{
651
+ include Tagz.globally
652
+ def a
653
+ div_{
654
+ __
655
+ tagz.concat 'a>b'
656
+ __
657
+ tagz.write 'c>d'
658
+ __
659
+ tagz << 'e>f'
660
+ __
661
+ tagz.push 'g>h'
662
+ }
663
+ end
664
+ }.new
665
+
666
+ actual = nil
667
+ assert_nothing_raised{ actual=c.a}
668
+ expected = "<div>\na&gt;b\nc>d\ne&gt;f\ng>h</div>"
669
+ assert_equal expected, actual
670
+ end
671
+
672
+ def test_500
673
+ expected = actual = nil
674
+ Module.new do
675
+ before = constants
676
+ include Tagz
677
+ after = constants
678
+ expected = %w[ TagzConstants ]
679
+ actual = after - before
680
+ end
681
+ assert_equal expected, actual
682
+ end
683
+
684
+ def test_510
685
+ expected = actual = nil
686
+ Module.new do
687
+ before = constants
688
+ include Tagz.globally
689
+ after = constants
690
+ expected = %w[ TagzConstants ]
691
+ actual = after - before
692
+ end
693
+ assert_equal expected, actual
694
+ end
695
+
696
+ def test_520
697
+ expected = actual = nil
698
+ Module.new do
699
+ before = constants
700
+ include Tagz.privately
701
+ after = constants
702
+ expected = %w[ TagzConstants ]
703
+ actual = after - before
704
+ end
705
+ assert_equal expected, actual
706
+ end
553
707
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tagz
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.0.1
4
+ version: 6.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ara T. Howard
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-03-25 00:00:00 -06:00
12
+ date: 2009-07-25 00:00:00 -06:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -22,14 +22,11 @@ extensions: []
22
22
  extra_rdoc_files: []
23
23
 
24
24
  files:
25
- - a.rb
26
- - gemspec.rb
27
- - gen_readme.rb
28
- - install.rb
29
25
  - lib
30
26
  - lib/tagz.rb
31
- - prof.rb
27
+ - Rakefile
32
28
  - README
29
+ - readme.erb
33
30
  - samples
34
31
  - samples/a.rb
35
32
  - samples/b.rb
@@ -38,10 +35,11 @@ files:
38
35
  - samples/e.rb
39
36
  - samples/f.rb
40
37
  - samples/g.rb
38
+ - tagz.gemspec
41
39
  - test
42
40
  - test/tagz.rb
43
41
  has_rdoc: true
44
- homepage: http://codeforpeople.com/lib/ruby/tagz/
42
+ homepage: http://github.com/ahoward/tagz/tree/master
45
43
  post_install_message:
46
44
  rdoc_options: []
47
45
 
data/a.rb DELETED
@@ -1,12 +0,0 @@
1
- require 'tagz'
2
-
3
- include Tagz.globally
4
-
5
- c = Class.new{
6
- include Tagz.globally
7
- def a() tagz{ a_{ b(tagz); nil } } end
8
- def b(doc) tagz(doc){ b_{ 'content' } } end
9
- }.new
10
-
11
- puts c.a
12
-
data/gemspec.rb DELETED
@@ -1,44 +0,0 @@
1
- #! /usr/bin/env gem build
2
-
3
- require 'rubygems'
4
-
5
- Gem::Specification::new do |spec|
6
- $VERBOSE = nil
7
-
8
- shiteless = lambda do |list|
9
- list.delete_if do |file|
10
- file =~ %r/\.svn/ or
11
- file =~ %r/\.tmp/
12
- end
13
- end
14
-
15
- spec.name = $lib
16
- spec.version = $version
17
- spec.platform = Gem::Platform::RUBY
18
- spec.summary = $lib
19
-
20
- spec.files = shiteless[Dir::glob("**/**")]
21
- spec.executables = shiteless[Dir::glob("bin/*")].map{|exe| File::basename exe}
22
-
23
- spec.require_path = "lib"
24
-
25
- spec.has_rdoc = true #File::exist? "doc"
26
- spec.test_suite_file = "test/#{ $lib }.rb" if File::file?("test/#{ $lib }.rb")
27
- #spec.add_dependency 'lib', '>= version'
28
- #spec.add_dependency 'fattr'
29
-
30
- spec.extensions << "extconf.rb" if File::exists? "extconf.rb"
31
-
32
- spec.rubyforge_project = 'codeforpeople'
33
- spec.author = "Ara T. Howard"
34
- spec.email = "ara.t.howard@gmail.com"
35
- spec.homepage = "http://codeforpeople.com/lib/ruby/#{ $lib }/"
36
- end
37
-
38
-
39
- BEGIN{
40
- Dir.chdir(File.dirname(__FILE__))
41
- $lib = 'tagz'
42
- Kernel.load "./lib/#{ $lib }.rb"
43
- $version = Tagz.version
44
- }