dbf 1.6.5 → 1.6.6
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/CHANGELOG.md +4 -1
- data/Gemfile.lock +66 -1
- data/Rakefile +5 -5
- data/docs/supported_types.markdown +4 -4
- data/lib/dbf/column.rb +12 -6
- data/lib/dbf/record.rb +4 -3
- data/lib/dbf/table.rb +9 -5
- data/lib/dbf/version.rb +1 -1
- data/spec/dbf/column_spec.rb +44 -22
- metadata +56 -12
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,8 @@
|
|
1
|
+
# 1.6.6
|
2
|
+
- add binary data type support to ActiveRecord schema output
|
3
|
+
|
1
4
|
# 1.6.5
|
2
|
-
-
|
5
|
+
- support for visual foxpro double (b) data type
|
3
6
|
|
4
7
|
# 1.6.3
|
5
8
|
- Replace invalid chars with 'unicode replacement character' (U+FFFD)
|
data/Gemfile.lock
CHANGED
@@ -1,20 +1,74 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
dbf (1.6.
|
4
|
+
dbf (1.6.5)
|
5
5
|
fastercsv (~> 1.5.4)
|
6
6
|
|
7
7
|
GEM
|
8
8
|
remote: http://rubygems.org/
|
9
9
|
specs:
|
10
|
+
Saikuro (1.1.0)
|
11
|
+
activesupport (3.1.1)
|
12
|
+
multi_json (~> 1.0)
|
10
13
|
archive-tar-minitar (0.5.2)
|
14
|
+
arrayfields (4.7.4)
|
15
|
+
chronic (0.3.0)
|
16
|
+
churn (0.0.13)
|
17
|
+
chronic (>= 0.2.3)
|
18
|
+
hirb
|
19
|
+
json_pure
|
20
|
+
main
|
21
|
+
ruby_parser (~> 2.0.4)
|
22
|
+
sexp_processor (~> 3.0.3)
|
23
|
+
colored (1.2)
|
11
24
|
columnize (0.3.4)
|
12
25
|
diff-lcs (1.1.3)
|
26
|
+
erubis (2.7.0)
|
13
27
|
fastercsv (1.5.4)
|
28
|
+
fattr (2.2.0)
|
29
|
+
flay (1.4.3)
|
30
|
+
ruby_parser (~> 2.0)
|
31
|
+
sexp_processor (~> 3.0)
|
32
|
+
flog (2.5.3)
|
33
|
+
ruby_parser (~> 2.0)
|
34
|
+
sexp_processor (~> 3.0)
|
35
|
+
hirb (0.5.0)
|
36
|
+
i18n (0.6.0)
|
37
|
+
json_pure (1.6.1)
|
14
38
|
linecache19 (0.5.12)
|
15
39
|
ruby_core_source (>= 0.1.4)
|
40
|
+
main (4.7.1)
|
41
|
+
map (4.7.1)
|
42
|
+
metric_fu (2.1.1)
|
43
|
+
Saikuro (>= 1.1.0)
|
44
|
+
activesupport (>= 2.0.0)
|
45
|
+
chronic (~> 0.3.0)
|
46
|
+
churn (>= 0.0.7)
|
47
|
+
flay (>= 1.2.1)
|
48
|
+
flog (>= 2.3.0)
|
49
|
+
rails_best_practices (>= 0.6.4)
|
50
|
+
rcov (>= 0.8.3.3)
|
51
|
+
reek (>= 1.2.6)
|
52
|
+
roodi (>= 2.1.0)
|
53
|
+
syntax
|
54
|
+
multi_json (1.0.3)
|
55
|
+
progressbar (0.9.1)
|
56
|
+
rails_best_practices (1.2.0)
|
57
|
+
activesupport
|
58
|
+
colored
|
59
|
+
erubis
|
60
|
+
i18n
|
61
|
+
progressbar
|
62
|
+
sexp_processor
|
16
63
|
rake (0.9.2)
|
64
|
+
rcov (0.9.11)
|
17
65
|
rdoc (3.9.4)
|
66
|
+
reek (1.2.8)
|
67
|
+
ruby2ruby (~> 1.2)
|
68
|
+
ruby_parser (~> 2.0)
|
69
|
+
sexp_processor (~> 3.0)
|
70
|
+
roodi (2.1.0)
|
71
|
+
ruby_parser
|
18
72
|
rspec (2.6.0)
|
19
73
|
rspec-core (~> 2.6.0)
|
20
74
|
rspec-expectations (~> 2.6.0)
|
@@ -31,14 +85,25 @@ GEM
|
|
31
85
|
columnize (>= 0.3.1)
|
32
86
|
linecache19 (>= 0.5.11)
|
33
87
|
ruby-debug-base19 (>= 0.11.19)
|
88
|
+
ruby2ruby (1.3.1)
|
89
|
+
ruby_parser (~> 2.0)
|
90
|
+
sexp_processor (~> 3.0)
|
34
91
|
ruby_core_source (0.1.5)
|
35
92
|
archive-tar-minitar (>= 0.5.2)
|
93
|
+
ruby_parser (2.0.6)
|
94
|
+
sexp_processor (~> 3.0)
|
95
|
+
sexp_processor (3.0.7)
|
96
|
+
syntax (1.0.0)
|
36
97
|
|
37
98
|
PLATFORMS
|
38
99
|
ruby
|
39
100
|
|
40
101
|
DEPENDENCIES
|
102
|
+
arrayfields
|
41
103
|
dbf!
|
104
|
+
fattr
|
105
|
+
map
|
106
|
+
metric_fu
|
42
107
|
rake (~> 0.9.2)
|
43
108
|
rdoc (~> 3.9.0)
|
44
109
|
rspec (~> 2.6.0)
|
data/Rakefile
CHANGED
@@ -26,8 +26,8 @@ task :console do
|
|
26
26
|
sh "irb -rubygems -I lib -r dbf.rb"
|
27
27
|
end
|
28
28
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
29
|
+
require 'metric_fu'
|
30
|
+
MetricFu::Configuration.run do |config|
|
31
|
+
config.rcov[:test_files] = ['spec/**/*_spec.rb']
|
32
|
+
config.rcov[:rcov_opts] << "-Ispec"
|
33
|
+
end
|
@@ -9,9 +9,9 @@
|
|
9
9
|
+---------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|
10
10
|
| 05 | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - | - | - |
|
11
11
|
+---------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|
12
|
-
| 30 | Y | Y | Y | Y | - | Y |
|
12
|
+
| 30 | Y | Y | Y | Y | - | Y | Y | N | N | N | N | Y | N | N | N | N | - |
|
13
13
|
+---------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|
14
|
-
| 31 | Y | Y | Y | Y | Y | Y |
|
14
|
+
| 31 | Y | Y | Y | Y | Y | Y | Y | N | N | N | N | Y | N | N | N | N | N |
|
15
15
|
+---------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|
16
16
|
| 7b | Y | Y | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - |
|
17
17
|
+---------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|
@@ -19,7 +19,7 @@
|
|
19
19
|
+---------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|
20
20
|
| 8e | Y | Y | Y | Y | Y | - | - | - | - | - | - | - | - | N | - | - | - |
|
21
21
|
+---------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|
22
|
-
| f5 | Y | Y | Y | Y | Y | Y |
|
22
|
+
| f5 | Y | Y | Y | Y | Y | Y | Y | N | N | N | N | Y | N | N | N | N | N |
|
23
23
|
+---------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|
24
|
-
| fb | Y | Y | Y | Y | - | Y |
|
24
|
+
| fb | Y | Y | Y | Y | - | Y | Y | N | N | N | N | Y | N | N | N | N | N |
|
25
25
|
+---------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|
data/lib/dbf/column.rb
CHANGED
@@ -13,8 +13,8 @@ module DBF
|
|
13
13
|
# @param [String] type
|
14
14
|
# @param [Fixnum] length
|
15
15
|
# @param [Fixnum] decimal
|
16
|
-
def initialize(name, type, length, decimal, encoding=nil)
|
17
|
-
@name, @type, @length, @decimal, @encoding = clean(name), type, length, decimal, encoding
|
16
|
+
def initialize(name, type, length, decimal, version, encoding=nil)
|
17
|
+
@name, @type, @length, @decimal, @version, @encoding = clean(name), type, length, decimal, version, encoding
|
18
18
|
|
19
19
|
raise ColumnLengthError, "field length must be greater than 0" unless length > 0
|
20
20
|
raise ColumnNameError, "column name cannot be empty" if @name.length == 0
|
@@ -100,15 +100,21 @@ module DBF
|
|
100
100
|
":boolean"
|
101
101
|
when "M"
|
102
102
|
":text"
|
103
|
+
when "B"
|
104
|
+
if DBF::Table::FOXPRO_VERSIONS.include?(@version)
|
105
|
+
decimal > 0 ? ":float" : ":integer"
|
106
|
+
else
|
107
|
+
":text"
|
108
|
+
end
|
103
109
|
else
|
104
110
|
":string, :limit => #{length}"
|
105
111
|
end
|
106
112
|
end
|
107
113
|
|
108
|
-
def clean(
|
109
|
-
first_null =
|
110
|
-
|
111
|
-
|
114
|
+
def clean(value) #nodoc
|
115
|
+
first_null = value.index("\x00")
|
116
|
+
value = value[0, first_null] if first_null
|
117
|
+
value.gsub(/[^\x20-\x7E]/, "")
|
112
118
|
end
|
113
119
|
|
114
120
|
end
|
data/lib/dbf/record.rb
CHANGED
@@ -46,10 +46,11 @@ module DBF
|
|
46
46
|
|
47
47
|
def define_accessors #nodoc
|
48
48
|
@columns.each do |column|
|
49
|
-
|
49
|
+
name = column.underscored_name
|
50
|
+
unless respond_to? name
|
50
51
|
self.class.class_eval <<-END
|
51
|
-
def #{
|
52
|
-
@#{
|
52
|
+
def #{name}
|
53
|
+
@#{name} ||= attributes['#{name}']
|
53
54
|
end
|
54
55
|
END
|
55
56
|
end
|
data/lib/dbf/table.rb
CHANGED
@@ -168,17 +168,13 @@ module DBF
|
|
168
168
|
|
169
169
|
# Retrieves column information from the database
|
170
170
|
def columns
|
171
|
-
column_class = FOXPRO_VERSIONS.include?(version) ? FoxproColumn : Column
|
172
|
-
|
173
171
|
@columns ||= begin
|
174
|
-
column_count = (@header_length - DBF_HEADER_SIZE + 1) / DBF_HEADER_SIZE
|
175
|
-
|
176
172
|
@data.seek(DBF_HEADER_SIZE)
|
177
173
|
columns = []
|
178
174
|
column_count.times do
|
179
175
|
name, type, length, decimal = @data.read(32).unpack('a10 x a x4 C2')
|
180
176
|
if length > 0
|
181
|
-
columns << column_class.new(name.strip, type, length, decimal, @encoding)
|
177
|
+
columns << column_class.new(name.strip, type, length, decimal, version, @encoding)
|
182
178
|
end
|
183
179
|
end
|
184
180
|
columns
|
@@ -190,6 +186,14 @@ module DBF
|
|
190
186
|
end
|
191
187
|
|
192
188
|
private
|
189
|
+
|
190
|
+
def column_class
|
191
|
+
@column_class ||= FOXPRO_VERSIONS.include?(version) ? FoxproColumn : Column
|
192
|
+
end
|
193
|
+
|
194
|
+
def column_count
|
195
|
+
@column_count ||= (@header_length - DBF_HEADER_SIZE + 1) / DBF_HEADER_SIZE
|
196
|
+
end
|
193
197
|
|
194
198
|
def open_memo(path) #nodoc
|
195
199
|
files = Dir.glob("#{File.dirname(path)}/#{File.basename(path, '.*')}*.{fpt,FPT,dbt,DBT}")
|
data/lib/dbf/version.rb
CHANGED
data/spec/dbf/column_spec.rb
CHANGED
@@ -3,7 +3,7 @@ require "spec_helper"
|
|
3
3
|
describe DBF::Column do
|
4
4
|
|
5
5
|
context "when initialized" do
|
6
|
-
let(:column) { DBF::Column.new "ColumnName", "N", 1, 0 }
|
6
|
+
let(:column) { DBF::Column.new "ColumnName", "N", 1, 0, "30" }
|
7
7
|
|
8
8
|
it "sets the #name accessor" do
|
9
9
|
column.name.should == "ColumnName"
|
@@ -22,15 +22,15 @@ describe DBF::Column do
|
|
22
22
|
end
|
23
23
|
|
24
24
|
describe 'with length of 0' do
|
25
|
-
specify { lambda { DBF::Column.new "ColumnName", "N", 0, 0 }.should raise_error(DBF::ColumnLengthError) }
|
25
|
+
specify { lambda { DBF::Column.new "ColumnName", "N", 0, 0, "30" }.should raise_error(DBF::ColumnLengthError) }
|
26
26
|
end
|
27
27
|
|
28
28
|
describe 'with length less than 0' do
|
29
|
-
specify { lambda { DBF::Column.new "ColumnName", "N", -1, 0 }.should raise_error(DBF::ColumnLengthError) }
|
29
|
+
specify { lambda { DBF::Column.new "ColumnName", "N", -1, 0, "30" }.should raise_error(DBF::ColumnLengthError) }
|
30
30
|
end
|
31
31
|
|
32
32
|
describe 'with empty column name' do
|
33
|
-
specify { lambda { DBF::Column.new "\xFF\xFC", "N", 1, 0 }.should raise_error(DBF::ColumnNameError) }
|
33
|
+
specify { lambda { DBF::Column.new "\xFF\xFC", "N", 1, 0, "30" }.should raise_error(DBF::ColumnNameError) }
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
@@ -39,7 +39,7 @@ describe DBF::Column do
|
|
39
39
|
context 'and 0 decimals' do
|
40
40
|
it 'casts value to Fixnum' do
|
41
41
|
value = '135'
|
42
|
-
column = DBF::Column.new "ColumnName", "N", 3, 0
|
42
|
+
column = DBF::Column.new "ColumnName", "N", 3, 0, "30"
|
43
43
|
column.type_cast(value).should be_a Fixnum
|
44
44
|
column.type_cast(value).should == 135
|
45
45
|
end
|
@@ -48,7 +48,7 @@ describe DBF::Column do
|
|
48
48
|
context 'and more than 0 decimals' do
|
49
49
|
it 'casts value to Float' do
|
50
50
|
value = '13.5'
|
51
|
-
column = DBF::Column.new "ColumnName", "N", 2, 1
|
51
|
+
column = DBF::Column.new "ColumnName", "N", 2, 1, "30"
|
52
52
|
column.type_cast(value).should be_a Float
|
53
53
|
column.type_cast(value).should == 13.5
|
54
54
|
end
|
@@ -58,7 +58,7 @@ describe DBF::Column do
|
|
58
58
|
context 'with type F (float)' do
|
59
59
|
it 'casts value to Float' do
|
60
60
|
value = '135'
|
61
|
-
column = DBF::Column.new "ColumnName", "F", 3, 0
|
61
|
+
column = DBF::Column.new "ColumnName", "F", 3, 0, "30"
|
62
62
|
column.type_cast(value).should be_a Float
|
63
63
|
column.type_cast(value).should == 135.0
|
64
64
|
end
|
@@ -67,13 +67,13 @@ describe DBF::Column do
|
|
67
67
|
context 'with type I (integer)' do
|
68
68
|
it "casts value to Fixnum" do
|
69
69
|
value = "\203\171\001\000"
|
70
|
-
column = DBF::Column.new "ColumnName", "I", 3, 0
|
70
|
+
column = DBF::Column.new "ColumnName", "I", 3, 0, "30"
|
71
71
|
column.type_cast(value).should == 96643
|
72
72
|
end
|
73
73
|
end
|
74
74
|
|
75
75
|
context 'with type L (logical/boolean)' do
|
76
|
-
let(:column) { DBF::Column.new "ColumnName", "L", 1, 0 }
|
76
|
+
let(:column) { DBF::Column.new "ColumnName", "L", 1, 0, "30" }
|
77
77
|
|
78
78
|
it "casts 'y' to true" do
|
79
79
|
column.type_cast('y').should == true
|
@@ -89,7 +89,7 @@ describe DBF::Column do
|
|
89
89
|
end
|
90
90
|
|
91
91
|
context 'with type T (datetime)' do
|
92
|
-
let(:column) { DBF::Column.new "ColumnName", "T", 16, 0 }
|
92
|
+
let(:column) { DBF::Column.new "ColumnName", "T", 16, 0, "30" }
|
93
93
|
|
94
94
|
context 'with valid datetime' do
|
95
95
|
it "casts to DateTime" do
|
@@ -105,7 +105,7 @@ describe DBF::Column do
|
|
105
105
|
end
|
106
106
|
|
107
107
|
context 'with type D (date)' do
|
108
|
-
let(:column) { DBF::Column.new "ColumnName", "D", 8, 0 }
|
108
|
+
let(:column) { DBF::Column.new "ColumnName", "D", 8, 0, "30" }
|
109
109
|
|
110
110
|
context 'with valid date' do
|
111
111
|
it "casts to Date" do
|
@@ -122,7 +122,7 @@ describe DBF::Column do
|
|
122
122
|
|
123
123
|
context 'with type M (memo)' do
|
124
124
|
it "casts to string" do
|
125
|
-
column = DBF::Column.new "ColumnName", "M", 3, 0
|
125
|
+
column = DBF::Column.new "ColumnName", "M", 3, 0, "30"
|
126
126
|
column.type_cast('abc').should be_a String
|
127
127
|
end
|
128
128
|
end
|
@@ -131,56 +131,78 @@ describe DBF::Column do
|
|
131
131
|
context "#schema_definition" do
|
132
132
|
context 'with type N (number)' do
|
133
133
|
it "outputs an integer column" do
|
134
|
-
column = DBF::Column.new "ColumnName", "N", 1, 0
|
134
|
+
column = DBF::Column.new "ColumnName", "N", 1, 0, "30"
|
135
135
|
column.schema_definition.should == "\"column_name\", :integer\n"
|
136
136
|
end
|
137
137
|
end
|
138
138
|
|
139
|
+
context "with type B (binary)" do
|
140
|
+
context "with Foxpro dbf" do
|
141
|
+
context "when decimal is greater than 0" do
|
142
|
+
it "outputs an float column" do
|
143
|
+
column = DBF::Column.new "ColumnName", "B", 1, 2, "f5"
|
144
|
+
column.schema_definition.should == "\"column_name\", :float\n"
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
context "when decimal is 0" do
|
149
|
+
column = DBF::Column.new "ColumnName", "B", 1, 0, "f5"
|
150
|
+
column.schema_definition.should == "\"column_name\", :integer\n"
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
154
|
+
context "when non-Foxpro dbf" do
|
155
|
+
it "outputs a text column" do
|
156
|
+
|
157
|
+
end
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
139
161
|
it "defines a float colmn if type is (N)umber with more than 0 decimals" do
|
140
|
-
column = DBF::Column.new "ColumnName", "N", 1, 2
|
162
|
+
column = DBF::Column.new "ColumnName", "N", 1, 2, "30"
|
141
163
|
column.schema_definition.should == "\"column_name\", :float\n"
|
142
164
|
end
|
143
165
|
|
144
166
|
it "defines a date column if type is (D)ate" do
|
145
|
-
column = DBF::Column.new "ColumnName", "D", 8, 0
|
167
|
+
column = DBF::Column.new "ColumnName", "D", 8, 0, "30"
|
146
168
|
column.schema_definition.should == "\"column_name\", :date\n"
|
147
169
|
end
|
148
170
|
|
149
171
|
it "defines a datetime column if type is (D)ate" do
|
150
|
-
column = DBF::Column.new "ColumnName", "T", 16, 0
|
172
|
+
column = DBF::Column.new "ColumnName", "T", 16, 0, "30"
|
151
173
|
column.schema_definition.should == "\"column_name\", :datetime\n"
|
152
174
|
end
|
153
175
|
|
154
176
|
it "defines a boolean column if type is (L)ogical" do
|
155
|
-
column = DBF::Column.new "ColumnName", "L", 1, 0
|
177
|
+
column = DBF::Column.new "ColumnName", "L", 1, 0, "30"
|
156
178
|
column.schema_definition.should == "\"column_name\", :boolean\n"
|
157
179
|
end
|
158
180
|
|
159
181
|
it "defines a text column if type is (M)emo" do
|
160
|
-
column = DBF::Column.new "ColumnName", "M", 1, 0
|
182
|
+
column = DBF::Column.new "ColumnName", "M", 1, 0, "30"
|
161
183
|
column.schema_definition.should == "\"column_name\", :text\n"
|
162
184
|
end
|
163
185
|
|
164
186
|
it "defines a string column with length for any other data types" do
|
165
|
-
column = DBF::Column.new "ColumnName", "X", 20, 0
|
187
|
+
column = DBF::Column.new "ColumnName", "X", 20, 0, "30"
|
166
188
|
column.schema_definition.should == "\"column_name\", :string, :limit => 20\n"
|
167
189
|
end
|
168
190
|
end
|
169
191
|
|
170
192
|
context "#name" do
|
171
193
|
it "contains only ASCII characters" do
|
172
|
-
column = DBF::Column.new "--\x1F-\x68\x65\x6C\x6C\x6F world-\x80--", "N", 1, 0
|
194
|
+
column = DBF::Column.new "--\x1F-\x68\x65\x6C\x6C\x6F world-\x80--", "N", 1, 0, "30"
|
173
195
|
column.name.should == "---hello world---"
|
174
196
|
end
|
175
197
|
|
176
198
|
it "is truncated at the null character" do
|
177
|
-
column = DBF::Column.new "--\x1F-\x68\x65\x6C\x6C\x6F \x00 world-\x80--", "N", 1, 0
|
199
|
+
column = DBF::Column.new "--\x1F-\x68\x65\x6C\x6C\x6F \x00 world-\x80--", "N", 1, 0, "30"
|
178
200
|
column.name.should == "---hello "
|
179
201
|
end
|
180
202
|
end
|
181
203
|
|
182
204
|
context '#decode_date' do
|
183
|
-
let(:column) { DBF::Column.new "ColumnName", "N", 1, 0 }
|
205
|
+
let(:column) { DBF::Column.new "ColumnName", "N", 1, 0, "30" }
|
184
206
|
|
185
207
|
it 'is nil if value is blank' do
|
186
208
|
column.send(:decode_date, '').should be_nil
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dbf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.6.
|
4
|
+
version: 1.6.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-10-
|
12
|
+
date: 2011-10-30 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: fastercsv
|
16
|
-
requirement: &
|
16
|
+
requirement: &70121607557520 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 1.5.4
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70121607557520
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rspec
|
27
|
-
requirement: &
|
27
|
+
requirement: &70121607556660 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 2.6.0
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70121607556660
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rake
|
38
|
-
requirement: &
|
38
|
+
requirement: &70121607555460 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: 0.9.2
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70121607555460
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: rdoc
|
49
|
-
requirement: &
|
49
|
+
requirement: &70121607554600 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 3.9.0
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70121607554600
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: ruby-debug19
|
60
|
-
requirement: &
|
60
|
+
requirement: &70121607553520 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,7 +65,51 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *70121607553520
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: metric_fu
|
71
|
+
requirement: &70121607552460 !ruby/object:Gem::Requirement
|
72
|
+
none: false
|
73
|
+
requirements:
|
74
|
+
- - ! '>='
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
77
|
+
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: *70121607552460
|
80
|
+
- !ruby/object:Gem::Dependency
|
81
|
+
name: fattr
|
82
|
+
requirement: &70121607551860 !ruby/object:Gem::Requirement
|
83
|
+
none: false
|
84
|
+
requirements:
|
85
|
+
- - ! '>='
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: '0'
|
88
|
+
type: :development
|
89
|
+
prerelease: false
|
90
|
+
version_requirements: *70121607551860
|
91
|
+
- !ruby/object:Gem::Dependency
|
92
|
+
name: arrayfields
|
93
|
+
requirement: &70121607551280 !ruby/object:Gem::Requirement
|
94
|
+
none: false
|
95
|
+
requirements:
|
96
|
+
- - ! '>='
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '0'
|
99
|
+
type: :development
|
100
|
+
prerelease: false
|
101
|
+
version_requirements: *70121607551280
|
102
|
+
- !ruby/object:Gem::Dependency
|
103
|
+
name: map
|
104
|
+
requirement: &70121607550460 !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
type: :development
|
111
|
+
prerelease: false
|
112
|
+
version_requirements: *70121607550460
|
69
113
|
description: A small fast library for reading dBase, xBase, Clipper and FoxPro database
|
70
114
|
files.
|
71
115
|
email: keithm@infused.org
|