wizport 0.0.1 → 0.0.2
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/.gitignore +5 -5
- data/Gemfile +9 -4
- data/Rakefile +1 -1
- data/lib/wizport.rb +24 -5
- data/lib/wizport/builder/pdf.rb +65 -0
- data/lib/wizport/builder/rtf.rb +56 -0
- data/lib/wizport/document/Rtf/cell.rb +58 -0
- data/lib/wizport/document/Rtf/command.rb +22 -0
- data/lib/wizport/document/Rtf/document.rb +83 -0
- data/lib/wizport/document/Rtf/element.rb +12 -0
- data/lib/wizport/document/Rtf/group.rb +17 -0
- data/lib/wizport/document/Rtf/plaintext.rb +17 -0
- data/lib/wizport/document/Rtf/row.rb +40 -0
- data/lib/wizport/document/Rtf/rtf_builder.rb +39 -0
- data/lib/wizport/document/Rtf/spec.rb +191 -0
- data/lib/wizport/document/Rtf/table.rb +37 -0
- data/lib/wizport/document/Rtf/text.rb +39 -0
- data/lib/wizport/document/pdf.rb +31 -0
- data/lib/wizport/document/rtf.rb +36 -0
- data/lib/wizport/document/txt.rb +25 -0
- data/lib/wizport/engine/active_source.rb +13 -0
- data/lib/wizport/engine/column.rb +22 -0
- data/lib/wizport/engine/director.rb +10 -0
- data/lib/wizport/engine/mongoid_source.rb +25 -0
- data/lib/wizport/engine/report.rb +51 -0
- data/lib/wizport/engine/section.rb +16 -0
- data/lib/wizport/engine/sql_source.rb +3 -0
- data/lib/wizport/version.rb +3 -3
- data/lib/wizport/visitor.rb +39 -0
- data/spec/spec_helper.rb +8 -0
- data/spec/wizport/document/rtf/text_spec.rb +15 -0
- data/spec/wizport/document/rtf_spec.rb +17 -0
- data/spec/wizport/engine/report_spec.rb +36 -0
- data/wizport.gemspec +26 -24
- metadata +79 -3
data/.gitignore
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
*.gem
|
2
|
-
.bundle
|
3
|
-
Gemfile.lock
|
4
|
-
pkg/*
|
5
|
-
.idea/
|
1
|
+
*.gem
|
2
|
+
.bundle
|
3
|
+
Gemfile.lock
|
4
|
+
pkg/*
|
5
|
+
.idea/
|
data/Gemfile
CHANGED
data/Rakefile
CHANGED
@@ -1 +1 @@
|
|
1
|
-
require "bundler/gem_tasks"
|
1
|
+
require "bundler/gem_tasks"
|
data/lib/wizport.rb
CHANGED
@@ -1,5 +1,24 @@
|
|
1
|
-
require "
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
1
|
+
require "prawn"
|
2
|
+
|
3
|
+
require "wizport/version"
|
4
|
+
|
5
|
+
require "wizport/document/pdf"
|
6
|
+
|
7
|
+
require "wizport/visitor"
|
8
|
+
require "wizport/document/Rtf/element"
|
9
|
+
require "wizport/document/Rtf/plaintext"
|
10
|
+
require "wizport/document/Rtf/command"
|
11
|
+
require "wizport/document/Rtf/group"
|
12
|
+
require "wizport/document/Rtf/text"
|
13
|
+
require "wizport/document/rtf"
|
14
|
+
|
15
|
+
require "wizport/builder/pdf"
|
16
|
+
require "wizport/builder/rtf"
|
17
|
+
|
18
|
+
require "wizport/engine/mongoid_source"
|
19
|
+
require "wizport/engine/column"
|
20
|
+
require "wizport/engine/section"
|
21
|
+
require "wizport/engine/report"
|
22
|
+
module Wizport
|
23
|
+
# Your code goes here...
|
24
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
# Wizport: A gem for creating reports by specifying columns, groups, styles, etc.
|
4
|
+
# Copyright 2012 by sgzhe@163.com
|
5
|
+
|
6
|
+
module Wizport
|
7
|
+
module Builder
|
8
|
+
class Pdf
|
9
|
+
def initialize(report)
|
10
|
+
@rpt = report
|
11
|
+
@pdf = Wizport::Document::Pdf.new
|
12
|
+
end
|
13
|
+
|
14
|
+
def header
|
15
|
+
@pdf.text @rpt.title
|
16
|
+
end
|
17
|
+
|
18
|
+
def grid
|
19
|
+
tbl = []
|
20
|
+
tbl << @rpt.columns.map {|c| c.title }
|
21
|
+
@rpt.source.all.each do |obj|
|
22
|
+
tbl << @rpt.columns.map {|c| obj.send(c.name)}
|
23
|
+
end
|
24
|
+
@pdf.table tbl
|
25
|
+
end
|
26
|
+
|
27
|
+
def section(section)
|
28
|
+
@tbl = []
|
29
|
+
@rpt.source.groups(section).each do |group|
|
30
|
+
section_header(section,group)
|
31
|
+
section_body(section,group)
|
32
|
+
section_footer(section,group)
|
33
|
+
end
|
34
|
+
@pdf.table @tbl
|
35
|
+
end
|
36
|
+
|
37
|
+
def section_header(section,group)
|
38
|
+
@tbl << ["#{section.title}:#{group}"]
|
39
|
+
end
|
40
|
+
|
41
|
+
def section_body(section,group)
|
42
|
+
rows = []
|
43
|
+
rows << @rpt.columns.map {|c| c.title }
|
44
|
+
objs = @rpt.source.filter({section.group => group})
|
45
|
+
objs.each do |obj|
|
46
|
+
rows << @rpt.columns.map {|c| obj.send(c.name)}
|
47
|
+
end
|
48
|
+
@tbl << [@pdf.make_table(rows)]
|
49
|
+
end
|
50
|
+
|
51
|
+
def section_footer(section,group)
|
52
|
+
|
53
|
+
end
|
54
|
+
|
55
|
+
def footer
|
56
|
+
|
57
|
+
end
|
58
|
+
|
59
|
+
def save(file)
|
60
|
+
@pdf.save(file)
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
# Wizport: A gem for creating reports by specifying columns, groups, styles, etc.
|
4
|
+
# Copyright 2012 by sgzhe@163.com
|
5
|
+
|
6
|
+
module Wizport
|
7
|
+
module Builder
|
8
|
+
class Rtf
|
9
|
+
def initialize(report)
|
10
|
+
@rpt = report
|
11
|
+
@rtf = Wizport::Document::Rtf.new
|
12
|
+
end
|
13
|
+
|
14
|
+
def header
|
15
|
+
@rtf.text @rpt.title
|
16
|
+
end
|
17
|
+
|
18
|
+
def section(section)
|
19
|
+
@tbl = []
|
20
|
+
@rpt.source.groups(section).each do |group|
|
21
|
+
section_header(section, group)
|
22
|
+
section_body(section, group)
|
23
|
+
section_footer(section, group)
|
24
|
+
end
|
25
|
+
@rtf.table @tbl
|
26
|
+
end
|
27
|
+
|
28
|
+
def section_header(section, group)
|
29
|
+
@tbl << ["#{section.title}:#{group}"]
|
30
|
+
end
|
31
|
+
|
32
|
+
def section_body(section, group)
|
33
|
+
#rows = []
|
34
|
+
#rows << @rpt.columns.map { |c| c.title }
|
35
|
+
#objs = @rpt.source.filter({section.group => group})
|
36
|
+
#objs.each do |obj|
|
37
|
+
# rows << @rpt.columns.map { |c| obj.send(c.name) }
|
38
|
+
#end
|
39
|
+
#@tbl << [@rtf.make_table(rows)]
|
40
|
+
end
|
41
|
+
|
42
|
+
def section_footer(section, group)
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
def footer
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
def save(file)
|
51
|
+
@rtf.save(file)
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
# Wizport: A gem for creating reports by specifying columns, groups, styles, etc.
|
4
|
+
# Copyright 2012 by sgzhe@163.com
|
5
|
+
|
6
|
+
module Wizport
|
7
|
+
module Rtf
|
8
|
+
class Cell
|
9
|
+
attr_accessor :col_span, :row_span
|
10
|
+
def initialize(data,row = nil)
|
11
|
+
@row = row
|
12
|
+
@index = @row.cells.size
|
13
|
+
@col_span = 1
|
14
|
+
@row_span = 1
|
15
|
+
@text = ""
|
16
|
+
if data.is_a?(Hash)
|
17
|
+
@col_span = data[:col_span] if data[:col_span]
|
18
|
+
@row_span = data[:row_span] if data[:row_span]
|
19
|
+
@text = data[:text]
|
20
|
+
else
|
21
|
+
@text = data
|
22
|
+
end
|
23
|
+
|
24
|
+
unless col_spanned?
|
25
|
+
@row.table.elements << Command.new(:celld)
|
26
|
+
@row.table.elements << Command.new(:clvmgf) if @row_span > 1
|
27
|
+
@row.table.elements << Command.new(:clvmrg) if row_spanned?
|
28
|
+
@row.table.elements << Command.new(:cellx, (@index+@col_span)*1000)
|
29
|
+
@row.table.elements << Plaintext.new(@text)
|
30
|
+
@row.table.elements << Command.new(:cell)
|
31
|
+
end
|
32
|
+
|
33
|
+
#@row.cellx_command Command.new(:clvmgf) if @row_span > 1
|
34
|
+
#@row.cellx_command Command.new(:clvmrg) if row_spanned?
|
35
|
+
#@row.cellx_command Command.new(:cellx, (@index+@col_span)*1000)
|
36
|
+
#@row.cellt_command Plaintext.new(@text)
|
37
|
+
#@row.cellt_command Command.new(:cell)
|
38
|
+
end
|
39
|
+
|
40
|
+
def col_spanned?
|
41
|
+
@index.times do |c|
|
42
|
+
return true if @row.cells[c].col_span + c > @index
|
43
|
+
end
|
44
|
+
return false
|
45
|
+
end
|
46
|
+
|
47
|
+
def row_spanned?
|
48
|
+
@row.index.times do |r|
|
49
|
+
return true if @row.table.rows[r].cells[@index].row_span + r > @row.index
|
50
|
+
end
|
51
|
+
return false
|
52
|
+
end
|
53
|
+
|
54
|
+
|
55
|
+
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
# Wizport: A gem for creating reports by specifying columns, groups, styles, etc.
|
4
|
+
# Copyright 2012 by sgzhe@163.com
|
5
|
+
|
6
|
+
module Wizport
|
7
|
+
module Rtf
|
8
|
+
class Command < Element
|
9
|
+
attr_accessor :name,:value
|
10
|
+
|
11
|
+
def initialize(name,value = nil)
|
12
|
+
@name = name
|
13
|
+
@value = value
|
14
|
+
end
|
15
|
+
|
16
|
+
def ctrl
|
17
|
+
@name.to_s + @value.to_s
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
# Wizport: A gem for creating reports by specifying columns, groups, styles, etc.
|
4
|
+
# Copyright 2012 by sgzhe@163.com
|
5
|
+
|
6
|
+
require "../../visitor"
|
7
|
+
require "./element"
|
8
|
+
require "./plaintext"
|
9
|
+
require "./command"
|
10
|
+
require "./group"
|
11
|
+
require "./text"
|
12
|
+
require "./cell"
|
13
|
+
require "./row"
|
14
|
+
require "./table"
|
15
|
+
require "./rtf_builder"
|
16
|
+
|
17
|
+
|
18
|
+
module Wizport
|
19
|
+
module Rtf
|
20
|
+
class Document < Group
|
21
|
+
def initialize(file = nil, &block)
|
22
|
+
super()
|
23
|
+
elements << Command.new(:rtf, 1)
|
24
|
+
block.arity<1 ? self.instance_eval(&block) : block.call(self) if block_given?
|
25
|
+
save file if file
|
26
|
+
end
|
27
|
+
|
28
|
+
#styles = {align,font,font_size,color }
|
29
|
+
def text(txt, styles = {:align => :left})
|
30
|
+
elements << Text.new(txt,styles)
|
31
|
+
end
|
32
|
+
|
33
|
+
def table(rows = [],&block)
|
34
|
+
elements << Table.new(rows, &block)
|
35
|
+
end
|
36
|
+
|
37
|
+
def colors(colours = ['ffffff'])
|
38
|
+
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
def style(txt, styles)
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
|
47
|
+
def method_missing(id, *args, &block)
|
48
|
+
cmd id, *args, &block
|
49
|
+
end
|
50
|
+
|
51
|
+
def to_s
|
52
|
+
|
53
|
+
end
|
54
|
+
|
55
|
+
def to_rtf
|
56
|
+
builder = RtfBuilder.new
|
57
|
+
accept(builder)
|
58
|
+
builder.to_rtf
|
59
|
+
end
|
60
|
+
|
61
|
+
def save(file)
|
62
|
+
File.open(file, 'w') { |file| file.write(to_rtf) }
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
if __FILE__ == $0
|
70
|
+
d = Wizport::Rtf::Document.new('c:/file.rtf') do
|
71
|
+
text "我们", :align => :center, :size => 48
|
72
|
+
text "春风不度玉门关", :align => :left, :font => 24
|
73
|
+
table [[{text:'eee',row_span:2},'s',{text:'ww',col_span:2},'d'],[nil,'s','d','d']] do
|
74
|
+
row ['f','s','d','d']
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
78
|
+
|
79
|
+
#p d.to_rtf
|
80
|
+
|
81
|
+
|
82
|
+
end
|
83
|
+
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
# Wizport: A gem for creating reports by specifying columns, groups, styles, etc.
|
4
|
+
# Copyright 2012 by sgzhe@163.com
|
5
|
+
|
6
|
+
|
7
|
+
module Wizport
|
8
|
+
module Rtf
|
9
|
+
class Group < Element
|
10
|
+
attr_accessor :elements
|
11
|
+
def initialize()
|
12
|
+
@elements = []
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
# Wizport: A gem for creating reports by specifying columns, groups, styles, etc.
|
4
|
+
# Copyright 2012 by sgzhe@163.com
|
5
|
+
|
6
|
+
module Wizport
|
7
|
+
module Rtf
|
8
|
+
class Plaintext < Element
|
9
|
+
attr_accessor :txt
|
10
|
+
|
11
|
+
def initialize(txt)
|
12
|
+
@txt = txt
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
# Wizport: A gem for creating reports by specifying columns, groups, styles, etc.
|
4
|
+
# Copyright 2012 by sgzhe@163.com
|
5
|
+
|
6
|
+
module Wizport
|
7
|
+
module Rtf
|
8
|
+
class Row
|
9
|
+
attr_accessor :table, :cells, :index
|
10
|
+
def initialize(columns,tbl = nil)
|
11
|
+
@table = tbl
|
12
|
+
@cells = []
|
13
|
+
@index = @table.rows.size
|
14
|
+
|
15
|
+
@table.elements << Command.new(:trowd)
|
16
|
+
@table.elements << Command.new(:trautofit1)
|
17
|
+
@table.elements << Command.new(:intbl)
|
18
|
+
columns.each_index do |i|
|
19
|
+
@cellx_index = nil
|
20
|
+
@cellt_index = nil
|
21
|
+
@cells << Cell.new(columns[i],self)
|
22
|
+
end
|
23
|
+
@table.elements << Command.new(:row)
|
24
|
+
end
|
25
|
+
|
26
|
+
def cellx_command(cmd)
|
27
|
+
@cellx_index = @cellx_index || @table.elements.size
|
28
|
+
@table.elements.insert @cellx_index, cmd
|
29
|
+
@cellx_index += 1
|
30
|
+
end
|
31
|
+
|
32
|
+
def cellt_command(cmd)
|
33
|
+
@cellt_index = @cellt_index || @table.elements.size
|
34
|
+
@table.elements.insert @cellt_index, cmd
|
35
|
+
@cellt_index += 1
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
# Wizport: A gem for creating reports by specifying columns, groups, styles, etc.
|
4
|
+
# Copyright 2012 by sgzhe@163.com
|
5
|
+
|
6
|
+
module Wizport
|
7
|
+
module Rtf
|
8
|
+
class RtfBuilder
|
9
|
+
include Wizport::Visitor
|
10
|
+
|
11
|
+
def initialize
|
12
|
+
@rtf = StringIO.new
|
13
|
+
end
|
14
|
+
|
15
|
+
visit Group do |element|
|
16
|
+
@rtf << '{'
|
17
|
+
element.elements.each do |el|
|
18
|
+
el.accept(self)
|
19
|
+
end if element.is_a?(Wizport::Rtf::Group)
|
20
|
+
@rtf << '}'
|
21
|
+
end
|
22
|
+
|
23
|
+
visit Command do |element|
|
24
|
+
@rtf << '\\'
|
25
|
+
@rtf << element.ctrl
|
26
|
+
end
|
27
|
+
|
28
|
+
visit Plaintext do |element|
|
29
|
+
@rtf << ' '
|
30
|
+
@rtf << element.txt
|
31
|
+
end
|
32
|
+
|
33
|
+
def to_rtf
|
34
|
+
@rtf.string
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,191 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
# Wizport: A gem for creating reports by specifying columns, groups, styles, etc.
|
4
|
+
# Copyright 2012 by sgzhe@163.com
|
5
|
+
|
6
|
+
module Wizport
|
7
|
+
module Rtf
|
8
|
+
class Spec
|
9
|
+
class << self
|
10
|
+
attr_reader :map
|
11
|
+
end
|
12
|
+
@map = {
|
13
|
+
# --- rtf general ----
|
14
|
+
:document_rtf => "rtf",
|
15
|
+
:document_ver => 1,
|
16
|
+
:document_generator => "generator",
|
17
|
+
|
18
|
+
# --- encoding ----
|
19
|
+
:encoding_ansi => "ansi",
|
20
|
+
:encoding_mac => "mac",
|
21
|
+
:encoding_pc => "pc",
|
22
|
+
:encoding_pca => "pca",
|
23
|
+
:encoding_ansi_code_page => "ansicpg",
|
24
|
+
|
25
|
+
# --- font ----
|
26
|
+
:font_table => "fonttbl",
|
27
|
+
:default_font => "deff",
|
28
|
+
:font => "f",
|
29
|
+
:font_kind_nil => "fnil",
|
30
|
+
:font_kind_roman => "froman",
|
31
|
+
:font_kind_swiss => "fswiss",
|
32
|
+
:font_kind_modern => "fmodern",
|
33
|
+
:font_kind_script => "fscript",
|
34
|
+
:font_kind_decor => "fdecor",
|
35
|
+
:font_kind_tech => "ftech",
|
36
|
+
:font_kind_bidi => "fbidi",
|
37
|
+
:font_charset => "fcharset",
|
38
|
+
:font_pitch => "fprq",
|
39
|
+
:font_size => "fs",
|
40
|
+
:font_down => "dn",
|
41
|
+
:font_up => "up",
|
42
|
+
:font_subscript => "sub",
|
43
|
+
:font_superscript => "super",
|
44
|
+
:fontNo_super_sub => "nosupersub",
|
45
|
+
|
46
|
+
:theme_font_lo_major => "flomajor", # these are 'theme' fonts
|
47
|
+
:theme_font_hi_major => "fhimajor", # used in new font tables
|
48
|
+
:theme_font_db_major => "fdbmajor",
|
49
|
+
:theme_font_bi_major => "fbimajor",
|
50
|
+
:theme_font_lo_minor => "flominor",
|
51
|
+
:theme_font_hi_minor => "fhiminor",
|
52
|
+
:theme_font_db_minor => "fdbminor",
|
53
|
+
:theme_font_bi_minor => "fbiminor",
|
54
|
+
:default_font_size => 24,
|
55
|
+
:code_page => "cpg",
|
56
|
+
|
57
|
+
# --- color ----
|
58
|
+
:color_table => "colortbl",
|
59
|
+
:color_red => "red",
|
60
|
+
:color_green => "green",
|
61
|
+
:color_blue => "blue",
|
62
|
+
:color_foreground => "cf",
|
63
|
+
:color_background => "cb",
|
64
|
+
:color_background_word => "chcbpat",
|
65
|
+
:color_highlight => "highlight",
|
66
|
+
|
67
|
+
# --- header/footer ----
|
68
|
+
:header => "header",
|
69
|
+
:header_first => "headerf",
|
70
|
+
:header_left => "headerl",
|
71
|
+
:header_right => "headerr",
|
72
|
+
:footer => "footer",
|
73
|
+
:footer_first => "footerf",
|
74
|
+
:footer_left => "footerl",
|
75
|
+
:footer_right => "footerr",
|
76
|
+
:footnote => "footnote",
|
77
|
+
|
78
|
+
# --- character ----
|
79
|
+
:delimiter => ",",
|
80
|
+
:extension_destination => "*",
|
81
|
+
:tilde => "~",
|
82
|
+
:hyphen => "-",
|
83
|
+
:underscore => "_",
|
84
|
+
|
85
|
+
# --- special character ----
|
86
|
+
:page => "page",
|
87
|
+
:section => "sect",
|
88
|
+
:paragraph => "par",
|
89
|
+
:line => "line",
|
90
|
+
:tabulator => "tab",
|
91
|
+
:em_dash => "emdash",
|
92
|
+
:en_ash => "endash",
|
93
|
+
:em_space => "emspace",
|
94
|
+
:en_space => "enspace",
|
95
|
+
:qm_space => "qmspace",
|
96
|
+
:bulltet => "bullet",
|
97
|
+
:left_single_quote => "lquote",
|
98
|
+
:right_single_quote => "rquote",
|
99
|
+
:left_double_quote => "ldblquote",
|
100
|
+
:right_double_quote => "rdblquote",
|
101
|
+
|
102
|
+
# --- format ----
|
103
|
+
:plain => "plain",
|
104
|
+
:paragraph_defaults => "pard",
|
105
|
+
:section_defaults => "sectd",
|
106
|
+
|
107
|
+
:bold => "b",
|
108
|
+
:italic => "i",
|
109
|
+
:underLine => "ul",
|
110
|
+
:underLineNone => "ulnone",
|
111
|
+
:strike_through => "strike",
|
112
|
+
:hidden => "v",
|
113
|
+
:align_left => "ql",
|
114
|
+
:align_center => "qc",
|
115
|
+
:align_right => "qr",
|
116
|
+
:align_justify => "qj",
|
117
|
+
|
118
|
+
:styleSheet => "stylesheet",
|
119
|
+
|
120
|
+
# --- info ----
|
121
|
+
:info => "info",
|
122
|
+
:info_version => "version",
|
123
|
+
:info_revision => "vern",
|
124
|
+
:info_number_of_pages => "nofpages",
|
125
|
+
:info_number_of_words => "nofwords",
|
126
|
+
:info_NumberOfChars => "nofchars",
|
127
|
+
:info_Id => "id",
|
128
|
+
:info_Title => "title",
|
129
|
+
:info_Subject => "subject",
|
130
|
+
:info_Author => "author",
|
131
|
+
:info_Manager => "manager",
|
132
|
+
:info_Company => "company",
|
133
|
+
:info_Operator => "operator",
|
134
|
+
:info_Category => "category",
|
135
|
+
:info_Keywords => "keywords",
|
136
|
+
:info_Comment => "comment",
|
137
|
+
:info_DocumentComment => "doccomm",
|
138
|
+
:info_HyperLinkBase => "hlinkbase",
|
139
|
+
:info_CreationTime => "creatim",
|
140
|
+
:info_RevisionTime => "revtim",
|
141
|
+
:info_PrintTime => "printim",
|
142
|
+
:info_BackupTime => "buptim",
|
143
|
+
:info_Year => "yr",
|
144
|
+
:info_Month => "mo",
|
145
|
+
:info_Day => "dy",
|
146
|
+
:info_Hour => "hr",
|
147
|
+
:info_Minute => "min",
|
148
|
+
:info_Second => "sec",
|
149
|
+
:info_EditingTimeMinutes => "edmins",
|
150
|
+
|
151
|
+
# --- user properties ----
|
152
|
+
:user_Properties => ":user_props",
|
153
|
+
:user_PropertyType => "proptype",
|
154
|
+
:user_PropertyName => "propname",
|
155
|
+
:user_PropertyValue => "staticval",
|
156
|
+
:user_PropertyLink => "linkval",
|
157
|
+
|
158
|
+
# this table is from the RTF specification 1.9.1, page 40
|
159
|
+
:property_TypeInteger => 3,
|
160
|
+
:property_TypeRealNumber => 5,
|
161
|
+
:property_TypeDate => 64,
|
162
|
+
:property_TypeBoolean => 11,
|
163
|
+
:property_TypeText => 30,
|
164
|
+
|
165
|
+
# --- picture ----
|
166
|
+
:picture => "pict",
|
167
|
+
:picture_Wrapper => "shppict",
|
168
|
+
:picture_WrapperAlternative => "nonshppict",
|
169
|
+
:picture_FormatEmf => "emfblip",
|
170
|
+
:picture_FormatPng => "pngblip",
|
171
|
+
:picture_FormatJpg => "jpegblip",
|
172
|
+
:picture_FormatPict => "macpict",
|
173
|
+
:picture_FormatOs2Metafile => "pmmetafile",
|
174
|
+
:picture_FormatWmf => "wmetafile",
|
175
|
+
:picture_FormatWinDib => "dibitmap",
|
176
|
+
:picture_FormatWinBmp => "wbitmap",
|
177
|
+
:picture_Width => "picw",
|
178
|
+
:picture_Height => "pich",
|
179
|
+
:picture_WidthGoal => "picwgoal",
|
180
|
+
:picture_HeightGoal => "pichgoal",
|
181
|
+
:picture_WidthScale => "picscalex",
|
182
|
+
:picture_HeightScale => "picscaley",
|
183
|
+
|
184
|
+
# --- bullets/numbering ----
|
185
|
+
:paragraph_number_text => "pntext",
|
186
|
+
:list_number_text => "listtext"
|
187
|
+
|
188
|
+
}
|
189
|
+
end
|
190
|
+
end
|
191
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
# Wizport: A gem for creating reports by specifying columns, groups, styles, etc.
|
4
|
+
# Copyright 2012 by sgzhe@163.com
|
5
|
+
|
6
|
+
module Wizport
|
7
|
+
module Rtf
|
8
|
+
class Table < Group
|
9
|
+
attr_accessor :rows, :cells
|
10
|
+
|
11
|
+
#options = {header:[],widths:[]}
|
12
|
+
def initialize(rows = [],options = {}, &block)
|
13
|
+
super()
|
14
|
+
@rows = []
|
15
|
+
#@cells = {}
|
16
|
+
rows.each do |cells|
|
17
|
+
row cells
|
18
|
+
end
|
19
|
+
block.arity<1 ? self.instance_eval(&block) : block.call(self) if block_given?
|
20
|
+
end
|
21
|
+
|
22
|
+
def row(cells = [], &block)
|
23
|
+
r = Row.new(cells,self, &block)
|
24
|
+
@rows << r
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
#def [](r,c)
|
29
|
+
# @cells["#{r},#{c}"]
|
30
|
+
#end
|
31
|
+
#
|
32
|
+
#def [](r,c,v)
|
33
|
+
# @cells["#{r},#{c}"] = v
|
34
|
+
#end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
# Wizport: A gem for creating reports by specifying columns, groups, styles, etc.
|
4
|
+
# Copyright 2012 by sgzhe@163.com
|
5
|
+
|
6
|
+
module Wizport
|
7
|
+
module Rtf
|
8
|
+
class Text < Group
|
9
|
+
ALIGN_MAP = {left:'ql',center:'qc'}
|
10
|
+
|
11
|
+
def initialize(txt = '', styles = {})
|
12
|
+
super()
|
13
|
+
styles = {:align => :left,:size => 24}.merge(styles)
|
14
|
+
elements << Command.new(:pard)
|
15
|
+
elements << @align = Command.new(ALIGN_MAP[styles[:align]])
|
16
|
+
elements << @size = Command.new(:fs,styles[:size])
|
17
|
+
elements << @txt = Plaintext.new(txt)
|
18
|
+
elements << Command.new(:par)
|
19
|
+
end
|
20
|
+
|
21
|
+
def size=(value)
|
22
|
+
@size.value = value
|
23
|
+
end
|
24
|
+
|
25
|
+
def size
|
26
|
+
@size.value
|
27
|
+
end
|
28
|
+
|
29
|
+
def align=(value)
|
30
|
+
@align.name = ALIGN_MAP[styles[value]]
|
31
|
+
end
|
32
|
+
|
33
|
+
def align
|
34
|
+
ALIGN_MAP.invert[@align.name]
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
# Wizport: A gem for creating reports by specifying columns, groups, styles, etc.
|
4
|
+
# Copyright 2012 by sgzhe@163.com
|
5
|
+
|
6
|
+
module Wizport
|
7
|
+
module Document
|
8
|
+
class Pdf
|
9
|
+
def initialize
|
10
|
+
@pdf = Prawn::Document.new
|
11
|
+
@pdf.font "#{Prawn::BASEDIR}/data/fonts/gkai00mp.ttf"
|
12
|
+
end
|
13
|
+
|
14
|
+
def text(txt)
|
15
|
+
@pdf.text txt
|
16
|
+
end
|
17
|
+
|
18
|
+
def table(rows,options={}, &block)
|
19
|
+
@pdf.table(rows,options.merge({:width => @pdf.bounds.width}), &block)
|
20
|
+
end
|
21
|
+
|
22
|
+
def make_table(rows)
|
23
|
+
@pdf.make_table(rows,:width => @pdf.bounds.width)
|
24
|
+
end
|
25
|
+
|
26
|
+
def save(file)
|
27
|
+
@pdf.render_file(file)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
# Wizport: A gem for creating reports by specifying columns, groups, styles, etc.
|
4
|
+
# Copyright 2012 by sgzhe@163.com
|
5
|
+
|
6
|
+
require 'rtf'
|
7
|
+
module Wizport
|
8
|
+
module Document
|
9
|
+
class Rtf
|
10
|
+
def initialize
|
11
|
+
@rtf = RTF::Document.new(RTF::Font.new(RTF::Font::ROMAN, 'Times New Roman'))
|
12
|
+
end
|
13
|
+
|
14
|
+
def text(txt)
|
15
|
+
@rtf.paragraph << txt
|
16
|
+
end
|
17
|
+
|
18
|
+
def table(rows)
|
19
|
+
r = rows.length
|
20
|
+
c = rows.first && rows.first.length
|
21
|
+
tbl = @rtf.table r, c
|
22
|
+
tbl[0][2] << "sss"
|
23
|
+
#rows.each_index do |row|
|
24
|
+
# rows[row].each_index do |col|
|
25
|
+
# tbl[row][col] << rows[row][col].to_s
|
26
|
+
# end
|
27
|
+
#end
|
28
|
+
tbl
|
29
|
+
end
|
30
|
+
|
31
|
+
def save(file)
|
32
|
+
File.open(file, 'w') { |file| file.write(@rtf.to_rtf) }
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
# Wizport: A gem for creating reports by specifying columns, groups, styles, etc.
|
4
|
+
# Copyright 2012 by sgzhe@163.com
|
5
|
+
|
6
|
+
module Wizport
|
7
|
+
module Document
|
8
|
+
class Txt
|
9
|
+
def initialize()
|
10
|
+
@doc = []
|
11
|
+
end
|
12
|
+
|
13
|
+
def text(txt)
|
14
|
+
@doc << txt << "\n"
|
15
|
+
end
|
16
|
+
|
17
|
+
def table(rows)
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
# Wizport: A gem for creating reports by specifying columns, groups, styles, etc.
|
4
|
+
# Copyright 2012 by sgzhe@163.com
|
5
|
+
|
6
|
+
module Wizport
|
7
|
+
class Column
|
8
|
+
TYPE = {default:0,image:1}
|
9
|
+
ALIGN = {}
|
10
|
+
|
11
|
+
attr_accessor :title, :name, :width, :clazz
|
12
|
+
|
13
|
+
def initialize(options = {})
|
14
|
+
@title = options.delete(:title) || ""
|
15
|
+
@name = options.delete(:name) || ""
|
16
|
+
@width = options.delete(:width) || 50
|
17
|
+
@clazz = options.delete(clazz) || Object
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
# Wizport: A gem for creating reports by specifying columns, groups, styles, etc.
|
4
|
+
# Copyright 2012 by sgzhe@163.com
|
5
|
+
|
6
|
+
|
7
|
+
module Wizport
|
8
|
+
class MongoidSource
|
9
|
+
def initialize(source)
|
10
|
+
@source = source
|
11
|
+
end
|
12
|
+
|
13
|
+
def groups(section)
|
14
|
+
@source.distinct(section.group)
|
15
|
+
end
|
16
|
+
|
17
|
+
def filter(options)
|
18
|
+
options.blank? ? @source : @source.where(options)
|
19
|
+
end
|
20
|
+
|
21
|
+
def all
|
22
|
+
@source
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
# Wizport: A gem for creating reports by specifying columns, groups, styles, etc.
|
4
|
+
# Copyright 2012 by sgzhe@163.com
|
5
|
+
|
6
|
+
module Wizport
|
7
|
+
class Report
|
8
|
+
attr_accessor :title, :subtitle, :columns, :sections, :source
|
9
|
+
|
10
|
+
def initialize(options = {})
|
11
|
+
@title = options.delete(:title) || ""
|
12
|
+
@subtitle = options.delete(:subtitle) || ""
|
13
|
+
@columns = options.delete(:columns) || []
|
14
|
+
@sections = options.delete(:sections) || []
|
15
|
+
@source = Wizport::MongoidSource.new(options.delete(:source))
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
def column(options)
|
20
|
+
@columns << Wizport::Column.new(options)
|
21
|
+
end
|
22
|
+
|
23
|
+
def section(options)
|
24
|
+
@sections << Wizport::Section.new(options)
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
def add_column(column)
|
29
|
+
@columns << column
|
30
|
+
end
|
31
|
+
|
32
|
+
def build(format = :pdf)
|
33
|
+
builder = Wizport::Builder::Pdf.new(self)
|
34
|
+
builder.header
|
35
|
+
if sections.size > 0
|
36
|
+
sections.each do |section|
|
37
|
+
builder.section(section)
|
38
|
+
end
|
39
|
+
else
|
40
|
+
builder.grid
|
41
|
+
end
|
42
|
+
builder.footer
|
43
|
+
builder
|
44
|
+
end
|
45
|
+
|
46
|
+
def save(file)
|
47
|
+
build(:pdf).save(file)
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
# Wizport: A gem for creating reports by specifying columns, groups, styles, etc.
|
4
|
+
# Copyright 2012 by sgzhe@163.com
|
5
|
+
|
6
|
+
module Wizport
|
7
|
+
class Section
|
8
|
+
attr_accessor :group, :title, :sub
|
9
|
+
|
10
|
+
def initialize(options)
|
11
|
+
@group = options[:group]
|
12
|
+
@title = options[:title]
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
data/lib/wizport/version.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
module Wizport
|
2
|
-
VERSION = "0.0.
|
3
|
-
end
|
1
|
+
module Wizport
|
2
|
+
VERSION = "0.0.2"
|
3
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
# Wizport: A gem for creating reports by specifying columns, groups, styles, etc.
|
4
|
+
# Copyright 2012 by sgzhe@163.com
|
5
|
+
|
6
|
+
module Wizport
|
7
|
+
module Visitable
|
8
|
+
def accept(visitor)
|
9
|
+
visitor.visit_for self
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
module Visitor
|
14
|
+
def self.included(base)
|
15
|
+
base.extend(ClassMethods)
|
16
|
+
base.class_eval do
|
17
|
+
include InstanceMethods
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
module InstanceMethods
|
22
|
+
def visit_for(visitable)
|
23
|
+
visitable.class.ancestors.each do |ancestor|
|
24
|
+
method_name = "visit_#{ancestor.name}"
|
25
|
+
return send method_name, visitable if respond_to? method_name
|
26
|
+
end
|
27
|
+
raise "Can't handle #{visitable.class}"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
module ClassMethods
|
32
|
+
def visit(*klasses, &block)
|
33
|
+
klasses.each do |klass|
|
34
|
+
define_method(:"visit_#{klass.name}", block)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
# Wizport: A gem for creating reports by specifying columns, groups, styles, etc.
|
4
|
+
# Copyright 2012 by sgzhe@163.com
|
5
|
+
|
6
|
+
require "../../../spec/spec_helper"
|
7
|
+
|
8
|
+
describe Wizport::Document::Rtf do
|
9
|
+
|
10
|
+
it "a simple example of Rtf" do
|
11
|
+
rtf = Wizport::Document::Rtf.new
|
12
|
+
rtf.text "hello sgz"
|
13
|
+
rtf.table [[1,1,1,""],[1,1,1,2],[1,1,1,3]]
|
14
|
+
rtf.save('c:/r.rtf')
|
15
|
+
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
# Wizport: A gem for creating reports by specifying columns, groups, styles, etc.
|
4
|
+
# Copyright 2012 by sgzhe@163.com
|
5
|
+
|
6
|
+
require "../../../spec/spec_helper"
|
7
|
+
require "mongoid"
|
8
|
+
|
9
|
+
Mongoid.configure do |config|
|
10
|
+
config.master = Mongo::Connection.new.db("godfather")
|
11
|
+
end
|
12
|
+
|
13
|
+
class Person
|
14
|
+
include Mongoid::Document
|
15
|
+
field :name
|
16
|
+
field :sex
|
17
|
+
field :tel
|
18
|
+
end
|
19
|
+
|
20
|
+
#Person.delete_all
|
21
|
+
#Person.create({name:"sgz1",sex:"男",tel:"1223121"})
|
22
|
+
#Person.create({name:"sgz2",sex:"男",tel:"852471"})
|
23
|
+
#Person.create({name:"sgz3",sex:"女",tel:"963952"})
|
24
|
+
|
25
|
+
describe Wizport::Report do
|
26
|
+
|
27
|
+
it "a simple example of report" do
|
28
|
+
rpt = Wizport::Report.new(:title => "人员性别统计表",:source => Person.all)
|
29
|
+
rpt.column({:title => "姓名",:name => :name})
|
30
|
+
rpt.column({:title => "性别",:name => :sex})
|
31
|
+
rpt.column({:title => "电话",:name => :tel})
|
32
|
+
rpt.section({:title => "性别",:group => :sex})
|
33
|
+
rpt.save('c:/rpt.pdf')
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
data/wizport.gemspec
CHANGED
@@ -1,24 +1,26 @@
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
2
|
-
$:.push File.expand_path("../lib", __FILE__)
|
3
|
-
require "wizport/version"
|
4
|
-
|
5
|
-
Gem::Specification.new do |s|
|
6
|
-
s.name = "wizport"
|
7
|
-
s.version = Wizport::VERSION
|
8
|
-
s.authors = ["songgz"]
|
9
|
-
s.email = ["sgzhe@163.com"]
|
10
|
-
s.homepage = ""
|
11
|
-
s.summary = "A simple, extensible reporting system"
|
12
|
-
s.description = "A simple, extensible reporting system"
|
13
|
-
|
14
|
-
s.rubyforge_project = "wizport"
|
15
|
-
|
16
|
-
s.files = `git ls-files`.split("\n")
|
17
|
-
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
-
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
-
s.require_paths = ["lib"]
|
20
|
-
|
21
|
-
# specify any dependencies here; for example:
|
22
|
-
|
23
|
-
|
24
|
-
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "wizport/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "wizport"
|
7
|
+
s.version = Wizport::VERSION
|
8
|
+
s.authors = ["songgz"]
|
9
|
+
s.email = ["sgzhe@163.com"]
|
10
|
+
s.homepage = ""
|
11
|
+
s.summary = "A simple, extensible reporting system"
|
12
|
+
s.description = "A simple, extensible reporting system"
|
13
|
+
|
14
|
+
s.rubyforge_project = "wizport"
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
+
s.require_paths = ["lib"]
|
20
|
+
|
21
|
+
# specify any dependencies here; for example:
|
22
|
+
s.add_development_dependency "rspec"
|
23
|
+
s.add_runtime_dependency "prawn"
|
24
|
+
s.add_runtime_dependency "rtf"
|
25
|
+
|
26
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wizport
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,8 +9,56 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
13
|
-
dependencies:
|
12
|
+
date: 2012-05-22 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rspec
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: prawn
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: rtf
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
14
62
|
description: A simple, extensible reporting system
|
15
63
|
email:
|
16
64
|
- sgzhe@163.com
|
@@ -22,7 +70,35 @@ files:
|
|
22
70
|
- Gemfile
|
23
71
|
- Rakefile
|
24
72
|
- lib/wizport.rb
|
73
|
+
- lib/wizport/builder/pdf.rb
|
74
|
+
- lib/wizport/builder/rtf.rb
|
75
|
+
- lib/wizport/document/Rtf/cell.rb
|
76
|
+
- lib/wizport/document/Rtf/command.rb
|
77
|
+
- lib/wizport/document/Rtf/document.rb
|
78
|
+
- lib/wizport/document/Rtf/element.rb
|
79
|
+
- lib/wizport/document/Rtf/group.rb
|
80
|
+
- lib/wizport/document/Rtf/plaintext.rb
|
81
|
+
- lib/wizport/document/Rtf/row.rb
|
82
|
+
- lib/wizport/document/Rtf/rtf_builder.rb
|
83
|
+
- lib/wizport/document/Rtf/spec.rb
|
84
|
+
- lib/wizport/document/Rtf/table.rb
|
85
|
+
- lib/wizport/document/Rtf/text.rb
|
86
|
+
- lib/wizport/document/pdf.rb
|
87
|
+
- lib/wizport/document/rtf.rb
|
88
|
+
- lib/wizport/document/txt.rb
|
89
|
+
- lib/wizport/engine/active_source.rb
|
90
|
+
- lib/wizport/engine/column.rb
|
91
|
+
- lib/wizport/engine/director.rb
|
92
|
+
- lib/wizport/engine/mongoid_source.rb
|
93
|
+
- lib/wizport/engine/report.rb
|
94
|
+
- lib/wizport/engine/section.rb
|
95
|
+
- lib/wizport/engine/sql_source.rb
|
25
96
|
- lib/wizport/version.rb
|
97
|
+
- lib/wizport/visitor.rb
|
98
|
+
- spec/spec_helper.rb
|
99
|
+
- spec/wizport/document/rtf/text_spec.rb
|
100
|
+
- spec/wizport/document/rtf_spec.rb
|
101
|
+
- spec/wizport/engine/report_spec.rb
|
26
102
|
- wizport.gemspec
|
27
103
|
homepage: ''
|
28
104
|
licenses: []
|