xhtml_report_generator 0.0.2 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/xhtml_report_generator.rb +4 -3
- data/lib/xhtml_report_generator/custom.rb +63 -32
- data/lib/xhtml_report_generator/version.rb +1 -1
- metadata +12 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ee7cef2f258529bb6cda36c4dc3f57099eed7cb6
|
4
|
+
data.tar.gz: 236b3246f37cf842901a2841d444094e557ecec7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 140ca1648b99672e2e184d3a17e1e6364c90f8c8e446aa71441f424746fea1408a3ac1652d8c1da2fa4ce136f28c2c4078bee0773de581f0b29987ff1e60517f
|
7
|
+
data.tar.gz: e11a1be493f829854522b8d8f9c577fcb3afbdf3883e4717ae4e0d4bfdcf48666b795d3c5f90170d06f68fab60e90ec003889441ad788007192c827972ac3c81
|
@@ -7,7 +7,8 @@ require 'rexml/document'
|
|
7
7
|
module XhtmlReportGenerator
|
8
8
|
class Generator
|
9
9
|
attr_accessor :document
|
10
|
-
# @param opts [Hash]
|
10
|
+
# @param opts [Hash] See the example for an explanation of the valid symbols
|
11
|
+
# @example Valid symbols for the opts Hash
|
11
12
|
# :jquery if specified, path to a version of jquery, that will be inlined into the html header section
|
12
13
|
# :toc if specified, path to a javascript.js.rb file that contains the magic to generate all
|
13
14
|
# :css if specified, path to a css file that contains the markup rules for your generated reports
|
@@ -31,7 +32,7 @@ module XhtmlReportGenerator
|
|
31
32
|
# all existing Generator classes
|
32
33
|
instance_eval symbols[:custom_rb]
|
33
34
|
|
34
|
-
@document = Generator.
|
35
|
+
@document = Generator.createXhtmlDoc("Title")
|
35
36
|
head = @document.elements["//head"]
|
36
37
|
# insert the custom css, and javascript files
|
37
38
|
style = head.add_element("style", {"type" => "text/css"})
|
@@ -47,7 +48,7 @@ module XhtmlReportGenerator
|
|
47
48
|
|
48
49
|
# Creates a minimal valid xhtml document including header title and body elements
|
49
50
|
# @param title [String] Title in the header section
|
50
|
-
def self.
|
51
|
+
def self.createXhtmlDoc(title)
|
51
52
|
header = '<?xml version="1.0" encoding="UTF-8" standalone="no"?>'
|
52
53
|
header += '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'
|
53
54
|
|
@@ -1,12 +1,14 @@
|
|
1
1
|
# The module needs to be called 'Custom'
|
2
2
|
module Custom
|
3
|
+
|
3
4
|
#puts Module.nesting
|
4
|
-
|
5
|
-
# creates the basic page layout and sets the current Element to
|
6
|
-
#
|
5
|
+
|
6
|
+
# creates the basic page layout and sets the current Element to the main content area (middle div)
|
7
|
+
# @example The middle div is matched by the following xPath
|
8
|
+
# //body/div[@class='middle']
|
7
9
|
def createLayout
|
8
10
|
@body = @document.elements["//body"]
|
9
|
-
|
11
|
+
# only add the layout if it is not already there
|
10
12
|
if !@layout
|
11
13
|
@body.add_element("div", {"class" => "head"})
|
12
14
|
@body.add_element("div", {"class" => "lefttoc", "id" => "ltoc"})
|
@@ -23,44 +25,55 @@ module Custom
|
|
23
25
|
div = @document.elements["//body/div[@class='head']"]
|
24
26
|
div.text = title
|
25
27
|
end
|
28
|
+
|
29
|
+
def getTitle()
|
30
|
+
pagetitle = @document.elements["//head/title"]
|
31
|
+
return pagetitle.text
|
32
|
+
end
|
26
33
|
|
27
|
-
# set the current element the first element matched by the xpath expression
|
28
|
-
|
34
|
+
# set the current element to the first element matched by the xpath expression.
|
35
|
+
# The current element is the one which was last added
|
36
|
+
def setCurrent!(xpath)
|
29
37
|
@current = @document.elements[xpath]
|
30
38
|
end
|
39
|
+
|
40
|
+
# returns the current xml element
|
41
|
+
def getCurrent()
|
42
|
+
return @current
|
43
|
+
end
|
31
44
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
45
|
+
# Appends a <pre> node after the @current node
|
46
|
+
def code(text, attrs={})
|
47
|
+
temp = REXML::Element.new("pre")
|
48
|
+
temp.add_attributes(attrs)
|
49
|
+
@div_middle.insert_after(@current, temp)
|
50
|
+
@current = temp
|
36
51
|
@current.add_text(text)
|
37
|
-
|
52
|
+
return @current
|
38
53
|
end
|
39
|
-
|
54
|
+
|
55
|
+
# Appends a <p> node after the @current node
|
40
56
|
def content(text, attrs={})
|
41
|
-
|
57
|
+
temp = REXML::Element.new("p")
|
58
|
+
temp.add_attributes(attrs)
|
59
|
+
@div_middle.insert_after(@current, temp)
|
60
|
+
@current = temp
|
42
61
|
@current.add_text(text)
|
43
62
|
return @current
|
44
63
|
end
|
45
64
|
|
46
|
-
|
47
|
-
|
65
|
+
# insert arbitrary xml code after the @current element in the content pane (div middle)
|
66
|
+
def html(text)
|
48
67
|
# we need to create a new document with a pseudo root
|
49
68
|
doc = REXML::Document.new("<root>"+text+"</root>")
|
50
|
-
# then we move all children of root to the actual
|
69
|
+
# then we move all children of root to the actual div middle element and insert after current
|
51
70
|
for i in doc.root.to_a do
|
52
|
-
@
|
71
|
+
@div_middle.insert_after(@current, i)
|
72
|
+
@current = i
|
53
73
|
end
|
54
74
|
return @current
|
55
75
|
end
|
56
76
|
|
57
|
-
#TODO
|
58
|
-
def contentAfter(locaiton, text)
|
59
|
-
end
|
60
|
-
|
61
|
-
#TODO
|
62
|
-
def contentBefore(locaiton, text)
|
63
|
-
end
|
64
77
|
|
65
78
|
# puts a <span> </span> tag around all captures of the regex
|
66
79
|
# NOTE: nested captures are not supported and don't make sense in this context!!
|
@@ -131,16 +144,31 @@ module Custom
|
|
131
144
|
end # for i in arr do
|
132
145
|
end
|
133
146
|
|
134
|
-
# creates a table from
|
135
|
-
def table (table_data)
|
147
|
+
# creates a html table from two dimensional array of the form Array[row][col]
|
148
|
+
def table (table_data, table_attrs={}, tr_attrs={}, th_attrs={}, td_attrs={})
|
149
|
+
@current = @div_middle.add_element("table", table_attrs)
|
150
|
+
|
151
|
+
for i in 0..table_data.length-1 do
|
152
|
+
row = @current.add_element("tr", tr_attrs)
|
153
|
+
for j in 0..table_data[i].length-1 do
|
154
|
+
if j == 0
|
155
|
+
col = row.add_element("th", th_attrs)
|
156
|
+
col.add_text(table_data[i][j])
|
157
|
+
else
|
158
|
+
col = row.add_element("td", td_attrs)
|
159
|
+
col.add_text(table_data[i][j])
|
160
|
+
end
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
136
164
|
end
|
137
165
|
|
138
|
-
# Appends a new heading element to body
|
139
|
-
# @param type [String] specifiy "h1", "h2", "h3" for the heading
|
166
|
+
# Appends a new heading element to body, and sets current to this new heading
|
140
167
|
# @param text [String] the heading text
|
168
|
+
# @param type [String] specifiy "h1", "h2", "h3" for the heading
|
141
169
|
# @param toc [symbol] one of :ltoc, :rtoc, :btoc depending on in which toc you want to display the heading
|
142
170
|
# @return the added element
|
143
|
-
def heading(
|
171
|
+
def heading(text, type, toc=:ltoc)
|
144
172
|
case toc
|
145
173
|
when :rtoc
|
146
174
|
opts = {"class" => "onlyrtoc"}
|
@@ -150,13 +178,16 @@ module Custom
|
|
150
178
|
opts = {}
|
151
179
|
end
|
152
180
|
|
153
|
-
|
181
|
+
temp = REXML::Element.new(type)
|
182
|
+
temp.add_attributes(opts)
|
183
|
+
|
184
|
+
@div_middle.insert_after(@current, temp)
|
185
|
+
@current = temp
|
154
186
|
@current.text = text
|
155
|
-
|
156
187
|
return @current
|
157
188
|
end
|
158
189
|
|
159
|
-
|
190
|
+
|
160
191
|
# @param element [REXML::Element] the element in whose text tags will be added at the specified indices of @index_length_array
|
161
192
|
# @param parent [REXML::Element] the parent to which @element should be attached after parsing
|
162
193
|
# @param tagname [String] the tag that will be introduced as <tagname> at the indices specified
|
metadata
CHANGED
@@ -1,25 +1,26 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: xhtml_report_generator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Manuel Widmer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-12-
|
11
|
+
date: 2014-12-22 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: |
|
14
14
|
Here is an example usage:
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
15
|
+
@example Basic Testreport
|
16
|
+
gen1 = XhtmlReportGenerator::Generator.new
|
17
|
+
gen1.createLayout
|
18
|
+
gen1.setTitle("Example Report")
|
19
|
+
gen1.heading("titel", "h1", :btoc)
|
20
|
+
gen1.heading("subtitel", "h2", :ltoc)
|
21
|
+
gen1.heading("section", "h3")
|
22
|
+
gen1.content("content function: Hallo welt <br /> html test <span class="r" >red span test</span>", {"class"=>"bold"})
|
23
|
+
gen1.html("<p class="italic">html function: Hallo welt <br /> html test <span class="r" >red span test</span></p>")
|
23
24
|
|
24
25
|
The javascript to render the table of contents, the custom generator functions and style sheet all can be
|
25
26
|
supplied by your own, if needed.
|
@@ -61,3 +62,4 @@ signing_key:
|
|
61
62
|
specification_version: 4
|
62
63
|
summary: A simple and quick xhtml report generator
|
63
64
|
test_files: []
|
65
|
+
has_rdoc:
|