mymatrix 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.
@@ -0,0 +1,345 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+ =begin
3
+ class TestMymatrix < Test::Unit::TestCase
4
+
5
+ def setup
6
+ end
7
+
8
+ def test_truth
9
+ assert true
10
+ end
11
+ end
12
+ =end
13
+ # -*- encoding: utf-8 -*-
14
+ require 'mymatrix'
15
+ require 'rspec'
16
+
17
+ describe MyMatrix do
18
+ before :all do
19
+ if(RUBY_VERSION =~ /1\.[^9]/)
20
+ else
21
+ Encoding.default_external = 'Windows-31J'
22
+ end
23
+ end
24
+
25
+ it '4行と4行のデータをconcatFileで結合すると8行になること' do
26
+ @mx = MyMatrix.new('spec/line4.xls')
27
+ @mx.concatFile('spec/line4.xls')
28
+ @mx.size.should == 8
29
+ end
30
+ it 'concatが正しく出来ていること' do
31
+ @mx = makeSample
32
+ @mx.concat(makeSample)
33
+ @mx[4].should == ['4', '6', '8']
34
+ @mx.size.should == 8
35
+ end
36
+
37
+ it 'newして保存すると、適切な値が保存されていること' do
38
+ @mx = MyMatrix.new
39
+ @mx.addHeaders(%w[genre name])
40
+ row = %w[furuit banana]
41
+ @mx << row
42
+ @mx.size.should == 1
43
+ @mx[0].should == row
44
+ end
45
+
46
+ it 'sortされること' do
47
+ @mx = MyMatrix.new('spec/110619.xls')
48
+ @mx = @mx.sortBy('要確認').reverse
49
+ @mx.each do |row|
50
+ #p @mx.val(row, '要確認')
51
+ end
52
+ @mx.val(@mx[0], '要確認').should == '★'
53
+ @mx.val(@mx[15], '要確認').should == '★'
54
+ @mx.val(@mx[16], '要確認').should == ''
55
+ @mx.val(@mx[17], '要確認').should == ''
56
+
57
+ end
58
+
59
+ it 'concatFileに存在しないファイルを指定したら例外発生すること' do
60
+ @mx = MyMatrix.new('spec/line4.xls')
61
+ proc{
62
+ @mx.concatFile('hogehogehogefhoeg.xls')
63
+ }.should raise_error
64
+ end
65
+
66
+ it '<<rowした場合、各要素にnilが入らないこと' do
67
+ @mx = MyMatrix.new
68
+ @mx.addHeaders(%w[a b c d])
69
+ row = []
70
+ @mx.setValue(row, 'c', 'hoge')
71
+ @mx << row
72
+ @mx[0][0].should == ''
73
+ @mx[0][2].should == 'hoge'
74
+ @mx[0][3].should == ''
75
+ end
76
+
77
+ it 'XLSで表示されている通りの値がStringとして取得できること' do
78
+ @mx = MyMatrix.new('spec/std_shoshiki.xls')
79
+ @mx[0][1].should == '1'
80
+ @mx[0][1].class.should == String
81
+
82
+ @mx[0][2].should == '2'
83
+ @mx[0][2].class.should == String
84
+
85
+ @mx[0][3].should == '3.3'
86
+ @mx[0][3].class.should == String
87
+ end
88
+
89
+ it 'ファイルを読み込む際に、末尾の空行を削除して読み込むこと' do
90
+ out = MyMatrix.new('spec/line4.txt')
91
+ out.size.should == 4
92
+ end
93
+ it '日本語ファイル名に対応していること(Mac環境を想定)' do
94
+ filename = 'spec/ダクテン(だくてん)つきファイル.txt'
95
+ mx = makeSample()
96
+ mx.to_t(filename)
97
+
98
+ mx = MyMatrix.new(filename)
99
+ mx.val(mx[0], 'b').should == '6'
100
+
101
+ end
102
+ it 'csvファイルが読めること' do
103
+ s = MyMatrix.new
104
+ mx = makecsv
105
+
106
+ mx[0][0].should == ''
107
+ mx[1][0].should == 'ダブル"クオーテーション'
108
+ mx[1][1].should == 'カン,マ'
109
+ mx[1][2].should == 'aaa'
110
+
111
+
112
+ end
113
+
114
+ it 'concatDirでフォルダ内ファイルを全て結合できること' do
115
+ mx = MyMatrix.new
116
+ mx.concatDir('spec/for_concat')
117
+ mx.size.should == 16
118
+ end
119
+
120
+ it '存在しないカラムを取得しようとしたら例外が発生すること' do
121
+ mx = MyMatrix.new
122
+ row = []
123
+ proc{
124
+ mx.val(row, 'foobar')
125
+ }.should raise_error
126
+ end
127
+
128
+ it 'ヘッダが先頭にないファイルも読み込めること' do
129
+ mx = MyMatrix.new('spec/offset.txt', {:offset=>2})
130
+ mx.getHeaders.should == %w[A B C D]
131
+ mx[0][0].should == 'a1'
132
+ mx.val(mx[1], 'D').should == 'd2'
133
+ end
134
+ it 'ヘッダが先頭にないファイルに書き出せること' do
135
+ pending('必要になったら実装する')
136
+ mx = makeSample()
137
+ mx.to_xls({:template => 'spec/template.xls', :out=>'spec/out.xls', :offset_r => 3, :offset_c =>1})
138
+ mx = MyMatrix.new('spec/out.xls')
139
+ mx.val(mx[0], 'P-a').should == 'iti'
140
+ mx[3][1].should == 'a'
141
+ mx[4][1].should == '4'
142
+ end
143
+ it '同じシーケンスIDに同一の値をsetできること' do
144
+ mx = MyMatrix.new()
145
+ mx.addHeaders(%w[シーケンス 名称 情報])
146
+ mx << ['1', 'apple', 'begi']
147
+ mx << ['11', 'tomato' ,'begi']
148
+ mx << ['1', 'greenapple', 'begi']
149
+ mx.setSame('シーケンス', '1', {'情報'=>'fruit'})
150
+ mx[0][0].should == '1'
151
+ mx[0][2].should == 'fruit'
152
+ mx[1][2].should == 'begi'
153
+ mx[2][2].should == 'fruit'
154
+ end
155
+
156
+ it 'ただしくハッシュオブジェクトが作成されること' do
157
+ mx = MyMatrix.new()
158
+ mx.addHeaders(%w[シーケンス 名称 情報])
159
+ mx << ['1', 'apple', 'begi']
160
+ mx << ['11', 'tomato' ,'begi']
161
+ mx << ['1', 'greenapple', 'begi']
162
+
163
+ hash = mx.makeKey('シーケンス')
164
+ hash['1'].size.should == 2
165
+ hash['1'][1].should == ['1', 'greenapple', 'begi']
166
+ hash['11'][0].should == ['11', 'tomato' ,'begi']
167
+ end
168
+
169
+ it 'ヘッダの名称変更が正しく行えること' do
170
+ mx = makeSample
171
+ mx.replaceHeader('a', 'aaa')
172
+ mx.replaceHeader('b', 'bbb')
173
+ mx.getHeaders[0].should == 'aaa'
174
+ mx.getHeaders[1].should == 'bbb'
175
+ mx.getHeaders.size.should == 3
176
+ end
177
+ it 'カンマをエスケープしてcsvファイルを出力できること' do
178
+ mx = makecsv
179
+ mx.to_csv('spec/csv_test.csv')
180
+ fi = open('spec/csv_test.csv')
181
+ str = fi.gets
182
+ str.should == MyMatrix.tosjis("a,b,c\r\n")
183
+ str = fi.gets
184
+ str.should == MyMatrix.tosjis(",奈良,大阪\r\n")
185
+ str = fi.gets
186
+ str.should == MyMatrix.tosjis("\"ダブル\"\"クオーテーション\",\"カン,マ\",aaa\r\n")
187
+ fi.close
188
+ end
189
+ it '市町村コードの桁が揃えられること' do
190
+ mx = MyMatrix.new
191
+ mx.addHeaders(['都道府県市区町村コード'])
192
+ mx << ['1100']
193
+ mx.correctCityCodes!
194
+ mx[0][0].should == '01100'
195
+ end
196
+ it '開き直してもCP932範囲内の文字コードは変わらないこと' do
197
+ testcases = [
198
+ ['-', '-'], #変更なし:FULLWIDTH HYPHEN-MINUS(U+FF0D)
199
+ ['~', '~'], #変更なし:FULLWIDTH TILDE(U+FF5E)
200
+ ['ア', 'ア'], #1byte kana
201
+ ['①', '①'] #windows CP932 only
202
+ ]
203
+ translationCheck(testcases)
204
+ end
205
+ it 'CP932範囲外の記号は、CP932範囲の記号に変換されること' do
206
+ testcases = [
207
+ #['1−', '1―'], #MINUS SIGN(U+2212) to FULLWIDTH HYPHEN-MINUS(U+2015)(windows)
208
+ #↑仕様変更のためコメントアウト
209
+
210
+ ['2〜','2~'], #WAVE DASH (U+301C) to FULLWIDTH TILDE(U+FF5E)(windows)
211
+ ['3‖','3∥'], #DOUBLE VERTICAL LINE (U+2016, "‖") を PARALLEL TO (U+2225, "∥") に
212
+ ['4—', '4―'], #EM DASH (U+2014, "—") を HORIZONTAL BAR (U+2015, "―") に
213
+ #キー入力を想定した変換。
214
+ ['5ー', '5ー'], #MacのハイフンF7(google ime)→Windows(googleime):同じ
215
+ ['6ー', '6ー'], #MacのハイフンF8(google ime)→Windows(googleime):同じ
216
+ ['7−', '7-'], #MacのハイフンF9(google ime)→Windows(googleime):違う。MINUS SIGN(U+2212) to FULLWIDTH HYPHEN-MINUS(U+FF0D)
217
+ ['8-', '8-'], #MacのハイフンF10(google ime)→Windows(googleime):同じ
218
+ ]
219
+ translationCheck(testcases)
220
+ end
221
+
222
+ it '半角カナを全角に出来ること' do
223
+ testcases = [
224
+ ['-', '-'], #hyphen
225
+ ['ファミリーマート', 'ファミリーマート'], #ハイフンを長母音に変換
226
+ ['03-3352-7334', '03-3352-7334'],
227
+ ['abc0', 'abc0'], #全角英数はそのまま
228
+ ['abc', 'abc'] #半角英数もはそのまま
229
+ ]
230
+ translationCheck(testcases) do |mx|
231
+ mx.twoByteKana!
232
+ end
233
+ end
234
+ it '拡張子によって保存形式が変わること' do
235
+ mx = makeSample()
236
+ mx.to_t('spec/test.csv')
237
+ fi = open('spec/test.csv')
238
+ str = fi.gets
239
+ str.should == MyMatrix.tosjis("a,b,c\r\n")
240
+
241
+ mx.to_t('spec/test.tsv')
242
+ fi = open('spec/test.tsv')
243
+ str = fi.gets
244
+ str.should == MyMatrix.tosjis("a\tb\tc\r\n")
245
+
246
+ mx.to_t('spec/test.txt')
247
+ fi = open('spec/test.txt')
248
+ str = fi.gets
249
+ str.should == MyMatrix.tosjis("a\tb\tc\r\n")
250
+
251
+ end
252
+ it 'セルの中に改行コードが入っていた場合、to_tしたら削除されること' do
253
+ mx = makeSample
254
+ mx[0][1] = mx[0][1] + "\r"
255
+ mx.to_t('spec/test.txt')
256
+ fi = open('spec/test.txt')
257
+ str = fi.gets
258
+ str = fi.gets
259
+ str.should == MyMatrix.tosjis("4\t6\t8\r\n")
260
+ end
261
+ it '長すぎる文字列があったらcutOffで短くできること' do
262
+ mx = makeSample
263
+ mx[0][0] = '01234567890'
264
+ mx[0][1] = ''
265
+ str = mx[0][2].dup
266
+ mx.cutOff('a', 4)
267
+ mx[0][0].should == '0123'
268
+ mx[0][1].should == ''
269
+ mx[0][2].should == str
270
+ end
271
+
272
+ it 'SJIS範囲外の漢字が含まれるデータをテキスト出力する時は例外を発生させること' do
273
+ pending('実装が難しいためペンディング')
274
+ mx = MyMatrix.new
275
+ mx.addHeaders(['str'])
276
+ mx << ['盌']
277
+ Proc {
278
+ mx.to_t('test.txt')
279
+ }.should raise_error
280
+ end
281
+
282
+ end
283
+ def translationCheck(testcases)
284
+ mx = MyMatrix.new
285
+ mx.addHeaders(['カラム'])
286
+ testcases.each do |mycase|
287
+ mx << [mycase[0]]
288
+ end
289
+ if(block_given?)
290
+ yield(mx)
291
+ end
292
+ mx.to_t('spec/test.txt')
293
+ mx = MyMatrix.new('spec/test.txt')
294
+
295
+ testcases.each_with_index do |mycase, i|
296
+ mx[i][0].should == mycase[1]
297
+ end
298
+ end
299
+
300
+ def makeSample
301
+ out = MyMatrix.new()
302
+ out.addHeaders(['a', 'b', 'c'])
303
+ out << ['4', '6', '8']
304
+ out << ['1', '3', '5']
305
+ out << ['3', '5', '7']
306
+ out << ['2', '4', '6']
307
+ return out
308
+ end
309
+ def makeSample2
310
+ out = MyMatrix.new()
311
+ out.addHeaders(['a', 'b', 'c'])
312
+ out << ['4', '5', '8']
313
+ out << ['', '3', '5']
314
+ out << ['3', '5', '7']
315
+ out << ['4', '6', '8']
316
+ out << ['2', '4', '6']
317
+ return out
318
+ end
319
+ def makeEmptySample
320
+ out = MyMatrix.new()
321
+ out.addHeaders(['a', 'b', 'c'])
322
+ out << ['4', '5', '8']
323
+ out << ['', '', '']
324
+ out << ['', '', '']
325
+ return out
326
+ end
327
+
328
+ def makecsv
329
+ open('spec/csv.csv', 'w') do |fo|
330
+ fo.write("a,b,c\r\n")
331
+ fo.write(MyMatrix.tosjis(',奈良,大阪'))
332
+ fo.write("\r\n")
333
+ fo.write(MyMatrix.tosjis('"ダブル""クオーテーション","カン,マ",aaa'))
334
+ fo.write("\r\n")
335
+ end
336
+ mx = MyMatrix.new('spec/csv.csv')
337
+ return mx
338
+ end
339
+ def makecsv_norow
340
+ open('spec/csv.csv', 'w') do |fo|
341
+ fo.write("a,b,c\r\n")
342
+ end
343
+ mx = MyMatrix.new('spec/csv.csv')
344
+ return mx
345
+ end
Binary file
Binary file
Binary file
metadata CHANGED
@@ -1,78 +1,65 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mymatrix
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
8
- - zucay
8
+ - yukihico
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-03-24 00:00:00.000000000 Z
12
+ date: 2012-03-26 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- name: rdoc
16
- requirement: &70220778252560 !ruby/object:Gem::Requirement
17
- none: false
18
- requirements:
19
- - - ~>
20
- - !ruby/object:Gem::Version
21
- version: '3.10'
22
- type: :development
23
- prerelease: false
24
- version_requirements: *70220778252560
25
- - !ruby/object:Gem::Dependency
26
- name: newgem
27
- requirement: &70220778251060 !ruby/object:Gem::Requirement
15
+ name: rspec
16
+ requirement: &70346700079840 !ruby/object:Gem::Requirement
28
17
  none: false
