dbf 1.3.0 → 1.5.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,13 +1,11 @@
1
1
  $:.unshift(File.dirname(__FILE__) + '/../lib/')
2
2
  require 'rubygems'
3
- require 'spec'
3
+ require 'rspec'
4
4
  require 'dbf'
5
5
  require 'fileutils'
6
6
 
7
7
  DB_PATH = File.dirname(__FILE__) + '/fixtures' unless defined?(DB_PATH)
8
8
 
9
- Spec::Runner.configure do |config|
9
+ RSpec.configure do |config|
10
10
 
11
11
  end
12
-
13
- self.class.send :remove_const, 'Test' if defined? Test
metadata CHANGED
@@ -1,12 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dbf
3
3
  version: !ruby/object:Gem::Version
4
+ hash: 3
4
5
  prerelease: false
5
6
  segments:
6
7
  - 1
7
- - 3
8
+ - 5
8
9
  - 0
9
- version: 1.3.0
10
+ version: 1.5.0
10
11
  platform: ruby
11
12
  authors:
12
13
  - Keith Morrison
@@ -14,7 +15,7 @@ autorequire:
14
15
  bindir: bin
15
16
  cert_chain: []
16
17
 
17
- date: 2010-10-08 00:00:00 -07:00
18
+ date: 2010-11-16 00:00:00 -08:00
18
19
  default_executable: dbf
19
20
  dependencies:
20
21
  - !ruby/object:Gem::Dependency
@@ -25,11 +26,12 @@ dependencies:
25
26
  requirements:
26
27
  - - "="
27
28
  - !ruby/object:Gem::Version
29
+ hash: 5
28
30
  segments:
29
31
  - 3
30
32
  - 0
31
- - 0
32
- version: 3.0.0
33
+ - 1
34
+ version: 3.0.1
33
35
  type: :runtime
34
36
  version_requirements: *id001
35
37
  - !ruby/object:Gem::Dependency
@@ -40,6 +42,7 @@ dependencies:
40
42
  requirements:
41
43
  - - "="
42
44
  - !ruby/object:Gem::Version
45
+ hash: 5
43
46
  segments:
44
47
  - 1
45
48
  - 5
@@ -53,15 +56,32 @@ dependencies:
53
56
  requirement: &id003 !ruby/object:Gem::Requirement
54
57
  none: false
55
58
  requirements:
56
- - - ">="
59
+ - - "="
57
60
  - !ruby/object:Gem::Version
61
+ hash: 11
58
62
  segments:
63
+ - 2
59
64
  - 1
60
- - 3
61
65
  - 0
62
- version: 1.3.0
66
+ version: 2.1.0
63
67
  type: :development
64
68
  version_requirements: *id003
69
+ - !ruby/object:Gem::Dependency
70
+ name: metric_fu
71
+ prerelease: false
72
+ requirement: &id004 !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - "="
76
+ - !ruby/object:Gem::Version
77
+ hash: 13
78
+ segments:
79
+ - 2
80
+ - 0
81
+ - 1
82
+ version: 2.0.1
83
+ type: :development
84
+ version_requirements: *id004
65
85
  description: A small fast library for reading dBase, xBase, Clipper and FoxPro database files.
66
86
  email: keithm@infused.org
67
87
  executables:
@@ -82,10 +102,15 @@ files:
82
102
  - docs/supported_types.markdown
83
103
  - lib/dbf/attributes.rb
84
104
  - lib/dbf/column.rb
105
+ - lib/dbf/memo.rb
85
106
  - lib/dbf/record.rb
86
107
  - lib/dbf/table.rb
87
108
  - lib/dbf/version.rb
88
109
  - lib/dbf.rb
110
+ - spec/dbf/column_spec.rb
111
+ - spec/dbf/file_formats_spec.rb
112
+ - spec/dbf/record_spec.rb
113
+ - spec/dbf/table_spec.rb
89
114
  - spec/fixtures/dbase_03.dbf
90
115
  - spec/fixtures/dbase_30.dbf
91
116
  - spec/fixtures/dbase_30.fpt
@@ -97,17 +122,7 @@ files:
97
122
  - spec/fixtures/dbase_8b.dbt
