sequel_migration_builder 0.2.1 → 0.2.2
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 +5 -0
- data/VERSION +1 -1
- data/lib/sequel/schema/db_column.rb +12 -0
- data/lib/sequel/schema/db_schema_parser.rb +2 -2
- data/sequel_migration_builder.gemspec +2 -2
- data/spec/db_column_spec.rb +8 -0
- data/spec/db_schema_parser_spec.rb +14 -0
- metadata +4 -4
data/CHANGELOG
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.2
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'set'
|
2
|
+
require 'bigdecimal'
|
2
3
|
|
3
4
|
module Sequel
|
4
5
|
module Schema
|
@@ -26,6 +27,11 @@ module Sequel
|
|
26
27
|
self.new *members.map {|key| attrs[key] || attrs[key.to_sym] }
|
27
28
|
end
|
28
29
|
|
30
|
+
def initialize(*args)
|
31
|
+
super
|
32
|
+
normalize_default
|
33
|
+
end
|
34
|
+
|
29
35
|
# Returns a Sequel migration statement to define a column in a
|
30
36
|
# create_table block.
|
31
37
|
#
|
@@ -147,6 +153,12 @@ module Sequel
|
|
147
153
|
opts.render
|
148
154
|
end
|
149
155
|
|
156
|
+
def normalize_default
|
157
|
+
if DECIMAL_TYPES.include?(column_type) && ! self[:default].nil?
|
158
|
+
self.default = BigDecimal(self[:default].to_s)
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
150
162
|
# Formats column options in a Sequel migration
|
151
163
|
class OptionBuilder
|
152
164
|
def initialize
|
@@ -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.last[:ruby_default],
|
46
|
+
:default => column.last[:ruby_default] || column.last[:default],
|
47
47
|
:null => column.last[:allow_null],
|
48
48
|
:column_type => type,
|
49
49
|
:unsigned => extract_unsigned(column.last[:db_type], type),
|
@@ -98,7 +98,7 @@ module Sequel
|
|
98
98
|
return unless type == :enum
|
99
99
|
|
100
100
|
match = db_type_string.match(/\((.+)\)/)
|
101
|
-
eval('[' + match[1] + ']') if match[1]
|
101
|
+
eval('[' + match[1].gsub(/''/, "\\\\'") + ']') if match[1]
|
102
102
|
end
|
103
103
|
end
|
104
104
|
end
|
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{sequel_migration_builder}
|
8
|
-
s.version = "0.2.
|
8
|
+
s.version = "0.2.2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Roland Swingler"]
|
12
|
-
s.date = %q{2011-01-
|
12
|
+
s.date = %q{2011-01-14}
|
13
13
|
s.description = %q{Build Sequel Migrations based on the differences between two schemas}
|
14
14
|
s.email = %q{roland.swingler@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
data/spec/db_column_spec.rb
CHANGED
@@ -99,6 +99,14 @@ describe Sequel::Schema::DbColumn do
|
|
99
99
|
b.diff(a).should == [:elements].to_set
|
100
100
|
end
|
101
101
|
|
102
|
+
it "should cast decimal defaults to the correct number" do
|
103
|
+
a = Sequel::Schema::DbColumn.new(:foo, :decimal, true, '0.00', true, [4,2], nil)
|
104
|
+
b = Sequel::Schema::DbColumn.new(:foo, :decimal, true, 0, true, [4,2], nil)
|
105
|
+
|
106
|
+
a.diff(b).should == Set.new
|
107
|
+
b.diff(a).should == Set.new
|
108
|
+
end
|
109
|
+
|
102
110
|
it "should be buildable from a Hash" do
|
103
111
|
Sequel::Schema::DbColumn.build_from_hash(:name => "foo",
|
104
112
|
:column_type => "integer").column_type.should == "integer"
|
@@ -151,4 +151,18 @@ describe "Parsing an enum column" do
|
|
151
151
|
|
152
152
|
lambda { parser.parse_table_schema(schema) }.should_not raise_error(SyntaxError)
|
153
153
|
end
|
154
|
+
|
155
|
+
it "should correctly parse elements with escaped '' in them" do
|
156
|
+
parser = Sequel::Schema::DbSchemaParser.for_db(stub(:database))
|
157
|
+
schema = [[:example_column,
|
158
|
+
{ :type => :enum,
|
159
|
+
:default => nil,
|
160
|
+
:ruby_default => nil,
|
161
|
+
:primary_key => false,
|
162
|
+
:db_type => "enum('don''t')",
|
163
|
+
:allow_null => true }]]
|
164
|
+
|
165
|
+
|
166
|
+
parser.parse_table_schema(schema).first.elements.should == ["don't"]
|
167
|
+
end
|
154
168
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sequel_migration_builder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 19
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 2
|
9
|
-
-
|
10
|
-
version: 0.2.
|
9
|
+
- 2
|
10
|
+
version: 0.2.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Roland Swingler
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-01-
|
18
|
+
date: 2011-01-14 00:00:00 +00:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|