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