dbf 1.7.2 → 1.7.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -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