dbf 1.7.2 → 1.7.3

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.
@@ -1,3 +1,6 @@
1
+ # 1.7.3
2
+ - find_all/find_first should ignore deleted records
3
+
1
4
  # 1.7.2
2
5
  - Fix integer division under Ruby 1.8 when requiring mathn
3
6
  standard library (see http://bugs.ruby-lang.org/issues/2121)
@@ -2,33 +2,29 @@ PATH
2
2
  remote: .
3
3
  specs:
4
4
  dbf (1.7.2)
5
- fastercsv (~> 1.5.4)
6
5
 
7
6
  GEM
8
7
  remote: http://rubygems.org/
9
8
  specs:
10
9
  diff-lcs (1.1.3)
11
- fastercsv (1.5.4)
12
- json (1.6.3)
13
- json (1.6.3-java)
10
+ json (1.6.5)
14
11
  rake (0.9.2.2)
15
- rdoc (3.11)
12
+ rdoc (3.12)
16
13
  json (~> 1.4)
17
- rspec (2.7.0)
18
- rspec-core (~> 2.7.0)
19
- rspec-expectations (~> 2.7.0)
20
- rspec-mocks (~> 2.7.0)
21
- rspec-core (2.7.1)
22
- rspec-expectations (2.7.0)
14
+ rspec (2.8.0)
15
+ rspec-core (~> 2.8.0)
16
+ rspec-expectations (~> 2.8.0)
17
+ rspec-mocks (~> 2.8.0)
18
+ rspec-core (2.8.0)
19
+ rspec-expectations (2.8.0)
23
20
  diff-lcs (~> 1.1.2)
24
- rspec-mocks (2.7.0)
21
+ rspec-mocks (2.8.0)
25
22
 
26
23
  PLATFORMS
27
- java
28
24
  ruby
29
25
 
30
26
  DEPENDENCIES
31
27
  dbf!
32
28
  rake (~> 0.9.2)
33
29
  rdoc (~> 3.11)
34
- rspec (~> 2.7.0)
30
+ rspec (~> 2.8.0)
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # DBF
1
+ # DBF [![Build Status](https://secure.travis-ci.org/infused/dbf.png)](http://travis-ci.org/infused/dbf)
2
2
 
3
3
  DBF is a small fast library for reading dBase, xBase, Clipper and FoxPro
4
4
  database files
@@ -17,8 +17,6 @@ DBF is tested to work with the following versions of ruby:
17
17
  * JRuby 1.6.2, 1.6.3, 1.6.4, and 1.6.5
18
18
  * REE 1.8.6, 1.8.7
19
19
 
20
- [![Build Status](https://secure.travis-ci.org/infused/dbf.png)](http://travis-ci.org/infused/dbf)
21
-
22
20
  ## Installation
23
21
 
24
22
  gem install dbf
@@ -28,7 +26,6 @@ DBF is tested to work with the following versions of ruby:
28
26
  Open a DBF file:
29
27
 
30
28
  require 'dbf'
31
-
32
29
  widgets = DBF::Table.new("widgets.dbf")
33
30
 
34
31
  Enumerate all records
@@ -121,7 +118,7 @@ implemented, please give me a shout. FoxBase/dBase II files are not supported
121
118
  at this time.
122
119
 
123
120
  See
124
- [docs/supported_types.markdown](http://github.com/infused/dbf/blob/master/docs/supported_types.markdown)
121
+ [doc/supported_types.markdown](docs/supported_types.markdown)
125
122
  for a full list of supported column types.
126
123
 
127
124
  ## Limitations
@@ -131,7 +128,7 @@ for a full list of supported column types.
131
128
 
132
129
  ## License
133
130
 
134
- Copyright (c) 2006-2011 Keith Morrison <keithm@infused.org>
131
+ Copyright (c) 2006-2012 Keith Morrison <keithm@infused.org>
135
132
 
136
133
  Permission is hereby granted, free of charge, to any person
137
134
  obtaining a copy of this software and associated documentation
@@ -19,11 +19,13 @@ Gem::Specification.new do |s|
19
19
  s.require_paths = ['lib']
20
20
 
21
21
  s.required_rubygems_version = '>= 1.3.0'
22
- s.add_dependency 'fastercsv', '~> 1.5.4'
23
- s.add_development_dependency 'rspec', '~> 2.7.0'
22
+ if RUBY_VERSION.to_f < 1.9
23
+ s.add_dependency 'fastercsv', '~> 1.5.4'
24
+ end
25
+ s.add_development_dependency 'rspec', '~> 2.8.0'
24
26
  s.add_development_dependency 'rake', '~> 0.9.2'
25
27
 
26
- if RUBY_VERSION == '1.8.6'
28
+ if RUBY_VERSION == RUBY_VERSION.to_f >= 1.9
27
29
  s.add_development_dependency 'rdoc', '~> 2.5.0'
28
30
  else
29
31
  s.add_development_dependency 'rdoc', '~> 3.11'
@@ -1,25 +1,53 @@
1
1
  # DBF supported data types
2
2
 
3
- +---------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
4
- | Version | C | N | L | D | M | F | B | G | P | Y | T | I | V | X | @ | O | + |
5
- +---------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
6
- | 03 | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - | - | - |
7
- +---------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
8
- | 04 | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - | - | - |
9
- +---------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
10
- | 05 | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - | - | - |
11
- +---------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
12
- | 30 | Y | Y | Y | Y | - | Y | Y | N | N | N | N | Y | N | N | N | N | - |
13
- +---------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
14
- | 31 | Y | Y | Y | Y | Y | Y | Y | N | N | N | N | Y | N | N | N | N | N |
15
- +---------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
16
- | 7b | Y | Y | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - |
17
- +---------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
18
- | 83 | Y | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - | - |
19
- +---------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
20
- | 8e | Y | Y | Y | Y | Y | - | - | - | - | - | - | - | - | N | - | - | - |
21
- +---------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
22
- | f5 | Y | Y | Y | Y | Y | Y | Y | N | N | N | N | Y | N | N | N | N | N |
23
- +---------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
24
- | fb | Y | Y | Y | Y | - | Y | Y | N | N | N | N | Y | N | N | N | N | N |
25
- +---------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
3
+ +---------+-----------------------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
4
+ | Version | Description | C | N | L | D | M | F | B | G | P | Y | T | I | V | X | @ | O | + |
5
+ +---------+-----------------------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
6
+ | 02 | FoxBase | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - | - | - |
7
+ +---------+-----------------------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
8
+ | 03 | dBase III without memo file | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - | - | - |
9
+ +---------+-----------------------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
10
+ | 04 | dBase IV without memo file | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - | - | - |
11
+ +---------+-----------------------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
12
+ | 05 | dBase V without memo file | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - | - | - |
13
+ +---------+-----------------------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
14
+ | 07 | Visual Objects 1.x | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - | - | - |
15
+ +---------+-----------------------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
16
+ | 30 | Visual FoxPro | Y | Y | Y | Y | - | Y | Y | N | N | N | N | Y | N | N | N | N | - |
17
+ +---------+-----------------------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
18
+ | 31 | Visual FoxPro with AutoIncrement | Y | Y | Y | Y | Y | Y | Y | N | N | N | N | Y | N | N | N | N | N |
19
+ +---------+-----------------------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
20
+ | 7b | dBase IV with memo file | Y | Y | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - |
21
+ +---------+-----------------------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
22
+ | 83 | dBase III with memo file | Y | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - | - |
23
+ +---------+-----------------------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
24
+ | 87 | Visual Objects 1.x with memo file | Y | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - | - |
25
+ +---------+-----------------------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
26
+ | 8b | dBase IV with memo file | Y | Y | Y | Y | Y | - | - | - | - | - | - | - | - | N | - | - | - |
27
+ +---------+-----------------------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
28
+ | 8e | dBase IV with SQL table | Y | Y | Y | Y | Y | - | - | - | - | - | - | - | - | N | - | - | - |
29
+ +---------+-----------------------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
30
+ | f5 | FoxPro with memo file | Y | Y | Y | Y | Y | Y | Y | N | N | N | N | Y | N | N | N | N | N |
31
+ +---------+-----------------------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
32
+ | fb | FoxPro without memo file | Y | Y | Y | Y | - | Y | Y | N | N | N | N | Y | N | N | N | N | N |
33
+ +---------+-----------------------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
34
+
35
+ Data type descriptions
36
+
37
+ * C = Character
38
+ * N = Number
39
+ * L = Logical
40
+ * D = Date
41
+ * M = Memo
42
+ * F = Float
43
+ * B = Binary
44
+ * G = General
45
+ * P = Picture
46
+ * Y = Currency
47
+ * T = DateTime
48
+ * I = Integer
49
+ * V = VariField
50
+ * X = SQL compat
51
+ * @ = Timestamp
52
+ * O = Double
53
+ * + = Autoincrement
@@ -81,7 +81,7 @@ module DBF
81
81
  value.strip =~ /^(y|t)$/i ? true : false
82
82
  end
83
83
 
84
- def encode_string(value)
84
+ def encode_string(value) #nodoc
85
85
  @encoding ? value.force_encoding(@encoding).encode(Encoding.default_external, :undef => :replace, :invalid => :replace) : value
86
86
  end
87
87
 
@@ -116,7 +116,6 @@ module DBF
116
116
  value.gsub(/[^\x20-\x7E]/, "")
117
117
  end
118
118
 
119
-
120
119
  end
121
120
  end
122
121
  end
@@ -2,13 +2,13 @@ module DBF
2
2
  module Memo
3
3
  class Foxpro < Base
4
4
  FPT_HEADER_SIZE = 512
5
-
5
+
6
6
  def build_memo(start_block) #nodoc
7
7
  @data.seek offset(start_block)
8
-
8
+
9
9
  memo_type, memo_size, memo_string = @data.read(block_size).unpack("NNa*")
10
10
  return nil unless memo_type == 1 && memo_size > 0
11
-
11
+
12
12
  if memo_size > block_content_size
13
13
  memo_string << @data.read(content_size(memo_size))
14
14
  else
@@ -16,9 +16,9 @@ module DBF
16
16
  end
17
17
  memo_string
18
18
  end
19
-
19
+
20
20
  private
21
-
21
+
22
22
  def block_size #nodoc
23
23
  @block_size ||= begin
24
24
  @data.rewind
@@ -3,7 +3,10 @@ module DBF
3
3
  class Record
4
4
  # Initialize a new DBF::Record
5
5
  #
6
- # @param [DBF::Table] table
6
+ # @data [String, StringIO] data
7
+ # @columns [Column]
8
+ # @version [String]
9
+ # @memo [DBF::Memo]
7
10
  def initialize(data, columns, version, memo)
8
11
  @data = StringIO.new(data)
9
12
  @columns, @version, @memo = columns, version, memo
@@ -23,7 +26,7 @@ module DBF
23
26
  #
24
27
  # @return [Array]
25
28
  def to_a
26
- @column_names.map { |name| attributes[name] }
29
+ @column_names.map {|name| attributes[name]}
27
30
  end
28
31
 
29
32
  # Do all search parameters match?
@@ -36,13 +39,11 @@ module DBF
36
39
 
37
40
  # @return [Hash]
38
41
  def attributes
39
- return @attributes if @attributes
40
-
41
- @attributes = Attributes.new
42
- @columns.each do |column|
43
- @attributes[column.name] = init_attribute(column)
42
+ @attributes ||= begin
43
+ attributes = Attributes.new
44
+ @columns.each {|column| attributes[column.name] = init_attribute(column)}
45
+ attributes
44
46
  end
45
- @attributes
46
47
  end
47
48
 
48
49
  private
@@ -50,17 +51,15 @@ module DBF
50
51
  def define_accessors #nodoc
51
52
  @column_names.each do |name|
52
53
  next if respond_to? name
53
- self.class.class_eval <<-END
54
- def #{name}
55
- @#{name} ||= attributes['#{name}']
56
- end
57
- END
54
+ self.class.send(:define_method, name) do
55
+ attributes[name]
56
+ end
58
57
  end
59
58
  end
60
59
 
61
60
  def init_attribute(column) #nodoc
62
61
  if column.memo?
63
- @memo.get get_memo_start_block(column) if @memo
62
+ @memo.get get_memo_start_block(column)
64
63
  else
65
64
  column.type_cast unpack_data(column)
66
65
  end
@@ -79,4 +78,4 @@ module DBF
79
78
  end
80
79
 
81
80
  end
82
- end
81
+ end
@@ -12,10 +12,12 @@ module DBF
12
12
  "03" => "dBase III without memo file",
13
13
  "04" => "dBase IV without memo file",
14
14
  "05" => "dBase V without memo file",
15
+ "07" => "Visual Objects 1.x",
15
16
  "30" => "Visual FoxPro",
16
17
  "31" => "Visual FoxPro with AutoIncrement field",
17
18
  "7b" => "dBase IV with memo file",
18
19
  "83" => "dBase III with memo file",
20
+ "87" => "Visual Objects 1.x with memo file",
19
21
  "8b" => "dBase IV with memo file",
20
22
  "8e" => "dBase IV with SQL table",
21
23
  "f5" => "FoxPro with memo file",
@@ -186,8 +188,9 @@ module DBF
186
188
  @columns ||= begin
187
189
  @data.seek(DBF_HEADER_SIZE)
188
190
  columns = []
189
- column_count.times do
190
- name, type, length, decimal = @data.read(32).unpack('a10 x a x4 C2')
191
+ while !["\0", "\r"].include?(first_byte = @data.read(1))
192
+ column_data = first_byte + @data.read(31)
193
+ name, type, length, decimal = column_data.unpack('a10 x a x4 C2')
191
194
  if length > 0
192
195
  columns << column_class.new(name.strip, type, length, decimal, version, @encoding)
193
196
  end
@@ -197,7 +200,7 @@ module DBF
197
200
  end
198
201
 
199
202
  def supports_encoding?
200
- "".respond_to? :encoding
203
+ String.new.respond_to? :encoding
201
204
  end
202
205
 
203
206
  def foxpro?
@@ -251,7 +254,7 @@ module DBF
251
254
 
252
255
  def find_all(options) #nodoc
253
256
  map do |record|
254
- if record.match? options
257
+ if record && record.match?(options)
255
258
  yield record if block_given?
256
259
  record
257
260
  end
@@ -259,7 +262,7 @@ module DBF
259
262
  end
260
263
 
261
264
  def find_first(options) #nodoc
262
- detect {|record| record.match? options}
265
+ detect {|record| record && record.match?(options)}
263
266
  end
264
267
 
265
268
  def deleted_record? #nodoc
@@ -268,9 +271,12 @@ module DBF
268
271
 
269
272
  def get_header_info #nodoc
270
273
  @data.rewind
271
- @version, @record_count, @header_length, @record_length, encoding_key =
272
- @data.read(DBF_HEADER_SIZE).unpack("H2 x3 V v2 x17H2")
273
- @encoding = self.class.encodings[encoding_key] if supports_encoding?
274
+ @version, @record_count, @header_length, @record_length, @encoding_key = read_header
275
+ @encoding = self.class.encodings[@encoding_key] if supports_encoding?
276
+ end
277
+
278
+ def read_header #nodoc
279
+ @data.read(DBF_HEADER_SIZE).unpack("H2 x3 V v2 x17H2")
274
280
  end
275
281
 
276
282
  def seek(offset) #nodoc
@@ -278,7 +284,7 @@ module DBF
278
284
  end
279
285
 
280
286
  def csv_class #nodoc
281
- CSV.const_defined?(:Reader) ? FCSV : CSV
287
+ @csv_class ||= CSV.const_defined?(:Reader) ? FCSV : CSV
282
288
  end
283
289
 
284
290
  def self.encodings #nodoc
@@ -1,3 +1,3 @@
1
1
  module DBF
2
- VERSION = '1.7.2'
2
+ VERSION = '1.7.3'
3
3
  end
@@ -202,16 +202,18 @@ describe DBF::Table do
202
202
  end
203
203
  end
204
204
 
205
- describe 'when requiring mathn' do
206
- describe 'column_count' do
207
- let(:table) { DBF::Table.new "#{DB_PATH}/dbase_03.dbf" }
205
+ describe 'columns' do
206
+ before do
207
+ @table = DBF::Table.new "#{DB_PATH}/dbase_03.dbf"
208
+ end
208
209
 
209
- it 'returns an integer' do
210
- lambda do
211
- require 'mathn'
212
- table.send(:column_count)
213
- end.call.should == 31
214
- end
210
+ it 'should have correct size' do
211
+ @table.columns.size.should == 31
212
+ end
213
+
214
+ it 'should have correct names' do
215
+ @table.columns.first.name.should == 'Point_ID'
216
+ @table.columns[29].name.should == 'Easting'
215
217
  end
216
218
  end
217
219
  end
metadata CHANGED
@@ -1,96 +1,60 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: dbf
3
- version: !ruby/object:Gem::Version
4
- hash: 15
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.7.3
5
5
  prerelease:
6
- segments:
7
- - 1
8
- - 7
9
- - 2
10
- version: 1.7.2
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Keith Morrison
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2011-12-28 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
21
- name: fastercsv
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
24
- none: false
25
- requirements:
26
- - - ~>
27
- - !ruby/object:Gem::Version
28
- hash: 11
29
- segments:
30
- - 1
31
- - 5
32
- - 4
33
- version: 1.5.4
34
- type: :runtime
35
- version_requirements: *id001
36
- - !ruby/object:Gem::Dependency
12
+ date: 2012-02-21 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
37
15
  name: rspec
38
- prerelease: false
39
- requirement: &id002 !ruby/object:Gem::Requirement
16
+ requirement: &70326836737820 !ruby/object:Gem::Requirement
40
17
  none: false
41
- requirements:
18
+ requirements:
42
19
  - - ~>
43
- - !ruby/object:Gem::Version
44
- hash: 19
45
- segments:
46
- - 2
47
- - 7
48
- - 0
49
- version: 2.7.0
20
+ - !ruby/object:Gem::Version
21
+ version: 2.8.0
50
22
  type: :development
51
- version_requirements: *id002
52
- - !ruby/object:Gem::Dependency
53
- name: rake
54
23
  prerelease: false
55
- requirement: &id003 !ruby/object:Gem::Requirement
24
+ version_requirements: *70326836737820
25
+ - !ruby/object:Gem::Dependency
26
+ name: rake
27
+ requirement: &70326836737100 !ruby/object:Gem::Requirement
56
28
  none: false
57
- requirements:
29
+ requirements:
58
30
  - - ~>
59
- - !ruby/object:Gem::Version
60
- hash: 63
61
- segments:
62
- - 0
63
- - 9
64
- - 2
31
+ - !ruby/object:Gem::Version
65
32
  version: 0.9.2
66
33
  type: :development
67
- version_requirements: *id003
68
- - !ruby/object:Gem::Dependency
69
- name: rdoc
70
34
  prerelease: false
71
- requirement: &id004 !ruby/object:Gem::Requirement
35
+ version_requirements: *70326836737100
36
+ - !ruby/object:Gem::Dependency
37
+ name: rdoc
38
+ requirement: &70326836736220 !ruby/object:Gem::Requirement
72
39
  none: false
73
- requirements:
40
+ requirements:
74
41
  - - ~>
75
- - !ruby/object:Gem::Version
76
- hash: 17
77
- segments:
78
- - 3
79
- - 11
80
- version: "3.11"
42
+ - !ruby/object:Gem::Version
43
+ version: '3.11'
81
44
  type: :development
82
- version_requirements: *id004
83
- description: A small fast library for reading dBase, xBase, Clipper and FoxPro database files.
45
+ prerelease: false
46
+ version_requirements: *70326836736220
47
+ description: A small fast library for reading dBase, xBase, Clipper and FoxPro database
48
+ files.
84
49
  email: keithm@infused.org
85
- executables:
50
+ executables:
86
51
  - dbf
87
52
  extensions: []
88
-
89
- extra_rdoc_files:
53
+ extra_rdoc_files:
90
54
  - README.md
91
55
  - CHANGELOG.md
92
56
  - MIT-LICENSE
93
- files:
57
+ files:
94
58
  - CHANGELOG.md
95
59
  - Gemfile
96
60
  - Gemfile.lock
@@ -134,40 +98,30 @@ files:
134
98
  - dbf.gemspec
135
99
  homepage: http://github.com/infused/dbf
136
100
  licenses: []
137
-
138
101
  post_install_message:
139
- rdoc_options:
102
+ rdoc_options:
140
103
  - --charset=UTF-8
141
- require_paths:
104
+ require_paths:
142
105
  - lib
143
- required_ruby_version: !ruby/object:Gem::Requirement
106
+ required_ruby_version: !ruby/object:Gem::Requirement
144
107
  none: false
145
- requirements:
146
- - - ">="
147
- - !ruby/object:Gem::Version
148
- hash: 3
149
- segments:
150
- - 0
151
- version: "0"
152
- required_rubygems_version: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ! '>='
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ required_rubygems_version: !ruby/object:Gem::Requirement
153
113
  none: false
154
- requirements:
155
- - - ">="
156
- - !ruby/object:Gem::Version
157
- hash: 27
158
- segments:
159
- - 1
160
- - 3
161
- - 0
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
162
117
  version: 1.3.0
163
118
  requirements: []
164
-
165
119
  rubyforge_project:
166
- rubygems_version: 1.8.12
120
+ rubygems_version: 1.8.10
167
121
  signing_key:
168
122
  specification_version: 3
169
123
  summary: Read xBase files
170
- test_files:
124
+ test_files:
171
125
  - spec/dbf/column_spec.rb
172
126
  - spec/dbf/file_formats_spec.rb
173
127
  - spec/dbf/record_spec.rb