29
18
  requirements:
30
19
  - - ! '>='
31
20
  - !ruby/object:Gem::Version
32
- version: 1.5.3
33
- type: :development
34
- prerelease: false
35
- version_requirements: *70220778251060
36
- - !ruby/object:Gem::Dependency
37
- name: hoe
38
- requirement: &70220778248100 !ruby/object:Gem::Requirement
39
- none: false
40
- requirements:
41
- - - ~>
42
- - !ruby/object:Gem::Version
43
- version: '3.0'
21
+ version: '0'
44
22
  type: :development
45
23
  prerelease: false
46
- version_requirements: *70220778248100
24
+ version_requirements: *70346700079840
47
25
  description: mymatrix is a handling library for MS Excel and csv/tsv text.
48
26
  email:
49
27
  - yukihico@gmail.com
50
28
  executables: []
51
29
  extensions: []
52
- extra_rdoc_files:
53
- - History.txt
54
- - Manifest.txt
55
- - PostInstall.txt
56
- - README.rdoc
30
+ extra_rdoc_files: []
57
31
  files:
58
- - History.txt
59
- - Manifest.txt
60
- - PostInstall.txt
61
- - README.rdoc
32
+ - Gemfile
62
33
  - Rakefile
63
34
  - lib/mymatrix.rb
