arrayfields 3.7.0 → 4.0.0
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/README +103 -16
- data/README.tmpl +38 -12
- data/lib/{arrayfields-3.7.0.rb → arrayfields-4.0.0.rb} +45 -8
- data/lib/arrayfields.rb +45 -8
- data/sample/b.rb +2 -2
- data/sample/c.rb +9 -0
- data/sample/d.rb +24 -0
- metadata +12 -10
data/README
CHANGED
@@ -2,11 +2,29 @@ NAME
|
|
2
2
|
arrayfields.rb
|
3
3
|
|
4
4
|
URIS
|
5
|
-
http://
|
6
|
-
http://
|
7
|
-
http://raa.ruby-lang.org/project/arrayfields/
|
5
|
+
http://www.codeforpeople.com/lib/ruby/
|
6
|
+
http://rubyforge.org/projects/codeforpeople/
|
8
7
|
|
9
8
|
SYNOPSIS
|
9
|
+
require 'arrayfields'
|
10
|
+
|
11
|
+
a = Arrayfields.new :k, :v, :a, :b
|
12
|
+
|
13
|
+
p a[:k] #=> :v
|
14
|
+
p a[:a] #=> :b
|
15
|
+
p a.fields #=> [:k, :a]
|
16
|
+
p a.values #=> [:v, :b]
|
17
|
+
p a #=> [:v, :b]
|
18
|
+
p a.to_hash #=> {:k => :v, :a => :b}
|
19
|
+
p a.pairs #=> [[:k, :v], [:a, :b]]
|
20
|
+
|
21
|
+
a[:foo] = :bar
|
22
|
+
|
23
|
+
p a[:foo] #=> :bar
|
24
|
+
p a.fields #=> [:k, :a, :foo]
|
25
|
+
|
26
|
+
AND
|
27
|
+
|
10
28
|
require 'arrayfields'
|
11
29
|
|
12
30
|
fields = 'name', 'age'
|
@@ -14,18 +32,18 @@ SYNOPSIS
|
|
14
32
|
|
15
33
|
a.fields = fields
|
16
34
|
|
17
|
-
a[
|
18
|
-
a[
|
19
|
-
a.indices 'name', 'age'
|
35
|
+
a['name'] #=> 'zaphod'
|
36
|
+
a[:name ] #=> 'zaphod'
|
37
|
+
a.indices 'name', 'age' #=> [ 'zaphod', 42 ]
|
20
38
|
|
21
39
|
DESCRIPTION
|
22
40
|
allow keyword access to array instances. arrayfields works by adding only a
|
23
|
-
few methods to arrays, namely #fields= and fields, but the #fields= method
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
41
|
+
few methods to arrays, namely #fields= and fields, but the #fields= method is
|
42
|
+
hooked to extend an array on a per object basis. in otherwords __only__ those
|
43
|
+
arrays whose fields are set will have auto-magical keyword access bestowed on
|
44
|
+
them - all other arrays remain unaffected. arrays with keyword access require
|
45
|
+
much less memory when compared to hashes/objects and yet still provide fast
|
46
|
+
lookup and preserve data order.
|
29
47
|
|
30
48
|
LIST OF OVERRIDDEN METHODS
|
31
49
|
Array#[]
|
@@ -58,6 +76,7 @@ LIST OF HASH-LIKE METHODS
|
|
58
76
|
Array#update
|
59
77
|
Array#replace
|
60
78
|
Array#invert
|
79
|
+
Array#pairs
|
61
80
|
|
62
81
|
LIST OF ADDED Array METHODS
|
63
82
|
Array#fields=
|
@@ -136,11 +155,11 @@ SAMPLES
|
|
136
155
|
|
137
156
|
require 'arrayfields'
|
138
157
|
#
|
139
|
-
# the struct
|
158
|
+
# the struct class factory method can be used in much the same way as ruby's
|
140
159
|
# own struct generators and is useful when the fields for a set of arrays is
|
141
160
|
# known apriori
|
142
161
|
#
|
143
|
-
c = Array.
|
162
|
+
c = Array.struct :a, :b, :c # class generator
|
144
163
|
a = c.new [42, nil, nil]
|
145
164
|
a[:c] = 42
|
146
165
|
p a #=> [42, nil, 42]
|
@@ -158,13 +177,81 @@ SAMPLES
|
|
158
177
|
[42, nil, 42, 42.0]
|
159
178
|
|
160
179
|
|
180
|
+
<========< sample/c.rb >========>
|
181
|
+
|
182
|
+
~ > cat sample/c.rb
|
183
|
+
|
184
|
+
require 'arrayfields'
|
185
|
+
#
|
186
|
+
# the Array.fields methods generates an insance with those fields
|
187
|
+
#
|
188
|
+
a = Array.fields :a, :b, :c
|
189
|
+
a[:a] = a[:c] = 42
|
190
|
+
p a #=> [42, nil, 42]
|
191
|
+
p a.fields #=> [:a, :b, :c]
|
192
|
+
p a.values #=> [42, nil, 42]
|
193
|
+
|
194
|
+
~ > ruby sample/c.rb
|
195
|
+
|
196
|
+
[42, nil, 42]
|
197
|
+
[:a, :b, :c]
|
198
|
+
[42, nil, 42]
|
199
|
+
|
200
|
+
|
201
|
+
<========< sample/d.rb >========>
|
202
|
+
|
203
|
+
~ > cat sample/d.rb
|
204
|
+
|
205
|
+
require 'arrayfields'
|
206
|
+
#
|
207
|
+
# the Arrayfields.new method is a contruct that takes evenly numbered pairs of
|
208
|
+
# arbitrary objects and builds up and fielded array
|
209
|
+
#
|
210
|
+
a = Arrayfields.new :key, :value, :a, :b
|
211
|
+
p a.fields #=> [:key, :a]
|
212
|
+
p a.values #=> [:value, :b]
|
213
|
+
#
|
214
|
+
# you can use a hash - but of course the ordering gets lost in the initial
|
215
|
+
# hash creation. aka the order of fields get horked by the unorderedness if
|
216
|
+
# the hash iteration. it's okay for some purposed though
|
217
|
+
#
|
218
|
+
a = Arrayfields.new :key => :value, :a => :b
|
219
|
+
p a.fields #=> [:key, :a]
|
220
|
+
p a.values #=> [:value, :b]
|
221
|
+
#
|
222
|
+
# lists of pairs get flattened - the result simply has to be evenly numbered
|
223
|
+
#
|
224
|
+
a = Arrayfields.new [[:key, :value], [:a, :b]]
|
225
|
+
p a.fields #=> [:key, :a]
|
226
|
+
p a.values #=> [:value, :b]
|
227
|
+
p a.pairs #=> [[:key, :value], [:a, :b]]
|
228
|
+
|
229
|
+
|
230
|
+
~ > ruby sample/d.rb
|
231
|
+
|
232
|
+
[:key, :a]
|
233
|
+
[:value, :b]
|
234
|
+
[:key, :a]
|
235
|
+
[:value, :b]
|
236
|
+
[:key, :a]
|
237
|
+
[:value, :b]
|
238
|
+
[[:key, :value], [:a, :b]]
|
239
|
+
|
240
|
+
|
161
241
|
AUTHOR
|
162
242
|
ara.t.howard@gmail.com
|
163
243
|
|
164
244
|
HISTORY
|
245
|
+
4.0.0:
|
246
|
+
- added Arrayfields.new(*arbitrary_evenly_numbered_list_of_objects)
|
247
|
+
- added #to_pairs and #pairs
|
248
|
+
- tried but failed to recall what happend for version 3.8
|
249
|
+
- changed Array.fields to == Arrayfields.new (used to alias Array.struct)
|
250
|
+
- added impl of Fieldable#dup that sets fields in dupped object
|
251
|
+
|
165
252
|
3.7.0:
|
166
|
-
-
|
167
|
-
- mods for ruby 1.8.6
|
253
|
+
- multiton pattern clean up, thanks gavin kistner!
|
254
|
+
- mods for ruby 1.8.6 (alias bug in 1.8.6 i think)
|
168
255
|
- added PseudoHash class
|
169
256
|
- added Array.struct/fields class generator
|
170
257
|
|
data/README.tmpl
CHANGED
@@ -2,11 +2,29 @@ NAME
|
|
2
2
|
arrayfields.rb
|
3
3
|
|
4
4
|
URIS
|
5
|
-
http://
|
6
|
-
http://
|
7
|
-
http://raa.ruby-lang.org/project/arrayfields/
|
5
|
+
http://www.codeforpeople.com/lib/ruby/
|
6
|
+
http://rubyforge.org/projects/codeforpeople/
|
8
7
|
|
9
8
|
SYNOPSIS
|
9
|
+
require 'arrayfields'
|
10
|
+
|
11
|
+
a = Arrayfields.new :k, :v, :a, :b
|
12
|
+
|
13
|
+
p a[:k] #=> :v
|
14
|
+
p a[:a] #=> :b
|
15
|
+
p a.fields #=> [:k, :a]
|
16
|
+
p a.values #=> [:v, :b]
|
17
|
+
p a #=> [:v, :b]
|
18
|
+
p a.to_hash #=> {:k => :v, :a => :b}
|
19
|
+
p a.pairs #=> [[:k, :v], [:a, :b]]
|
20
|
+
|
21
|
+
a[:foo] = :bar
|
22
|
+
|
23
|
+
p a[:foo] #=> :bar
|
24
|
+
p a.fields #=> [:k, :a, :foo]
|
25
|
+
|
26
|
+
AND
|
27
|
+
|
10
28
|
require 'arrayfields'
|
11
29
|
|
12
30
|
fields = 'name', 'age'
|
@@ -14,18 +32,18 @@ SYNOPSIS
|
|
14
32
|
|
15
33
|
a.fields = fields
|
16
34
|
|
17
|
-
a[
|
18
|
-
a[
|
19
|
-
a.indices 'name', 'age'
|
35
|
+
a['name'] #=> 'zaphod'
|
36
|
+
a[:name ] #=> 'zaphod'
|
37
|
+
a.indices 'name', 'age' #=> [ 'zaphod', 42 ]
|
20
38
|
|
21
39
|
DESCRIPTION
|
22
40
|
allow keyword access to array instances. arrayfields works by adding only a
|
23
|
-
few methods to arrays, namely #fields= and fields, but the #fields= method
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
41
|
+
few methods to arrays, namely #fields= and fields, but the #fields= method is
|
42
|
+
hooked to extend an array on a per object basis. in otherwords __only__ those
|
43
|
+
arrays whose fields are set will have auto-magical keyword access bestowed on
|
44
|
+
them - all other arrays remain unaffected. arrays with keyword access require
|
45
|
+
much less memory when compared to hashes/objects and yet still provide fast
|
46
|
+
lookup and preserve data order.
|
29
47
|
|
30
48
|
LIST OF OVERRIDDEN METHODS
|
31
49
|
Array#[]
|
@@ -58,6 +76,7 @@ LIST OF HASH-LIKE METHODS
|
|
58
76
|
Array#update
|
59
77
|
Array#replace
|
60
78
|
Array#invert
|
79
|
+
Array#pairs
|
61
80
|
|
62
81
|
LIST OF ADDED Array METHODS
|
63
82
|
Array#fields=
|
@@ -73,6 +92,13 @@ AUTHOR
|
|
73
92
|
ara.t.howard@gmail.com
|
74
93
|
|
75
94
|
HISTORY
|
95
|
+
4.0.0:
|
96
|
+
- added Arrayfields.new(*arbitrary_evenly_numbered_list_of_objects)
|
97
|
+
- added #to_pairs and #pairs
|
98
|
+
- tried but failed to recall what happend for version 3.8
|
99
|
+
- changed Array.fields to == Arrayfields.new (used to alias Array.struct)
|
100
|
+
- added impl of Fieldable#dup that sets fields in dupped object
|
101
|
+
|
76
102
|
3.7.0:
|
77
103
|
- multiton pattern clean up, thanks gavin kistner!
|
78
104
|
- mods for ruby 1.8.6 (alias bug in 1.8.6 i think)
|
@@ -5,7 +5,7 @@
|
|
5
5
|
# Array#fields= is called
|
6
6
|
#
|
7
7
|
module ArrayFields
|
8
|
-
VERSION = '
|
8
|
+
self::VERSION = '4.0.0' unless defined? self::VERSION
|
9
9
|
def self.version() VERSION end
|
10
10
|
#
|
11
11
|
# multiton cache of fields - wraps fields and fieldpos map to save memory
|
@@ -154,8 +154,8 @@
|
|
154
154
|
def each_key
|
155
155
|
@fieldset.each{|field| yield field}
|
156
156
|
end
|
157
|
-
def each_value
|
158
|
-
each
|
157
|
+
def each_value *args, &block
|
158
|
+
each *args, &block
|
159
159
|
end
|
160
160
|
def fetch key
|
161
161
|
self[key] or raise IndexError, 'key not found'
|
@@ -243,7 +243,30 @@
|
|
243
243
|
def invert
|
244
244
|
to_hash.invert
|
245
245
|
end
|
246
|
+
|
247
|
+
def to_pairs
|
248
|
+
fields.zip values
|
249
|
+
end
|
250
|
+
alias_method 'pairs', 'to_pairs'
|
251
|
+
end
|
252
|
+
Arrayfields = ArrayFields
|
253
|
+
|
254
|
+
module Arrayfields
|
255
|
+
def self.new *pairs
|
256
|
+
pairs = pairs.map{|pair| Enumerable === pair ? pair.to_a : pair}.flatten
|
257
|
+
raise ArgumentError, "pairs must be evenly sized" unless(pairs.size % 2 == 0)
|
258
|
+
(( array = [] )).fields = []
|
259
|
+
0.step(pairs.size - 2, 2) do |a|
|
260
|
+
b = a + 1
|
261
|
+
array[ pairs[a] ] = pairs[b]
|
262
|
+
end
|
263
|
+
array
|
264
|
+
end
|
265
|
+
def self.[] *pairs
|
266
|
+
new *pairs
|
267
|
+
end
|
246
268
|
end
|
269
|
+
def Arrayfields(*a, &b) Arrayfields.new(*a, &b) end
|
247
270
|
#
|
248
271
|
# Fieldable encapsulates methods in common for classes which may have their
|
249
272
|
# fields set and subsequently be auto-extended by ArrayFields
|
@@ -254,7 +277,7 @@
|
|
254
277
|
# keyword access
|
255
278
|
#
|
256
279
|
def fields= fields
|
257
|
-
extend ArrayFields unless
|
280
|
+
extend ArrayFields unless ArrayFields === self
|
258
281
|
|
259
282
|
@fieldset =
|
260
283
|
if ArrayFields::FieldSet === fields
|
@@ -273,6 +296,15 @@
|
|
273
296
|
def fields
|
274
297
|
@fieldset and @fieldset.fields
|
275
298
|
end
|
299
|
+
#
|
300
|
+
# override so dup takes a copy of @fieldset
|
301
|
+
#
|
302
|
+
def dup
|
303
|
+
obj = super
|
304
|
+
#obj.instance_eval{ remove_instance_variable '@fieldset' }
|
305
|
+
obj.fields = fields
|
306
|
+
obj
|
307
|
+
end
|
276
308
|
end
|
277
309
|
#
|
278
310
|
# Array instances are extened with two methods only: Fieldable#fields= and
|
@@ -284,7 +316,7 @@
|
|
284
316
|
include Fieldable
|
285
317
|
|
286
318
|
class << self
|
287
|
-
def
|
319
|
+
def struct *fields
|
288
320
|
Class.new(self) do
|
289
321
|
const_set :FIELDS, ArrayFields::FieldSet.new(fields.flatten)
|
290
322
|
include ArrayFields
|
@@ -295,7 +327,10 @@
|
|
295
327
|
end
|
296
328
|
end
|
297
329
|
end
|
298
|
-
|
330
|
+
def fields *fields, &block
|
331
|
+
(( array = new(&block) )).fields = fields.map{|x| Enumerable === x ? x.to_a : x}.flatten
|
332
|
+
array
|
333
|
+
end
|
299
334
|
end
|
300
335
|
end
|
301
336
|
#
|
@@ -315,7 +350,7 @@
|
|
315
350
|
def [](*pairs)
|
316
351
|
pairs.flatten!
|
317
352
|
raise ArgumentError, "argument must be key/val pairs" unless
|
318
|
-
(pairs.size % 2 == 0
|
353
|
+
(pairs.size % 2 == 0)
|
319
354
|
fields, elements = [], []
|
320
355
|
while((f = pairs.shift) and (e = pairs.shift))
|
321
356
|
fields << f and elements << e
|
@@ -340,6 +375,7 @@
|
|
340
375
|
class_eval "def #{ meth }(*a,&b); @a.#{ meth }(*a,&b);end"
|
341
376
|
end
|
342
377
|
end
|
378
|
+
Fieldedarray = FieldedArray
|
343
379
|
|
344
380
|
class PseudoHash < ::Array
|
345
381
|
class << self
|
@@ -355,8 +391,8 @@
|
|
355
391
|
end
|
356
392
|
end
|
357
393
|
def initialize keys = [], values = []
|
358
|
-
self.replace values
|
359
394
|
self.fields = keys
|
395
|
+
self.replace values
|
360
396
|
end
|
361
397
|
def to_yaml opts = {}
|
362
398
|
YAML::quick_emit object_id, opts do |out|
|
@@ -366,3 +402,4 @@
|
|
366
402
|
end
|
367
403
|
end
|
368
404
|
end
|
405
|
+
Pseudohash = PseudoHash
|
data/lib/arrayfields.rb
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
# Array#fields= is called
|
6
6
|
#
|
7
7
|
module ArrayFields
|
8
|
-
VERSION = '
|
8
|
+
self::VERSION = '4.0.0' unless defined? self::VERSION
|
9
9
|
def self.version() VERSION end
|
10
10
|
#
|
11
11
|
# multiton cache of fields - wraps fields and fieldpos map to save memory
|
@@ -154,8 +154,8 @@
|
|
154
154
|
def each_key
|
155
155
|
@fieldset.each{|field| yield field}
|
156
156
|
end
|
157
|
-
def each_value
|
158
|
-
each
|
157
|
+
def each_value *args, &block
|
158
|
+
each *args, &block
|
159
159
|
end
|
160
160
|
def fetch key
|
161
161
|
self[key] or raise IndexError, 'key not found'
|
@@ -243,7 +243,30 @@
|
|
243
243
|
def invert
|
244
244
|
to_hash.invert
|
245
245
|
end
|
246
|
+
|
247
|
+
def to_pairs
|
248
|
+
fields.zip values
|
249
|
+
end
|
250
|
+
alias_method 'pairs', 'to_pairs'
|
251
|
+
end
|
252
|
+
Arrayfields = ArrayFields
|
253
|
+
|
254
|
+
module Arrayfields
|
255
|
+
def self.new *pairs
|
256
|
+
pairs = pairs.map{|pair| Enumerable === pair ? pair.to_a : pair}.flatten
|
257
|
+
raise ArgumentError, "pairs must be evenly sized" unless(pairs.size % 2 == 0)
|
258
|
+
(( array = [] )).fields = []
|
259
|
+
0.step(pairs.size - 2, 2) do |a|
|
260
|
+
b = a + 1
|
261
|
+
array[ pairs[a] ] = pairs[b]
|
262
|
+
end
|
263
|
+
array
|
264
|
+
end
|
265
|
+
def self.[] *pairs
|
266
|
+
new *pairs
|
267
|
+
end
|
246
268
|
end
|
269
|
+
def Arrayfields(*a, &b) Arrayfields.new(*a, &b) end
|
247
270
|
#
|
248
271
|
# Fieldable encapsulates methods in common for classes which may have their
|
249
272
|
# fields set and subsequently be auto-extended by ArrayFields
|
@@ -254,7 +277,7 @@
|
|
254
277
|
# keyword access
|
255
278
|
#
|
256
279
|
def fields= fields
|
257
|
-
extend ArrayFields unless
|
280
|
+
extend ArrayFields unless ArrayFields === self
|
258
281
|
|
259
282
|
@fieldset =
|
260
283
|
if ArrayFields::FieldSet === fields
|
@@ -273,6 +296,15 @@
|
|
273
296
|
def fields
|
274
297
|
@fieldset and @fieldset.fields
|
275
298
|
end
|
299
|
+
#
|
300
|
+
# override so dup takes a copy of @fieldset
|
301
|
+
#
|
302
|
+
def dup
|
303
|
+
obj = super
|
304
|
+
#obj.instance_eval{ remove_instance_variable '@fieldset' }
|
305
|
+
obj.fields = fields
|
306
|
+
obj
|
307
|
+
end
|
276
308
|
end
|
277
309
|
#
|
278
310
|
# Array instances are extened with two methods only: Fieldable#fields= and
|
@@ -284,7 +316,7 @@
|
|
284
316
|
include Fieldable
|
285
317
|
|
286
318
|
class << self
|
287
|
-
def
|
319
|
+
def struct *fields
|
288
320
|
Class.new(self) do
|
289
321
|
const_set :FIELDS, ArrayFields::FieldSet.new(fields.flatten)
|
290
322
|
include ArrayFields
|
@@ -295,7 +327,10 @@
|
|
295
327
|
end
|
296
328
|
end
|
297
329
|
end
|
298
|
-
|
330
|
+
def fields *fields, &block
|
331
|
+
(( array = new(&block) )).fields = fields.map{|x| Enumerable === x ? x.to_a : x}.flatten
|
332
|
+
array
|
333
|
+
end
|
299
334
|
end
|
300
335
|
end
|
301
336
|
#
|
@@ -315,7 +350,7 @@
|
|
315
350
|
def [](*pairs)
|
316
351
|
pairs.flatten!
|
317
352
|
raise ArgumentError, "argument must be key/val pairs" unless
|
318
|
-
(pairs.size % 2 == 0
|
353
|
+
(pairs.size % 2 == 0)
|
319
354
|
fields, elements = [], []
|
320
355
|
while((f = pairs.shift) and (e = pairs.shift))
|
321
356
|
fields << f and elements << e
|
@@ -340,6 +375,7 @@
|
|
340
375
|
class_eval "def #{ meth }(*a,&b); @a.#{ meth }(*a,&b);end"
|
341
376
|
end
|
342
377
|
end
|
378
|
+
Fieldedarray = FieldedArray
|
343
379
|
|
344
380
|
class PseudoHash < ::Array
|
345
381
|
class << self
|
@@ -355,8 +391,8 @@
|
|
355
391
|
end
|
356
392
|
end
|
357
393
|
def initialize keys = [], values = []
|
358
|
-
self.replace values
|
359
394
|
self.fields = keys
|
395
|
+
self.replace values
|
360
396
|
end
|
361
397
|
def to_yaml opts = {}
|
362
398
|
YAML::quick_emit object_id, opts do |out|
|
@@ -366,3 +402,4 @@
|
|
366
402
|
end
|
367
403
|
end
|
368
404
|
end
|
405
|
+
Pseudohash = PseudoHash
|
data/sample/b.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
require 'arrayfields'
|
2
2
|
#
|
3
|
-
# the struct
|
3
|
+
# the struct class factory method can be used in much the same way as ruby's
|
4
4
|
# own struct generators and is useful when the fields for a set of arrays is
|
5
5
|
# known apriori
|
6
6
|
#
|
7
|
-
c = Array.
|
7
|
+
c = Array.struct :a, :b, :c # class generator
|
8
8
|
a = c.new [42, nil, nil]
|
9
9
|
a[:c] = 42
|
10
10
|
p a #=> [42, nil, 42]
|
data/sample/c.rb
ADDED
data/sample/d.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'arrayfields'
|
2
|
+
#
|
3
|
+
# the Arrayfields.new method is a contruct that takes evenly numbered pairs of
|
4
|
+
# arbitrary objects and builds up and fielded array
|
5
|
+
#
|
6
|
+
a = Arrayfields.new :key, :value, :a, :b
|
7
|
+
p a.fields #=> [:key, :a]
|
8
|
+
p a.values #=> [:value, :b]
|
9
|
+
#
|
10
|
+
# you can use a hash - but of course the ordering gets lost in the initial
|
11
|
+
# hash creation. aka the order of fields get horked by the unorderedness if
|
12
|
+
# the hash iteration. it's okay for some purposed though
|
13
|
+
#
|
14
|
+
a = Arrayfields.new :key => :value, :a => :b
|
15
|
+
p a.fields #=> [:key, :a]
|
16
|
+
p a.values #=> [:value, :b]
|
17
|
+
#
|
18
|
+
# lists of pairs get flattened - the result simply has to be evenly numbered
|
19
|
+
#
|
20
|
+
a = Arrayfields.new [[:key, :value], [:a, :b]]
|
21
|
+
p a.fields #=> [:key, :a]
|
22
|
+
p a.values #=> [:value, :b]
|
23
|
+
p a.pairs #=> [[:key, :value], [:a, :b]]
|
24
|
+
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.2
|
|
3
3
|
specification_version: 1
|
4
4
|
name: arrayfields
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version:
|
7
|
-
date: 2007-
|
6
|
+
version: 4.0.0
|
7
|
+
date: 2007-09-13 00:00:00 -06:00
|
8
8
|
summary: arrayfields
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -29,20 +29,22 @@ post_install_message:
|
|
29
29
|
authors:
|
30
30
|
- Ara T. Howard
|
31
31
|
files:
|
32
|
-
- install.rb
|
33
|
-
- gen_readme.rb
|
34
32
|
- gemspec.rb
|
35
|
-
-
|
33
|
+
- gen_readme.rb
|
34
|
+
- install.rb
|
36
35
|
- lib
|
36
|
+
- lib/arrayfields-4.0.0.rb
|
37
37
|
- lib/arrayfields.rb
|
38
|
-
-
|
39
|
-
-
|
40
|
-
- test/arrayfields.rb
|
41
|
-
- test/memtest.rb
|
38
|
+
- README
|
39
|
+
- README.tmpl
|
42
40
|
- sample
|
43
41
|
- sample/a.rb
|
44
42
|
- sample/b.rb
|
45
|
-
-
|
43
|
+
- sample/c.rb
|
44
|
+
- sample/d.rb
|
45
|
+
- test
|
46
|
+
- test/arrayfields.rb
|
47
|
+
- test/memtest.rb
|
46
48
|
test_files:
|
47
49
|
- test/arrayfields.rb
|
48
50
|
rdoc_options: []
|