arrayfields 4.7.3 → 4.7.4

Sign up to get free protection for your applications and to get access to all the features.
data/README CHANGED
@@ -2,7 +2,6 @@ NAME
2
2
  arrayfields.rb
3
3
 
4
4
  URIS
5
- http://www.codeforpeople.com/lib/ruby/
6
5
  http://rubyforge.org/projects/codeforpeople/
7
6
 
8
7
  SYNOPSIS
@@ -86,7 +85,7 @@ LIST OF ADDED Array CLASS METHODS
86
85
  Array.fields/Array.struct
87
86
 
88
87
  SAMPLES
89
-
88
+
90
89
  <========< sample/a.rb >========>
91
90
 
92
91
  ~ > cat sample/a.rb
@@ -268,12 +267,13 @@ SAMPLES
268
267
  "bar"
269
268
 
270
269
 
270
+
271
271
  AUTHOR
272
272
  ara.t.howard@gmail.com
273
273
 
274
274
  HISTORY
275
- 4.7.0
276
- - fix warnings under ruby strict - thx james gray
275
+ 4.7.4
276
+ - fixes for clone/dup methods
277
277
 
278
278
  4.6.0
279
279
  - Array#fields getter acts as setter if arg given, eg
@@ -0,0 +1,26 @@
1
+ ### gemspec: arrayfields-4.7.4
2
+
3
+ Gem::Specification::new do |spec|
4
+ spec.name = "arrayfields"
5
+ spec.version = "4.7.4"
6
+ spec.platform = Gem::Platform::RUBY
7
+ spec.summary = "arrayfields"
8
+
9
+ spec.files = ["arrayfields.gemspec", "gemspec.rb", "install.rb", "lib", "lib/arrayfields.rb", "README", "readme.rb", "sample", "sample/a.rb", "sample/b.rb", "sample/c.rb", "sample/d.rb", "sample/e.rb", "test", "test/arrayfields.rb", "test/memtest.rb"]
10
+ spec.executables = []
11
+
12
+ spec.require_path = "lib"
13
+
14
+ spec.has_rdoc = true
15
+ spec.test_files = "test/arrayfields.rb"
16
+ #spec.add_dependency 'lib', '>= version'
17
+ #spec.add_dependency 'fattr'
18
+
19
+ spec.extensions.push(*[])
20
+
21
+ spec.rubyforge_project = 'codeforpeople'
22
+ spec.author = "Ara T. Howard"
23
+ spec.email = "ara.t.howard@gmail.com"
24
+ spec.homepage = "http://github.com/ahoward/arrayfields/tree/master"
25
+ end
26
+
data/gemspec.rb CHANGED
@@ -1,27 +1,62 @@
1
+ #! /usr/bin/env ruby
1
2
 
2
- lib, version = File::basename(File::dirname(File::expand_path(__FILE__))).split %r/-/, 2
3
+ lib, version, *ignored = ARGV
3
4
 
4
- require 'rubygems'
5
+ unless lib
6
+ lib = File.basename(Dir.pwd)
7
+ end
8
+
9
+ unless version
10
+ mod = lib.capitalize
11
+ require "./lib/#{ lib }"
12
+ version = eval(mod).send(:version)
13
+ end
5
14
 
6
- Gem::Specification::new do |spec|
7
- $VERBOSE = nil
8
- spec.name = lib
9
- spec.version = version
10
- spec.platform = Gem::Platform::RUBY
11
- spec.summary = lib
15
+ abort('no lib') unless lib
16
+ abort('no version') unless version
12
17
 
13
- spec.files = Dir::glob "**/**"
14
- spec.executables = Dir::glob("bin/*").map{|exe| File::basename exe}
15
-
16
- spec.require_path = "lib"
17
- spec.autorequire = lib
18
+ puts "### gemspec: #{ lib }-#{ version }"
18
19
 
19
- spec.has_rdoc = File::exist? "doc"
20
- spec.test_suite_file = "test/#{ lib }.rb" if File::directory? "test"
20
+ $VERBOSE = nil
21
21
 
