schema_plus 0.3.4 → 0.4.0
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/README.rdoc +1 -0
- data/Rakefile +1 -1
- data/lib/schema_plus/active_record/connection_adapters/abstract_adapter.rb +4 -2
- data/lib/schema_plus/active_record/connection_adapters/mysql_adapter.rb +1 -1
- data/lib/schema_plus/active_record/connection_adapters/sqlite3_adapter.rb +1 -1
- data/lib/schema_plus/active_record/schema_dumper.rb +1 -1
- data/lib/schema_plus/version.rb +1 -1
- data/spec/views_spec.rb +24 -2
- metadata +21 -22
data/README.rdoc
CHANGED
@@ -176,6 +176,7 @@ take advantage of auto-creation of foreign keys, you can re-enable it:
|
|
176
176
|
== History
|
177
177
|
|
178
178
|
* Recent Release notes:
|
179
|
+
* 0.4.0 - add :force for create_view (suggested by greglazarev[https://github.com/greglazarev]). cleanups by betelgeuse[https://github.com/betelgeuse]
|
179
180
|
* 0.3.4 - bug fix: regression causing :default => false to be ignored
|
180
181
|
* 0.3.3 - bug fix: properly handle boolean defaults in mysql
|
181
182
|
* 0.3.2 - bug fix: make sure rake db:schema:load initializes schema_plus
|
data/Rakefile
CHANGED
@@ -49,7 +49,7 @@ task :build_postgresql_databases => 'postgresql:build_databases'
|
|
49
49
|
task :drop_postgresql_databases => 'postgresql:drop_databases'
|
50
50
|
task :rebuild_postgresql_databases => 'postgresql:rebuild_databases'
|
51
51
|
|
52
|
-
MYSQL_DB_USER = 'schema_plus'
|
52
|
+
MYSQL_DB_USER = ENV.fetch('MYSQL_DB_USER', 'schema_plus')
|
53
53
|
namespace :mysql do
|
54
54
|
desc 'Build the MySQL test databases'
|
55
55
|
task :build_databases do
|
@@ -54,8 +54,10 @@ module SchemaPlus
|
|
54
54
|
extend(SchemaPlus::ActiveRecord::ForeignKeys)
|
55
55
|
end
|
56
56
|
|
57
|
-
# Create a view given the SQL definition
|
58
|
-
|
57
|
+
# Create a view given the SQL definition. Specify :force => true
|
58
|
+
# to first drop the view if it already exists.
|
59
|
+
def create_view(view_name, definition, options={})
|
60
|
+
execute "DROP VIEW IF EXISTS #{quote_table_name(view_name)}" if options[:force]
|
59
61
|
execute "CREATE VIEW #{quote_table_name(view_name)} AS #{definition}"
|
60
62
|
end
|
61
63
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module SchemaPlus
|
2
2
|
module ActiveRecord
|
3
3
|
module ConnectionAdapters
|
4
|
-
# SchemaPlus includes a MySQL implementation of the
|
4
|
+
# SchemaPlus includes a MySQL implementation of the AbstractAdapter
|
5
5
|
# extensions. (This works with both the <tt>mysql</t> and
|
6
6
|
# <tt>mysql2</tt> gems.)
|
7
7
|
module MysqlAdapter
|
@@ -53,7 +53,7 @@ module SchemaPlus
|
|
53
53
|
|
54
54
|
@connection.views.each do |view_name|
|
55
55
|
definition = @connection.view_definition(view_name)
|
56
|
-
@table_dumps[view_name] = " create_view #{view_name.inspect}, #{definition.inspect}\n"
|
56
|
+
@table_dumps[view_name] = " create_view #{view_name.inspect}, #{definition.inspect}, :force => true\n"
|
57
57
|
end
|
58
58
|
|
59
59
|
re_view_referent = %r{(?:(?i)FROM|JOIN) \S*\b(#{(@table_dumps.keys).join('|')})\b}
|
data/lib/schema_plus/version.rb
CHANGED
data/spec/views_spec.rb
CHANGED
@@ -47,8 +47,8 @@ describe ActiveRecord do
|
|
47
47
|
|
48
48
|
|
49
49
|
it "should be included in schema dump" do
|
50
|
-
dump.should match(%r{create_view "a_ones", "SELECT .*b.*,.*s.* FROM .*items.* WHERE .*a.* = 1}i)
|
51
|
-
dump.should match(%r{create_view "ab_ones", "SELECT .*s.* FROM .*a_ones.* WHERE .*b.* = 1}i)
|
50
|
+
dump.should match(%r{create_view "a_ones", "SELECT .*b.*,.*s.* FROM .*items.* WHERE .*a.* = 1.*, :force => true}i)
|
51
|
+
dump.should match(%r{create_view "ab_ones", "SELECT .*s.* FROM .*a_ones.* WHERE .*b.* = 1.*, :force => true}i)
|
52
52
|
end
|
53
53
|
|
54
54
|
it "should be included in schema dump in dependency order" do
|
@@ -67,6 +67,28 @@ describe ActiveRecord do
|
|
67
67
|
dump.should_not match(%r{#{connection.quote_table_name(db)}[.]})
|
68
68
|
end
|
69
69
|
|
70
|
+
context "duplicate view creation" do
|
71
|
+
around(:each) do |example|
|
72
|
+
migration.suppress_messages do
|
73
|
+
begin
|
74
|
+
migration.create_view('dupe_me', 'SELECT * FROM items WHERE (a=1)')
|
75
|
+
example.run
|
76
|
+
ensure
|
77
|
+
migration.drop_view('dupe_me')
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
|
83
|
+
it "should raise an error by default" do
|
84
|
+
expect {migration.create_view('dupe_me', 'SELECT * FROM items WHERE (a=2)')}.should raise_error ActiveRecord::StatementInvalid
|
85
|
+
end
|
86
|
+
|
87
|
+
it "should override existing definition if :force true" do
|
88
|
+
migration.create_view('dupe_me', 'SELECT * FROM items WHERE (a=2)', :force => true)
|
89
|
+
connection.view_definition('dupe_me').should =~ %r{WHERE .*a.*=.*2}i
|
90
|
+
end
|
91
|
+
end
|
70
92
|
|
71
93
|
if SchemaPlusHelpers.mysql?
|
72
94
|
context "in mysql" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: schema_plus
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,11 +10,11 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2012-
|
13
|
+
date: 2012-05-09 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rails
|
17
|
-
requirement: &
|
17
|
+
requirement: &70249441590660 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ! '>='
|
@@ -22,10 +22,10 @@ dependencies:
|
|
22
22
|
version: '0'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
25
|
+
version_requirements: *70249441590660
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: valuable
|
28
|
-
requirement: &
|
28
|
+
requirement: &70249441590200 !ruby/object:Gem::Requirement
|
29
29
|
none: false
|
30
30
|
requirements:
|
31
31
|
- - ! '>='
|
@@ -33,10 +33,10 @@ dependencies:
|
|
33
33
|
version: '0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
|
-
version_requirements: *
|
36
|
+
version_requirements: *70249441590200
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: rake
|
39
|
-
requirement: &
|
39
|
+
requirement: &70249441589680 !ruby/object:Gem::Requirement
|
40
40
|
none: false
|
41
41
|
requirements:
|
42
42
|
- - ~>
|
@@ -44,10 +44,10 @@ dependencies:
|
|
44
44
|
version: 0.8.7
|
45
45
|
type: :development
|
46
46
|
prerelease: false
|
47
|
-
version_requirements: *
|
47
|
+
version_requirements: *70249441589680
|
48
48
|
- !ruby/object:Gem::Dependency
|
49
49
|
name: rspec
|
50
|
-
requirement: &
|
50
|
+
requirement: &70249441589180 !ruby/object:Gem::Requirement
|
51
51
|
none: false
|
52
52
|
requirements:
|
53
53
|
- - ! '>='
|
@@ -55,10 +55,10 @@ dependencies:
|
|
55
55
|
version: '0'
|
56
56
|
type: :development
|
57
57
|
prerelease: false
|
58
|
-
version_requirements: *
|
58
|
+
version_requirements: *70249441589180
|
59
59
|
- !ruby/object:Gem::Dependency
|
60
60
|
name: pg
|
61
|
-
requirement: &
|
61
|
+
requirement: &70249441588700 !ruby/object:Gem::Requirement
|
62
62
|
none: false
|
63
63
|
requirements:
|
64
64
|
- - ! '>='
|
@@ -66,10 +66,10 @@ dependencies:
|
|
66
66
|
version: '0'
|
67
67
|
type: :development
|
68
68
|
prerelease: false
|
69
|
-
version_requirements: *
|
69
|
+
version_requirements: *70249441588700
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
71
|
name: mysql
|
72
|
-
requirement: &
|
72
|
+
requirement: &70249441588240 !ruby/object:Gem::Requirement
|
73
73
|
none: false
|
74
74
|
requirements:
|
75
75
|
- - ! '>='
|
@@ -77,10 +77,10 @@ dependencies:
|
|
77
77
|
version: '0'
|
78
78
|
type: :development
|
79
79
|
prerelease: false
|
80
|
-
version_requirements: *
|
80
|
+
version_requirements: *70249441588240
|
81
81
|
- !ruby/object:Gem::Dependency
|
82
82
|
name: sqlite3
|
83
|
-
requirement: &
|
83
|
+
requirement: &70249441587820 !ruby/object:Gem::Requirement
|
84
84
|
none: false
|
85
85
|
requirements:
|
86
86
|
- - ! '>='
|
@@ -88,10 +88,10 @@ dependencies:
|
|
88
88
|
version: '0'
|
89
89
|
type: :development
|
90
90
|
prerelease: false
|
91
|
-
version_requirements: *
|
91
|
+
version_requirements: *70249441587820
|
92
92
|
- !ruby/object:Gem::Dependency
|
93
93
|
name: simplecov
|
94
|
-
requirement: &
|
94
|
+
requirement: &70249441587360 !ruby/object:Gem::Requirement
|
95
95
|
none: false
|
96
96
|
requirements:
|
97
97
|
- - ! '>='
|
@@ -99,10 +99,10 @@ dependencies:
|
|
99
99
|
version: '0'
|
100
100
|
type: :development
|
101
101
|
prerelease: false
|
102
|
-
version_requirements: *
|
102
|
+
version_requirements: *70249441587360
|
103
103
|
- !ruby/object:Gem::Dependency
|
104
104
|
name: simplecov-gem-adapter
|
105
|
-
requirement: &
|
105
|
+
requirement: &70249441586940 !ruby/object:Gem::Requirement
|
106
106
|
none: false
|
107
107
|
requirements:
|
108
108
|
- - ! '>='
|
@@ -110,7 +110,7 @@ dependencies:
|
|
110
110
|
version: '0'
|
111
111
|
type: :development
|
112
112
|
prerelease: false
|
113
|
-
version_requirements: *
|
113
|
+
version_requirements: *70249441586940
|
114
114
|
description: ! 'SchemaPlus is an ActiveRecord extension that provides enhanced capabilities
|
115
115
|
for schema definition and querying, including: enhanced and more DRY index capabilities,
|
116
116
|
support and automation for foreign key constraints, and support for views.'
|
@@ -203,7 +203,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
203
203
|
version: '0'
|
204
204
|
requirements: []
|
205
205
|
rubyforge_project: schema_plus
|
206
|
-
rubygems_version: 1.8.
|
206
|
+
rubygems_version: 1.8.10
|
207
207
|
signing_key:
|
208
208
|
specification_version: 3
|
209
209
|
summary: Enhances ActiveRecord schema mechanism, including more DRY index creation
|
@@ -236,4 +236,3 @@ test_files:
|
|
236
236
|
- spec/support/matchers/reference.rb
|
237
237
|
- spec/support/reference.rb
|
238
238
|
- spec/views_spec.rb
|
239
|
-
has_rdoc:
|