hyogen 0.0.1
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/History.txt +4 -0
- data/Manifest.txt +15 -0
- data/README.txt +177 -0
- data/Rakefile +98 -0
- data/lib/hyogen/version.rb +9 -0
- data/lib/hyogen.rb +10 -0
- data/scripts/txt2html +67 -0
- data/setup.rb +1585 -0
- data/spec/sample1.csv +4 -0
- data/spec/sample1.txt +2 -0
- data/spec/sample1.txt.template +4 -0
- data/spec/sample1.xls +0 -0
- data/spec/spec_hyogen.rb +293 -0
- data/spec/spec_hyogen.rb.1~ +294 -0
- data/test/test_helper.rb +2 -0
- data/test/test_hyogen.rb +11 -0
- data/website/index.html +80 -0
- data/website/index.txt +30 -0
- data/website/javascripts/rounded_corners_lite.inc.js +285 -0
- data/website/stylesheets/screen.css +129 -0
- data/website/template.rhtml +48 -0
- metadata +65 -0
data/spec/sample1.csv
ADDED
data/spec/sample1.txt
ADDED
data/spec/sample1.xls
ADDED
|
Binary file
|
data/spec/spec_hyogen.rb
ADDED
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
require 'spec'
|
|
2
|
+
require File.dirname(__FILE__) + '/../lib/hyogen'
|
|
3
|
+
|
|
4
|
+
context "deviding csvlines into tables:" do
|
|
5
|
+
specify "empty" do
|
|
6
|
+
csvdata = CSV.parse("")
|
|
7
|
+
table_list = Hyogen::Reader.devide_into_table(Hyogen::Reader::Matrix.new(csvdata))
|
|
8
|
+
table_list.should_eql []
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
specify "the smallest table" do
|
|
12
|
+
csvdata = CSV.parse("{VTABLE}")
|
|
13
|
+
table_list = Hyogen::Reader.devide_into_table(Hyogen::Reader::Matrix.new(csvdata))
|
|
14
|
+
table_list.size.should_eql 1
|
|
15
|
+
table_list.first.to_a.should_eql [["{VTABLE}"]]
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
specify "the single table" do
|
|
19
|
+
csvdata = CSV.parse("{HTABLE}\na,b\n1,2")
|
|
20
|
+
table_list = Hyogen::Reader.devide_into_table(Hyogen::Reader::Matrix.new(csvdata))
|
|
21
|
+
table_list.size.should_eql 1
|
|
22
|
+
table_list.first.to_a.should_eql [["{HTABLE}"],["a","b"],["1","2"]]
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
specify "the multiple table" do
|
|
26
|
+
csvdata = CSV.parse("{VTABLE}\n{L}\na,b\n{HTABLE}\n{L}\n1,2")
|
|
27
|
+
table_list = Hyogen::Reader.devide_into_table(Hyogen::Reader::Matrix.new(csvdata))
|
|
28
|
+
table_list.size.should_eql 2
|
|
29
|
+
table_list[0].to_a.should_eql [["{VTABLE}"],["{L}"],["a","b"]]
|
|
30
|
+
table_list[1].to_a.should_eql [["{HTABLE}"],["{L}"],["1","2"]]
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
context "parse tables:" do
|
|
35
|
+
specify "empty" do
|
|
36
|
+
csvdata = CSV.parse("")
|
|
37
|
+
tables = Hyogen.parse_tables(csvdata)
|
|
38
|
+
tables.should_eql []
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
specify "single table" do
|
|
42
|
+
csvdata = CSV.parse("{VTABLE}\n")
|
|
43
|
+
tables = Hyogen.parse_tables(csvdata)
|
|
44
|
+
tables.size.should_equal 1
|
|
45
|
+
tables.first.title.should == ""
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
specify "labeled table" do
|
|
49
|
+
csvdata = CSV.parse("test table{VTABLE}\n")
|
|
50
|
+
tables = Hyogen.parse_tables(csvdata)
|
|
51
|
+
tables.size.should == 1
|
|
52
|
+
tables.first.title.should_eql "test table"
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
specify "multiple tables" do
|
|
56
|
+
csvdata = CSV.parse("{VTABLE}\n{L}\n{HTABLE}\n{L}")
|
|
57
|
+
tables = Hyogen.parse_tables(csvdata)
|
|
58
|
+
tables.size.should_equal 2
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
context "parse label:" do
|
|
63
|
+
expect = [{"l1"=>"A"}, {"l2"=>"B"}]
|
|
64
|
+
specify "hlabel" do
|
|
65
|
+
csvdata = CSV.parse("test data{VTABLE}\n{L}l1,l2\n,A\n,B")
|
|
66
|
+
tables = Hyogen.parse_tables(csvdata)
|
|
67
|
+
tables.size.should_equal 1
|
|
68
|
+
table = tables.first
|
|
69
|
+
table.labels.size.should == 2
|
|
70
|
+
table.labels[0].names.should == ["l1"]
|
|
71
|
+
table.labels[1].names.should == ["l2"]
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
specify "vlabel" do
|
|
75
|
+
csvdata = CSV.parse("test data{HTABLE}\n{L}l1,A\nl2,B")
|
|
76
|
+
tables = Hyogen.parse_tables(csvdata)
|
|
77
|
+
tables.size.should_equal 1
|
|
78
|
+
table = tables.first
|
|
79
|
+
table.labels.size.should == 2
|
|
80
|
+
table.labels[0].names.should == ["l1"]
|
|
81
|
+
table.labels[1].names.should == ["l2"]
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
#�P����(���x����=1)�\
|
|
87
|
+
context "Table has single label:" do
|
|
88
|
+
expect = [{"l"=>"A"}, {"l"=>"B"}]
|
|
89
|
+
specify "vtable label" do
|
|
90
|
+
csvdata = CSV.parse("test data{VTABLE}\n{L}l\nA\nB")
|
|
91
|
+
tables = Hyogen.parse_tables(csvdata)
|
|
92
|
+
tables.size.should_equal 1
|
|
93
|
+
tables.first.records.should == expect
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
specify "htable label" do
|
|
97
|
+
csvdata = CSV.parse("test data{HTABLE},,\nl{L},A,B")
|
|
98
|
+
tables = Hyogen.parse_tables(csvdata)
|
|
99
|
+
tables.size.should_equal 1
|
|
100
|
+
table = tables.first
|
|
101
|
+
table.records.should == expect
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
#�璷�ȃf�[�^���܂ޕ\
|
|
106
|
+
context "redudancy:" do
|
|
107
|
+
specify "table" do
|
|
108
|
+
csvdata = CSV.parse("{VTABLE}\n\n{L}a,b\n\n{HTABLE}\n{L}1,2\n\nhoge")
|
|
109
|
+
table_list = Hyogen::Reader.devide_into_table(Hyogen::Reader::Matrix.new(csvdata))
|
|
110
|
+
table_list.size.should_eql 2
|
|
111
|
+
table_list[0].to_a.should_eql [["{VTABLE}"],[nil],["{L}a","b"]]
|
|
112
|
+
table_list[1].to_a.should_eql [["{HTABLE}"],["{L}1","2"]]
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
specify "data" do
|
|
116
|
+
expect = [{"l"=>"A"}, {"l"=>"B"}]
|
|
117
|
+
csvdata = CSV.parse("test data {VTABLE} \n\n {L} l \n A \nB \n")
|
|
118
|
+
tables = Hyogen.parse_tables(csvdata)
|
|
119
|
+
tables.size.should_equal 1
|
|
120
|
+
tables.first.title.should == "test data"
|
|
121
|
+
tables.first.records.should == expect
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
#�����̃��R�[�h�ƕ����̃��x�������\
|
|
126
|
+
context "Table has multiple records and multiple labels:" do
|
|
127
|
+
expect = [{"name"=>"A", "age"=>"10"}, {"name"=>"B", "age"=>"20"}]
|
|
128
|
+
specify "vertical" do
|
|
129
|
+
csvdata = CSV.parse("{VTABLE}\n{L}name,age\nA,10\nB,20")
|
|
130
|
+
table = Hyogen.parse_tables(csvdata).first
|
|
131
|
+
table.records.should == expect
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
specify "horizontal" do
|
|
135
|
+
csvdata = CSV.parse("{HTABLE},,\n{L}name,A,B\nage,10,20")
|
|
136
|
+
table = Hyogen.parse_tables(csvdata).first
|
|
137
|
+
table.records.should == expect
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
#�K�w�̂���\
|
|
142
|
+
context "Table is structured" do
|
|
143
|
+
expect = [{"category"=> {"type" => "C"}}]
|
|
144
|
+
specify "vtable" do
|
|
145
|
+
csvdata = CSV.parse("{VTABLE}\n{L}category\n{L}type\nC")
|
|
146
|
+
table = Hyogen.parse_tables(csvdata).first
|
|
147
|
+
table.records.should == expect
|
|
148
|
+
end
|
|
149
|
+
specify "htable" do
|
|
150
|
+
csvdata = CSV.parse("{HTABLE},,o\n{L}category,{L}type,C")
|
|
151
|
+
table = Hyogen.parse_tables(csvdata).first
|
|
152
|
+
table.records.should == expect
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
#�⑫�^�O
|
|
157
|
+
context "Note Tag" do
|
|
158
|
+
expect_records = [
|
|
159
|
+
{""=>"id1", "name"=> "alice", "age" => "10"},
|
|
160
|
+
{""=>"id2", "name"=> "bob", "age" => "20"},
|
|
161
|
+
]
|
|
162
|
+
specify "" do
|
|
163
|
+
csvdata = CSV.parse("{HTABLE}\n{L},id1,id2,{N}�⑫\nname,alice,bob,���O\nage,10,20,��")
|
|
164
|
+
table = Hyogen.parse_tables(csvdata).first
|
|
165
|
+
table.records.should == expect_records
|
|
166
|
+
|
|
167
|
+
table.labels[0].note.should == {"�⑫" => "�⑫"}
|
|
168
|
+
table.labels[1].note.should == {"�⑫" => "���O"}
|
|
169
|
+
table.labels[2].note.should == {"�⑫" => "��"}
|
|
170
|
+
end
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
context "Matrix of Excel Worksheet:" do
|
|
175
|
+
specify "" do
|
|
176
|
+
file = "./spec/sample1.xls"
|
|
177
|
+
workbook = Spreadsheet::ParseExcel.parse(file)
|
|
178
|
+
ws = workbook.worksheet(0)
|
|
179
|
+
matrix = Hyogen::Reader::worksheet_to_matrix(ws)
|
|
180
|
+
matrix.row_size.should == 4
|
|
181
|
+
matrix.column_size(0).should == 1
|
|
182
|
+
matrix.column_size(1).should == 4
|
|
183
|
+
|
|
184
|
+
matrix.value(0,0).should == "{HTABLE}"
|
|
185
|
+
matrix.row(1).should == ["{L}", "id1", "id2", "{N}�⑫"]
|
|
186
|
+
matrix.to_a.should == [
|
|
187
|
+
["{HTABLE}"],
|
|
188
|
+
["{L}", "id1", "id2", "{N}�⑫"],
|
|
189
|
+
["name", "Alice", "Bob", "���O"],
|
|
190
|
+
["age", "10.0", "20.0", "��"]
|
|
191
|
+
]
|
|
192
|
+
end
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
#�e��t�@�C���t�H�[�}�b�g
|
|
196
|
+
context "File formats" do
|
|
197
|
+
def check table
|
|
198
|
+
expect_records = [
|
|
199
|
+
{""=>"id1", "name"=> "Alice", "age" => "10.0"},
|
|
200
|
+
{""=>"id2", "name"=> "Bob", "age" => "20.0"},
|
|
201
|
+
]
|
|
202
|
+
table.records.should == expect_records
|
|
203
|
+
table.labels[0].note.should == {"�⑫" => "�⑫"}
|
|
204
|
+
table.labels[1].note.should == {"�⑫" => "���O"}
|
|
205
|
+
table.labels[2].note.should == {"�⑫" => "��"}
|
|
206
|
+
end
|
|
207
|
+
specify "csv string" do
|
|
208
|
+
input = "{HTABLE}\n{L},id1,id2,{N}�⑫\nname,Alice,Bob,���O\nage,10.0,20.0,��"
|
|
209
|
+
check Hyogen.parse_tables(input).first
|
|
210
|
+
end
|
|
211
|
+
specify "csv array" do
|
|
212
|
+
input = CSV.parse("{HTABLE}\n{L},id1,id2,{N}�⑫\nname,Alice,Bob,���O\nage,10.0,20.0,��")
|
|
213
|
+
check Hyogen.parse_tables(input).first
|
|
214
|
+
end
|
|
215
|
+
specify "csv file" do
|
|
216
|
+
input = "./spec/sample1.csv"
|
|
217
|
+
check Hyogen.parse_tables(input).first
|
|
218
|
+
end
|
|
219
|
+
specify "xls file" do
|
|
220
|
+
input = "./spec/sample1.xls"
|
|
221
|
+
check Hyogen.parse_tables(input).first
|
|
222
|
+
end
|
|
223
|
+
end
|
|
224
|
+
|
|
225
|
+
|
|
226
|
+
#�ȗ�
|
|
227
|
+
context "label syoryaku" do
|
|
228
|
+
specify "vtable" do
|
|
229
|
+
csvdata = CSV.parse("{VTABLE},\n{L}a,\n{L}t1,t2\n1,2")
|
|
230
|
+
expect = [{"a"=> {"t1" => "1", "t2" => "2"}}]
|
|
231
|
+
table = Hyogen.parse_tables(csvdata).first
|
|
232
|
+
table.records.should == expect
|
|
233
|
+
end
|
|
234
|
+
|
|
235
|
+
specify "overwrite" do
|
|
236
|
+
csvdata = CSV.parse("{VTABLE},\n{L}a,\n{L}t,\n1,2")
|
|
237
|
+
expect = [{"a"=> {"t" => "2"}}]
|
|
238
|
+
table = Hyogen.parse_tables(csvdata).first
|
|
239
|
+
table.records.should == expect
|
|
240
|
+
end
|
|
241
|
+
end
|
|
242
|
+
|
|
243
|
+
#�u��
|
|
244
|
+
context "alias" do
|
|
245
|
+
specify "label" do
|
|
246
|
+
csvdata = CSV.parse("{VTABLE},\n{L}a,\n{L}t1,t2<abc>\n1,2")
|
|
247
|
+
expect = [{"a"=> {"t1" => "1", "abc" => "2"}}]
|
|
248
|
+
table = Hyogen.parse_tables(csvdata).first
|
|
249
|
+
table.records.should == expect
|
|
250
|
+
end
|
|
251
|
+
|
|
252
|
+
specify "value" do
|
|
253
|
+
csvdata = CSV.parse("{VTABLE},\n{L}a,\n{L}t1,t2\n1,2 <2.00>")
|
|
254
|
+
expect = [{"a"=> {"t1" => "1", "t2" => "2.00"}}]
|
|
255
|
+
table = Hyogen.parse_tables(csvdata).first
|
|
256
|
+
table.records.should == expect
|
|
257
|
+
end
|
|
258
|
+
end
|
|
259
|
+
|
|
260
|
+
#����
|
|
261
|
+
context "generate:" do
|
|
262
|
+
def check table
|
|
263
|
+
expect_records = [
|
|
264
|
+
{""=>"id1", "name"=> "alice", "age" => "10.0"},
|
|
265
|
+
{""=>"id2", "name"=> "bob", "age" => "20.0"},
|
|
266
|
+
]
|
|
267
|
+
table.records.should == expect_records
|
|
268
|
+
table.labels[0].note.should == {"�⑫" => "�⑫"}
|
|
269
|
+
table.labels[1].note.should == {"�⑫" => "���O"}
|
|
270
|
+
table.labels[2].note.should == {"�⑫" => "��"}
|
|
271
|
+
end
|
|
272
|
+
specify "from script" do
|
|
273
|
+
input = "{HTABLE}\n{L},id1,id2,{N}�⑫\nname,Alice,Bob,���O\nage,10.0,20.0,��"
|
|
274
|
+
tables = Hyogen.parse_tables(input)
|
|
275
|
+
begin
|
|
276
|
+
File.delete('./spec/sample1.txt')
|
|
277
|
+
rescue Errno::ENOENT
|
|
278
|
+
end
|
|
279
|
+
Hyogen::Template.generate(tables, './spec/sample1.txt.template', './spec')
|
|
280
|
+
result = File.open('./spec/sample1.txt') {|f| f.read}
|
|
281
|
+
result.should == "My name is Alice. I'm 10 years old.\nMy name is Bob. I'm 20 years old.\n"
|
|
282
|
+
end
|
|
283
|
+
specify "from shell" do
|
|
284
|
+
begin
|
|
285
|
+
File.delete('./spec/sample1.txt')
|
|
286
|
+
rescue Errno::ENOENT
|
|
287
|
+
end
|
|
288
|
+
result = system 'ruby', 'bin/hyogen', '-s', './spec/sample1.xls', './spec/sample1.txt.template', '-o', './spec'
|
|
289
|
+
result.should == true
|
|
290
|
+
result = File.open('./spec/sample1.txt') {|f| f.read}
|
|
291
|
+
result.should == "My name is Alice. I'm 10 years old.\nMy name is Bob. I'm 20 years old.\n"
|
|
292
|
+
end
|
|
293
|
+
end
|
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
require 'lib/hyogen'
|
|
2
|
+
require 'spec'
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
context "deviding csvlines into tables:" do
|
|
6
|
+
specify "empty" do
|
|
7
|
+
csvdata = CSV.parse("")
|
|
8
|
+
table_list = Hyogen::Reader.devide_into_table(Hyogen::Reader::Matrix.new(csvdata))
|
|
9
|
+
table_list.should_eql []
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
specify "the smallest table" do
|
|
13
|
+
csvdata = CSV.parse("{VTABLE}")
|
|
14
|
+
table_list = Hyogen::Reader.devide_into_table(Hyogen::Reader::Matrix.new(csvdata))
|
|
15
|
+
table_list.size.should_eql 1
|
|
16
|
+
table_list.first.to_a.should_eql [["{VTABLE}"]]
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
specify "the single table" do
|
|
20
|
+
csvdata = CSV.parse("{HTABLE}\na,b\n1,2")
|
|
21
|
+
table_list = Hyogen::Reader.devide_into_table(Hyogen::Reader::Matrix.new(csvdata))
|
|
22
|
+
table_list.size.should_eql 1
|
|
23
|
+
table_list.first.to_a.should_eql [["{HTABLE}"],["a","b"],["1","2"]]
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
specify "the multiple table" do
|
|
27
|
+
csvdata = CSV.parse("{VTABLE}\n{L}\na,b\n{HTABLE}\n{L}\n1,2")
|
|
28
|
+
table_list = Hyogen::Reader.devide_into_table(Hyogen::Reader::Matrix.new(csvdata))
|
|
29
|
+
table_list.size.should_eql 2
|
|
30
|
+
table_list[0].to_a.should_eql [["{VTABLE}"],["{L}"],["a","b"]]
|
|
31
|
+
table_list[1].to_a.should_eql [["{HTABLE}"],["{L}"],["1","2"]]
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
context "parse tables:" do
|
|
36
|
+
specify "empty" do
|
|
37
|
+
csvdata = CSV.parse("")
|
|
38
|
+
tables = Hyogen.parse_tables(csvdata)
|
|
39
|
+
tables.should_eql []
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
specify "single table" do
|
|
43
|
+
csvdata = CSV.parse("{VTABLE}\n")
|
|
44
|
+
tables = Hyogen.parse_tables(csvdata)
|
|
45
|
+
tables.size.should_equal 1
|
|
46
|
+
tables.first.title.should == ""
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
specify "labeled table" do
|
|
50
|
+
csvdata = CSV.parse("test table{VTABLE}\n")
|
|
51
|
+
tables = Hyogen.parse_tables(csvdata)
|
|
52
|
+
tables.size.should == 1
|
|
53
|
+
tables.first.title.should_eql "test table"
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
specify "multiple tables" do
|
|
57
|
+
csvdata = CSV.parse("{VTABLE}\n{L}\n{HTABLE}\n{L}")
|
|
58
|
+
tables = Hyogen.parse_tables(csvdata)
|
|
59
|
+
tables.size.should_equal 2
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
context "parse label:" do
|
|
64
|
+
expect = [{"l1"=>"A"}, {"l2"=>"B"}]
|
|
65
|
+
specify "hlabel" do
|
|
66
|
+
csvdata = CSV.parse("test data{VTABLE}\n{L}l1,l2\n,A\n,B")
|
|
67
|
+
tables = Hyogen.parse_tables(csvdata)
|
|
68
|
+
tables.size.should_equal 1
|
|
69
|
+
table = tables.first
|
|
70
|
+
table.labels.size.should == 2
|
|
71
|
+
table.labels[0].names.should == ["l1"]
|
|
72
|
+
table.labels[1].names.should == ["l2"]
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
specify "vlabel" do
|
|
76
|
+
csvdata = CSV.parse("test data{HTABLE}\n{L}l1,A\nl2,B")
|
|
77
|
+
tables = Hyogen.parse_tables(csvdata)
|
|
78
|
+
tables.size.should_equal 1
|
|
79
|
+
table = tables.first
|
|
80
|
+
table.labels.size.should == 2
|
|
81
|
+
table.labels[0].names.should == ["l1"]
|
|
82
|
+
table.labels[1].names.should == ["l2"]
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
#�P����(���x����=1)�\
|
|
88
|
+
context "Table has single label:" do
|
|
89
|
+
expect = [{"l"=>"A"}, {"l"=>"B"}]
|
|
90
|
+
specify "vtable label" do
|
|
91
|
+
csvdata = CSV.parse("test data{VTABLE}\n{L}l\nA\nB")
|
|
92
|
+
tables = Hyogen.parse_tables(csvdata)
|
|
93
|
+
tables.size.should_equal 1
|
|
94
|
+
tables.first.records.should == expect
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
specify "htable label" do
|
|
98
|
+
csvdata = CSV.parse("test data{HTABLE},,\nl{L},A,B")
|
|
99
|
+
tables = Hyogen.parse_tables(csvdata)
|
|
100
|
+
tables.size.should_equal 1
|
|
101
|
+
table = tables.first
|
|
102
|
+
table.records.should == expect
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
#�璷�ȃf�[�^���܂ޕ\
|
|
107
|
+
context "redudancy:" do
|
|
108
|
+
specify "table" do
|
|
109
|
+
csvdata = CSV.parse("{VTABLE}\n\n{L}a,b\n\n{HTABLE}\n{L}1,2\n\nhoge")
|
|
110
|
+
table_list = Hyogen::Reader.devide_into_table(Hyogen::Reader::Matrix.new(csvdata))
|
|
111
|
+
table_list.size.should_eql 2
|
|
112
|
+
table_list[0].to_a.should_eql [["{VTABLE}"],[nil],["{L}a","b"]]
|
|
113
|
+
table_list[1].to_a.should_eql [["{HTABLE}"],["{L}1","2"]]
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
specify "data" do
|
|
117
|
+
expect = [{"l"=>"A"}, {"l"=>"B"}]
|
|
118
|
+
csvdata = CSV.parse("test data {VTABLE} \n\n {L} l \n A \nB \n")
|
|
119
|
+
tables = Hyogen.parse_tables(csvdata)
|
|
120
|
+
tables.size.should_equal 1
|
|
121
|
+
tables.first.title.should == "test data"
|
|
122
|
+
tables.first.records.should == expect
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
#�����̃��R�[�h�ƕ����̃��x�������\
|
|
127
|
+
context "Table has multiple records and multiple labels:" do
|
|
128
|
+
expect = [{"name"=>"A", "age"=>"10"}, {"name"=>"B", "age"=>"20"}]
|
|
129
|
+
specify "vertical" do
|
|
130
|
+
csvdata = CSV.parse("{VTABLE}\n{L}name,age\nA,10\nB,20")
|
|
131
|
+
table = Hyogen.parse_tables(csvdata).first
|
|
132
|
+
table.records.should == expect
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
specify "horizontal" do
|
|
136
|
+
csvdata = CSV.parse("{HTABLE},,\n{L}name,A,B\nage,10,20")
|
|
137
|
+
table = Hyogen.parse_tables(csvdata).first
|
|
138
|
+
table.records.should == expect
|
|
139
|
+
end
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
#�K�w�̂���\
|
|
143
|
+
context "Table is structured" do
|
|
144
|
+
expect = [{"category"=> {"type" => "C"}}]
|
|
145
|
+
specify "vtable" do
|
|
146
|
+
csvdata = CSV.parse("{VTABLE}\n{L}category\n{L}type\nC")
|
|
147
|
+
table = Hyogen.parse_tables(csvdata).first
|
|
148
|
+
table.records.should == expect
|
|
149
|
+
end
|
|
150
|
+
specify "htable" do
|
|
151
|
+
csvdata = CSV.parse("{HTABLE},,o\n{L}category,{L}type,C")
|
|
152
|
+
table = Hyogen.parse_tables(csvdata).first
|
|
153
|
+
table.records.should == expect
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
#�⑫�^�O
|
|
158
|
+
context "Note Tag" do
|
|
159
|
+
expect_records = [
|
|
160
|
+
{""=>"id1", "name"=> "alice", "age" => "10"},
|
|
161
|
+
{""=>"id2", "name"=> "bob", "age" => "20"},
|
|
162
|
+
]
|
|
163
|
+
specify "" do
|
|
164
|
+
csvdata = CSV.parse("{HTABLE}\n{L},id1,id2,{N}�⑫\nname,alice,bob,���O\nage,10,20,��")
|
|
165
|
+
table = Hyogen.parse_tables(csvdata).first
|
|
166
|
+
table.records.should == expect_records
|
|
167
|
+
|
|
168
|
+
table.labels[0].note.should == {"�⑫" => "�⑫"}
|
|
169
|
+
table.labels[1].note.should == {"�⑫" => "���O"}
|
|
170
|
+
table.labels[2].note.should == {"�⑫" => "��"}
|
|
171
|
+
end
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
context "Matrix of Excel Worksheet:" do
|
|
176
|
+
specify "" do
|
|
177
|
+
file = "./spec/sample1.xls"
|
|
178
|
+
workbook = Spreadsheet::ParseExcel.parse(file)
|
|
179
|
+
ws = workbook.worksheet(0)
|
|
180
|
+
matrix = Hyogen::Reader::worksheet_to_matrix(ws)
|
|
181
|
+
matrix.row_size.should == 4
|
|
182
|
+
matrix.column_size(0).should == 1
|
|
183
|
+
matrix.column_size(1).should == 4
|
|
184
|
+
|
|
185
|
+
matrix.value(0,0).should == "{HTABLE}"
|
|
186
|
+
matrix.row(1).should == ["{L}", "id1", "id2", "{N}�⑫"]
|
|
187
|
+
matrix.to_a.should == [
|
|
188
|
+
["{HTABLE}"],
|
|
189
|
+
["{L}", "id1", "id2", "{N}�⑫"],
|
|
190
|
+
["name", "Alice", "Bob", "���O"],
|
|
191
|
+
["age", "10.0", "20.0", "��"]
|
|
192
|
+
]
|
|
193
|
+
end
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
#�e��t�@�C���t�H�[�}�b�g
|
|
197
|
+
context "File formats" do
|
|
198
|
+
def check table
|
|
199
|
+
expect_records = [
|
|
200
|
+
{""=>"id1", "name"=> "Alice", "age" => "10.0"},
|
|
201
|
+
{""=>"id2", "name"=> "Bob", "age" => "20.0"},
|
|
202
|
+
]
|
|
203
|
+
table.records.should == expect_records
|
|
204
|
+
table.labels[0].note.should == {"�⑫" => "�⑫"}
|
|
205
|
+
table.labels[1].note.should == {"�⑫" => "���O"}
|
|
206
|
+
table.labels[2].note.should == {"�⑫" => "��"}
|
|
207
|
+
end
|
|
208
|
+
specify "csv string" do
|
|
209
|
+
input = "{HTABLE}\n{L},id1,id2,{N}�⑫\nname,Alice,Bob,���O\nage,10.0,20.0,��"
|
|
210
|
+
check Hyogen.parse_tables(input).first
|
|
211
|
+
end
|
|
212
|
+
specify "csv array" do
|
|
213
|
+
input = CSV.parse("{HTABLE}\n{L},id1,id2,{N}�⑫\nname,Alice,Bob,���O\nage,10.0,20.0,��")
|
|
214
|
+
check Hyogen.parse_tables(input).first
|
|
215
|
+
end
|
|
216
|
+
specify "csv file" do
|
|
217
|
+
input = "./spec/sample1.csv"
|
|
218
|
+
check Hyogen.parse_tables(input).first
|
|
219
|
+
end
|
|
220
|
+
specify "xls file" do
|
|
221
|
+
input = "./spec/sample1.xls"
|
|
222
|
+
check Hyogen.parse_tables(input).first
|
|
223
|
+
end
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
|
|
227
|
+
#�ȗ�
|
|
228
|
+
context "label syoryaku" do
|
|
229
|
+
specify "vtable" do
|
|
230
|
+
csvdata = CSV.parse("{VTABLE},\n{L}a,\n{L}t1,t2\n1,2")
|
|
231
|
+
expect = [{"a"=> {"t1" => "1", "t2" => "2"}}]
|
|
232
|
+
table = Hyogen.parse_tables(csvdata).first
|
|
233
|
+
table.records.should == expect
|
|
234
|
+
end
|
|
235
|
+
|
|
236
|
+
specify "overwrite" do
|
|
237
|
+
csvdata = CSV.parse("{VTABLE},\n{L}a,\n{L}t,\n1,2")
|
|
238
|
+
expect = [{"a"=> {"t" => "2"}}]
|
|
239
|
+
table = Hyogen.parse_tables(csvdata).first
|
|
240
|
+
table.records.should == expect
|
|
241
|
+
end
|
|
242
|
+
end
|
|
243
|
+
|
|
244
|
+
#�u��
|
|
245
|
+
context "alias" do
|
|
246
|
+
specify "label" do
|
|
247
|
+
csvdata = CSV.parse("{VTABLE},\n{L}a,\n{L}t1,t2<abc>\n1,2")
|
|
248
|
+
expect = [{"a"=> {"t1" => "1", "abc" => "2"}}]
|
|
249
|
+
table = Hyogen.parse_tables(csvdata).first
|
|
250
|
+
table.records.should == expect
|
|
251
|
+
end
|
|
252
|
+
|
|
253
|
+
specify "value" do
|
|
254
|
+
csvdata = CSV.parse("{VTABLE},\n{L}a,\n{L}t1,t2\n1,2 <2.00>")
|
|
255
|
+
expect = [{"a"=> {"t1" => "1", "t2" => "2.00"}}]
|
|
256
|
+
table = Hyogen.parse_tables(csvdata).first
|
|
257
|
+
table.records.should == expect
|
|
258
|
+
end
|
|
259
|
+
end
|
|
260
|
+
|
|
261
|
+
#����
|
|
262
|
+
context "generate:" do
|
|
263
|
+
def check table
|
|
264
|
+
expect_records = [
|
|
265
|
+
{""=>"id1", "name"=> "alice", "age" => "10.0"},
|
|
266
|
+
{""=>"id2", "name"=> "bob", "age" => "20.0"},
|
|
267
|
+
]
|
|
268
|
+
table.records.should == expect_records
|
|
269
|
+
table.labels[0].note.should == {"�⑫" => "�⑫"}
|
|
270
|
+
table.labels[1].note.should == {"�⑫" => "���O"}
|
|
271
|
+
table.labels[2].note.should == {"�⑫" => "��"}
|
|
272
|
+
end
|
|
273
|
+
specify "from script" do
|
|
274
|
+
input = "{HTABLE}\n{L},id1,id2,{N}�⑫\nname,Alice,Bob,���O\nage,10.0,20.0,��"
|
|
275
|
+
tables = Hyogen.parse_tables(input)
|
|
276
|
+
begin
|
|
277
|
+
File.delete('./spec/sample1.txt')
|
|
278
|
+
rescue Errno::ENOENT
|
|
279
|
+
end
|
|
280
|
+
Hyogen::Template.generate(tables, './spec/sample1.txt.template', './spec')
|
|
281
|
+
result = File.open('./spec/sample1.txt') {|f| f.read}
|
|
282
|
+
result.should == "My name is Alice. I'm 10 years old.\nMy name is Bob. I'm 20 years old.\n"
|
|
283
|
+
end
|
|
284
|
+
specify "from shell" do
|
|
285
|
+
begin
|
|
286
|
+
File.delete('./spec/sample1.txt')
|
|
287
|
+
rescue Errno::ENOENT
|
|
288
|
+
end
|
|
289
|
+
result = system 'ruby', 'hyogen', '-s', './spec/sample1.xls', './spec/sample1.txt.template', '-o', './spec'
|
|
290
|
+
result.should == true
|
|
291
|
+
result = File.open('./spec/sample1.txt') {|f| f.read}
|
|
292
|
+
result.should == "My name is Alice. I'm 10 years old.\nMy name is Bob. I'm 20 years old.\n"
|
|
293
|
+
end
|
|
294
|
+
end
|
data/test/test_helper.rb
ADDED