midos 0.0.3 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/ChangeLog +6 -0
- data/README +1 -1
- data/lib/midos.rb +28 -3
- data/lib/midos/base.rb +13 -8
- data/lib/midos/reader.rb +17 -13
- data/lib/midos/version.rb +2 -2
- data/lib/midos/writer.rb +69 -62
- metadata +7 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bc1114593359377788c5becae5330809e6d883b7
|
4
|
+
data.tar.gz: d04ec2c46112c7f0f722bedf1aeca80bbbbcedd9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a923f3a6f6272f1c8d863f3bc9d232513481d7be3767abc9306232041614a8d61567a2bb93d72c97569f7f3dadcd02f0f5abae715c0519a4a680c71e70ef013f
|
7
|
+
data.tar.gz: 2c6342a4711a6a23c5894de3c1abad1a16fbc7635f2dfb7b77499f8028c7ca8892a6ede0f8a0645ab8103ab3a9662807cd08c6e2da593054fb6d23746e54f19a
|
data/ChangeLog
CHANGED
@@ -2,6 +2,12 @@
|
|
2
2
|
|
3
3
|
= Revision history for midos
|
4
4
|
|
5
|
+
== 0.1.0 [2015-04-28]
|
6
|
+
|
7
|
+
* Percent-encode special characters <tt>^</tt> and <tt>|</tt>.
|
8
|
+
* Added Gzip support to Midos.open_file.
|
9
|
+
* Added Midos.uniq and Midos.uniq_file.
|
10
|
+
|
5
11
|
== 0.0.3 [2015-04-10]
|
6
12
|
|
7
13
|
* Ruby 2.2 compatibility.
|
data/README
CHANGED
data/lib/midos.rb
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
# #
|
6
6
|
# midos -- A Ruby client for MIDOS databases #
|
7
7
|
# #
|
8
|
-
# Copyright (C) 2014 Jens Wille
|
8
|
+
# Copyright (C) 2014-2015 Jens Wille #
|
9
9
|
# #
|
10
10
|
# Authors: #
|
11
11
|
# Jens Wille <jens.wille@gmail.com> #
|
@@ -49,7 +49,7 @@ module Midos
|
|
49
49
|
class << self
|
50
50
|
|
51
51
|
def filter(source, target, source_options = {}, target_options = source_options)
|
52
|
-
writer, size = Writer.new(target_options.merge(:
|
52
|
+
writer, size = Writer.new(target_options.merge(io: target)), 0
|
53
53
|
|
54
54
|
Reader.parse(source, source_options) { |*args|
|
55
55
|
writer << args and size += 1 if yield(*args)
|
@@ -74,9 +74,34 @@ module Midos
|
|
74
74
|
filter_file(*args) { |*| true }
|
75
75
|
end
|
76
76
|
|
77
|
+
def uniq(*args)
|
78
|
+
uniq_wrapper { |block| filter(*args, &block) }
|
79
|
+
end
|
80
|
+
|
81
|
+
def uniq_file(*args)
|
82
|
+
uniq_wrapper { |block| filter_file(*args, &block) }
|
83
|
+
end
|
84
|
+
|
77
85
|
def open_file(file, options = {}, mode = 'r', &block)
|
78
86
|
encoding = options[:encoding] ||= DEFAULT_ENCODING
|
79
|
-
|
87
|
+
|
88
|
+
if file =~ /\.gz\z/i
|
89
|
+
require 'zlib'
|
90
|
+
|
91
|
+
gzip = mode.include?('w') ? Zlib::GzipWriter : Zlib::GzipReader
|
92
|
+
gzip.open(file, encoding: encoding, &block)
|
93
|
+
else
|
94
|
+
File.open(file, mode, encoding: encoding, &block)
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
private
|
99
|
+
|
100
|
+
def uniq_wrapper
|
101
|
+
require 'nuggets/hash/seen'
|
102
|
+
|
103
|
+
seen = Hash.seen
|
104
|
+
yield lambda { |id, *| !seen[id] }
|
80
105
|
end
|
81
106
|
|
82
107
|
end
|
data/lib/midos/base.rb
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
# #
|
6
6
|
# midos -- A Ruby client for MIDOS databases #
|
7
7
|
# #
|
8
|
-
# Copyright (C) 2014 Jens Wille
|
8
|
+
# Copyright (C) 2014-2015 Jens Wille #
|
9
9
|
# #
|
10
10
|
# Authors: #
|
11
11
|
# Jens Wille <jens.wille@gmail.com> #
|
@@ -41,6 +41,10 @@ module Midos
|
|
41
41
|
}
|
42
42
|
end
|
43
43
|
|
44
|
+
def replacements_for(*args)
|
45
|
+
args.map { |a| "%#{a.bytes.map { |b| b.to_s(16) }.join.upcase}" }
|
46
|
+
end
|
47
|
+
|
44
48
|
def extract_options!(args)
|
45
49
|
args.last.is_a?(Hash) ? args.pop : {}
|
46
50
|
end
|
@@ -50,14 +54,15 @@ module Midos
|
|
50
54
|
def initialize(options = {}, &block)
|
51
55
|
self.key = options[:key]
|
52
56
|
|
53
|
-
self.rs = options
|
54
|
-
self.fs = options
|
55
|
-
self.vs = options
|
56
|
-
self.nl = options
|
57
|
-
self.le = options
|
58
|
-
self.io = options
|
57
|
+
self.rs = options.fetch(:rs, DEFAULT_RS)
|
58
|
+
self.fs = options.fetch(:fs, DEFAULT_FS)
|
59
|
+
self.vs = options.fetch(:vs, DEFAULT_VS)
|
60
|
+
self.nl = options.fetch(:nl, DEFAULT_NL)
|
61
|
+
self.le = options.fetch(:le, DEFAULT_LE)
|
62
|
+
self.io = options.fetch(:io, self.class::DEFAULT_IO)
|
63
|
+
|
64
|
+
@auto_id_block = options.fetch(:auto_id, block)
|
59
65
|
|
60
|
-
@auto_id_block = options[:auto_id] || block
|
61
66
|
reset
|
62
67
|
end
|
63
68
|
|
data/lib/midos/reader.rb
CHANGED
@@ -43,6 +43,17 @@ module Midos
|
|
43
43
|
file_method(:parse, 'r', *args, &block)
|
44
44
|
end
|
45
45
|
|
46
|
+
def transform(value, vs, nl)
|
47
|
+
rvs, rnl = replacements_for(vs, nl)
|
48
|
+
|
49
|
+
value.gsub!(nl, "\n")
|
50
|
+
value.gsub!(rvs, nl)
|
51
|
+
|
52
|
+
!value.index(vs) ?
|
53
|
+
value.gsub!(rnl, vs) || value :
|
54
|
+
value.split(vs).each { |v| v.gsub!(rnl, vs) }
|
55
|
+
end
|
56
|
+
|
46
57
|
end
|
47
58
|
|
48
59
|
attr_reader :records
|
@@ -63,8 +74,7 @@ module Midos
|
|
63
74
|
}
|
64
75
|
end
|
65
76
|
|
66
|
-
|
67
|
-
@rs, @fs, @vs, @nl, @le, @key, @auto_id, nil, {}
|
77
|
+
id, record = nil, {}
|
68
78
|
|
69
79
|
io.each { |line|
|
70
80
|
line = line.chomp(le)
|
@@ -74,17 +84,7 @@ module Midos
|
|
74
84
|
id, record = nil, {}
|
75
85
|
else
|
76
86
|
k, v = line.split(fs, 2)
|
77
|
-
|
78
|
-
if k && v
|
79
|
-
if k == key
|
80
|
-
id = v
|
81
|
-
else
|
82
|
-
v.gsub!(nl, "\n")
|
83
|
-
v = v.split(vs) if v.index(vs)
|
84
|
-
end
|
85
|
-
|
86
|
-
record[k] = v
|
87
|
-
end
|
87
|
+
record[k] = k == key ? id = v : transform(v) if k && v
|
88
88
|
end
|
89
89
|
}
|
90
90
|
|
@@ -93,6 +93,10 @@ module Midos
|
|
93
93
|
|
94
94
|
private
|
95
95
|
|
96
|
+
def transform(value)
|
97
|
+
self.class.transform(value, vs, nl)
|
98
|
+
end
|
99
|
+
|
96
100
|
def amend_block(&block)
|
97
101
|
return block unless $VERBOSE && k = @key
|
98
102
|
|
data/lib/midos/version.rb
CHANGED
data/lib/midos/writer.rb
CHANGED
@@ -48,6 +48,19 @@ module Midos
|
|
48
48
|
file_method(nil, 'w', *args, &block)
|
49
49
|
end
|
50
50
|
|
51
|
+
def transform(value, vs, nl)
|
52
|
+
rvs, rnl = replacements_for(vs, nl)
|
53
|
+
|
54
|
+
value = !value.is_a?(Array) ?
|
55
|
+
value.to_s.gsub(vs, rvs) :
|
56
|
+
value.map { |v| v.gsub(vs, rvs) }.join(vs)
|
57
|
+
|
58
|
+
value.gsub!(nl, rnl)
|
59
|
+
value.gsub!("\n", nl)
|
60
|
+
|
61
|
+
value
|
62
|
+
end
|
63
|
+
|
51
64
|
end
|
52
65
|
|
53
66
|
def vs=(vs)
|
@@ -56,21 +69,17 @@ module Midos
|
|
56
69
|
end
|
57
70
|
|
58
71
|
def write(records, *args)
|
59
|
-
|
72
|
+
!records.is_a?(Hash) ?
|
73
|
+
records.each { |record| write_i(nil, record, *args) } :
|
60
74
|
records.each { |id, record| write_i(id, record, *args) }
|
61
|
-
else
|
62
|
-
records.each { |record| write_i(nil, record, *args) }
|
63
|
-
end
|
64
75
|
|
65
76
|
self
|
66
77
|
end
|
67
78
|
|
68
79
|
def put(record, *args)
|
69
|
-
|
70
|
-
write_i(nil, record, *args)
|
71
|
-
else
|
80
|
+
record.is_a?(Hash) ?
|
81
|
+
write_i(nil, record, *args) :
|
72
82
|
write_i(*args.unshift(*record))
|
73
|
-
end
|
74
83
|
|
75
84
|
self
|
76
85
|
end
|
@@ -82,67 +91,63 @@ module Midos
|
|
82
91
|
def write_i(id, record, io = io())
|
83
92
|
return if record.empty?
|
84
93
|
|
85
|
-
if
|
86
|
-
record[@key] = id || @auto_id.call
|
87
|
-
end
|
94
|
+
record[key] = id || auto_id.call if key && !record.key?(key)
|
88
95
|
|
89
96
|
record.each { |k, v|
|
90
|
-
|
91
|
-
|
92
|
-
v = v.is_a?(Array) ? v.join(@vs) : v.to_s
|
93
|
-
io << k << @fs << v.gsub("\n", @nl) << @le
|
94
|
-
else
|
95
|
-
Array(v).each { |w| io << w.to_s << @le }
|
96
|
-
end
|
97
|
-
end
|
97
|
+
k ? io << k << fs << transform(v) << le :
|
98
|
+
Array(v).each { |w| io << w.to_s << le } if v
|
98
99
|
}
|
99
100
|
|
100
|
-
io <<
|
101
|
+
io << rs << le << le
|
102
|
+
end
|
103
|
+
|
104
|
+
def transform(value)
|
105
|
+
self.class.transform(value, vs, nl)
|
101
106
|
end
|
102
107
|
|
103
108
|
class Thesaurus < self
|
104
109
|
|
105
110
|
PROLOGUE = {
|
106
|
-
:
|
107
|
-
:
|
108
|
-
:
|
109
|
-
:
|
110
|
-
:
|
111
|
-
:
|
112
|
-
:
|
113
|
-
:
|
114
|
-
:
|
115
|
-
:
|
116
|
-
:
|
117
|
-
:
|
118
|
-
:
|
119
|
-
:
|
120
|
-
:
|
121
|
-
:
|
122
|
-
:
|
123
|
-
:
|
124
|
-
:
|
125
|
-
:
|
126
|
-
:
|
127
|
-
:
|
128
|
-
:
|
129
|
-
:
|
130
|
-
:
|
131
|
-
:
|
132
|
-
:
|
133
|
-
:
|
134
|
-
:
|
135
|
-
:
|
136
|
-
:
|
137
|
-
:
|
138
|
-
:
|
139
|
-
:
|
140
|
-
:
|
141
|
-
:
|
111
|
+
PAR: '1011111111110000000010001000000000000010',
|
112
|
+
DAT: '00000000',
|
113
|
+
DES: 'DE',
|
114
|
+
TOP: 'TP~TP',
|
115
|
+
KLA: 'CC~CC',
|
116
|
+
OBR: 'BT~BT',
|
117
|
+
UTR: 'NT~NT',
|
118
|
+
SYN: 'UF~USE',
|
119
|
+
FRU: 'PT~PT für',
|
120
|
+
VER: 'RT~RT',
|
121
|
+
SP1: 'ENG~ENG für',
|
122
|
+
SP2: 'FRA~FRA für',
|
123
|
+
SP3: 'SPA~SPA für',
|
124
|
+
SP4: 'ITA~ITA für',
|
125
|
+
SP5: 'GRI~GRI für',
|
126
|
+
SP6: 'RUS~RUS für',
|
127
|
+
SP7: 'POL~POL für',
|
128
|
+
SP8: 'UNG~UNG für',
|
129
|
+
SP9: 'TSC~TSC für',
|
130
|
+
SN1: 'SN1',
|
131
|
+
SN2: 'SN2',
|
132
|
+
SN3: 'SN3',
|
133
|
+
SN4: 'SN4',
|
134
|
+
SN5: 'SN5',
|
135
|
+
DA1: 'DATE1',
|
136
|
+
DA2: 'DATE2',
|
137
|
+
DA3: 'DATE3',
|
138
|
+
DA4: 'DATE4',
|
139
|
+
KLD: 'MIDOS Thesaurus',
|
140
|
+
KOM: ' / ',
|
141
|
+
KO1: 'UF',
|
142
|
+
KO2: 'USE',
|
143
|
+
TLE: ' 32000 Zeichen',
|
144
|
+
PAW: '',
|
145
|
+
ART: '00000',
|
146
|
+
REL: ' 17 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 18 19 20 21 22 23 24 25'
|
142
147
|
}
|
143
148
|
|
144
149
|
EPILOGUE = {
|
145
|
-
:
|
150
|
+
DE: '*****NICHTDESKRIPTORRELATIONEN*****'
|
146
151
|
}
|
147
152
|
|
148
153
|
RESOLVE_FROM = [:OBR, :UTR, :VER]
|
@@ -154,7 +159,8 @@ module Midos
|
|
154
159
|
class << self
|
155
160
|
|
156
161
|
def write(*args, &block)
|
157
|
-
new(extract_options!(args), &block)
|
162
|
+
new(extract_options!(args), &block)
|
163
|
+
.instruct! { |mth| mth.write(*args) }
|
158
164
|
end
|
159
165
|
|
160
166
|
def open(*args, &block)
|
@@ -187,14 +193,15 @@ module Midos
|
|
187
193
|
|
188
194
|
records.each { |id, record|
|
189
195
|
new_record = hash[id] = {}
|
190
|
-
|
196
|
+
|
197
|
+
record.each { |key, value|
|
198
|
+
new_record[key] = resolve(key, value, *args) }
|
191
199
|
}
|
192
200
|
end
|
193
201
|
|
194
202
|
def resolve_from_to(from = nil, to = prologue[RESOLVE_TO])
|
195
|
-
|
196
|
-
|
197
|
-
end
|
203
|
+
from = prologue.values_at(*RESOLVE_FROM)
|
204
|
+
.map { |v| v.split('~').first } if from.nil? || from == true
|
198
205
|
|
199
206
|
[from, to]
|
200
207
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: midos
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jens Wille
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-04-
|
11
|
+
date: 2015-04-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nuggets
|
@@ -82,13 +82,15 @@ licenses:
|
|
82
82
|
metadata: {}
|
83
83
|
post_install_message: |2+
|
84
84
|
|
85
|
-
midos-0.0
|
85
|
+
midos-0.1.0 [2015-04-28]:
|
86
86
|
|
87
|
-
*
|
87
|
+
* Percent-encode special characters <tt>^</tt> and <tt>|</tt>.
|
88
|
+
* Added Gzip support to Midos.open_file.
|
89
|
+
* Added Midos.uniq and Midos.uniq_file.
|
88
90
|
|
89
91
|
rdoc_options:
|
90
92
|
- "--title"
|
91
|
-
- midos Application documentation (v0.0
|
93
|
+
- midos Application documentation (v0.1.0)
|
92
94
|
- "--charset"
|
93
95
|
- UTF-8
|
94
96
|
- "--line-numbers"
|