ruby-nuggets 0.9.5 → 0.9.6.pre1
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.
- checksums.yaml +4 -4
- data/Rakefile +1 -0
- data/lib/nuggets/hash/idmap.rb +5 -0
- data/lib/nuggets/hash/idmap_mixin.rb +42 -0
- data/lib/nuggets/midos.rb +129 -33
- data/lib/nuggets/version.rb +2 -2
- metadata +10 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bfa0c7f59b19e5581563b907497449211abbf7f1
|
4
|
+
data.tar.gz: 15e011ede9ab07f1c0cab0813f34e986e7415c00
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8a2bc736534dca11da0d83c5eb6000615c0bd425b55cc666436073a39382ba3787ed92f643fcb4b508213f6f3ceac48acec16b0993d9309ace1359c4b987c501
|
7
|
+
data.tar.gz: 6076264bce920e79530637eaab28147813b940dec9221ee83d4e643b84cf3269cbf5e529d21fb7672e6a33367d38df53d2fcee202cda5e0b9517c902290ebffe
|
data/Rakefile
CHANGED
@@ -0,0 +1,42 @@
|
|
1
|
+
#--
|
2
|
+
###############################################################################
|
3
|
+
# #
|
4
|
+
# A component of ruby-nuggets, some extensions to the Ruby programming #
|
5
|
+
# language. #
|
6
|
+
# #
|
7
|
+
# Copyright (C) 2007-2013 Jens Wille #
|
8
|
+
# #
|
9
|
+
# Authors: #
|
10
|
+
# Jens Wille <jens.wille@gmail.com> #
|
11
|
+
# #
|
12
|
+
# ruby-nuggets is free software; you can redistribute it and/or modify it #
|
13
|
+
# under the terms of the GNU Affero General Public License as published by #
|
14
|
+
# the Free Software Foundation; either version 3 of the License, or (at your #
|
15
|
+
# option) any later version. #
|
16
|
+
# #
|
17
|
+
# ruby-nuggets is distributed in the hope that it will be useful, but WITHOUT #
|
18
|
+
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or #
|
19
|
+
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License #
|
20
|
+
# for more details. #
|
21
|
+
# #
|
22
|
+
# You should have received a copy of the GNU Affero General Public License #
|
23
|
+
# along with ruby-nuggets. If not, see <http://www.gnu.org/licenses/>. #
|
24
|
+
# #
|
25
|
+
###############################################################################
|
26
|
+
#++
|
27
|
+
|
28
|
+
module Nuggets
|
29
|
+
class Hash
|
30
|
+
module IDMapMixin
|
31
|
+
|
32
|
+
def idmap(counter = 0)
|
33
|
+
if block_given?
|
34
|
+
new { |hash, key| hash[key] = yield(counter += 1) }
|
35
|
+
else
|
36
|
+
new { |hash, key| hash[key] = counter += 1 }
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
data/lib/nuggets/midos.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
1
3
|
#--
|
2
4
|
###############################################################################
|
3
5
|
# #
|
@@ -28,69 +30,122 @@
|
|
28
30
|
module Nuggets
|
29
31
|
module Midos
|
30
32
|
|
31
|
-
|
33
|
+
# Record separator
|
34
|
+
DEFAULT_RS = '&&&'
|
32
35
|
|
33
|
-
|
34
|
-
|
36
|
+
# Field separator
|
37
|
+
DEFAULT_FS = ':'
|
35
38
|
|
36
|
-
|
37
|
-
|
39
|
+
# Value separator
|
40
|
+
DEFAULT_VS = ' | '
|
38
41
|
|
39
|
-
|
40
|
-
|
42
|
+
# Line break indicator
|
43
|
+
DEFAULT_NL = '^'
|
41
44
|
|
42
|
-
|
43
|
-
|
45
|
+
# Line ending
|
46
|
+
DEFAULT_LE = "\r\n"
|
44
47
|
|
45
|
-
|
46
|
-
|
48
|
+
# Default file encoding
|
49
|
+
DEFAULT_ENCODING = 'iso-8859-1'
|
47
50
|
|
48
|
-
|
51
|
+
class << self
|
49
52
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
53
|
+
def filter(source, target, source_options = {}, target_options = source_options)
|
54
|
+
records = {}
|
55
|
+
|
56
|
+
Parser.parse(source, source_options) { |id, record|
|
57
|
+
records[id] = record if yield(id, record)
|
58
|
+
}
|
59
|
+
|
60
|
+
Writer.write(target, records, target_options)
|
61
|
+
|
62
|
+
records
|
63
|
+
end
|
54
64
|
|
55
|
-
|
56
|
-
|
57
|
-
|
65
|
+
def filter_file(source_file, target_file, source_options = {}, target_options = source_options, &block)
|
66
|
+
source_options[:encoding] ||= DEFAULT_ENCODING
|
67
|
+
target_options[:encoding] ||= DEFAULT_ENCODING
|
68
|
+
|
69
|
+
::File.open(source_file, :encoding => source_options[:encoding]) { |source|
|
70
|
+
::File.open(target_file, 'w', :encoding => target_options[:encoding]) { |target|
|
71
|
+
filter(source, target, source_options, target_options, &block)
|
58
72
|
}
|
59
|
-
|
73
|
+
}
|
74
|
+
end
|
60
75
|
|
76
|
+
def convert(*args)
|
77
|
+
filter(*args) { |*| true }
|
61
78
|
end
|
62
79
|
|
80
|
+
def convert_file(*args)
|
81
|
+
filter_file(*args) { |*| true }
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
85
|
+
|
86
|
+
class Base
|
87
|
+
|
63
88
|
def initialize(options = {})
|
64
89
|
@key = options[:key]
|
65
90
|
|
66
91
|
@rs = options[:rs] || DEFAULT_RS
|
67
92
|
@fs = options[:fs] || DEFAULT_FS
|
68
93
|
@vs = options[:vs] || DEFAULT_VS
|
69
|
-
@vs = /\s*#{Regexp.escape(@vs)}\s*/ unless @vs.is_a?(Regexp)
|
70
94
|
@nl = options[:nl] || DEFAULT_NL
|
95
|
+
@le = options[:le] || DEFAULT_LE
|
71
96
|
|
72
97
|
reset
|
73
98
|
end
|
74
99
|
|
75
|
-
attr_reader :rs, :fs, :vs, :key, :records
|
100
|
+
attr_reader :rs, :fs, :vs, :nl, :le, :key, :records
|
76
101
|
|
77
102
|
def reset
|
78
103
|
@records = {}
|
79
104
|
@auto_id = auto_id
|
80
105
|
end
|
81
106
|
|
82
|
-
|
107
|
+
private
|
108
|
+
|
109
|
+
def auto_id(n = 0)
|
110
|
+
lambda { n += 1 }
|
111
|
+
end
|
112
|
+
|
113
|
+
end
|
114
|
+
|
115
|
+
class Parser < Base
|
116
|
+
|
117
|
+
class << self
|
118
|
+
|
119
|
+
def parse(source, options = {}, &block)
|
120
|
+
parser = new(options).parse(source, &block)
|
121
|
+
block_given? ? parser : parser.records
|
122
|
+
end
|
123
|
+
|
124
|
+
def parse_file(file, options = {}, &block)
|
125
|
+
::File.open(file, :encoding => options[:encoding] ||= DEFAULT_ENCODING) { |source|
|
126
|
+
parse(source, options, &block)
|
127
|
+
}
|
128
|
+
end
|
129
|
+
|
130
|
+
end
|
131
|
+
|
132
|
+
def initialize(options = {})
|
133
|
+
super
|
134
|
+
@vs = /\s*#{::Regexp.escape(@vs)}\s*/ unless @vs.is_a?(::Regexp)
|
135
|
+
end
|
136
|
+
|
137
|
+
def parse(source, &block)
|
83
138
|
unless block
|
84
139
|
records, block = @records, amend_block { |id, record|
|
85
140
|
records[id] = record
|
86
141
|
}
|
87
142
|
end
|
88
143
|
|
89
|
-
rs, fs, vs, nl, key, auto_id, id, record =
|
90
|
-
@rs, @fs, @vs, @nl, @key, @auto_id, nil, {}
|
144
|
+
rs, fs, vs, nl, le, key, auto_id, id, record =
|
145
|
+
@rs, @fs, @vs, @nl, @le, @key, @auto_id, nil, {}
|
91
146
|
|
92
|
-
|
93
|
-
line = line.chomp
|
147
|
+
source.each { |line|
|
148
|
+
line = line.chomp(le)
|
94
149
|
|
95
150
|
if line == rs
|
96
151
|
block[key ? id : auto_id.call, record]
|
@@ -116,17 +171,14 @@ module Nuggets
|
|
116
171
|
|
117
172
|
private
|
118
173
|
|
119
|
-
def auto_id(n = 0)
|
120
|
-
lambda { n += 1 }
|
121
|
-
end
|
122
|
-
|
123
174
|
def amend_block(&block)
|
124
175
|
return block unless $VERBOSE && k = @key
|
125
176
|
|
126
|
-
r, i = block.binding.eval('_ = records,
|
177
|
+
r, i = block.binding.eval('_ = records, source')
|
127
178
|
|
128
179
|
l = i.respond_to?(:lineno)
|
129
|
-
s = i.respond_to?(:path) ? i.path :
|
180
|
+
s = i.respond_to?(:path) ? i.path :
|
181
|
+
::Object.instance_method(:inspect).bind(i).call
|
130
182
|
|
131
183
|
lambda { |id, *args|
|
132
184
|
if (r ||= block.binding.eval('records')).has_key?(id)
|
@@ -139,5 +191,49 @@ module Nuggets
|
|
139
191
|
|
140
192
|
end
|
141
193
|
|
194
|
+
class Writer < Base
|
195
|
+
|
196
|
+
class << self
|
197
|
+
|
198
|
+
def write(target, records, options = {})
|
199
|
+
new(options).write(target, records)
|
200
|
+
end
|
201
|
+
|
202
|
+
def write_file(file, records, options = {})
|
203
|
+
::File.open(file, 'w', :encoding => options[:encoding] ||= DEFAULT_ENCODING) { |target|
|
204
|
+
write(target, records, options)
|
205
|
+
}
|
206
|
+
end
|
207
|
+
|
208
|
+
end
|
209
|
+
|
210
|
+
def write(target, records = {})
|
211
|
+
rs, fs, vs, nl, le, key, auto_id =
|
212
|
+
@rs, @fs, @vs, @nl, @le, @key, @auto_id
|
213
|
+
|
214
|
+
@records.update(records).each { |id, record|
|
215
|
+
record, id = id, nil unless record
|
216
|
+
|
217
|
+
if key && !record.has_key?(key)
|
218
|
+
record[key] = id || auto_id.call
|
219
|
+
end
|
220
|
+
|
221
|
+
record.each { |k, v|
|
222
|
+
if v
|
223
|
+
v = v.is_a?(::Array) ? v.join(vs) : v.to_s
|
224
|
+
v.gsub!("\n", nl)
|
225
|
+
|
226
|
+
target << k << fs << v << le
|
227
|
+
end
|
228
|
+
}
|
229
|
+
|
230
|
+
target << rs << le << le
|
231
|
+
}
|
232
|
+
|
233
|
+
self
|
234
|
+
end
|
235
|
+
|
236
|
+
end
|
237
|
+
|
142
238
|
end
|
143
239
|
end
|
data/lib/nuggets/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-nuggets
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.6.pre1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jens Wille
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-07-24 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Some extensions to the Ruby programming language.
|
14
14
|
email: jens.wille@gmail.com
|
@@ -79,6 +79,8 @@ files:
|
|
79
79
|
- lib/nuggets/hash/at.rb
|
80
80
|
- lib/nuggets/hash/deep_merge.rb
|
81
81
|
- lib/nuggets/hash/deep_merge_mixin.rb
|
82
|
+
- lib/nuggets/hash/idmap.rb
|
83
|
+
- lib/nuggets/hash/idmap_mixin.rb
|
82
84
|
- lib/nuggets/hash/in_order.rb
|
83
85
|
- lib/nuggets/hash/insert.rb
|
84
86
|
- lib/nuggets/hash/nest.rb
|
@@ -218,7 +220,8 @@ files:
|
|
218
220
|
- spec/spec_helper.rb
|
219
221
|
- .rspec
|
220
222
|
homepage: http://github.com/blackwinter/ruby-nuggets
|
221
|
-
licenses:
|
223
|
+
licenses:
|
224
|
+
- AGPL
|
222
225
|
metadata: {}
|
223
226
|
post_install_message:
|
224
227
|
rdoc_options:
|
@@ -227,7 +230,7 @@ rdoc_options:
|
|
227
230
|
- --line-numbers
|
228
231
|
- --all
|
229
232
|
- --title
|
230
|
-
- ruby-nuggets Application documentation (v0.9.
|
233
|
+
- ruby-nuggets Application documentation (v0.9.6.pre1)
|
231
234
|
- --main
|
232
235
|
- README
|
233
236
|
require_paths:
|
@@ -239,12 +242,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
239
242
|
version: '0'
|
240
243
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
241
244
|
requirements:
|
242
|
-
- - '
|
245
|
+
- - '>'
|
243
246
|
- !ruby/object:Gem::Version
|
244
|
-
version:
|
247
|
+
version: 1.3.1
|
245
248
|
requirements: []
|
246
249
|
rubyforge_project:
|
247
|
-
rubygems_version: 2.0.
|
250
|
+
rubygems_version: 2.0.5
|
248
251
|
signing_key:
|
249
252
|
specification_version: 4
|
250
253
|
summary: Some extensions to the Ruby programming language.
|