dbf 3.0.3 → 3.0.4
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/README.md +32 -0
- data/bin/dbf +17 -5
- data/lib/dbf.rb +1 -0
- data/lib/dbf/column.rb +13 -2
- data/lib/dbf/schema.rb +19 -5
- data/lib/dbf/version.rb +1 -1
- data/spec/dbf/table_spec.rb +51 -0
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 8a9691bee280ae2d7df25c7f2fb328a8ac15d9dd
|
|
4
|
+
data.tar.gz: c93cc164e9b0749baa2b700a4f322d4ae7c0242a
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: f0870b61e88a071d6d0d5cb8cec8036fad9566f00820ae5186298507598c6f4cd1f563dcd0d56f46e501fa392b8f33225915008cd0a9a0ba5eace029e9092926
|
|
7
|
+
data.tar.gz: aa88664313b12814de6590430b129f4414a9b967119b21a40537ed9a1b53698f2d04c0a5083ed7c50c1ce35fc8d8995cc055c9da46523197192e35375332134e
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
|
@@ -166,6 +166,32 @@ class CreateBooks < ActiveRecord::Migration
|
|
|
166
166
|
end
|
|
167
167
|
```
|
|
168
168
|
|
|
169
|
+
## Migrating to Sequel
|
|
170
|
+
|
|
171
|
+
An example of migrating a DBF book table to Sequel using a migration:
|
|
172
|
+
|
|
173
|
+
```ruby
|
|
174
|
+
require 'dbf'
|
|
175
|
+
|
|
176
|
+
class Book < Sequel::Model; end
|
|
177
|
+
|
|
178
|
+
Sequel.migration do
|
|
179
|
+
up do
|
|
180
|
+
table = DBF::Table.new('db/dbf/books.dbf')
|
|
181
|
+
eval(table.schema(:sequel, true)) # passing true to limit output to create_table() only
|
|
182
|
+
|
|
183
|
+
Book.reset_column_information
|
|
184
|
+
table.each do |record|
|
|
185
|
+
Book.create(title: record.title, author: record.author)
|
|
186
|
+
end
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
down do
|
|
190
|
+
drop_table(:books)
|
|
191
|
+
end
|
|
192
|
+
end
|
|
193
|
+
```
|
|
194
|
+
|
|
169
195
|
## Command-line utility
|
|
170
196
|
|
|
171
197
|
A small command-line utility called dbf is installed along with the gem.
|
|
@@ -173,14 +199,20 @@ A small command-line utility called dbf is installed along with the gem.
|
|
|
173
199
|
$ dbf -h
|
|
174
200
|
usage: dbf [-h|-s|-a] filename
|
|
175
201
|
-h = print this message
|
|
202
|
+
-v = print the version number
|
|
176
203
|
-s = print summary information
|
|
177
204
|
-a = create an ActiveRecord::Schema
|
|
205
|
+
-r = create a Sequel Migration
|
|
178
206
|
-c = create a csv file
|
|
179
207
|
|
|
180
208
|
Create an executable ActiveRecord schema:
|
|
181
209
|
|
|
182
210
|
dbf -a books.dbf > books_schema.rb
|
|
183
211
|
|
|
212
|
+
Create an executable Sequel schema:
|
|
213
|
+
|
|
214
|
+
dbf -r books.dbf > migrate/001_create_books.rb
|
|
215
|
+
|
|
184
216
|
Dump all records to a CSV file:
|
|
185
217
|
|
|
186
218
|
dbf -c books.dbf > books.csv
|
data/bin/dbf
CHANGED
|
@@ -3,22 +3,34 @@
|
|
|
3
3
|
require 'dbf'
|
|
4
4
|
require 'optparse'
|
|
5
5
|
|
|
6
|
-
params = ARGV.getopts('h', 's', 'a', 'c')
|
|
6
|
+
params = ARGV.getopts('h', 's', 'a', 'c', 'r', 'v')
|
|
7
7
|
|
|
8
|
-
if params['
|
|
9
|
-
puts "
|
|
8
|
+
if params['v'] then
|
|
9
|
+
puts "dbf version: #{DBF::VERSION}"
|
|
10
|
+
|
|
11
|
+
elsif params['h'] then
|
|
12
|
+
puts "usage: #{File.basename(__FILE__)} [-h|-s|-a|-c|-r] filename"
|
|
10
13
|
puts " -h = print this message"
|
|
14
|
+
puts " -v = print the DBF gem version"
|
|
11
15
|
puts " -s = print summary information"
|
|
12
16
|
puts " -a = create an ActiveRecord::Schema"
|
|
13
|
-
puts " -
|
|
17
|
+
puts " -r = create a Sequel migration"
|
|
18
|
+
puts " -c = create a CSV file"
|
|
14
19
|
else
|
|
20
|
+
|
|
15
21
|
filename = ARGV.shift
|
|
16
22
|
abort "You must supply a filename on the command line" unless filename
|
|
17
23
|
|
|
18
24
|
# create an ActiveRecord::Schema
|
|
19
25
|
if params['a']
|
|
20
26
|
table = DBF::Table.new filename
|
|
21
|
-
puts table.schema
|
|
27
|
+
puts table.schema(:activerecord)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# create an Sequel::Migration
|
|
31
|
+
if params['r']
|
|
32
|
+
table = DBF::Table.new filename
|
|
33
|
+
puts table.schema(:sequel)
|
|
22
34
|
end
|
|
23
35
|
|
|
24
36
|
if params['s']
|
data/lib/dbf.rb
CHANGED
data/lib/dbf/column.rb
CHANGED
|
@@ -63,6 +63,13 @@ module DBF
|
|
|
63
63
|
"\"#{underscored_name}\", #{schema_data_type}\n"
|
|
64
64
|
end
|
|
65
65
|
|
|
66
|
+
# Sequel Schema definition
|
|
67
|
+
#
|
|
68
|
+
# @return [String]
|
|
69
|
+
def sequel_schema_definition
|
|
70
|
+
":#{underscored_name}, #{schema_data_type(:sequel)}\n"
|
|
71
|
+
end
|
|
72
|
+
|
|
66
73
|
# Underscored name
|
|
67
74
|
#
|
|
68
75
|
# This is the column name converted to underscore format.
|
|
@@ -112,7 +119,7 @@ module DBF
|
|
|
112
119
|
]
|
|
113
120
|
end
|
|
114
121
|
|
|
115
|
-
def schema_data_type # nodoc
|
|
122
|
+
def schema_data_type(format = :activerecord) # nodoc
|
|
116
123
|
case type
|
|
117
124
|
when 'N', 'F'
|
|
118
125
|
decimal > 0 ? ':float' : ':integer'
|
|
@@ -135,7 +142,11 @@ module DBF
|
|
|
135
142
|
':text'
|
|
136
143
|
end
|
|
137
144
|
else
|
|
138
|
-
|
|
145
|
+
if format == :sequel
|
|
146
|
+
":varchar, :size => #{length}"
|
|
147
|
+
else
|
|
148
|
+
":string, :limit => #{length}"
|
|
149
|
+
end
|
|
139
150
|
end
|
|
140
151
|
end
|
|
141
152
|
|
data/lib/dbf/schema.rb
CHANGED
|
@@ -23,16 +23,16 @@ module DBF
|
|
|
23
23
|
#
|
|
24
24
|
# @param [Symbol] format Valid options are :activerecord and :json
|
|
25
25
|
# @return [String]
|
|
26
|
-
def schema(format = :activerecord)
|
|
27
|
-
supported_formats = [:activerecord, :json]
|
|
26
|
+
def schema(format = :activerecord, table_only = false)
|
|
27
|
+
supported_formats = [:activerecord, :json, :sequel]
|
|
28
28
|
if supported_formats.include?(format)
|
|
29
|
-
send
|
|
29
|
+
send("#{format}_schema", table_only)
|
|
30
30
|
else
|
|
31
31
|
raise ArgumentError
|
|
32
32
|
end
|
|
33
33
|
end
|
|
34
34
|
|
|
35
|
-
def activerecord_schema
|
|
35
|
+
def activerecord_schema(_table_only = false)
|
|
36
36
|
s = "ActiveRecord::Schema.define do\n"
|
|
37
37
|
s << " create_table \"#{File.basename(@data.path, '.*')}\" do |t|\n"
|
|
38
38
|
columns.each do |column|
|
|
@@ -42,7 +42,21 @@ module DBF
|
|
|
42
42
|
s
|
|
43
43
|
end
|
|
44
44
|
|
|
45
|
-
def
|
|
45
|
+
def sequel_schema(table_only = false)
|
|
46
|
+
s = ''
|
|
47
|
+
s << "Sequel.migration do\n" unless table_only
|
|
48
|
+
s << " change do\n " unless table_only
|
|
49
|
+
s << " create_table(:#{File.basename(@data.path, '.*')}) do\n"
|
|
50
|
+
columns.each do |column|
|
|
51
|
+
s << " column #{column.sequel_schema_definition}"
|
|
52
|
+
end
|
|
53
|
+
s << " end\n"
|
|
54
|
+
s << " end\n" unless table_only
|
|
55
|
+
s << "end\n" unless table_only
|
|
56
|
+
s
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def json_schema(_table_only = false)
|
|
46
60
|
columns.map(&:to_hash).to_json
|
|
47
61
|
end
|
|
48
62
|
end
|
data/lib/dbf/version.rb
CHANGED
data/spec/dbf/table_spec.rb
CHANGED
|
@@ -56,6 +56,57 @@ RSpec.describe DBF::Table do
|
|
|
56
56
|
end
|
|
57
57
|
end
|
|
58
58
|
|
|
59
|
+
describe '#sequel_schema' do
|
|
60
|
+
it 'should return a valid Sequel migration by default' do
|
|
61
|
+
expect(table.sequel_schema).to eq <<-SCHEMA
|
|
62
|
+
Sequel.migration do
|
|
63
|
+
change do
|
|
64
|
+
create_table(:dbase_83) do
|
|
65
|
+
column :id, :integer
|
|
66
|
+
column :catcount, :integer
|
|
67
|
+
column :agrpcount, :integer
|
|
68
|
+
column :pgrpcount, :integer
|
|
69
|
+
column :order, :integer
|
|
70
|
+
column :code, :varchar, :size => 50
|
|
71
|
+
column :name, :varchar, :size => 100
|
|
72
|
+
column :thumbnail, :varchar, :size => 254
|
|
73
|
+
column :image, :varchar, :size => 254
|
|
74
|
+
column :price, :float
|
|
75
|
+
column :cost, :float
|
|
76
|
+
column :desc, :text
|
|
77
|
+
column :weight, :float
|
|
78
|
+
column :taxable, :boolean
|
|
79
|
+
column :active, :boolean
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
SCHEMA
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
it 'should return a limited Sequel migration when passed true' do
|
|
87
|
+
expect(table.sequel_schema(true)).to eq <<-SCHEMA
|
|
88
|
+
create_table(:dbase_83) do
|
|
89
|
+
column :id, :integer
|
|
90
|
+
column :catcount, :integer
|
|
91
|
+
column :agrpcount, :integer
|
|
92
|
+
column :pgrpcount, :integer
|
|
93
|
+
column :order, :integer
|
|
94
|
+
column :code, :varchar, :size => 50
|
|
95
|
+
column :name, :varchar, :size => 100
|
|
96
|
+
column :thumbnail, :varchar, :size => 254
|
|
97
|
+
column :image, :varchar, :size => 254
|
|
98
|
+
column :price, :float
|
|
99
|
+
column :cost, :float
|
|
100
|
+
column :desc, :text
|
|
101
|
+
column :weight, :float
|
|
102
|
+
column :taxable, :boolean
|
|
103
|
+
column :active, :boolean
|
|
104
|
+
end
|
|
105
|
+
SCHEMA
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
end
|
|
109
|
+
|
|
59
110
|
describe '#json_schema' do
|
|
60
111
|
it 'is valid JSON' do
|
|
61
112
|
expect { JSON.parse(table.json_schema) }.to_not raise_error
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: dbf
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 3.0.
|
|
4
|
+
version: 3.0.4
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Keith Morrison
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2016-01-22 00:00:00.000000000 Z
|
|
12
12
|
dependencies: []
|
|
13
13
|
description: A small fast library for reading dBase, xBase, Clipper and FoxPro database
|
|
14
14
|
files.
|