html-table 1.3.2 → 1.3.3
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +13 -0
- data/MANIFEST +13 -13
- data/README +27 -26
- data/Rakefile +120 -2
- data/examples/advanced.rb +128 -0
- data/examples/intermediate1.rb +72 -0
- data/examples/intermediate2.rb +62 -0
- data/examples/intermediate3.rb +46 -0
- data/examples/simple1.rb +39 -0
- data/examples/simple2.rb +47 -0
- data/examples/simple3.rb +41 -0
- data/html-table.gemspec +5 -3
- data/lib/html/attribute_handler.rb +8 -16
- data/lib/html/table.rb +11 -4
- data/lib/html/tag_handler.rb +1 -3
- data/test/{tc_attribute_handler.rb → test_attribute_handler.rb} +110 -9
- data/test/{tc_body.rb → test_body.rb} +31 -28
- data/test/{tc_caption.rb → test_caption.rb} +26 -23
- data/test/{tc_col.rb → test_col.rb} +13 -10
- data/test/{tc_colgroup.rb → test_colgroup.rb} +29 -26
- data/test/{tc_data.rb → test_data.rb} +18 -15
- data/test/{tc_foot.rb → test_foot.rb} +34 -28
- data/test/{tc_head.rb → test_head.rb} +27 -24
- data/test/{tc_header.rb → test_header.rb} +20 -17
- data/test/test_html_handler.rb +40 -0
- data/test/test_row.rb +144 -0
- data/test/{tc_table.rb → test_table.rb} +47 -44
- data/test/{tc_tablesection.rb → test_tablesection.rb} +14 -11
- data/test/test_tag_handler.rb +93 -0
- metadata +61 -37
- data/html-table-1.3.2.gem +0 -0
- data/test/tc_html_handler.rb +0 -37
- data/test/tc_row.rb +0 -141
- data/test/tc_tag_handler.rb +0 -82
data/CHANGES
CHANGED
@@ -1,3 +1,16 @@
|
|
1
|
+
== 1.3.3 - 5-Feb-2009
|
2
|
+
* Added structured_warnings as a requirement. The non standard tags now
|
3
|
+
raise a NonStandardExtensionWarning. These are now _always_ raised whenever
|
4
|
+
used (instead of only in $VERBOSE mode), but the warning can be disabled as
|
5
|
+
you see fit. See the documentation on structured_warnings for more details.
|
6
|
+
* Added test-unit 2.x as a requirement.
|
7
|
+
* Refactored and renamed the tests.
|
8
|
+
* The gem now includes the example files.
|
9
|
+
* Added additional rake tasks for the sake of testing individual portions
|
10
|
+
of the html-table library instead of the all or nothing approach I had
|
11
|
+
before.
|
12
|
+
* Added rake tasks for running the example programs.
|
13
|
+
|
1
14
|
== 1.3.2 - 15-Jul-2008
|
2
15
|
* Added to_s and to_str aliases for the html method for all classes.
|
3
16
|
* Some documentation updates.
|
data/MANIFEST
CHANGED
@@ -41,16 +41,16 @@ lib/html/table.rb
|
|
41
41
|
lib/html/tablesection.rb
|
42
42
|
lib/html/tag_handler.rb
|
43
43
|
|
44
|
-
test/
|
45
|
-
test/
|
46
|
-
test/
|
47
|
-
test/
|
48
|
-
test/
|
49
|
-
test/
|
50
|
-
test/
|
51
|
-
test/
|
52
|
-
test/
|
53
|
-
test/
|
54
|
-
test/
|
55
|
-
test/
|
56
|
-
test/
|
44
|
+
test/test_attribute_handler.rb
|
45
|
+
test/test_body.rb
|
46
|
+
test/test_caption.rb
|
47
|
+
test/test_col.rb
|
48
|
+
test/test_colgroup.rb
|
49
|
+
test/test_data.rb
|
50
|
+
test/test_head.rb
|
51
|
+
test/test_header.rb
|
52
|
+
test/test_html_handler.rb
|
53
|
+
test/test_row.rb
|
54
|
+
test/test_table.rb
|
55
|
+
test/test_tablesection.rb
|
56
|
+
test/test_tag_handler.rb
|
data/README
CHANGED
@@ -3,14 +3,17 @@
|
|
3
3
|
|
4
4
|
== Prerequisites
|
5
5
|
* Ruby 1.8.0 or later
|
6
|
-
*
|
6
|
+
* strongtyping 2.0.6 or later
|
7
|
+
* structured_warnings 0.1.1 or later
|
7
8
|
|
8
9
|
== Installation
|
10
|
+
=== Remote
|
11
|
+
gem install html-table
|
12
|
+
|
13
|
+
=== Local
|
9
14
|
rake test (optional)
|
10
15
|
rake install OR rake gem_install
|
11
16
|
|
12
|
-
Just do 'gem install html-table' for remote installation.
|
13
|
-
|
14
17
|
== Synopsis
|
15
18
|
require 'html/table'
|
16
19
|
include HTML
|
@@ -83,8 +86,9 @@
|
|
83
86
|
the latter case, it is case-insensitive. See the documentation on
|
84
87
|
specific methods for more details.
|
85
88
|
|
86
|
-
Using a non-standard extension (e.g. "background") will
|
87
|
-
|
89
|
+
Using a non-standard extension (e.g. "background") will emit a
|
90
|
+
NonStandardExtensionWarning. See the documentation for structured_warnings
|
91
|
+
for more information on how to control these.
|
88
92
|
|
89
93
|
== Known Bugs
|
90
94
|
None that I'm aware of. Please report bugs on the project page at
|
@@ -93,9 +97,6 @@
|
|
93
97
|
== Future Plans
|
94
98
|
Documentation improvements (include inline links to other files).
|
95
99
|
|
96
|
-
Allow standard html tags to be added to elements as appropriate, such
|
97
|
-
as <B>, <I>, etc.
|
98
|
-
|
99
100
|
== Acknowledgements
|
100
101
|
Anthony Peacock, for giving me ideas with his HTML::Table Perl module.
|
101
102
|
|
@@ -105,7 +106,7 @@
|
|
105
106
|
Ruby's
|
106
107
|
|
107
108
|
== Copyright
|
108
|
-
(C) 2003-
|
109
|
+
(C) 2003-2009 Daniel J. Berger
|
109
110
|
All Rights Reserved
|
110
111
|
|
111
112
|
== Warranty
|
@@ -120,20 +121,20 @@
|
|
120
121
|
|
121
122
|
== Developer's Notes
|
122
123
|
Some people might be a little annoyed with the fact that I required Ryan
|
123
|
-
Pavlik's strongtyping library. I'm not a big fan of strong typing myself.
|
124
|
-
why did I do this?
|
125
|
-
|
126
|
-
Normally when creating code, you setup your own rules as far as what is
|
127
|
-
as an argument. You publish the API, set up a good set of tests,
|
128
|
-
bother worrying about types because you figure people can read
|
129
|
-
won't go out of their way to break it. You certainly don't
|
130
|
-
yourself because you're used to dynamic languages and find
|
131
|
-
the strong typing training wheels after all
|
132
|
-
|
133
|
-
However, HTML tables have a predefined set of rules as far as what content
|
134
|
-
valid, and where it's placed in order to be HTML 4.0 compliant. For
|
135
|
-
if a caption is included, it should be at the 'top' of your table
|
136
|
-
can only have one foot section, and so on.
|
137
|
-
conventions and
|
138
|
-
without it, and instead chose to do a plethora of "kind_of?" checks.
|
139
|
-
Ryan's package is both faster and required less typing on my part.
|
124
|
+
Pavlik's strongtyping library. I'm not a big fan of strong typing myself.
|
125
|
+
So, why did I do this?
|
126
|
+
|
127
|
+
Normally when creating code, you setup your own rules as far as what is
|
128
|
+
allowed as an argument. You publish the API, set up a good set of tests,
|
129
|
+
and don't bother worrying about types because you figure people can read
|
130
|
+
the API and won't go out of their way to break it. You certainly don't
|
131
|
+
worry about it yourself because you're used to dynamic languages and find
|
132
|
+
that you don't need the strong typing training wheels after all, right?
|
133
|
+
|
134
|
+
However, HTML tables have a predefined set of rules as far as what content
|
135
|
+
is valid, and where it's placed in order to be HTML 4.0 compliant. For
|
136
|
+
example, if a caption is included, it should be at the 'top' of your table
|
137
|
+
syntax, you can only have one foot section, and so on. I therefore chose to
|
138
|
+
enforce these conventions and rules in Ruby via Ryan's module. I could have
|
139
|
+
lived without it, and instead chose to do a plethora of "kind_of?" checks.
|
140
|
+
However, Ryan's package is both faster and required less typing on my part.
|
data/Rakefile
CHANGED
@@ -17,8 +17,126 @@ task :install_gem do
|
|
17
17
|
sh "gem install #{file}"
|
18
18
|
end
|
19
19
|
|
20
|
+
|
21
|
+
namespace 'example' do
|
22
|
+
desc "Run the first simple html-table example"
|
23
|
+
task :simple1 do
|
24
|
+
sh 'ruby -Ilib examples/simple1.rb'
|
25
|
+
end
|
26
|
+
|
27
|
+
desc "Run the second simple html-table example"
|
28
|
+
task :simple2 do
|
29
|
+
sh 'ruby -Ilib examples/simple2.rb'
|
30
|
+
end
|
31
|
+
|
32
|
+
desc "Run the third simple html-table example"
|
33
|
+
task :simple3 do
|
34
|
+
sh 'ruby -Ilib examples/simple3.rb'
|
35
|
+
end
|
36
|
+
|
37
|
+
desc "Run the first intermediate html-table example"
|
38
|
+
task :intermediate1 do
|
39
|
+
sh 'ruby -Ilib examples/intermediate1.rb'
|
40
|
+
end
|
41
|
+
|
42
|
+
desc "Run the second intermediate html-table example"
|
43
|
+
task :intermediate2 do
|
44
|
+
sh 'ruby -Ilib examples/intermediate2.rb'
|
45
|
+
end
|
46
|
+
|
47
|
+
desc "Run the advanced html-table example"
|
48
|
+
task :advanced do
|
49
|
+
sh 'ruby -Ilib examples/advanced.rb'
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
20
53
|
Rake::TestTask.new do |t|
|
21
|
-
t.libs << 'lib'
|
22
54
|
t.warning = true
|
23
|
-
t.
|
55
|
+
t.verbose = true
|
56
|
+
end
|
57
|
+
|
58
|
+
namespace 'test' do
|
59
|
+
Rake::TestTask.new('attribute_handler') do |t|
|
60
|
+
t.warning = true
|
61
|
+
t.verbose = true
|
62
|
+
t.test_files = FileList['test/test_attribute_handler.rb']
|
63
|
+
end
|
64
|
+
|
65
|
+
Rake::TestTask.new('body') do |t|
|
66
|
+
t.warning = true
|
67
|
+
t.verbose = true
|
68
|
+
t.test_files = FileList['test/test_body.rb']
|
69
|
+
end
|
70
|
+
|
71
|
+
Rake::TestTask.new('caption') do |t|
|
72
|
+
t.warning = true
|
73
|
+
t.verbose = true
|
74
|
+
t.test_files = FileList['test/test_caption.rb']
|
75
|
+
end
|
76
|
+
|
77
|
+
Rake::TestTask.new('col') do |t|
|
78
|
+
t.warning = true
|
79
|
+
t.verbose = true
|
80
|
+
t.test_files = FileList['test/test_col.rb']
|
81
|
+
end
|
82
|
+
|
83
|
+
Rake::TestTask.new('colgroup') do |t|
|
84
|
+
t.warning = true
|
85
|
+
t.verbose = true
|
86
|
+
t.test_files = FileList['test/test_colgroup.rb']
|
87
|
+
end
|
88
|
+
|
89
|
+
Rake::TestTask.new('data') do |t|
|
90
|
+
t.warning = true
|
91
|
+
t.verbose = true
|
92
|
+
t.test_files = FileList['test/test_data.rb']
|
93
|
+
end
|
94
|
+
|
95
|
+
Rake::TestTask.new('foot') do |t|
|
96
|
+
t.warning = true
|
97
|
+
t.verbose = true
|
98
|
+
t.test_files = FileList['test/test_foot.rb']
|
99
|
+
end
|
100
|
+
|
101
|
+
Rake::TestTask.new('head') do |t|
|
102
|
+
t.warning = true
|
103
|
+
t.verbose = true
|
104
|
+
t.test_files = FileList['test/test_head.rb']
|
105
|
+
end
|
106
|
+
|
107
|
+
Rake::TestTask.new('header') do |t|
|
108
|
+
t.warning = true
|
109
|
+
t.verbose = true
|
110
|
+
t.test_files = FileList['test/test_header.rb']
|
111
|
+
end
|
112
|
+
|
113
|
+
Rake::TestTask.new('html_handler') do |t|
|
114
|
+
t.warning = true
|
115
|
+
t.verbose = true
|
116
|
+
t.test_files = FileList['test/test_html_handler.rb']
|
117
|
+
end
|
118
|
+
|
119
|
+
Rake::TestTask.new('row') do |t|
|
120
|
+
t.warning = true
|
121
|
+
t.verbose = true
|
122
|
+
t.test_files = FileList['test/test_row.rb']
|
123
|
+
end
|
124
|
+
|
125
|
+
Rake::TestTask.new('table') do |t|
|
126
|
+
t.warning = true
|
127
|
+
t.verbose = true
|
128
|
+
t.test_files = FileList['test/test_table.rb']
|
129
|
+
end
|
130
|
+
|
131
|
+
Rake::TestTask.new('tablesection') do |t|
|
132
|
+
t.warning = true
|
133
|
+
t.verbose = true
|
134
|
+
t.test_files = FileList['test/test_tablesection.rb']
|
135
|
+
end
|
136
|
+
|
137
|
+
Rake::TestTask.new('tag_handler') do |t|
|
138
|
+
t.warning = true
|
139
|
+
t.verbose = true
|
140
|
+
t.test_files = FileList['test/test_tag_handler.rb']
|
141
|
+
end
|
24
142
|
end
|
@@ -0,0 +1,128 @@
|
|
1
|
+
##############################################################################
|
2
|
+
# advanced1.rb
|
3
|
+
#
|
4
|
+
# For this example we'll use every feature I can think of to come up with
|
5
|
+
# the example found in "HTML: The Definitive Guide", pp. 395-396 (O'Reilly
|
6
|
+
# & Associates, 3rd ed).
|
7
|
+
#
|
8
|
+
# You can run this example via the 'example:advanced' rake task.
|
9
|
+
##############################################################################
|
10
|
+
require 'html/table'
|
11
|
+
include HTML
|
12
|
+
|
13
|
+
Table::Row::Data.end_tags = false
|
14
|
+
Table::Row::Header.end_tags = false
|
15
|
+
|
16
|
+
# Demonstrates the DSL style syntax
|
17
|
+
table = Table.new do
|
18
|
+
border 1
|
19
|
+
cellspacing 0
|
20
|
+
cellpadding 0
|
21
|
+
rules 'groups'
|
22
|
+
end
|
23
|
+
|
24
|
+
# Demonstrates the use of setters after object creation
|
25
|
+
caption = Table::Caption.new
|
26
|
+
caption.align = "bottom"
|
27
|
+
caption.content = "Kumquat versus a poked eye, by gender"
|
28
|
+
|
29
|
+
thead = Table::Head.create
|
30
|
+
tbody = Table::Body.new
|
31
|
+
tfoot = Table::Foot.create
|
32
|
+
|
33
|
+
# Add a row with a td and th, then configure after the fact.
|
34
|
+
thead.push Table::Row.new{ |r|
|
35
|
+
r.content = Table::Row::Data.new, Table::Row::Header.new
|
36
|
+
}
|
37
|
+
|
38
|
+
# And again, longhand
|
39
|
+
hrow = Table::Row.new
|
40
|
+
h1 = Table::Row::Header.new('Eating Kumquats')
|
41
|
+
h2 = Table::Row::Header.new('Poke In The Eye')
|
42
|
+
hrow.push h1, h2
|
43
|
+
thead.push hrow
|
44
|
+
|
45
|
+
# Configure a row after the fact
|
46
|
+
thead.configure(0,0){ |d|
|
47
|
+
d.colspan = 2
|
48
|
+
d.rowspan = 2
|
49
|
+
}
|
50
|
+
|
51
|
+
thead.configure(0,1){ |h|
|
52
|
+
h.colspan = 2
|
53
|
+
h.align = "center"
|
54
|
+
h.content = "Preference"
|
55
|
+
}
|
56
|
+
|
57
|
+
# Ugly, but just to show you that it's possible
|
58
|
+
tbody.push(
|
59
|
+
Table::Row.new{ |r|
|
60
|
+
r.align = "center"
|
61
|
+
r.content =
|
62
|
+
Table::Row::Header.new{ |h|
|
63
|
+
h.rowspan = 2
|
64
|
+
h.content = "Gender"
|
65
|
+
},
|
66
|
+
Table::Row::Header.new{ |h| h.content = "Male" },
|
67
|
+
"73%",
|
68
|
+
"27%"
|
69
|
+
}
|
70
|
+
)
|
71
|
+
|
72
|
+
brow = Table::Row.new{ |r| r.align = "center" }
|
73
|
+
bheader = Table::Row::Header.new('Female')
|
74
|
+
brow.push(bheader,"16%","84%")
|
75
|
+
|
76
|
+
tbody.push(brow)
|
77
|
+
|
78
|
+
frow = Table::Row.new{ |r|
|
79
|
+
r.content = Table::Row::Data.new{ |d|
|
80
|
+
d.colspan = 4
|
81
|
+
d.align = "center"
|
82
|
+
d.content = "Note: eye pokes did not result in permanent injury"
|
83
|
+
}
|
84
|
+
}
|
85
|
+
|
86
|
+
tfoot[0] = frow
|
87
|
+
|
88
|
+
table.push thead, tbody, tfoot
|
89
|
+
|
90
|
+
# caption is added last, but does the right thing
|
91
|
+
table.push caption
|
92
|
+
|
93
|
+
puts table.html
|
94
|
+
|
95
|
+
=begin
|
96
|
+
### OUTPUT ###
|
97
|
+
<table border=1 cellspacing=0 cellpadding=0 rules='groups'>
|
98
|
+
<caption align='bottom'>Kumquat versus a poked eye, by gender</caption>
|
99
|
+
<thead>
|
100
|
+
<tr>
|
101
|
+
<td colspan=2 rowspan=2>
|
102
|
+
<th colspan=2 align='center'>Preference
|
103
|
+
</tr>
|
104
|
+
<tr>
|
105
|
+
<th>Eating Kumquats
|
106
|
+
<th>Poke In The Eye
|
107
|
+
</tr>
|
108
|
+
</thead>
|
109
|
+
<tbody>
|
110
|
+
<tr align='center'>
|
111
|
+
<th rowspan=2>Gender
|
112
|
+
<th>Male
|
113
|
+
<td>73%
|
114
|
+
<td>27%
|
115
|
+
</tr>
|
116
|
+
<tr align='center'>
|
117
|
+
<th>Female
|
118
|
+
<td>16%
|
119
|
+
<td>84%
|
120
|
+
</tr>
|
121
|
+
</tbody>
|
122
|
+
<tfoot>
|
123
|
+
<tr>
|
124
|
+
<td colspan=4 align='center'>Note: eye pokes did not result in permanent injury
|
125
|
+
</tr>
|
126
|
+
</tfoot>
|
127
|
+
</table>
|
128
|
+
=end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
##############################################################################
|
2
|
+
# intermediate1.rb
|
3
|
+
#
|
4
|
+
# A slightly more advanced HTML Table. This time we'll add some attributes,
|
5
|
+
# add a few rows both implicitly and explicitly, then configure it
|
6
|
+
# after-the-fact.
|
7
|
+
#
|
8
|
+
# You can run this via the "example:intermediate1" rake task.
|
9
|
+
##############################################################################
|
10
|
+
require 'html/table'
|
11
|
+
include HTML
|
12
|
+
|
13
|
+
# Create a table, add two rows implicitly
|
14
|
+
table = Table.new{ |t|
|
15
|
+
t.border = 1
|
16
|
+
t.align = "left"
|
17
|
+
t.content = [
|
18
|
+
["foo","bar","baz"],
|
19
|
+
[1,2]
|
20
|
+
]
|
21
|
+
}
|
22
|
+
|
23
|
+
# Create a Table::Row object with one Data object added implicitly
|
24
|
+
row1 = Table::Row.new{ |r|
|
25
|
+
r.bgcolor = "red"
|
26
|
+
r.nowrap = true
|
27
|
+
r.content = "test"
|
28
|
+
}
|
29
|
+
|
30
|
+
# Create a Table::Row object, add a Data object explicitly (with some
|
31
|
+
# configuration to boot)
|
32
|
+
row2 = Table::Row.new{ |r|
|
33
|
+
r.bgcolor = "blue"
|
34
|
+
r.align = "right"
|
35
|
+
r.content = Table::Row::Data.new{ |d|
|
36
|
+
d.content = "hello world!"
|
37
|
+
d.abbr = "test abbr"
|
38
|
+
}
|
39
|
+
}
|
40
|
+
|
41
|
+
# Add the rows explicitly to the table
|
42
|
+
table.push row1, row2
|
43
|
+
|
44
|
+
# Let's configure the row that contains "foo","bar","baz"
|
45
|
+
# Remember, row and column counts start at 0, not 1
|
46
|
+
table.configure(0){ |r|
|
47
|
+
r.bgcolor = "green"
|
48
|
+
r.align = "right"
|
49
|
+
}
|
50
|
+
|
51
|
+
puts table.html
|
52
|
+
|
53
|
+
=begin
|
54
|
+
### OUTPUT ###
|
55
|
+
<table border=1 align='left'>
|
56
|
+
<tr bgcolor='green' align='right'>
|
57
|
+
<td>foo</td>
|
58
|
+
<td>bar</td>
|
59
|
+
<td>baz</td>
|
60
|
+
</tr>
|
61
|
+
<tr>
|
62
|
+
<td>1</td>
|
63
|
+
<td>2</td>
|
64
|
+
</tr>
|
65
|
+
<tr bgcolor='red' nowrap>
|
66
|
+
<td>test</td>
|
67
|
+
</tr>
|
68
|
+
<tr bgcolor='blue' align='right'>
|
69
|
+
<td abbr='test abbr'>hello world!</td>
|
70
|
+
</tr>
|
71
|
+
</table>
|
72
|
+
=end
|