64
- - script/console
65
- - script/destroy
66
- - script/generate
67
- - test/test_helper.rb
68
- - test/test_mymatrix.rb
69
- - .gemtest
70
- homepage: []
35
+ - lib/mymatrix/version.rb
36
+ - mymatrix.gemspec
37
+ - spec/csv.csv
38
+ - spec/csv.csv.txt
39
+ - spec/csv_test.csv
40
+ - spec/for_concat/con1.xls
41
+ - spec/for_concat/con2.xls
42
+ - spec/for_concat/con3.xls
43
+ - spec/for_concat/con4.xls
44
+ - spec/info_list.txt
45
+ - spec/line4.txt
46
+ - spec/line4.xls
47
+ - spec/mymatrix_spec.rb
48
+ - spec/offset.txt
49
+ - spec/out.xls
50
+ - spec/std_shoshiki.xls
51
+ - spec/template.xls
52
+ - spec/test.csv
53
+ - spec/test.txt
54
+ - spec/test_helper.rb
55
+ - spec/test_mymatrix.rb
56
+ - spec/words/001_sheet.doc
57
+ - spec/words/002_sheet.doc
58
+ - spec/words/003_sheet.doc
59
+ homepage: ''
71
60
  licenses: []
72
61
  post_install_message:
73
- rdoc_options:
74
- - --main
75
- - README.rdoc
62
+ rdoc_options: []
76
63
  require_paths:
