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