sequel_migration_builder 0.4.0 → 0.4.1
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 +8 -8
- data/VERSION +1 -1
- data/lib/sequel/schema/db_schema_parser.rb +10 -1
- data/sequel_migration_builder.gemspec +3 -3
- data/spec/alter_table_operations_spec.rb +18 -18
- data/spec/db_column_spec.rb +32 -33
- data/spec/db_index_spec.rb +22 -27
- data/spec/db_schema_parser_spec.rb +52 -26
- data/spec/migration_builder_spec.rb +25 -40
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
NGRmODU3NzY1NDA1MGIyNjllMjE3ODA1ZjY0ZWIyNzE3MWRjMTdhZQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
NDFiMmJkZjlkNDA2YTVlMTdkODExYzY2NzQ3Yzg2ZDk4MWVmOWQxYQ==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
MjNiZjk0NTA3MmUxYWYxMmIwZjY4MDcyNjgwYjBlY2Y1ZmNiMTI3ZDJhOTU5
|
10
|
+
M2RjZDI2MTc3MGU4ODVmNWQ5N2ZlYzEwMGY2NzIyODc1ZjViMDM2ZTI0MTVl
|
11
|
+
NGI0OWRiODQ0ZDEwYWM1NGY4NjhiMzg1MzJlMmU4NGQwYjlhY2I=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
ZTVlYzE0YTViNjNmNDg5MTY4ODNmOTVhYTI4ZGY1NWFlZDQxYzA1MGFjMzdj
|
14
|
+
YjU4YzgxOTU2ZjYxYTcwNDVjNGM0ZDZiZDdkNzAyMzg5NDI2NzNmNTMwNDY3
|
15
|
+
OWE0YWNiMDlhZWM4MmU2MzY0MTQ1MWI0NWFlNGFkYTM1N2NiYzM=
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.4.
|
1
|
+
0.4.1
|
@@ -43,7 +43,7 @@ module Sequel
|
|
43
43
|
db_schema.map do |column|
|
44
44
|
type = parse_type(column.last[:db_type])
|
45
45
|
DbColumn.build_from_hash(:name => column.first,
|
46
|
-
:default => column
|
46
|
+
:default => extract_default(column),
|
47
47
|
:null => column.last[:allow_null],
|
48
48
|
:column_type => type,
|
49
49
|
:unsigned => extract_unsigned(column.last[:db_type], type),
|
@@ -73,12 +73,21 @@ module Sequel
|
|
73
73
|
case type
|
74
74
|
when /^int/ then :integer
|
75
75
|
when /^tinyint\(1\)/ then :boolean
|
76
|
+
when /^character varying/ then :varchar
|
77
|
+
when /^character/ then :char
|
78
|
+
when /^timestamp/ then :timestamp
|
79
|
+
when /^numeric\(\d+,\d+\)/ then :decimal
|
76
80
|
when /^([^(]+)/ then $1.to_sym
|
77
81
|
end
|
78
82
|
end
|
79
83
|
|
80
84
|
private
|
81
85
|
|
86
|
+
def extract_default(column)
|
87
|
+
default = column.last[:ruby_default] || column.last[:default]
|
88
|
+
default =~ /^"identity/ ? nil : default
|
89
|
+
end
|
90
|
+
|
82
91
|
def extract_unsigned(db_type_string, type)
|
83
92
|
return unless DbColumn::NUMERIC_TYPES.include?(type)
|
84
93
|
db_type_string.include?(" unsigned")
|
@@ -2,16 +2,16 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: sequel_migration_builder 0.4.
|
5
|
+
# stub: sequel_migration_builder 0.4.1 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "sequel_migration_builder"
|
9
|
-
s.version = "0.4.
|
9
|
+
s.version = "0.4.1"
|
10
10
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
12
|
s.require_paths = ["lib"]
|
13
13
|
s.authors = ["Roland Swingler"]
|
14
|
-
s.date = "2014-09-
|
14
|
+
s.date = "2014-09-02"
|
15
15
|
s.description = "Build Sequel Migrations based on the differences between two schemas"
|
16
16
|
s.email = "roland.swingler@gmail.com"
|
17
17
|
s.extra_rdoc_files = [
|
@@ -13,7 +13,7 @@ describe "Sequel::Schema::AlterTableOperations#build_column_operations" do
|
|
13
13
|
a = build_column(:name => :foo, :column_type => :integer)
|
14
14
|
b = build_column(:name => :foo, :column_type => :integer)
|
15
15
|
|
16
|
-
@subject.build_column_operations(a,b).
|
16
|
+
expect(@subject.build_column_operations(a,b)).to eql([])
|
17
17
|
end
|
18
18
|
|
19
19
|
it "should return a ChangeColumn operation if the types are different" do
|
@@ -21,7 +21,7 @@ describe "Sequel::Schema::AlterTableOperations#build_column_operations" do
|
|
21
21
|
b = build_column(:name => :foo, :column_type => :smallint)
|
22
22
|
ops = @subject.build_column_operations(a,b)
|
23
23
|
|
24
|
-
ops.first.
|
24
|
+
expect(ops.first).to eql("set_column_type :foo, :smallint, :default => nil")
|
25
25
|
end
|
26
26
|
|
27
27
|
it "should return a ChangeColumn operation if the sizes are different" do
|
@@ -29,7 +29,7 @@ describe "Sequel::Schema::AlterTableOperations#build_column_operations" do
|
|
29
29
|
b = build_column(:name => :foo, :column_type => :char, :size => 10)
|
30
30
|
ops = @subject.build_column_operations(a,b)
|
31
31
|
|
32
|
-
ops.first.
|
32
|
+
expect(ops.first).to eql("set_column_type :foo, :char, :default => nil, :size => 10")
|
33
33
|
end
|
34
34
|
|
35
35
|
it "should return a ChangeColumn operation if the unsigned value is different" do
|
@@ -37,7 +37,7 @@ describe "Sequel::Schema::AlterTableOperations#build_column_operations" do
|
|
37
37
|
b = build_column(:name => :foo, :column_type => :integer, :unsigned => false)
|
38
38
|
ops = @subject.build_column_operations(a,b)
|
39
39
|
|
40
|
-
ops.first.
|
40
|
+
expect(ops.first).to eql("set_column_type :foo, :integer, :default => nil, :unsigned => false")
|
41
41
|
end
|
42
42
|
|
43
43
|
it "should return a ChangeColumn operation to set the null value if the null value is different" do
|
@@ -45,7 +45,7 @@ describe "Sequel::Schema::AlterTableOperations#build_column_operations" do
|
|
45
45
|
b = build_column(:name => :foo, :column_type => :integer, :null => false)
|
46
46
|
ops = @subject.build_column_operations(a,b)
|
47
47
|
|
48
|
-
ops.first.
|
48
|
+
expect(ops.first).to eql("set_column_allow_null :foo, false")
|
49
49
|
end
|
50
50
|
|
51
51
|
it "should return a ChangeColumn operation to set the default if the default value is different" do
|
@@ -53,7 +53,7 @@ describe "Sequel::Schema::AlterTableOperations#build_column_operations" do
|
|
53
53
|
b = build_column(:name => :foo, :column_type => :integer, :default => 2)
|
54
54
|
ops = @subject.build_column_operations(a,b)
|
55
55
|
|
56
|
-
ops.first.
|
56
|
+
expect(ops.first).to eql("set_column_default :foo, 2")
|
57
57
|
end
|
58
58
|
|
59
59
|
it "should only return 1 operation if the default and other values are different" do
|
@@ -61,8 +61,8 @@ describe "Sequel::Schema::AlterTableOperations#build_column_operations" do
|
|
61
61
|
b = build_column(:name => :foo, :column_type => :smallint, :default => 2)
|
62
62
|
ops = @subject.build_column_operations(a,b)
|
63
63
|
|
64
|
-
ops.size.
|
65
|
-
ops.first.
|
64
|
+
expect(ops.size).to eql(1)
|
65
|
+
expect(ops.first).to eql("set_column_type :foo, :smallint, :default => 2")
|
66
66
|
end
|
67
67
|
|
68
68
|
it "should return a ChangeColumn operation if the elements are different" do
|
@@ -70,7 +70,7 @@ describe "Sequel::Schema::AlterTableOperations#build_column_operations" do
|
|
70
70
|
b = build_column(:name => :foo, :column_type => :enum, :elements => ["A", "B"])
|
71
71
|
ops = @subject.build_column_operations(a,b)
|
72
72
|
|
73
|
-
ops.first.
|
73
|
+
expect(ops.first).to eql("set_column_type :foo, :enum, :default => nil, :elements => [\"A\", \"B\"]")
|
74
74
|
end
|
75
75
|
end
|
76
76
|
|
@@ -82,7 +82,7 @@ describe "Sequel::Schema::AlterTableOperations.build" do
|
|
82
82
|
:columns => [build_column(:name => :foo, :column_type => :integer)]}
|
83
83
|
ops = Sequel::Schema::AlterTableOperations.build(table_a,table_b)
|
84
84
|
|
85
|
-
ops.
|
85
|
+
expect(ops).to eql([])
|
86
86
|
end
|
87
87
|
|
88
88
|
it "should return an add column operation if the column is new" do
|
@@ -92,8 +92,8 @@ describe "Sequel::Schema::AlterTableOperations.build" do
|
|
92
92
|
:columns => [build_column(:name => :foo, :column_type => :integer)]}
|
93
93
|
ops = Sequel::Schema::AlterTableOperations.build(table_a,table_b)
|
94
94
|
|
95
|
-
ops.size.
|
96
|
-
ops.first.
|
95
|
+
expect(ops.size).to eql(1)
|
96
|
+
expect(ops.first).to match(/add_column/)
|
97
97
|
end
|
98
98
|
|
99
99
|
it "should return a drop column operation if the column has been removed" do
|
@@ -103,8 +103,8 @@ describe "Sequel::Schema::AlterTableOperations.build" do
|
|
103
103
|
:columns => []}
|
104
104
|
ops = Sequel::Schema::AlterTableOperations.build(table_a,table_b)
|
105
105
|
|
106
|
-
ops.size.
|
107
|
-
ops.first.
|
106
|
+
expect(ops.size).to eql(1)
|
107
|
+
expect(ops.first).to match(/drop_column/)
|
108
108
|
end
|
109
109
|
|
110
110
|
it "should return a change column operation if columns are different" do
|
@@ -114,8 +114,8 @@ describe "Sequel::Schema::AlterTableOperations.build" do
|
|
114
114
|
:columns => [build_column(:name => :foo, :column_type => :smallint)]}
|
115
115
|
ops = Sequel::Schema::AlterTableOperations.build(table_a,table_b)
|
116
116
|
|
117
|
-
ops.size.
|
118
|
-
ops.first.
|
117
|
+
expect(ops.size).to eql(1)
|
118
|
+
expect(ops.first).to match(/set_column/)
|
119
119
|
end
|
120
120
|
|
121
121
|
it "should not output a drop index statement in #change if the index's column is also removed" do
|
@@ -125,7 +125,7 @@ describe "Sequel::Schema::AlterTableOperations.build" do
|
|
125
125
|
table_b = {:name => :example_table, :indexes => {}, :columns => []}
|
126
126
|
ops = Sequel::Schema::AlterTableOperations.build(table_a,table_b)
|
127
127
|
|
128
|
-
ops.last.
|
128
|
+
expect(ops.last).to be_nil
|
129
129
|
end
|
130
130
|
|
131
131
|
it "should not output an add_index statement if there is nothing to be done" do
|
@@ -135,6 +135,6 @@ describe "Sequel::Schema::AlterTableOperations.build" do
|
|
135
135
|
table_b = {:name => :example_table, :indexes => {:foo_idx => {:columns => [:foo]}}, :columns => []}
|
136
136
|
|
137
137
|
ops = Sequel::Schema::AlterTableOperations.build(table_a,table_b)
|
138
|
-
ops.
|
138
|
+
expect(ops).to eql([])
|
139
139
|
end
|
140
140
|
end
|
data/spec/db_column_spec.rb
CHANGED
@@ -7,115 +7,114 @@ describe Sequel::Schema::DbColumn do
|
|
7
7
|
end
|
8
8
|
|
9
9
|
it "should return a #define_statement" do
|
10
|
-
@column.define_statement.
|
10
|
+
expect(@column.define_statement).to eql("integer :foo, :null => false, :default => 10, :unsigned => true, :size => 10")
|
11
11
|
end
|
12
12
|
|
13
13
|
it "should return a primary_key invocation if single_primary_key is set and the column is an integer" do
|
14
14
|
@column.single_primary_key = true
|
15
|
-
@column.define_statement.
|
15
|
+
expect(@column.define_statement).to eql("primary_key :foo, :type => :integer, :null => false, :default => 10, :unsigned => true, :size => 10")
|
16
16
|
end
|
17
17
|
|
18
18
|
it "should return a #drop_statement" do
|
19
|
-
@column.drop_statement.
|
19
|
+
expect(@column.drop_statement).to eql("drop_column :foo")
|
20
20
|
end
|
21
21
|
|
22
22
|
it "should return an #add_statement" do
|
23
|
-
@column.add_statement.
|
23
|
+
expect(@column.add_statement).to eql("add_column :foo, :integer, :null => false, :default => 10, :unsigned => true, :size => 10")
|
24
24
|
end
|
25
25
|
|
26
26
|
it "should return a #change_null statement" do
|
27
|
-
@column.change_null_statement.
|
27
|
+
expect(@column.change_null_statement).to eql("set_column_allow_null :foo, false")
|
28
28
|
end
|
29
29
|
|
30
30
|
it "should return a #change_default statement" do
|
31
|
-
@column.change_default_statement.
|
31
|
+
expect(@column.change_default_statement).to eql("set_column_default :foo, 10")
|
32
32
|
end
|
33
33
|
|
34
34
|
it "should return a #change_type statement" do
|
35
|
-
@column.change_type_statement.
|
35
|
+
expect(@column.change_type_statement).to eql("set_column_type :foo, :integer, :default => 10, :unsigned => true, :size => 10")
|
36
36
|
end
|
37
37
|
|
38
38
|
it "should be diffable with another DbColumn" do
|
39
39
|
other = Sequel::Schema::DbColumn.new(:foo, :smallint, false, 10, true, 10, nil)
|
40
|
-
@column.diff(other).
|
40
|
+
expect(@column.diff(other)).to eql([:column_type].to_set)
|
41
41
|
|
42
42
|
other = Sequel::Schema::DbColumn.new(:foo, :integer, true, 11, true, 10, nil)
|
43
|
-
@column.diff(other).
|
43
|
+
expect(@column.diff(other)).to eql([:null, :default].to_set)
|
44
44
|
end
|
45
45
|
|
46
46
|
it "should not consider allowing null being nil different from false" do
|
47
47
|
a = Sequel::Schema::DbColumn.new(:foo, :smallint, false, 10, true, 10, nil)
|
48
48
|
b = Sequel::Schema::DbColumn.new(:foo, :smallint, nil, 10, true, 10, nil)
|
49
|
-
a.diff(b).
|
50
|
-
b.diff(a).
|
49
|
+
expect(a.diff(b)).to be_empty
|
50
|
+
expect(b.diff(a)).to be_empty
|
51
51
|
end
|
52
52
|
|
53
53
|
it "should not consider size to be different if one of the sizes is nil" do
|
54
54
|
a = Sequel::Schema::DbColumn.new(:foo, :smallint, false, 10, true, 10, nil)
|
55
55
|
b = Sequel::Schema::DbColumn.new(:foo, :smallint, false, 10, true, nil, nil)
|
56
|
-
a.diff(b).
|
57
|
-
b.diff(a).
|
56
|
+
expect(a.diff(b)).to be_empty
|
57
|
+
expect(b.diff(a)).to be_empty
|
58
58
|
end
|
59
59
|
|
60
60
|
it "should not consider 0 to be different from null if the column does not allow nulls" do
|
61
61
|
a = Sequel::Schema::DbColumn.new(:foo, :smallint, false, 0, true, 10, nil)
|
62
62
|
b = Sequel::Schema::DbColumn.new(:foo, :smallint, false, nil, true, nil, nil)
|
63
|
-
a.diff(b).
|
64
|
-
b.diff(a).
|
63
|
+
expect(a.diff(b)).to be_empty
|
64
|
+
expect(b.diff(a)).to be_empty
|
65
65
|
end
|
66
66
|
|
67
67
|
it "should consider 0 to be different from null if the column does allow nulls" do
|
68
68
|
a = Sequel::Schema::DbColumn.new(:foo, :smallint, true, 0, true, 10, nil)
|
69
69
|
b = Sequel::Schema::DbColumn.new(:foo, :smallint, true, nil, true, nil, nil)
|
70
|
-
a.diff(b).
|
71
|
-
b.diff(a).
|
70
|
+
expect(a.diff(b)).to eql([:default].to_set)
|
71
|
+
expect(b.diff(a)).to eql([:default].to_set)
|
72
72
|
end
|
73
73
|
|
74
74
|
it "should consider 1 to be different from null" do
|
75
75
|
a = Sequel::Schema::DbColumn.new(:foo, :smallint, false, 1, true, 10, nil)
|
76
76
|
b = Sequel::Schema::DbColumn.new(:foo, :smallint, false, nil, true, nil, nil)
|
77
|
-
a.diff(b).
|
78
|
-
b.diff(a).
|
77
|
+
expect(a.diff(b)).to eql([:default].to_set)
|
78
|
+
expect(b.diff(a)).to eql([:default].to_set)
|
79
79
|
end
|
80
80
|
|
81
81
|
it "should not consider '' to be different from null if the column does not allow nulls" do
|
82
82
|
a = Sequel::Schema::DbColumn.new(:foo, :varchar, false, '', true, 10, nil)
|
83
83
|
b = Sequel::Schema::DbColumn.new(:foo, :varchar, false, nil, true, nil, nil)
|
84
|
-
a.diff(b).
|
85
|
-
b.diff(a).
|
84
|
+
expect(a.diff(b)).to be_empty
|
85
|
+
expect(b.diff(a)).to be_empty
|
86
86
|
end
|
87
87
|
|
88
88
|
it "should consider '' to be different from null if the column allows null" do
|
89
89
|
a = Sequel::Schema::DbColumn.new(:foo, :varchar, true, '', true, 10, nil)
|
90
90
|
b = Sequel::Schema::DbColumn.new(:foo, :varchar, true, nil, true, nil, nil)
|
91
|
-
a.diff(b).
|
92
|
-
b.diff(a).
|
91
|
+
expect(a.diff(b)).to eql([:default].to_set)
|
92
|
+
expect(b.diff(a)).to eql([:default].to_set)
|
93
93
|
end
|
94
94
|
|
95
95
|
it "should consider columns with different elements to be different" do
|
96
96
|
a = Sequel::Schema::DbColumn.new(:foo, :enum, true, nil, true, nil, ["A"])
|
97
97
|
b = Sequel::Schema::DbColumn.new(:foo, :enum, true, nil, true, nil, ["A", "B"])
|
98
|
-
a.diff(b).
|
99
|
-
b.diff(a).
|
98
|
+
expect(a.diff(b)).to eql([:elements].to_set)
|
99
|
+
expect(b.diff(a)).to eql([:elements].to_set)
|
100
100
|
end
|
101
101
|
|
102
102
|
it "should cast decimal defaults to the correct number" do
|
103
103
|
a = Sequel::Schema::DbColumn.new(:foo, :decimal, true, '0.00', true, [4,2], nil)
|
104
104
|
b = Sequel::Schema::DbColumn.new(:foo, :decimal, true, 0, true, [4,2], nil)
|
105
105
|
|
106
|
-
a.diff(b).
|
107
|
-
b.diff(a).
|
106
|
+
expect(a.diff(b)).to eql(Set.new)
|
107
|
+
expect(b.diff(a)).to eql(Set.new)
|
108
108
|
end
|
109
109
|
|
110
110
|
it "should output BigDecimal correctly in a #define_statement" do
|
111
|
-
Sequel::Schema::DbColumn.new(:foo, :decimal, false, '1.1', true, [4,2], nil).
|
112
|
-
define_statement.should == "decimal :foo, :null => false, :default => BigDecimal.new('1.1'), :unsigned => true, :size => [4, 2]"
|
111
|
+
expect(Sequel::Schema::DbColumn.new(:foo, :decimal, false, '1.1', true, [4,2], nil).define_statement).to eql("decimal :foo, :null => false, :default => BigDecimal.new('1.1'), :unsigned => true, :size => [4, 2]")
|
113
112
|
end
|
114
113
|
|
115
114
|
it "should be buildable from a Hash" do
|
116
|
-
Sequel::Schema::DbColumn.build_from_hash(:name => "foo",
|
117
|
-
:column_type => "integer").column_type.
|
118
|
-
Sequel::Schema::DbColumn.build_from_hash('name' => "foo",
|
119
|
-
'column_type' => "integer").name.
|
115
|
+
expect(Sequel::Schema::DbColumn.build_from_hash(:name => "foo",
|
116
|
+
:column_type => "integer").column_type).to eql("integer")
|
117
|
+
expect(Sequel::Schema::DbColumn.build_from_hash('name' => "foo",
|
118
|
+
'column_type' => "integer").name).to eql("foo")
|
120
119
|
end
|
121
120
|
end
|
data/spec/db_index_spec.rb
CHANGED
@@ -2,79 +2,74 @@ require File.dirname(__FILE__) + "/spec_helper"
|
|
2
2
|
|
3
3
|
describe Sequel::Schema::DbIndex do
|
4
4
|
it "should have a name" do
|
5
|
-
Sequel::Schema::DbIndex.new('foo_index', :foo).name.
|
5
|
+
expect(Sequel::Schema::DbIndex.new('foo_index', :foo).name).to eql(:foo_index)
|
6
6
|
end
|
7
7
|
|
8
8
|
it "can have columns" do
|
9
|
-
Sequel::Schema::DbIndex.new('foo_index', [:foo, :bar]).columns.
|
9
|
+
expect(Sequel::Schema::DbIndex.new('foo_index', [:foo, :bar]).columns).to eql([:foo, :bar])
|
10
10
|
end
|
11
11
|
|
12
12
|
it "converts a single column symbol to a 1 element array of columns" do
|
13
|
-
Sequel::Schema::DbIndex.new('foo_index', :foo).columns.
|
13
|
+
expect(Sequel::Schema::DbIndex.new('foo_index', :foo).columns).to eql([:foo])
|
14
14
|
end
|
15
15
|
|
16
16
|
it "is not unique by default" do
|
17
|
-
Sequel::Schema::DbIndex.new('foo_index', :foo).
|
17
|
+
expect(Sequel::Schema::DbIndex.new('foo_index', :foo)).not_to be_unique
|
18
18
|
end
|
19
19
|
|
20
20
|
it "can be unique" do
|
21
|
-
Sequel::Schema::DbIndex.new('foo_index', :foo, true).
|
21
|
+
expect(Sequel::Schema::DbIndex.new('foo_index', :foo, true)).to be_unique
|
22
22
|
end
|
23
23
|
|
24
24
|
it "should respond to multi_column?" do
|
25
|
-
Sequel::Schema::DbIndex.new('foo_index', :foo, true).
|
26
|
-
Sequel::Schema::DbIndex.new('foo_index', [:foo, :bar], true).
|
25
|
+
expect(Sequel::Schema::DbIndex.new('foo_index', :foo, true)).not_to be_multi_column
|
26
|
+
expect(Sequel::Schema::DbIndex.new('foo_index', [:foo, :bar], true)).to be_multi_column
|
27
27
|
end
|
28
28
|
|
29
29
|
it "should be equal when compared with ==" do
|
30
30
|
i1 = Sequel::Schema::DbIndex.new('foo_idx', :foo, true)
|
31
31
|
|
32
|
-
i1.
|
33
|
-
i1.
|
34
|
-
i1.
|
35
|
-
i1.
|
36
|
-
i1.
|
32
|
+
expect(i1).to eql(Sequel::Schema::DbIndex.new('foo_idx', :foo, true))
|
33
|
+
expect(i1).to eql(Sequel::Schema::DbIndex.new('foo_idx', [:foo], true))
|
34
|
+
expect(i1).to_not eql(Sequel::Schema::DbIndex.new('foo_idx', :foo, false))
|
35
|
+
expect(i1).to_not eql(Sequel::Schema::DbIndex.new('foo', :foo, true))
|
36
|
+
expect(i1).to_not eql(Sequel::Schema::DbIndex.new('foo_idx', :bar, true))
|
37
37
|
end
|
38
38
|
|
39
39
|
it "should be equal when compared with eql?" do
|
40
40
|
i1 = Sequel::Schema::DbIndex.new('foo_idx', :foo, true)
|
41
41
|
|
42
|
-
i1.hash.
|
43
|
-
i1.
|
42
|
+
expect(i1.hash).to eql(Sequel::Schema::DbIndex.new('foo_idx', :foo, true).hash)
|
43
|
+
expect(i1).to be_eql(Sequel::Schema::DbIndex.new('foo_idx', :foo, true))
|
44
44
|
end
|
45
45
|
|
46
46
|
it "should ensure nil as unique is converted to false" do
|
47
|
-
([Sequel::Schema::DbIndex.new(:foo_idx, :foo, :unique => nil)] - [Sequel::Schema::DbIndex.new(:foo_idx, :foo, :unique => false)]).
|
47
|
+
expect(([Sequel::Schema::DbIndex.new(:foo_idx, :foo, :unique => nil)] - [Sequel::Schema::DbIndex.new(:foo_idx, :foo, :unique => false)])).to eql([])
|
48
48
|
end
|
49
49
|
|
50
50
|
it "can be built from a hash returned by Sequel::Database#indexes" do
|
51
51
|
hsh = {:foo_idx => {:columns => [:foo], :unique => true}}
|
52
|
-
Sequel::Schema::DbIndex.build_from_hash(hsh).
|
53
|
-
[Sequel::Schema::DbIndex.new(:foo_idx, :foo, true)]
|
52
|
+
expect(Sequel::Schema::DbIndex.build_from_hash(hsh)).
|
53
|
+
to eql([Sequel::Schema::DbIndex.new(:foo_idx, :foo, true)])
|
54
54
|
end
|
55
55
|
|
56
56
|
it "should have a define statement" do
|
57
|
-
Sequel::Schema::DbIndex.new(:foo_idx, :foo, true).define_statement.
|
58
|
-
"index :foo, :name => :foo_idx, :unique => true"
|
57
|
+
expect(Sequel::Schema::DbIndex.new(:foo_idx, :foo, true).define_statement).to eql("index :foo, :name => :foo_idx, :unique => true")
|
59
58
|
end
|
60
59
|
|
61
60
|
it "should have a define statement for multiple columns" do
|
62
|
-
Sequel::Schema::DbIndex.new(:foo_idx, [:foo, :bar], true).define_statement.
|
63
|
-
"index [:foo, :bar], :name => :foo_idx, :unique => true"
|
61
|
+
expect(Sequel::Schema::DbIndex.new(:foo_idx, [:foo, :bar], true).define_statement).to eql("index [:foo, :bar], :name => :foo_idx, :unique => true")
|
64
62
|
end
|
65
63
|
|
66
64
|
it "should not output the unique value if it is false" do
|
67
|
-
Sequel::Schema::DbIndex.new(:foo_idx, :foo).define_statement.
|
68
|
-
"index :foo, :name => :foo_idx"
|
65
|
+
expect(Sequel::Schema::DbIndex.new(:foo_idx, :foo).define_statement).to eql("index :foo, :name => :foo_idx")
|
69
66
|
end
|
70
67
|
|
71
68
|
it "should have an add_index statement" do
|
72
|
-
Sequel::Schema::DbIndex.new(:foo_idx, :foo, true).add_statement.
|
73
|
-
"add_index :foo, :name => :foo_idx, :unique => true"
|
69
|
+
expect(Sequel::Schema::DbIndex.new(:foo_idx, :foo, true).add_statement).to eql("add_index :foo, :name => :foo_idx, :unique => true")
|
74
70
|
end
|
75
71
|
|
76
72
|
it "should have an drop_index statement" do
|
77
|
-
Sequel::Schema::DbIndex.new(:foo_idx, :foo, true).drop_statement.
|
78
|
-
"drop_index :foo, :name => :foo_idx"
|
73
|
+
expect(Sequel::Schema::DbIndex.new(:foo_idx, :foo, true).drop_statement).to eql("drop_index :foo, :name => :foo_idx")
|
79
74
|
end
|
80
75
|
end
|
@@ -2,8 +2,8 @@ require File.dirname(__FILE__) + "/spec_helper"
|
|
2
2
|
|
3
3
|
describe "Sequel::Schema::DbSchemaParser.for_db" do
|
4
4
|
it "should return a DbSchemaParser" do
|
5
|
-
Sequel::Schema::DbSchemaParser.for_db(double(:database)).
|
6
|
-
be_kind_of(Sequel::Schema::DbSchemaParser)
|
5
|
+
expect(Sequel::Schema::DbSchemaParser.for_db(double(:database))).
|
6
|
+
to be_kind_of(Sequel::Schema::DbSchemaParser)
|
7
7
|
end
|
8
8
|
end
|
9
9
|
|
@@ -20,70 +20,80 @@ describe "A hash in the array returned by Sequel::Schema::DbSchemaParser#parse_t
|
|
20
20
|
end
|
21
21
|
|
22
22
|
it "should contain the :name of the column" do
|
23
|
-
@parser.parse_table_schema(@schema).first.name.
|
23
|
+
expect(@parser.parse_table_schema(@schema).first.name).to eql(:example_column)
|
24
24
|
end
|
25
25
|
|
26
26
|
it "should contain the ruby_default as the :default" do
|
27
|
-
@parser.parse_table_schema(@schema).first.default.
|
27
|
+
expect(@parser.parse_table_schema(@schema).first.default).to eql(1)
|
28
28
|
end
|
29
29
|
|
30
30
|
it "should contain whether the column can be :null" do
|
31
|
-
@parser.parse_table_schema(@schema).first.null.
|
31
|
+
expect(@parser.parse_table_schema(@schema).first.null).to eql(true)
|
32
32
|
end
|
33
33
|
|
34
34
|
it "should contain a type of :integer given a int column" do
|
35
35
|
set_db_type "int(11)"
|
36
|
-
@parser.parse_table_schema(@schema).first.column_type.
|
36
|
+
expect(@parser.parse_table_schema(@schema).first.column_type).to eql(:integer)
|
37
37
|
end
|
38
38
|
|
39
39
|
it "should contain a type of :boolean given a tinyint(1) column" do
|
40
40
|
set_db_type "tinyint(1)"
|
41
|
-
@parser.parse_table_schema(@schema).first.column_type.
|
41
|
+
expect(@parser.parse_table_schema(@schema).first.column_type).to eql(:boolean)
|
42
42
|
end
|
43
43
|
|
44
44
|
it "should contain a type of :tinyint given a tinyint column" do
|
45
45
|
set_db_type "tinyint(4)"
|
46
|
-
@parser.parse_table_schema(@schema).first.column_type.
|
46
|
+
expect(@parser.parse_table_schema(@schema).first.column_type).to eql(:tinyint)
|
47
47
|
end
|
48
48
|
|
49
49
|
it "should contain a type of :smallint given a smallint column" do
|
50
50
|
set_db_type "smallint(5)"
|
51
|
-
@parser.parse_table_schema(@schema).first.column_type.
|
51
|
+
expect(@parser.parse_table_schema(@schema).first.column_type).to eql(:smallint)
|
52
52
|
end
|
53
53
|
|
54
54
|
it "should contain a type of :mediumint given a mediumint column" do
|
55
55
|
set_db_type "mediumint(5)"
|
56
|
-
@parser.parse_table_schema(@schema).first.column_type.
|
56
|
+
expect(@parser.parse_table_schema(@schema).first.column_type).to eql(:mediumint)
|
57
57
|
end
|
58
58
|
|
59
59
|
it "should contain a type of :bigint given a bigint column" do
|
60
60
|
set_db_type "bigint(10)"
|
61
|
-
@parser.parse_table_schema(@schema).first.column_type.
|
61
|
+
expect(@parser.parse_table_schema(@schema).first.column_type).to eql(:bigint)
|
62
|
+
end
|
63
|
+
|
64
|
+
it "should contain a type of :decimal given a numeric(x,y) column" do
|
65
|
+
set_db_type "numeric(3,4)"
|
66
|
+
expect(@parser.parse_table_schema(@schema).first.column_type).to eql(:decimal)
|
67
|
+
end
|
68
|
+
|
69
|
+
it "should contain a type of :char given a character column" do
|
70
|
+
set_db_type "character(3)"
|
71
|
+
expect(@parser.parse_table_schema(@schema).first.column_type).to eql(:char)
|
62
72
|
end
|
63
73
|
|
64
74
|
it "should contain a :size attribute for text-like columns" do
|
65
75
|
set_db_type "varchar(20)", :string
|
66
|
-
@parser.parse_table_schema(@schema).first.size.
|
76
|
+
expect(@parser.parse_table_schema(@schema).first.size).to eql(20)
|
67
77
|
end
|
68
78
|
|
69
79
|
it "should contain a :size attribute for decimal columns" do
|
70
80
|
set_db_type "decimal(14,5)"
|
71
|
-
@parser.parse_table_schema(@schema).first.size.
|
81
|
+
expect(@parser.parse_table_schema(@schema).first.size).to eql([14,5])
|
72
82
|
end
|
73
83
|
|
74
84
|
it "should contain a :size attribute for binary columns" do
|
75
85
|
set_db_type "binary(16)", :blob
|
76
|
-
@parser.parse_table_schema(@schema).first.size.
|
86
|
+
expect(@parser.parse_table_schema(@schema).first.size).to eql(16)
|
77
87
|
end
|
78
88
|
|
79
89
|
it "should contain :unsigned false if a numeric column is not unsigned" do
|
80
90
|
set_db_type "int(10)"
|
81
|
-
@parser.parse_table_schema(@schema).first.unsigned.
|
91
|
+
expect(@parser.parse_table_schema(@schema).first.unsigned).to eql(false)
|
82
92
|
end
|
83
93
|
|
84
94
|
it "should contain :unsigned true if an integer column is unsigned" do
|
85
95
|
set_db_type "int(10) unsigned"
|
86
|
-
@parser.parse_table_schema(@schema).first.unsigned.
|
96
|
+
expect(@parser.parse_table_schema(@schema).first.unsigned).to eql(true)
|
87
97
|
end
|
88
98
|
|
89
99
|
it "should contain :unsigned true if a decimal column is unsigned" do
|
@@ -95,19 +105,35 @@ describe "A hash in the array returned by Sequel::Schema::DbSchemaParser#parse_t
|
|
95
105
|
:db_type => "decimal(10,2) unsigned",
|
96
106
|
:allow_null => true }]]
|
97
107
|
|
98
|
-
@parser.parse_table_schema(@schema).first.unsigned.
|
108
|
+
expect(@parser.parse_table_schema(@schema).first.unsigned).to eql(true)
|
99
109
|
end
|
100
110
|
|
101
111
|
it "should not contain an :unsigned value if not a numeric column" do
|
102
112
|
set_db_type "varchar(10)", :string
|
103
|
-
@parser.parse_table_schema(@schema).first.unsigned.
|
113
|
+
expect(@parser.parse_table_schema(@schema).first.unsigned).to eql(nil)
|
104
114
|
end
|
105
115
|
|
106
116
|
it "should contain the elements of an enum column" do
|
107
117
|
set_db_type "enum('foo','bar')"
|
108
|
-
@parser.parse_table_schema(@schema).first.elements.
|
118
|
+
expect(@parser.parse_table_schema(@schema).first.elements).to eql(['foo', 'bar'])
|
109
119
|
end
|
110
120
|
|
121
|
+
it "should be a varchar if the the db type is character varying" do
|
122
|
+
set_db_type "character varying"
|
123
|
+
expect(@parser.parse_table_schema(@schema).first.column_type).to eql(:varchar)
|
124
|
+
end
|
125
|
+
|
126
|
+
it "should be a timestamp if the the db type is a timestamp without time zone" do
|
127
|
+
set_db_type "timestamp without time zone"
|
128
|
+
expect(@parser.parse_table_schema(@schema).first.column_type).to eql(:timestamp)
|
129
|
+
end
|
130
|
+
|
131
|
+
it "should not have a default for postgres identity columns" do
|
132
|
+
@schema.first.last.merge!(:default => "\"identity\"(123,0)",
|
133
|
+
:ruby_default => nil)
|
134
|
+
expect(@parser.parse_table_schema(@schema).first.default).to be_nil
|
135
|
+
end
|
136
|
+
|
111
137
|
def set_db_type(type, ruby_type=nil)
|
112
138
|
@schema.first.last.merge!(:db_type => type)
|
113
139
|
@schema.first.last.merge!(:type => ruby_type) if ruby_type
|
@@ -117,12 +143,12 @@ end
|
|
117
143
|
describe "Sequel::Schema::DbSchemaParser#parse_db_schema" do
|
118
144
|
it "should extract a list of table definitions from a database" do
|
119
145
|
mock_db = double(:db)
|
120
|
-
mock_db.
|
121
|
-
mock_db.
|
122
|
-
mock_db.
|
146
|
+
expect(mock_db).to receive(:tables).at_least(:once).and_return([:table1])
|
147
|
+
expect(mock_db).to receive(:schema).with(:table1).and_return([])
|
148
|
+
expect(mock_db).to receive(:indexes).with(:table1, :partial => true)
|
123
149
|
|
124
150
|
@parser = Sequel::Schema::DbSchemaParser.for_db(mock_db)
|
125
|
-
@parser.parse_db_schema.keys.
|
151
|
+
expect(@parser.parse_db_schema.keys).to eql([:table1])
|
126
152
|
end
|
127
153
|
end
|
128
154
|
|
@@ -139,7 +165,7 @@ describe "Parsing a text column" do
|
|
139
165
|
:db_type => "text",
|
140
166
|
:allow_null => true }]]
|
141
167
|
|
142
|
-
|
168
|
+
expect { parser.parse_table_schema(schema) }.not_to raise_error
|
143
169
|
end
|
144
170
|
end
|
145
171
|
|
@@ -154,7 +180,7 @@ describe "Parsing an enum column" do
|
|
154
180
|
:db_type => "enum('foo (bar)', 'baz')",
|
155
181
|
:allow_null => true }]]
|
156
182
|
|
157
|
-
|
183
|
+
expect { parser.parse_table_schema(schema) }.not_to raise_error
|
158
184
|
end
|
159
185
|
|
160
186
|
it "should correctly parse elements with escaped '' in them" do
|
@@ -168,6 +194,6 @@ describe "Parsing an enum column" do
|
|
168
194
|
:allow_null => true }]]
|
169
195
|
|
170
196
|
|
171
|
-
parser.parse_table_schema(schema).first.elements.
|
197
|
+
expect(parser.parse_table_schema(schema).first.elements).to eql(["don't"])
|
172
198
|
end
|
173
199
|
end
|
@@ -4,8 +4,8 @@ describe Sequel::MigrationBuilder do
|
|
4
4
|
|
5
5
|
it "should return nil if the table hash is empty and the database has no tables" do
|
6
6
|
mock_db = double(:database)
|
7
|
-
mock_db.
|
8
|
-
Sequel::MigrationBuilder.new(mock_db).generate_migration({}).
|
7
|
+
expect(mock_db).to receive(:tables).at_least(:once).and_return([])
|
8
|
+
expect(Sequel::MigrationBuilder.new(mock_db).generate_migration({})).to be_nil
|
9
9
|
end
|
10
10
|
|
11
11
|
it "should produce a simple migration string given a database connection and a hash of tables" do
|
@@ -25,8 +25,8 @@ end
|
|
25
25
|
END
|
26
26
|
|
27
27
|
mock_db = double(:database)
|
28
|
-
mock_db.
|
29
|
-
Sequel::MigrationBuilder.new(mock_db).generate_migration(tables).
|
28
|
+
expect(mock_db).to receive(:tables).at_least(:once).and_return([])
|
29
|
+
expect(Sequel::MigrationBuilder.new(mock_db).generate_migration(tables)).to eql(expected)
|
30
30
|
end
|
31
31
|
|
32
32
|
it "should produce statements for multiple new tables" do
|
@@ -55,13 +55,13 @@ end
|
|
55
55
|
END
|
56
56
|
|
57
57
|
mock_db = double(:database)
|
58
|
-
mock_db.
|
59
|
-
Sequel::MigrationBuilder.new(mock_db).generate_migration(tables).
|
58
|
+
expect(mock_db).to receive(:tables).at_least(:once).and_return([])
|
59
|
+
expect(Sequel::MigrationBuilder.new(mock_db).generate_migration(tables)).to eql(expected)
|
60
60
|
end
|
61
61
|
|
62
62
|
it "should add the primary key of the table" do
|
63
63
|
mock_db = double(:database)
|
64
|
-
mock_db.
|
64
|
+
expect(mock_db).to receive(:tables).at_least(:once).and_return([])
|
65
65
|
table = {
|
66
66
|
:primary_key => :foo,
|
67
67
|
:columns => [{:name => :foo, :column_type => :integer}, {:name => :bar, :column_type => :varchar}]
|
@@ -74,13 +74,12 @@ create_table :example_table do
|
|
74
74
|
end
|
75
75
|
END
|
76
76
|
|
77
|
-
Sequel::MigrationBuilder.new(mock_db).create_table_statement(:example_table, table).join("\n").
|
78
|
-
should == expected.strip
|
77
|
+
expect(Sequel::MigrationBuilder.new(mock_db).create_table_statement(:example_table, table).join("\n")).to eql(expected.strip)
|
79
78
|
end
|
80
79
|
|
81
80
|
it "should add the non-integer primary key of the table" do
|
82
81
|
mock_db = double(:database)
|
83
|
-
mock_db.
|
82
|
+
expect(mock_db).to receive(:tables).at_least(:once).and_return([])
|
84
83
|
table = {
|
85
84
|
:primary_key => :foo,
|
86
85
|
:columns => [{:name => :foo, :column_type => :binary}, {:name => :bar, :column_type => :varchar}]
|
@@ -95,13 +94,12 @@ create_table :example_table do
|
|
95
94
|
end
|
96
95
|
END
|
97
96
|
|
98
|
-
Sequel::MigrationBuilder.new(mock_db).create_table_statement(:example_table, table).join("\n").
|
99
|
-
should == expected.strip
|
97
|
+
expect(Sequel::MigrationBuilder.new(mock_db).create_table_statement(:example_table, table).join("\n")).to eql(expected.strip)
|
100
98
|
end
|
101
99
|
|
102
100
|
it "should add the table options do the create_table statement" do
|
103
101
|
mock_db = double(:database)
|
104
|
-
mock_db.
|
102
|
+
expect(mock_db).to receive(:tables).at_least(:once).and_return([])
|
105
103
|
table = {
|
106
104
|
:table_options => {:engine => "myisam"},
|
107
105
|
:columns => [{:name => :foo, :column_type => :integer}]
|
@@ -113,13 +111,12 @@ create_table :example_table, :engine => "myisam" do
|
|
113
111
|
end
|
114
112
|
END
|
115
113
|
|
116
|
-
Sequel::MigrationBuilder.new(mock_db).create_table_statement(:example_table, table).join("\n").
|
117
|
-
should == expected.strip
|
114
|
+
expect(Sequel::MigrationBuilder.new(mock_db).create_table_statement(:example_table, table).join("\n")).to eql(expected.strip)
|
118
115
|
end
|
119
116
|
|
120
117
|
it "should add indexes to the create_table statement" do
|
121
118
|
mock_db = double(:database)
|
122
|
-
mock_db.
|
119
|
+
expect(mock_db).to receive(:tables).at_least(:once).and_return([])
|
123
120
|
table = {
|
124
121
|
:indexes => {:foo_index => {:columns => :foo, :unique => true}},
|
125
122
|
:columns => [{:name => :foo, :column_type => :integer}]
|
@@ -133,8 +130,12 @@ create_table :example_table do
|
|
133
130
|
end
|
134
131
|
END
|
135
132
|
|
136
|
-
Sequel::MigrationBuilder.
|
137
|
-
|
133
|
+
result = Sequel::MigrationBuilder.
|
134
|
+
new(mock_db).
|
135
|
+
create_table_statement(:example_table, table).
|
136
|
+
join("\n")
|
137
|
+
|
138
|
+
expect(result).to eql(expected.strip)
|
138
139
|
end
|
139
140
|
|
140
141
|
context "when a table needs to be altered" do
|
@@ -144,9 +145,9 @@ END
|
|
144
145
|
:columns => [{:name => :foo, :column_type => :integer}, {:name => :bar, :column_type => :varchar}]}
|
145
146
|
}
|
146
147
|
@mock_db = double(:database)
|
147
|
-
@mock_db.
|
148
|
-
@mock_db.
|
149
|
-
@mock_db.
|
148
|
+
expect(@mock_db).to receive(:tables).at_least(:once).and_return([:example_table])
|
149
|
+
expect(@mock_db).to receive(:indexes).with(:example_table, :partial => true).and_return({})
|
150
|
+
expect(@mock_db).to receive(:schema).with(:example_table).and_return([[:foo, {:type => :integer, :db_type => "smallint(5) unsigned", :allow_null => true, :ruby_default => 10}]])
|
150
151
|
|
151
152
|
end
|
152
153
|
|
@@ -161,8 +162,7 @@ change do
|
|
161
162
|
end
|
162
163
|
end
|
163
164
|
END
|
164
|
-
Sequel::MigrationBuilder.new(@mock_db).
|
165
|
-
generate_migration_body(@tables).join("\n").should == expected.strip
|
165
|
+
expect(Sequel::MigrationBuilder.new(@mock_db).generate_migration_body(@tables).join("\n")).to eql(expected.strip)
|
166
166
|
end
|
167
167
|
|
168
168
|
it "should return separate alter table statements when option is set" do
|
@@ -185,8 +185,7 @@ change do
|
|
185
185
|
end
|
186
186
|
end
|
187
187
|
END
|
188
|
-
Sequel::MigrationBuilder.new(@mock_db, :separate_alter_table_statements => true).
|
189
|
-
generate_migration_body(@tables).join("\n").should == expected.strip
|
188
|
+
expect(Sequel::MigrationBuilder.new(@mock_db, :separate_alter_table_statements => true).generate_migration_body(@tables).join("\n")).to eql(expected.strip)
|
190
189
|
end
|
191
190
|
|
192
191
|
it "should drop and add columns instead of changing them if immutable_columns is set" do
|
@@ -206,21 +205,7 @@ change do
|
|
206
205
|
end
|
207
206
|
end
|
208
207
|
END
|
209
|
-
Sequel::MigrationBuilder.new(@mock_db, :separate_alter_table_statements => true, :immutable_columns => true).
|
210
|
-
generate_migration_body(tables).join("\n").should == expected.strip
|
208
|
+
expect(Sequel::MigrationBuilder.new(@mock_db, :separate_alter_table_statements => true, :immutable_columns => true).generate_migration_body(tables).join("\n")).to eql(expected.strip)
|
211
209
|
end
|
212
210
|
end
|
213
|
-
|
214
|
-
it "should drop the table if the table exists in the database but not the table hash" do
|
215
|
-
pending # Deal with in a later version.
|
216
|
-
mock_db = double(:database)
|
217
|
-
mock_db.should_receive(:tables).at_least(:once).and_return([:example_table])
|
218
|
-
|
219
|
-
expected = <<-END
|
220
|
-
change do
|
221
|
-
drop_table :example_table
|
222
|
-
end
|
223
|
-
END
|
224
|
-
Sequel::MigrationBuilder.new(mock_db).generate_up({}).join("\n").should == expected
|
225
|
-
end
|
226
211
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sequel_migration_builder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Roland Swingler
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-09-
|
11
|
+
date: 2014-09-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sequel
|