98
123
  - spec/fixtures/dbase_f5.dbf
99
124
  - spec/fixtures/dbase_f5.fpt
100
- - spec/functional/dbf_shared.rb
101
- - spec/functional/format_03_spec.rb
102
- - spec/functional/format_30_spec.rb
103
- - spec/functional/format_31_spec.rb
104
- - spec/functional/format_83_spec.rb
105
- - spec/functional/format_8b_spec.rb
106
- - spec/functional/format_f5_spec.rb
107
125
  - spec/spec_helper.rb
108
- - spec/unit/column_spec.rb
109
- - spec/unit/record_spec.rb
110
- - spec/unit/table_spec.rb
111
126
  has_rdoc: true
112
127
  homepage: http://github.com/infused/dbf
113
128
  licenses: []
@@ -122,6 +137,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
122
137
  requirements:
123
138
  - - ">="
124
139
  - !ruby/object:Gem::Version
140
+ hash: 3
125
141
  segments:
126
142
  - 0
127
143
  version: "0"
@@ -130,6 +146,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
130
146
  requirements:
131
147
  - - ">="
132
148
  - !ruby/object:Gem::Version
149
+ hash: 27
133
150
  segments:
134
151
  - 1
135
152
  - 3
@@ -143,12 +160,7 @@ signing_key:
143
160
  specification_version: 3
144
161
  summary: Read xBase files
145
162
  test_files:
