dbf 0.5.4 → 1.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/History.txt +4 -0
- data/Manifest.txt +4 -7
- data/README.txt +16 -13
- data/Rakefile +1 -1
- data/bin/dbf +1 -1
- data/lib/dbf.rb +2 -2
- data/lib/dbf/{field.rb → column.rb} +3 -3
- data/lib/dbf/record.rb +82 -51
- data/lib/dbf/{reader.rb → table.rb} +71 -75
- data/spec/functional/dbf_shared.rb +27 -18
- data/spec/functional/format_03_spec.rb +4 -4
- data/spec/functional/format_30_spec.rb +4 -4
- data/spec/functional/format_83_spec.rb +4 -4
- data/spec/functional/format_8b_spec.rb +4 -4
- data/spec/functional/format_f5_spec.rb +4 -4
- data/spec/unit/column_spec.rb +34 -0
- data/spec/unit/record_spec.rb +18 -18
- data/spec/unit/table_spec.rb +168 -0
- metadata +6 -9
- data/.DS_Store +0 -0
- data/spec/.DS_Store +0 -0
- data/spec/fixtures/.DS_Store +0 -0
- data/spec/unit/field_spec.rb +0 -34
- data/spec/unit/reader_spec.rb +0 -173
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.4
|
|
3
3
|
specification_version: 1
|
4
4
|
name: dbf
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.
|
7
|
-
date: 2007-06-
|
6
|
+
version: 1.0.0
|
7
|
+
date: 2007-06-27 00:00:00 -07:00
|
8
8
|
summary: A small fast library for reading dBase, xBase, Clipper and FoxPro database files.
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -29,7 +29,6 @@ post_install_message:
|
|
29
29
|
authors:
|
30
30
|
- Keith Morrison
|
31
31
|
files:
|
32
|
-
- .DS_Store
|
33
32
|
- History.txt
|
34
33
|
- Manifest.txt
|
35
34
|
- README.txt
|
@@ -38,12 +37,10 @@ files:
|
|
38
37
|
- benchmarks/seek_benchmark.rb
|
39
38
|
- bin/dbf
|
40
39
|
- lib/dbf.rb
|
41
|
-
- lib/dbf/
|
40
|
+
- lib/dbf/column.rb
|
42
41
|
- lib/dbf/globals.rb
|
43
|
-
- lib/dbf/reader.rb
|
44
42
|
- lib/dbf/record.rb
|
45
|
-
-
|
46
|
-
- spec/fixtures/.DS_Store
|
43
|
+
- lib/dbf/table.rb
|
47
44
|
- spec/fixtures/dbase_03.dbf
|
48
45
|
- spec/fixtures/dbase_30.dbf
|
49
46
|
- spec/fixtures/dbase_30.fpt
|
@@ -61,9 +58,9 @@ files:
|
|
61
58
|
- spec/functional/format_8b_spec.rb
|
62
59
|
- spec/functional/format_f5_spec.rb
|
63
60
|
- spec/spec_helper.rb
|
64
|
-
- spec/unit/
|
65
|
-
- spec/unit/reader_spec.rb
|
61
|
+
- spec/unit/column_spec.rb
|
66
62
|
- spec/unit/record_spec.rb
|
63
|
+
- spec/unit/table_spec.rb
|
67
64
|
test_files: []
|
68
65
|
|
69
66
|
rdoc_options:
|
data/.DS_Store
DELETED
Binary file
|
data/spec/.DS_Store
DELETED
Binary file
|
data/spec/fixtures/.DS_Store
DELETED
Binary file
|
data/spec/unit/field_spec.rb
DELETED
@@ -1,34 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + "/../spec_helper"
|
2
|
-
|
3
|
-
describe DBF::Field, "when initialized" do
|
4
|
-
|
5
|
-
before(:each) do
|
6
|
-
@field = DBF::Field.new "FieldName", "N", 1, 0
|
7
|
-
end
|
8
|
-
|
9
|
-
it "should set the #name accessor" do
|
10
|
-
@field.name.should == "FieldName"
|
11
|
-
end
|
12
|
-
|
13
|
-
it "should set the #type accessor" do
|
14
|
-
@field.type.should == "N"
|
15
|
-
end
|
16
|
-
|
17
|
-
it "should set the #length accessor" do
|
18
|
-
@field.length.should == 1
|
19
|
-
end
|
20
|
-
|
21
|
-
it "should set the #decimal accessor" do
|
22
|
-
@field.decimal.should == 0
|
23
|
-
end
|
24
|
-
|
25
|
-
it "should raise an error if length is greater than 0" do
|
26
|
-
lambda { field = DBF::Field.new "FieldName", "N", -1, 0 }.should raise_error(DBF::FieldLengthError)
|
27
|
-
end
|
28
|
-
|
29
|
-
it "should strip null characters from the name" do
|
30
|
-
field = DBF::Field.new "Field\0Name\0", "N", 1, 0
|
31
|
-
field.name.should == "FieldName"
|
32
|
-
end
|
33
|
-
|
34
|
-
end
|
data/spec/unit/reader_spec.rb
DELETED
@@ -1,173 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + "/../spec_helper"
|
2
|
-
|
3
|
-
describe DBF::Reader, "when initialized" do
|
4
|
-
|
5
|
-
before(:all) do
|
6
|
-
@reader = DBF::Reader.new "#{DB_PATH}/dbase_83.dbf"
|
7
|
-
end
|
8
|
-
|
9
|
-
it "should load the data file" do
|
10
|
-
@reader.instance_eval("@data_file").should be_kind_of(File)
|
11
|
-
end
|
12
|
-
|
13
|
-
it "should locate load the memo file" do
|
14
|
-
@reader.has_memo_file?.should be_true
|
15
|
-
@reader.instance_eval("@memo_file").should be_kind_of(File)
|
16
|
-
end
|
17
|
-
|
18
|
-
it "should determine the memo file format" do
|
19
|
-
@reader.memo_file_format.should == :dbt
|
20
|
-
end
|
21
|
-
|
22
|
-
it "should determine the memo block size" do
|
23
|
-
@reader.memo_block_size.should == 512
|
24
|
-
end
|
25
|
-
|
26
|
-
it "should default to loading all records into memory" do
|
27
|
-
@reader.in_memory?.should be_true
|
28
|
-
end
|
29
|
-
|
30
|
-
it "should determine the number of fields in each record" do
|
31
|
-
@reader.fields.size.should == 15
|
32
|
-
end
|
33
|
-
|
34
|
-
it "should determine the number of records in the database" do
|
35
|
-
@reader.record_count.should == 67
|
36
|
-
end
|
37
|
-
|
38
|
-
it "should determine the database version" do
|
39
|
-
@reader.version.should == "83"
|
40
|
-
end
|
41
|
-
|
42
|
-
it "should set the in_memory option" do
|
43
|
-
@reader.in_memory?.should be_true
|
44
|
-
reader = DBF::Reader.new "#{DB_PATH}/dbase_83.dbf", :in_memory => false
|
45
|
-
reader.in_memory?.should be_false
|
46
|
-
end
|
47
|
-
|
48
|
-
end
|
49
|
-
|
50
|
-
describe DBF::Reader, "when the in_memory flag is true" do
|
51
|
-
|
52
|
-
before(:each) do
|
53
|
-
@reader = DBF::Reader.new "#{DB_PATH}/dbase_83.dbf"
|
54
|
-
end
|
55
|
-
|
56
|
-
it "should build the records array from disk only on the first request" do
|
57
|
-
@reader.expects(:get_all_records_from_file).at_most_once.returns([])
|
58
|
-
3.times { @reader.records }
|
59
|
-
end
|
60
|
-
|
61
|
-
it "should read from the records array when using the record() method" do
|
62
|
-
@reader.expects(:get_all_records_from_file).at_most_once.returns([])
|
63
|
-
@reader.expects(:get_record_from_file).never
|
64
|
-
@reader.expects(:records).times(2).returns([])
|
65
|
-
@reader.record(1)
|
66
|
-
@reader.record(10)
|
67
|
-
end
|
68
|
-
|
69
|
-
end
|
70
|
-
|
71
|
-
describe DBF::Reader, "when the in_memory flag is false" do
|
72
|
-
|
73
|
-
it "should read the records from disk on every request" do
|
74
|
-
reader = DBF::Reader.new "#{DB_PATH}/dbase_83.dbf", :in_memory => false
|
75
|
-
reader.expects(:get_all_records_from_file).times(3).returns([])
|
76
|
-
3.times { reader.records }
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
describe DBF::Reader, "schema" do
|
81
|
-
|
82
|
-
it "should match test schema " do
|
83
|
-
reader = DBF::Reader.new "#{DB_PATH}/dbase_83.dbf"
|
84
|
-
control_schema = File.read(File.dirname(__FILE__) + '/../fixtures/dbase_83_schema.txt')
|
85
|
-
|
86
|
-
reader.schema.should == control_schema
|
87
|
-
end
|
88
|
-
|
89
|
-
end
|
90
|
-
|
91
|
-
describe DBF::Reader, "find(index)" do
|
92
|
-
|
93
|
-
before(:all) do
|
94
|
-
@reader = DBF::Reader.new "#{DB_PATH}/dbase_83.dbf"
|
95
|
-
end
|
96
|
-
|
97
|
-
it "should return the correct record" do
|
98
|
-
@reader.find(5).should == @reader.record(5)
|
99
|
-
end
|
100
|
-
|
101
|
-
it "should raise an error if options are not empty" do
|
102
|
-
lambda { @reader.find(5, :name => 'test') }.should raise_error(ArgumentError)
|
103
|
-
end
|
104
|
-
|
105
|
-
end
|
106
|
-
|
107
|
-
describe DBF::Reader, "find(:all)" do
|
108
|
-
|
109
|
-
before(:all) do
|
110
|
-
@reader = DBF::Reader.new "#{DB_PATH}/dbase_83.dbf"
|
111
|
-
end
|
112
|
-
|
113
|
-
it "should return all records if options are empty" do
|
114
|
-
@reader.find(:all).should == @reader.records
|
115
|
-
end
|
116
|
-
|
117
|
-
it "should return matching records when used with options" do
|
118
|
-
@reader.find(:all, "WEIGHT" => 0.0).should == @reader.records.select {|r| r["WEIGHT"] == 0.0}
|
119
|
-
end
|
120
|
-
|
121
|
-
it "with multiple options should search for all search terms as if using AND" do
|
122
|
-
@reader.find(:all, "ID" => 30, "IMAGE" => "graphics/00000001/TBC01.jpg").should == []
|
123
|
-
end
|
124
|
-
end
|
125
|
-
|
126
|
-
describe DBF::Reader, "find(:first)" do
|
127
|
-
|
128
|
-
before(:all) do
|
129
|
-
@reader = DBF::Reader.new "#{DB_PATH}/dbase_83.dbf"
|
130
|
-
end
|
131
|
-
|
132
|
-
it "should return the first record if options are empty" do
|
133
|
-
@reader.find(:first).should == @reader.records.first
|
134
|
-
end
|
135
|
-
|
136
|
-
it "should return the first matching record when used with options" do
|
137
|
-
@reader.find(:first, "CODE" => "C").should == @reader.record(5)
|
138
|
-
end
|
139
|
-
|
140
|
-
it "with multiple options should search for all search terms as if using AND" do
|
141
|
-
@reader.find(:first, "ID" => 30, "IMAGE" => "graphics/00000001/TBC01.jpg").should be_nil
|
142
|
-
end
|
143
|
-
end
|
144
|
-
|
145
|
-
describe DBF::Reader do
|
146
|
-
|
147
|
-
before(:each) do
|
148
|
-
@reader = DBF::Reader.new "#{DB_PATH}/dbase_83.dbf"
|
149
|
-
end
|
150
|
-
|
151
|
-
it "should reload all data when sent #reload!" do
|
152
|
-
@reader.records
|
153
|
-
@reader.instance_eval("@records").should be_kind_of(Array)
|
154
|
-
@reader.reload!
|
155
|
-
@reader.instance_eval("@records").should be_nil
|
156
|
-
end
|
157
|
-
|
158
|
-
it "should return a DBF::Field object when sent #field with a valid field_name given as a string or symbol" do
|
159
|
-
@reader.field("IMAGE").should be_kind_of(DBF::Field)
|
160
|
-
@reader.field(:IMAGE).should be_kind_of(DBF::Field)
|
161
|
-
end
|
162
|
-
|
163
|
-
it "should return nil when sent #field with an invalid field_name given as a string or symbol" do
|
164
|
-
@reader.field("NOTANIMAGE").should be_nil
|
165
|
-
@reader.field(:NOTANIMAGE).should be_nil
|
166
|
-
end
|
167
|
-
|
168
|
-
it "should return a text description of the database type when sent #version_description" do
|
169
|
-
@reader.version_description.should == "dBase III with memo file"
|
170
|
-
end
|
171
|
-
|
172
|
-
end
|
173
|
-
|