22
- spec.extensions << "extconf.rb" if File::exists? "extconf.rb"
22
+ shiteless = lambda{|list| list.delete_if{|file| file =~ %r/\.(git|svn|tmp|sw.|bak)$/}}
23
23
 
24
- spec.author = "Ara T. Howard"
25
- spec.email = "ara.t.howard@noaa.gov"
26
- spec.homepage = "http://codeforpeople.com/lib/ruby/#{ lib }/"
24
+ files = shiteless[Dir::glob("**/**")]
25
+ executables = shiteless[Dir::glob("bin/*")].map{|exe| File.basename(exe)}
26
+ has_rdoc = true #File.exist?('doc')
27
+ test_files = "test/#{ lib }.rb" if File.file?("test/#{ lib }.rb")
28
+
29
+ extensions = []
30
+ %w( Makefile configure extconf.rb rakefile Rakefile mkrf_conf ).each do |ext|
31
+ extensions << ext if File.exists?(ext)
27
32
  end
33
+
34
+ template = <<-__
35
+
36
+ Gem::Specification::new do |spec|
37
+ spec.name = #{ lib.inspect }
38
+ spec.version = #{ version.inspect }
39
+ spec.platform = Gem::Platform::RUBY
40
+ spec.summary = #{ lib.inspect }
41
+
42
+ spec.files = #{ files.inspect }
43
+ spec.executables = #{ executables.inspect }
44
+
45
+ spec.require_path = "lib"
46
+
47
+ spec.has_rdoc = #{ has_rdoc.inspect }
48
+ spec.test_files = #{ test_files.inspect }
49
+ #spec.add_dependency 'lib', '>= version'
50
+ #spec.add_dependency 'fattr'
51
+
52
+ spec.extensions.push(*#{ extensions.inspect })
53
+
54
+ spec.rubyforge_project = 'codeforpeople'
55
+ spec.author = "Ara T. Howard"
56
+ spec.email = "ara.t.howard@gmail.com"
57
+ spec.homepage = "http://github.com/ahoward/#{ lib }/tree/master"
58
+ end
59
+
60
+ __
61
+
62
+ puts template
@@ -5,8 +5,8 @@
5
5
  # Array#fields= is called
6
6
  #
7
7
  module ArrayFields
8
- self::VERSION = '4.7.3' unless defined? self::VERSION
9
- def self.version() VERSION end
8
+ self::VERSION = '4.7.4' unless defined? self::VERSION
9
+ def self.version() Arrayfields::VERSION end
10
10
  #
11
11
  # multiton cache of fields - wraps fields and fieldpos map to save memory
12
12
  #
@@ -252,14 +252,17 @@
252
252
  end
253
253
  alias_method 'pairs', 'to_pairs'
254
254
 
255
- def copy
256
- cp = clone
257
- cp.fields = fields.clone
258
- cp
255
+ def clone
256
+ clone = super
257
+ ensure
258
+ clone.fields = fields.clone
259
259
  end
260
260
 
261
- alias_method 'dup', 'copy'
262
- alias_method 'clone', 'copy'
261
+ def dup
262
+ dup = super
263
+ ensure
264
+ dup.fields = fields.dup
265
+ end
263
266
 
264
267
  def deepcopy
265
268
  cp = Marshal.load(Marshal.dump(self))
@@ -0,0 +1,248 @@
1
+ #! /usr/bin/env ruby
2
+
3
+ template = <<-__
4
+ NAME
5
+ arrayfields.rb
6
+
7
+ URIS
8
+ http://rubyforge.org/projects/codeforpeople/
9
+
10
+ SYNOPSIS
11
+ require 'arrayfields'
12
+
13
+ a = Arrayfields.new :k, :v, :a, :b
14
+
15
+ p a[:k] #=> :v
16
+ p a[:a] #=> :b
17
+ p a.fields #=> [:k, :a]
18
+ p a.values #=> [:v, :b]
19
+ p a #=> [:v, :b]
20
+ p a.to_hash #=> {:k => :v, :a => :b}
21
+ p a.pairs #=> [[:k, :v], [:a, :b]]
22
+
23
+ a[:foo] = :bar
24
+
25
+ p a[:foo] #=> :bar
26
+ p a.fields #=> [:k, :a, :foo]
27
+
28
+ AND
29
+
30
+ require 'arrayfields'
31
+
32
+ fields = 'name', 'age'
33
+ a = [ 'zaphod', 42 ]
34
+
35
+ a.fields = fields
36
+
37
+ a['name'] #=> 'zaphod'
38
+ a[:name ] #=> 'zaphod'
39
+ a.indices 'name', 'age' #=> [ 'zaphod', 42 ]
40
+
41
+ DESCRIPTION
42
+ allow keyword access to array instances. arrayfields works by adding only a
43
+ few methods to arrays, namely #fields= and fields, but the #fields= method is
44
+ hooked to extend an array on a per object basis. in otherwords __only__ those
45
+ arrays whose fields are set will have auto-magical keyword access bestowed on
46
+ them - all other arrays remain unaffected. arrays with keyword access require
47
+ much less memory when compared to hashes/objects and yet still provide fast
48
+ lookup and preserve data order.
49
+
50
+ LIST OF OVERRIDDEN METHODS
51
+ Array#[]
52
+ Array#slice
53
+ Array#[]=
54
+ Array#at
55
+ Array#delete_at
56
+ Array#fill
57
+ Array#values_at
58
+ Array#indices
59
+ Array#indexes
60
+ Array#slice!
61
+
62
+ LIST OF HASH-LIKE METHODS
63
+ Array#each_with_field
64
+ Array#each_pair
65
+ Array#each_key
66
+ Array#each_value
67
+ Array#fetch
68
+ Array#has_key?
69
+ Array#member?
70
+ Array#key?
71
+ Array#has_value?
72
+ Array#value?
73
+ Array#keys
74
+ Array#store
75
+ Array#values
76
+ Array#to_hash
77
+ Array#to_h
78
+ Array#update
79
+ Array#replace
80
+ Array#invert
81
+ Array#pairs
82
+
83
+ LIST OF ADDED Array METHODS
84
+ Array#fields=
85
+ Array#fields
86
+
87
+ LIST OF ADDED Array CLASS METHODS
88
+ Array.fields/Array.struct
89
+
90
+ SAMPLES
91
+ <%= samples %>
92
+
93
+ AUTHOR
94
+ ara.t.howard@gmail.com
95
+
96
+ HISTORY
97
+ 4.7.4
98
+ - fixes for clone/dup methods
99
+
100
+ 4.6.0
101
+ - Array#fields getter acts as setter if arg given, eg
102
+
103
+ a = []
104
+
105
+ a.fields %w( a b c )
106
+ a['c'] = 42
107
+
108
+ 4.4.0:
109
+ - working dup method worked in, also deepcopy and clone
110
+
111
+ 4.3.0:
112
+ - a dup like method, named 'copy' and based on clone, is added to Arrayfields objects
113
+
114
+ 4.2.0:
115
+ - a dup impl apparently caused some confusion with both rake and rails, so
116
+ this release undoes that impl and should be considered a critical bugfix
117
+ release
118
+
119
+ 4.1.0:
120
+ - improved Array.struct method, see sample/e.rb
121
+
122
+ 4.0.0:
123
+ - added Arrayfields.new(*arbitrary_evenly_numbered_list_of_objects)
124
+ - added #to_pairs and #pairs
125
+ - tried but failed to recall what happend for version 3.8
126
+ - changed Array.fields to == Arrayfields.new (used to alias Array.struct)
127
+ - added impl of Fieldable#dup that sets fields in dupped object
128
+
129
+ 3.7.0:
130
+ - multiton pattern clean up, thanks gavin kistner!
131
+ - mods for ruby 1.8.6 (alias bug in 1.8.6 i think)
132
+ - added PseudoHash class
133
+ - added Array.struct/fields class generator
134
+
135
+ 3.6.0:
136
+ - made string/symbol keys interchangeable
137
+
138
+ list = [0, 1, 2]
139
+ list.fields = %w( a b c )
140
+ p list['a'] #=> 0
141
+ p list[:a] #=> 0
142
+
143
+
144
+ 3.5.0:
145
+ - added more hash-like methods
146
+ - update
147
+ - replace
148
+ - invert
149
+
150
+ 3.4.0:
151
+ - added FieldedArray[] ctor
152
+ - added methods to make Arrays with fields set behave more closely to Hashes
153
+ - each_pair
154
+ - each_key
155
+ - each_value
156
+ - fetch
157
+ - has_key?
158
+ - member?
159
+ - key?
160
+ - has_value?
161
+ - value?
162
+ - keys?
163
+ - store
164
+ - values
165
+
166
+ 3.3.0:
167
+ - added gemspec file - thnx Assaph Mehr
168
+ - added FieldedArray proxy class which minimizes modifications to class
169
+ Array and allow ArrayFields to work (potientially) other arraylike object.
170
+ thnks Sean O'Dell
171
+ - added ArrayFields#to_hash method - this seems like an obvious one to add!
172
+ - remedied bug where using append feature of assigning with unknow field
173
+ appedended but did not append to acutal fields
174
+ - added samples
175
+ - created rubyforge accnt @ http://rubyforge.org/projects/arrayfields/
176
+
177
+ 3.2.0:
178
+ - precedence fix in many methods - thnx. nobu
179
+ - test for #slice! were not being run - corrected
180
+ - added test for appeding via "a['new_field'] = 42"
181
+
182
+ 3.1.0:
183
+ - added FieldSet class to reduce ram - thnx. Kirk Haines for profiliing
184
+ memory and prompting this change
185
+
186
+ - interface changed every so slightly so
187
+
188
+ a.fields = 'a', 'b', 'c'
189
+
190
+ is not allowed. use
191
+
192
+ a.fields = %w(a b c)
193
+
194
+ or
195
+
196
+ a.fields = ['a', 'b', 'c']
197
+
198
+
199
+ 3.0.0:
200
+ - added unit tests
201
+ __
202
+
203
+
204
+ require 'erb'
205
+ require 'pathname'
206
+
207
+ $VERBOSE=nil
208
+
209
+ def indent(s, n = 2)
210
+ s = unindent(s)
211
+ ws = ' ' * n
212
+ s.gsub(%r/^/, ws)
213
+ end
214
+
215
+ def unindent(s)
216
+ indent = nil
217
+ s.each do |line|
218
+ next if line =~ %r/^\s*$/
219
+ indent = line[%r/^\s*/] and break
220
+ end
221
+ indent ? s.gsub(%r/^#{ indent }/, "") : s
222
+ end
223
+
224
+ samples = ''
225
+ prompt = '~ > '
226
+
227
+ Dir.chdir(File.dirname(__FILE__))
228
+
229
+ Dir['sample*/*'].sort.each do |sample|
230
+ samples << "\n" << " <========< #{ sample } >========>" << "\n\n"
231
+
232
+ cmd = "cat #{ sample }"
233
+ samples << indent(prompt + cmd, 2) << "\n\n"
234
+ samples << indent(`#{ cmd }`, 4) << "\n"
235
+
236
+ cmd = "ruby #{ sample }"
237
+ samples << indent(prompt + cmd, 2) << "\n\n"
238
+
239
+ cmd = "ruby -e'STDOUT.sync=true; exec %(ruby -Ilib #{ sample })'"
240
+ #cmd = "ruby -Ilib #{ sample }"
241
+ samples << indent(`#{ cmd } 2>&1`, 4) << "\n"
242
+ end
243
+
244
+ erb = ERB.new(unindent(template))
245
+ result = erb.result(binding)
246
+ #open('README', 'w'){|fd| fd.write result}
247
+ #puts unindent(result)
248
+ puts result
metadata CHANGED
@@ -1,20 +1,20 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: arrayfields
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.7.3
4
+ version: 4.7.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ara T. Howard
8
- autorequire: arrayfields
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-04-08 00:00:00 -06:00
12
+ date: 2009-06-05 00:00:00 -06:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
16
16
  description:
17
- email: ara.t.howard@noaa.gov
17
+ email: ara.t.howard@gmail.com
18
18
  executables: []
19
19
 
20
20
  extensions: []
@@ -22,14 +22,13 @@ extensions: []
22
22
  extra_rdoc_files: []
23
23
 
24
24
  files:
25
- - arrayfields-4.7.3.gem
25
+ - arrayfields.gemspec
26
26
  - gemspec.rb
27
- - gen_readme.rb
28
27
  - install.rb
29
28
  - lib
30
29
  - lib/arrayfields.rb
31
30
  - README
32
- - README.tmpl
31
+ - readme.rb
33
32
  - sample
34
33
  - sample/a.rb
35
34
  - sample/b.rb
@@ -39,8 +38,8 @@ files:
39
38
  - test
40
39
  - test/arrayfields.rb
41
40
  - test/memtest.rb
42
- has_rdoc: false
43
- homepage: http://codeforpeople.com/lib/ruby/arrayfields/
41
+ has_rdoc: true
42
+ homepage: http://github.com/ahoward/arrayfields/tree/master
44
43
  post_install_message:
45
44
  rdoc_options: []
46
45
 
@@ -60,7 +59,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
60
59
  version:
61
60
  requirements: []
62
61
 
63
- rubyforge_project:
62
+ rubyforge_project: codeforpeople
64
63
  rubygems_version: 1.3.1
65
64
  signing_key:
66
65
  specification_version: 2
@@ -1,195 +0,0 @@
1
- NAME
2
- arrayfields.rb
3
-
4
- URIS
5
- http://www.codeforpeople.com/lib/ruby/
6
- http://rubyforge.org/projects/codeforpeople/
7
-
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
-
28
- require 'arrayfields'
29
-
30
- fields = 'name', 'age'
31
- a = [ 'zaphod', 42 ]
32
-
33
- a.fields = fields
34
-
35
- a['name'] #=> 'zaphod'
36
- a[:name ] #=> 'zaphod'
37
- a.indices 'name', 'age' #=> [ 'zaphod', 42 ]
38
-
39
- DESCRIPTION
40
- allow keyword access to array instances. arrayfields works by adding only a
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.
47
-
48
- LIST OF OVERRIDDEN METHODS
49
- Array#[]
50
- Array#slice
51
- Array#[]=
52
- Array#at
53
- Array#delete_at
54
- Array#fill
55
- Array#values_at
56
- Array#indices
57
- Array#indexes
58
- Array#slice!
59
-
60
- LIST OF HASH-LIKE METHODS
61
- Array#each_with_field
62
- Array#each_pair
63
- Array#each_key
64
- Array#each_value
65
- Array#fetch
66
- Array#has_key?
67
- Array#member?
68
- Array#key?
69
- Array#has_value?
70
- Array#value?
71
- Array#keys
72
- Array#store
73
- Array#values
74
- Array#to_hash
75
- Array#to_h
76
- Array#update
77
- Array#replace
78
- Array#invert
79
- Array#pairs
80
-
81
- LIST OF ADDED Array METHODS
82
- Array#fields=
83
- Array#fields
84
-
85
- LIST OF ADDED Array CLASS METHODS
86
- Array.fields/Array.struct
87
-
88
- SAMPLES
89
- @samples
90
-
91
- AUTHOR
92
- ara.t.howard@gmail.com
93
-
94
- HISTORY
95
- 4.6.0
96
- - Array#fields getter acts as setter if arg given, eg
97
-
98
- a = []
99
-
100
- a.fields %w( a b c )
101
- a['c'] = 42
102
-
103
- 4.4.0:
104
- - working dup method worked in, also deepcopy and clone
105
-
106
- 4.3.0:
107
- - a dup like method, named 'copy' and based on clone, is added to Arrayfields objects
108
-
109
- 4.2.0:
110
- - a dup impl apparently caused some confusion with both rake and rails, so
111
- this release undoes that impl and should be considered a critical bugfix
112
- release
113
-
114
- 4.1.0:
115
- - improved Array.struct method, see sample/e.rb
116
-
117
- 4.0.0:
118
- - added Arrayfields.new(*arbitrary_evenly_numbered_list_of_objects)
119
- - added #to_pairs and #pairs
120
- - tried but failed to recall what happend for version 3.8
121
- - changed Array.fields to == Arrayfields.new (used to alias Array.struct)
122
- - added impl of Fieldable#dup that sets fields in dupped object
123
-
124
- 3.7.0:
125
- - multiton pattern clean up, thanks gavin kistner!
126
- - mods for ruby 1.8.6 (alias bug in 1.8.6 i think)
127
- - added PseudoHash class
128
- - added Array.struct/fields class generator
129
-
130
- 3.6.0:
131
- - made string/symbol keys interchangeable
132
-
133
- list = [0, 1, 2]
134
- list.fields = %w( a b c )
135
- p list['a'] #=> 0
136
- p list[:a] #=> 0
137
-
138
-
139
- 3.5.0:
140
- - added more hash-like methods
141
- - update
142
- - replace
143
- - invert
144
-
145
- 3.4.0:
146
- - added FieldedArray[] ctor
147
- - added methods to make Arrays with fields set behave more closely to Hashes
148
- - each_pair
149
- - each_key
150
- - each_value
151
- - fetch
152
- - has_key?
153
- - member?
154
- - key?
155
- - has_value?
156
- - value?
157
- - keys?
158
- - store
159
- - values
160
-
161
- 3.3.0:
162
- - added gemspec file - thnx Assaph Mehr
163
- - added FieldedArray proxy class which minimizes modifications to class
164
- Array and allow ArrayFields to work (potientially) other arraylike object.
165
- thnks Sean O'Dell
166
- - added ArrayFields#to_hash method - this seems like an obvious one to add!
167
- - remedied bug where using append feature of assigning with unknow field
168
- appedended but did not append to acutal fields
169
- - added samples
170
- - created rubyforge accnt @ http://rubyforge.org/projects/arrayfields/
171
-
172
- 3.2.0:
173
- - precedence fix in many methods - thnx. nobu
174
- - test for #slice! were not being run - corrected
175
- - added test for appeding via "a['new_field'] = 42"
176
-
177
- 3.1.0:
178
- - added FieldSet class to reduce ram - thnx. Kirk Haines for profiliing
179
- memory and prompting this change
180
-
181
- - interface changed every so slightly so
182
-
183
- a.fields = 'a', 'b', 'c'
184
-
185
- is not allowed. use
186
-
187
- a.fields = %w(a b c)
188
-
189
- or
190
-
191
- a.fields = ['a', 'b', 'c']
192
-
193
-
194
- 3.0.0:
195
- - added unit tests
File without changes
@@ -1,32 +0,0 @@
1
- require 'pathname'
2
-
3
- $VERBOSE=nil
4
-
5
- def indent s, n = 2
6
- ws = ' ' * n
7
- s.gsub %r/^/, ws
8
- end
9
-
10
- template = IO::read 'README.tmpl'
11
-
12
- samples = ''
13
- prompt = '~ > '
14
-
15
- Dir['sample*/*'].sort.each do |sample|
16
- samples << "\n" << " <========< #{ sample } >========>" << "\n\n"
17
-
18
- cmd = "cat #{ sample }"
19
- samples << indent(prompt + cmd, 2) << "\n\n"
20
- samples << indent(`#{ cmd }`, 4) << "\n"
21
-
22
- cmd = "ruby #{ sample }"
23
- samples << indent(prompt + cmd, 2) << "\n\n"
24
-
25
- cmd = "ruby -Ilib #{ sample }"
26
- samples << indent(`#{ cmd } 2>&1`, 4) << "\n"
27
- end
28
-
29
- #samples.gsub! %r/^/, ' '
30
-
31
- readme = template.gsub %r/^\s*@samples\s*$/, samples
32
- print readme