77
64
  - lib
78
65
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -92,7 +79,27 @@ rubyforge_project: mymatrix
92
79
  rubygems_version: 1.7.2
93
80
  signing_key:
94
81
  specification_version: 3
95
- summary: mymatrix is a handling library for MS Excel and csv/tsv text.
82
+ summary: MS Excel and csv/tsv text handling library
96
83
  test_files:
97
- - test/test_helper.rb
98
- - test/test_mymatrix.rb
84
+ - spec/csv.csv
85
+ - spec/csv.csv.txt
86
+ - spec/csv_test.csv
87
+ - spec/for_concat/con1.xls
88
+ - spec/for_concat/con2.xls
89
+ - spec/for_concat/con3.xls
90
+ - spec/for_concat/con4.xls
91
+ - spec/info_list.txt
92
+ - spec/line4.txt
93
+ - spec/line4.xls
94
+ - spec/mymatrix_spec.rb
95
+ - spec/offset.txt
96
+ - spec/out.xls
97
+ - spec/std_shoshiki.xls
98
+ - spec/template.xls
99
+ - spec/test.csv
100
+ - spec/test.txt
101
+ - spec/test_helper.rb
102
+ - spec/test_mymatrix.rb
103
+ - spec/words/001_sheet.doc
104
+ - spec/words/002_sheet.doc
105
+ - spec/words/003_sheet.doc