146
- - spec/functional/format_03_spec.rb
147
- - spec/functional/format_30_spec.rb
148
- - spec/functional/format_31_spec.rb
149
- - spec/functional/format_83_spec.rb
150
- - spec/functional/format_8b_spec.rb
151
- - spec/functional/format_f5_spec.rb
152
- - spec/unit/column_spec.rb
153
- - spec/unit/record_spec.rb
154
- - spec/unit/table_spec.rb
163
+ - spec/dbf/column_spec.rb
164
+ - spec/dbf/file_formats_spec.rb
165
+ - spec/dbf/record_spec.rb
166
+ - spec/dbf/table_spec.rb
@@ -1,54 +0,0 @@
1
- describe DBF, :shared => true do
2
- specify "sum of column lengths should equal record length specified in header" do
3
- header_record_length = @table.instance_eval {@record_length}
4
- sum_of_column_lengths = @table.columns.inject(1) {|sum, column| sum + column.length}
5
-
6
- header_record_length.should == sum_of_column_lengths
7
- end
8
-
9
- specify "records should be instances of DBF::Record" do
10
- @table.each do |record|
11
- record.should be_an_instance_of(DBF::Record)
12
- end
13
- end
14
-
15
- specify "columns should be instances of DBF::Column" do
16
- @table.columns.all? {|column| column.should be_an_instance_of(DBF::Column)}
17
- end
18
-
19
- specify "column names should not be blank" do
20
- @table.columns.all? {|column| column.name.should_not be_empty}
21
- end
22
-
23
- specify "column types should be valid" do
24
- valid_column_types = %w(C N L D M F B G P Y T I V X @ O + 0)
25
- @table.columns.all? {|column| valid_column_types.should include(column.type)}
26
- end
27
-
28
- specify "column lengths should be instances of Fixnum" do
29
- @table.columns.all? {|column| column.length.should be_an_instance_of(Fixnum)}
30
- end
31
-
32
- specify "column lengths should be larger than 0" do
33
- @table.columns.all? {|column| column.length.should > 0}
34
- end
35
-
36
- specify "column decimals should be instances of Fixnum" do
37
- @table.columns.all? {|column| column.decimal.should be_an_instance_of(Fixnum)}
38
- end
39
-
40
- specify "column read accessors should return the attribute after typecast" do
41
- @table.columns do |column|
42
- record = @table.records.first
43
- record.send(column.name).should == record[column.name]
44
- end
45
- end
46
-
47
- specify "column attributes should be accessible in underscored form" do
48
- @table.columns do |column|
49
- record = @table.records.first
50
- record.send(column_name).should == record.send(column_name.underscore)
51
- end
52
- end
53
-
54
- end
@@ -1,23 +0,0 @@
1
- require File.expand_path(File.join(File.dirname(__FILE__), "../spec_helper"))
2
- require File.expand_path(File.join(File.dirname(__FILE__), "dbf_shared"))
3
-
4
- describe DBF, "of type 03 (dBase III without memo file)" do
5
- before do
6
- @table = DBF::Table.new "#{DB_PATH}/dbase_03.dbf"
7
- end
8
-
9
- it_should_behave_like "DBF"
10
-
11
- it "should report the correct version number" do
12
- @table.version.should == "03"
13
- end
14
-
15
- it "should have a memo file" do
16
- @table.should_not have_memo_file
17
- end
18
-
19
- it "should have a nil memo_file_format" do
20
- @table.memo_file_format.should be_nil
21
- end
22
-
23
- end
@@ -1,23 +0,0 @@
1
- require File.expand_path(File.join(File.dirname(__FILE__), "../spec_helper"))
2
- require File.expand_path(File.join(File.dirname(__FILE__), "dbf_shared"))
3
-
4
- describe DBF, "of type 30 (Visual FoxPro)" do
5
- before do
6
- @table = DBF::Table.new "#{DB_PATH}/dbase_30.dbf"
7
- end
8
-
9
- it_should_behave_like "DBF"
10
-
11
- it "should report the correct version number" do
12
- @table.version.should == "30"
13
- end
14
-
15
- it "should have a memo file" do
16
- @table.should have_memo_file
17
- end
18
-
19
- it "should report the correct memo type" do
20
- @table.memo_file_format.should == :fpt
21
- end
22
-
23
- end
@@ -1,23 +0,0 @@
1
- require File.expand_path(File.join(File.dirname(__FILE__), "../spec_helper"))
2
- require File.expand_path(File.join(File.dirname(__FILE__), "dbf_shared"))
3
-
4
- describe DBF, "of type 31 (Visual FoxPro with AutoIncrement field)" do
5
- before do
6
- @table = DBF::Table.new "#{DB_PATH}/dbase_31.dbf"
7
- end
8
-
9
- it_should_behave_like "DBF"
10
-
11
- it "should have a dBase version of 31" do
12
- @table.version.should == "31"
13
- end
14
-
15
- it "should have a memo file" do
16
- @table.should_not have_memo_file
17
- end
18
-
19
- it "should have a nil memo_file_format" do
20
- @table.memo_file_format.should be_nil
21
- end
22
-
23
- end
@@ -1,23 +0,0 @@
1
- require File.expand_path(File.join(File.dirname(__FILE__), "../spec_helper"))
2
- require File.expand_path(File.join(File.dirname(__FILE__), "dbf_shared"))
3
-
4
- describe DBF, "of type 83 (dBase III with memo file)" do
5
- before do
6
- @table = DBF::Table.new "#{DB_PATH}/dbase_83.dbf"
7
- end
8
-
9
- it_should_behave_like "DBF"
10
-
11
- it "should report the correct version number" do
12
- @table.version.should == "83"
13
- end
14
-
15
- it "should have a memo file" do
16
- @table.should have_memo_file
17
- end
18
-
19
- it "should report the correct memo type" do
20
- @table.memo_file_format.should == :dbt
21
- end
22
-
23
- end
@@ -1,23 +0,0 @@
1
- require File.expand_path(File.join(File.dirname(__FILE__), "../spec_helper"))
2
- require File.expand_path(File.join(File.dirname(__FILE__), "dbf_shared"))
3
-
4
- describe DBF, "of type 8b (dBase IV with memo file)" do
5
- before do
6
- @table = DBF::Table.new "#{DB_PATH}/dbase_8b.dbf"
7
- end
8
-
9
- it_should_behave_like "DBF"
10
-
11
- it "should report the correct version number" do
12
- @table.version.should == "8b"
13
- end
14
-
15
- it "should have a memo file" do
16
- @table.should have_memo_file
17
- end
18
-
19
- it "should report the correct memo type" do
20
- @table.memo_file_format.should == :dbt
21
- end
22
-
23
- end
@@ -1,23 +0,0 @@
1
- require File.expand_path(File.join(File.dirname(__FILE__), "../spec_helper"))
2
- require File.expand_path(File.join(File.dirname(__FILE__), "dbf_shared"))
3
-
4
- describe DBF, "of type f5 (FoxPro with memo file)" do
5
- before do
6
- @table = DBF::Table.new "#{DB_PATH}/dbase_f5.dbf"
7
- end
8
-
9
- it_should_behave_like "DBF"
10
-
11
- it "should report the correct version number" do
12
- @table.version.should == "f5"
13
- end
14
-
15
- it "should have a memo file" do
16
- @table.should have_memo_file
17
- end
18
-
19
- it "should report the correct memo type" do
20
- @table.memo_file_format.should == :fpt
21
- end
22
-
23
- end
@@ -1,111 +0,0 @@
1
- require File.expand_path(File.join(File.dirname(__FILE__), "../spec_helper"))
2
-
3
- describe DBF::Record do
4
-
5
- def example_record(data = '')
6
- table = mock_table(data)
7
- DBF::Record.new(table)
8
- end
9
-
10
- def mock_table(data = '')
11
- @column1 = DBF::Column.new 'ColumnName', 'N', 1, 0
12
-
13
- table = mock('table')
14
- table.stub!(:memo_block_size).and_return(8)
15
- table.stub!(:memo).and_return(nil)
16
- table.stub!(:columns).and_return([@column1])
17
- table.stub!(:data).and_return(data)
18
- table.stub!(:has_memo_file?).and_return(true)
19
- table.data.stub!(:read).and_return(data)
20
- table
21
- end
22
-
23
- describe '#memo_block_content_size' do
24
- it "should equal the difference between the table's memo_block_size and 8" do
25
- table = mock_table
26
- table.should_receive(:memo_block_size).and_return(128)
27
- record = DBF::Record.new(table)
28
-
29
- record.send(:memo_block_content_size).should == 120
30
- end
31
- end
32
-
33
- describe '#memo_content_size' do
34
- it "should equal 8 plus the difference between memo_size and the table's memo_block_size" do
35
- record = example_record
36
- record.should_receive(:memo_block_size).and_return(8)
37
-
38
- record.send(:memo_content_size, 1024).should == 1024
39
- end
40
- end
41
-
42
- describe '#read_memo' do
43
- before do
44
- @table = mock_table
45
- @record = DBF::Record.new(@table)
46
- end
47
-
48
- context 'with start_block of 0' do
49
- specify { @record.send(:read_memo, 0).should be_nil }
50
- end
51
-
52
- context 'with start_block less than 0' do
53
- specify { @record.send(:read_memo, -1).should be_nil }
54
- end
55
-
56
- context 'with valid start_block' do
57
- before do
58
- @table.stub!(:memo_file_format).and_return(:fpt)
59
- end
60
-
61
- it 'should build the fpt memo' do
62
- @record.should_receive(:build_fpt_memo)
63
- @record.send(:read_memo, 1)
64
- end
65
- end
66
-
67
- context 'with no memo file' do
68
- specify do
69
- @table.should_receive(:has_memo_file?).and_return(false)
70
- @record.send(:read_memo, 5).should be_nil
71
- end
72
- end
73
- end
74
-
75
- describe '#to_a' do
76
- it 'should return an ordered array of attribute values' do
77
- table = DBF::Table.new "#{DB_PATH}/dbase_8b.dbf"
78
- record = table.record(9)
79
- record.to_a.should == ["Ten records stored in this database", 10.0, nil, false, 0.1, nil]
80
- end
81
- end
82
-
83
- describe '#==' do
84
- before do
85
- @record = example_record
86
- end
87
-
88
- it 'should be false if other does not have attributes' do
89
- other = mock('object')
90
- (@record == other).should be_false
91
- end
92
-
93
- it 'should be true if other attributes match' do
94
- attributes = {:x => 1, :y => 2}
95
- @record.stub!(:attributes).and_return(attributes)
96
- other = mock('object', :attributes => attributes)
97
- (@record == other).should be_true
98
- end
99
- end
100
-
101
- describe 'unpack_data' do
102
- before do
103
- @record = example_record('abc')
104
- end
105
-
106
- it 'should unpack the data' do
107
- @record.send(:unpack_data, 3).should == 'abc'
108
- end
109
- end
110
-
111
- end