redhillonrails_core 1.1.3 → 1.2.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/.gitignore +1 -0
- data/CHANGELOG +5 -0
- data/Gemfile.lock +15 -14
- data/README.rdoc +8 -2
- data/Rakefile +6 -5
- data/lib/redhillonrails_core.rb +3 -0
- data/lib/redhillonrails_core/active_record/base.rb +1 -1
- data/lib/redhillonrails_core/active_record/connection_adapters/abstract_adapter.rb +2 -2
- data/lib/redhillonrails_core/active_record/connection_adapters/foreign_key_definition.rb +8 -1
- data/lib/redhillonrails_core/active_record/connection_adapters/mysql_adapter.rb +13 -0
- data/lib/redhillonrails_core/active_record/connection_adapters/mysql_adapter_fixes.rb +22 -0
- data/lib/redhillonrails_core/active_record/connection_adapters/schema_statements.rb +16 -0
- data/lib/redhillonrails_core/active_record/connection_adapters/sqlite3_adapter.rb +8 -0
- data/lib/redhillonrails_core/active_record/connection_adapters/table_definition.rb +3 -1
- data/lib/redhillonrails_core/version.rb +1 -1
- data/redhillonrails_core.gemspec +2 -1
- data/spec/connections/mysql/connection.rb +2 -3
- data/spec/connections/mysql2/connection.rb +2 -2
- data/spec/connections/postgresql/connection.rb +1 -1
- data/spec/foreign_key_definition_spec.rb +31 -2
- data/spec/foreign_key_spec.rb +15 -2
- data/spec/table_definition_spec.rb +28 -0
- data/spec/view_spec.rb +41 -0
- metadata +93 -100
data/.gitignore
CHANGED
data/CHANGELOG
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,29 +1,30 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
redhillonrails_core (1.
|
4
|
+
redhillonrails_core (1.2.0)
|
5
5
|
activerecord (>= 2)
|
6
6
|
|
7
7
|
GEM
|
8
8
|
remote: http://rubygems.org/
|
9
9
|
specs:
|
10
|
-
activemodel (3.0.
|
11
|
-
activesupport (= 3.0.
|
10
|
+
activemodel (3.0.9)
|
11
|
+
activesupport (= 3.0.9)
|
12
12
|
builder (~> 2.1.2)
|
13
|
-
i18n (~> 0.
|
14
|
-
activerecord (3.0.
|
15
|
-
activemodel (= 3.0.
|
16
|
-
activesupport (= 3.0.
|
17
|
-
arel (~> 2.0.
|
13
|
+
i18n (~> 0.5.0)
|
14
|
+
activerecord (3.0.9)
|
15
|
+
activemodel (= 3.0.9)
|
16
|
+
activesupport (= 3.0.9)
|
17
|
+
arel (~> 2.0.10)
|
18
18
|
tzinfo (~> 0.3.23)
|
19
|
-
activesupport (3.0.
|
20
|
-
arel (2.0.
|
19
|
+
activesupport (3.0.9)
|
20
|
+
arel (2.0.10)
|
21
21
|
builder (2.1.2)
|
22
22
|
diff-lcs (1.1.2)
|
23
23
|
i18n (0.5.0)
|
24
24
|
mysql (2.8.1)
|
25
|
-
mysql2 (0.2.
|
25
|
+
mysql2 (0.2.11)
|
26
26
|
pg (0.10.1)
|
27
|
+
rake (0.8.7)
|
27
28
|
rspec (2.4.0)
|
28
29
|
rspec-core (~> 2.4.0)
|
29
30
|
rspec-expectations (~> 2.4.0)
|
@@ -35,16 +36,16 @@ GEM
|
|
35
36
|
sqlite3 (1.3.3)
|
36
37
|
sqlite3-ruby (1.3.3)
|
37
38
|
sqlite3 (>= 1.3.3)
|
38
|
-
tzinfo (0.3.
|
39
|
+
tzinfo (0.3.29)
|
39
40
|
|
40
41
|
PLATFORMS
|
41
42
|
ruby
|
42
43
|
|
43
44
|
DEPENDENCIES
|
44
|
-
activerecord (>= 2)
|
45
45
|
mysql
|
46
|
-
mysql2
|
46
|
+
mysql2 (~> 0.2.11)
|
47
47
|
pg
|
48
|
+
rake
|
48
49
|
redhillonrails_core!
|
49
50
|
rspec (~> 2.4.0)
|
50
51
|
sqlite3-ruby (~> 1.3.1)
|
data/README.rdoc
CHANGED
@@ -162,7 +162,12 @@ First you have to fetch sources from github as specs are not inculded in a gem.
|
|
162
162
|
$ bundle exec rake spec
|
163
163
|
|
164
164
|
# to run postgresql specs only
|
165
|
-
$ bundle exec rake spec postgresql:spec
|
165
|
+
$ bundle exec rake spec postgresql:spec
|
166
|
+
|
167
|
+
=== Support
|
168
|
+
|
169
|
+
Don't hesitate to ask questions on our mailing list.
|
170
|
+
http://groups.google.com/group/rails-db
|
166
171
|
|
167
172
|
=== Contributors
|
168
173
|
|
@@ -170,4 +175,5 @@ First you have to fetch sources from github as specs are not inculded in a gem.
|
|
170
175
|
* François Beausoleil - https://github.com/francois
|
171
176
|
* Greg Barnett
|
172
177
|
* Romulo A. Ceccon - https://github.com/romuloceccon
|
173
|
-
|
178
|
+
* Laurynas Butkus - http://lauris.night.lt
|
179
|
+
* Fernando García Samblas - http://nando.lacoctelera.com
|
data/Rakefile
CHANGED
@@ -19,15 +19,16 @@ end
|
|
19
19
|
|
20
20
|
task :default => :spec
|
21
21
|
|
22
|
+
DBNAME = 'rhcore_test'
|
22
23
|
namespace :postgresql do
|
23
24
|
desc 'Build the PostgreSQL test databases'
|
24
25
|
task :build_databases do
|
25
|
-
%x( createdb -E UTF8
|
26
|
+
%x( createdb -E UTF8 #{DBNAME} )
|
26
27
|
end
|
27
28
|
|
28
29
|
desc 'Drop the PostgreSQL test databases'
|
29
30
|
task :drop_databases do
|
30
|
-
%x( dropdb
|
31
|
+
%x( dropdb #{DBNAME} )
|
31
32
|
end
|
32
33
|
|
33
34
|
desc 'Rebuild the PostgreSQL test databases'
|
@@ -38,16 +39,16 @@ task :build_postgresql_databases => 'postgresql:build_databases'
|
|
38
39
|
task :drop_postgresql_databases => 'postgresql:drop_databases'
|
39
40
|
task :rebuild_postgresql_databases => 'postgresql:rebuild_databases'
|
40
41
|
|
41
|
-
MYSQL_DB_USER = '
|
42
|
+
MYSQL_DB_USER = 'rhcore'
|
42
43
|
namespace :mysql do
|
43
44
|
desc 'Build the MySQL test databases'
|
44
45
|
task :build_databases do
|
45
|
-
%x( echo "create DATABASE
|
46
|
+
%x( echo "create DATABASE #{DBNAME} DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_unicode_ci " | mysql --user=#{MYSQL_DB_USER})
|
46
47
|
end
|
47
48
|
|
48
49
|
desc 'Drop the MySQL test databases'
|
49
50
|
task :drop_databases do
|
50
|
-
%x( mysqladmin --user=#{MYSQL_DB_USER} -f drop
|
51
|
+
%x( mysqladmin --user=#{MYSQL_DB_USER} -f drop #{DBNAME} )
|
51
52
|
end
|
52
53
|
|
53
54
|
desc 'Rebuild the MySQL test databases'
|
data/lib/redhillonrails_core.rb
CHANGED
@@ -15,10 +15,12 @@ require 'redhillonrails_core/active_record/connection_adapters/foreign_key_defin
|
|
15
15
|
require 'redhillonrails_core/active_record/connection_adapters/column'
|
16
16
|
require 'redhillonrails_core/active_record/connection_adapters/index_definition'
|
17
17
|
require 'redhillonrails_core/active_record/connection_adapters/mysql_column'
|
18
|
+
require 'redhillonrails_core/active_record/connection_adapters/schema_statements'
|
18
19
|
require 'redhillonrails_core/active_record/connection_adapters/table_definition'
|
19
20
|
|
20
21
|
module RedhillonrailsCore::ActiveRecord::ConnectionAdapters
|
21
22
|
autoload :MysqlAdapter, 'redhillonrails_core/active_record/connection_adapters/mysql_adapter'
|
23
|
+
autoload :MysqlAdapterFixes, 'redhillonrails_core/active_record/connection_adapters/mysql_adapter_fixes'
|
22
24
|
autoload :PostgresqlAdapter, 'redhillonrails_core/active_record/connection_adapters/postgresql_adapter'
|
23
25
|
autoload :Sqlite3Adapter, 'redhillonrails_core/active_record/connection_adapters/sqlite3_adapter'
|
24
26
|
end
|
@@ -30,3 +32,4 @@ ActiveRecord::ConnectionAdapters::IndexDefinition.send(:include, RedhillonrailsC
|
|
30
32
|
ActiveRecord::ConnectionAdapters::TableDefinition.send(:include, RedhillonrailsCore::ActiveRecord::ConnectionAdapters::TableDefinition)
|
31
33
|
ActiveRecord::ConnectionAdapters::Column.send(:include, RedhillonrailsCore::ActiveRecord::ConnectionAdapters::Column)
|
32
34
|
ActiveRecord::ConnectionAdapters::AbstractAdapter.send(:include, RedhillonrailsCore::ActiveRecord::ConnectionAdapters::AbstractAdapter)
|
35
|
+
ActiveRecord::ConnectionAdapters::SchemaStatements.send(:include, RedhillonrailsCore::ActiveRecord::ConnectionAdapters::SchemaStatements)
|
@@ -43,7 +43,7 @@ module RedhillonrailsCore
|
|
43
43
|
end
|
44
44
|
|
45
45
|
def pluralized_table_name(table_name)
|
46
|
-
ActiveRecord::Base.pluralize_table_names ? table_name.to_s.pluralize : table_name
|
46
|
+
::ActiveRecord::Base.pluralize_table_names ? table_name.to_s.pluralize : table_name
|
47
47
|
end
|
48
48
|
|
49
49
|
def indexes
|
@@ -53,11 +53,11 @@ module RedhillonrailsCore
|
|
53
53
|
|
54
54
|
def add_foreign_key(table_name, column_names, references_table_name, references_column_names, options = {})
|
55
55
|
foreign_key = ForeignKeyDefinition.new(options[:name], table_name, column_names, ::ActiveRecord::Migrator.proper_table_name(references_table_name), references_column_names, options[:on_update], options[:on_delete], options[:deferrable])
|
56
|
-
execute "ALTER TABLE #{table_name} ADD #{foreign_key}"
|
56
|
+
execute "ALTER TABLE #{quote_table_name(table_name)} ADD #{foreign_key}"
|
57
57
|
end
|
58
58
|
|
59
59
|
def remove_foreign_key(table_name, foreign_key_name, options = {})
|
60
|
-
execute "ALTER TABLE #{table_name} DROP CONSTRAINT #{foreign_key_name}"
|
60
|
+
execute "ALTER TABLE #{quote_table_name(table_name)} DROP CONSTRAINT #{foreign_key_name}"
|
61
61
|
end
|
62
62
|
|
63
63
|
def drop_table_with_redhillonrails_core(name, options = {})
|
@@ -20,7 +20,14 @@ module RedhillonrailsCore
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def to_sql
|
23
|
-
|
23
|
+
if name
|
24
|
+
sql = "CONSTRAINT #{name} "
|
25
|
+
elsif table_name.present?
|
26
|
+
sql = "CONSTRAINT #{table_name}_#{Array(column_names).join('_')}_fkey "
|
27
|
+
else
|
28
|
+
sql = ""
|
29
|
+
end
|
30
|
+
|
24
31
|
sql << "FOREIGN KEY (#{quoted_column_names.join(", ")}) REFERENCES #{quoted_references_table_name} (#{quoted_references_column_names.join(", ")})"
|
25
32
|
sql << " ON UPDATE #{ACTIONS[on_update]}" if on_update
|
26
33
|
sql << " ON DELETE #{ACTIONS[on_delete]}" if on_delete
|
@@ -2,7 +2,10 @@ module RedhillonrailsCore
|
|
2
2
|
module ActiveRecord
|
3
3
|
module ConnectionAdapters
|
4
4
|
module MysqlAdapter
|
5
|
+
include MysqlAdapterFixes
|
6
|
+
|
5
7
|
def self.included(base)
|
8
|
+
super
|
6
9
|
base.class_eval do
|
7
10
|
alias_method_chain :remove_column, :redhillonrails_core
|
8
11
|
end
|
@@ -72,6 +75,16 @@ module RedhillonrailsCore
|
|
72
75
|
foreign_keys
|
73
76
|
end
|
74
77
|
|
78
|
+
def views(name = nil)
|
79
|
+
views = []
|
80
|
+
execute("SHOW FULL TABLES WHERE TABLE_TYPE='VIEW'", name).each { |row| views << row[0] }
|
81
|
+
views
|
82
|
+
end
|
83
|
+
|
84
|
+
def view_definition(view_name, name = nil)
|
85
|
+
select_one("SHOW CREATE VIEW #{quote_table_name(view_name)}", name)["Create View"]
|
86
|
+
end
|
87
|
+
|
75
88
|
end
|
76
89
|
end
|
77
90
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module RedhillonrailsCore
|
2
|
+
module ActiveRecord
|
3
|
+
module ConnectionAdapters
|
4
|
+
module MysqlAdapterFixes
|
5
|
+
|
6
|
+
# Starting from mysql2 0.2.7 Mysql2IndexDefinition is used.
|
7
|
+
# In 0.2 line it is inculuded in gem itself.
|
8
|
+
# Starting from version 0.3 it has gone to active_record mysql adapter
|
9
|
+
# We have to additionally monkey patch it.
|
10
|
+
def self.included(base)
|
11
|
+
super
|
12
|
+
if defined?(::ActiveRecord::ConnectionAdapters::Mysql2IndexDefinition)
|
13
|
+
::ActiveRecord::ConnectionAdapters::Mysql2IndexDefinition.class_eval do
|
14
|
+
include ::RedhillonrailsCore::ActiveRecord::ConnectionAdapters::IndexDefinition
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module RedhillonrailsCore::ActiveRecord::ConnectionAdapters
|
2
|
+
module SchemaStatements
|
3
|
+
def self.included(base)
|
4
|
+
base.module_eval do
|
5
|
+
alias_method_chain :create_table, :redhillonrails_core
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
def create_table_with_redhillonrails_core(name, options = {})
|
10
|
+
create_table_without_redhillonrails_core(name, options) do |table_definition|
|
11
|
+
table_definition.name = name
|
12
|
+
yield table_definition if block_given?
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -59,6 +59,14 @@ module RedhillonrailsCore
|
|
59
59
|
load_foreign_keys("to_table_name", table_name, name)
|
60
60
|
end
|
61
61
|
|
62
|
+
def views(name = nil)
|
63
|
+
execute("SELECT name FROM sqlite_master WHERE type = 'view'").collect { |definition| definition["name"] }
|
64
|
+
end
|
65
|
+
|
66
|
+
def view_definition(view_name, name = nil)
|
67
|
+
select_one("SELECT sql FROM sqlite_master WHERE type = 'view' AND name = #{quote_table_name(view_name)}")["sql"]
|
68
|
+
end
|
69
|
+
|
62
70
|
private
|
63
71
|
|
64
72
|
def quoted_columns(columns)
|
@@ -16,7 +16,9 @@ module RedhillonrailsCore
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def foreign_key(column_names, references_table_name, references_column_names, options = {})
|
19
|
-
@foreign_keys << ForeignKeyDefinition.new(options[:name],
|
19
|
+
@foreign_keys << ForeignKeyDefinition.new(options[:name], name, column_names,
|
20
|
+
::ActiveRecord::Migrator.proper_table_name(references_table_name), references_column_names,
|
21
|
+
options[:on_update], options[:on_delete], options[:deferrable])
|
20
22
|
self
|
21
23
|
end
|
22
24
|
|
data/redhillonrails_core.gemspec
CHANGED
@@ -24,6 +24,7 @@ Gem::Specification.new do |s|
|
|
24
24
|
s.add_development_dependency("rspec", "~> 2.4.0")
|
25
25
|
s.add_development_dependency("pg")
|
26
26
|
s.add_development_dependency("mysql")
|
27
|
-
s.add_development_dependency("mysql2")
|
27
|
+
s.add_development_dependency("mysql2", "~> 0.2.11")
|
28
28
|
s.add_development_dependency("sqlite3-ruby", "~> 1.3.1")
|
29
|
+
s.add_development_dependency("rake")
|
29
30
|
end
|
@@ -6,13 +6,12 @@ ActiveRecord::Base.logger = Logger.new("debug.log")
|
|
6
6
|
ActiveRecord::Base.configurations = {
|
7
7
|
'redhillonrails' => {
|
8
8
|
:adapter => 'mysql',
|
9
|
-
:database => '
|
10
|
-
:username => '
|
9
|
+
:database => 'rhcore_test',
|
10
|
+
:username => 'rhcore',
|
11
11
|
:encoding => 'utf8',
|
12
12
|
:socket => '/var/run/mysqld/mysqld.sock',
|
13
13
|
:min_messages => 'warning'
|
14
14
|
}
|
15
|
-
|
16
15
|
}
|
17
16
|
|
18
17
|
ActiveRecord::Base.establish_connection 'redhillonrails'
|
@@ -6,8 +6,8 @@ ActiveRecord::Base.logger = Logger.new("debug.log")
|
|
6
6
|
ActiveRecord::Base.configurations = {
|
7
7
|
'redhillonrails' => {
|
8
8
|
:adapter => 'mysql2',
|
9
|
-
:database => '
|
10
|
-
:username => '
|
9
|
+
:database => 'rhcore_test',
|
10
|
+
:username => 'rhcore',
|
11
11
|
:encoding => 'utf8',
|
12
12
|
:socket => '/var/run/mysqld/mysqld.sock',
|
13
13
|
:min_messages => 'warning'
|
@@ -4,12 +4,36 @@ require 'models/user'
|
|
4
4
|
|
5
5
|
describe "Foreign Key definition" do
|
6
6
|
|
7
|
-
let(:
|
7
|
+
let(:fk_definition) { RedhillonrailsCore::ActiveRecord::ConnectionAdapters::ForeignKeyDefinition }
|
8
8
|
|
9
9
|
it "it is dumped to sql with quoted values" do
|
10
|
-
definition
|
10
|
+
definition = fk_definition.new("named_fkey", :posts, :user, :users, :id)
|
11
|
+
definition.to_sql.should == foreign_key_sql("named_fkey")
|
11
12
|
end
|
12
13
|
|
14
|
+
context "when name isn't given" do
|
15
|
+
|
16
|
+
it "builds name from table and column name" do
|
17
|
+
definition = fk_definition.new(nil, :posts, :user, :users, :id)
|
18
|
+
definition.to_sql.should == foreign_key_sql("posts_user_fkey")
|
19
|
+
end
|
20
|
+
|
21
|
+
it "build name with column joined with underscore for compsite key" do
|
22
|
+
definition = fk_definition.new(nil, :orders, [:inquiry_id, :user_id], :inquiries, [:id, :user_id])
|
23
|
+
expected_definition = "CONSTRAINT orders_inquiry_id_user_id_fkey FOREIGN KEY \
|
24
|
+
(#{quote_column_name("inquiry_id")}, #{quote_column_name("user_id")}) \
|
25
|
+
REFERENCES #{quote_table_name("inquiries")} (#{quote_column_name("id")}, #{quote_column_name("user_id")})".squeeze(" ")
|
26
|
+
definition.to_sql.should == expected_definition
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
it "does not include name if no name or table_name is given" do
|
32
|
+
definition = fk_definition.new(nil, nil, :user, :users, :id)
|
33
|
+
definition.to_sql.should == foreign_key_sql(nil)
|
34
|
+
end
|
35
|
+
|
36
|
+
protected
|
13
37
|
def quote_table_name(table)
|
14
38
|
ActiveRecord::Base.connection.quote_table_name(table)
|
15
39
|
end
|
@@ -18,4 +42,9 @@ describe "Foreign Key definition" do
|
|
18
42
|
ActiveRecord::Base.connection.quote_column_name(column)
|
19
43
|
end
|
20
44
|
|
45
|
+
def foreign_key_sql(fk_name)
|
46
|
+
[("CONSTRAINT #{fk_name}" if fk_name), "FOREIGN KEY (#{quote_column_name('user')}) "\
|
47
|
+
"REFERENCES #{quote_table_name('users')} (#{quote_column_name('id')})"].compact.join(' ')
|
48
|
+
end
|
49
|
+
|
21
50
|
end
|
data/spec/foreign_key_spec.rb
CHANGED
@@ -10,7 +10,7 @@ describe "Foreign Key" do
|
|
10
10
|
|
11
11
|
context "when is added", "posts(author_id)" do
|
12
12
|
|
13
|
-
before(:each) do
|
13
|
+
before(:each) do
|
14
14
|
add_foreign_key(:posts, :author_id, :users, :id, :on_update => :cascade, :on_delete => :restrict)
|
15
15
|
end
|
16
16
|
|
@@ -60,7 +60,7 @@ describe "Foreign Key" do
|
|
60
60
|
it "is no longer available in Post.foreign_keys" do
|
61
61
|
Comment.foreign_keys.collect(&:column_names).should_not include(%w[post_id])
|
62
62
|
end
|
63
|
-
|
63
|
+
|
64
64
|
it "is no longer available in User.reverse_foreign_keys" do
|
65
65
|
Post.reverse_foreign_keys.collect(&:column_names).should_not include(%w[post_id])
|
66
66
|
end
|
@@ -78,6 +78,19 @@ describe "Foreign Key" do
|
|
78
78
|
|
79
79
|
end
|
80
80
|
|
81
|
+
it "shouldn't raise when restrited keyword in table name is used" do
|
82
|
+
migration.suppress_messages do
|
83
|
+
migration.create_table :select, :force => true do |t|
|
84
|
+
t.integer :post_id
|
85
|
+
end
|
86
|
+
end
|
87
|
+
expect do
|
88
|
+
add_foreign_key(:select, :post_id, :posts, :id, :name => "test_fk")
|
89
|
+
remove_foreign_key(:select, "test_fk")
|
90
|
+
end.should_not raise_error(Exception)
|
91
|
+
migration.suppress_messages { migration.drop_table :select }
|
92
|
+
end
|
93
|
+
|
81
94
|
protected
|
82
95
|
def add_foreign_key(*args)
|
83
96
|
migration.suppress_messages do
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
require 'models/post'
|
4
|
+
|
5
|
+
describe "Table definition" do
|
6
|
+
|
7
|
+
let(:connection) { ::ActiveRecord::Migration.connection }
|
8
|
+
|
9
|
+
unless ::ActiveRecord::Base.connection.class.include?(
|
10
|
+
RedhillonrailsCore::ActiveRecord::ConnectionAdapters::Sqlite3Adapter)
|
11
|
+
|
12
|
+
it "sets table_name of foreign key definition when running migrations" do
|
13
|
+
connection.create_table :votes, :force => true do |t|
|
14
|
+
t.integer :kind
|
15
|
+
t.integer :application_id
|
16
|
+
t.integer :user_id
|
17
|
+
t.foreign_key :user_id, :users, :id
|
18
|
+
end
|
19
|
+
|
20
|
+
Vote = Class.new(ActiveRecord::Base)
|
21
|
+
Vote.foreign_keys.size.should == 1
|
22
|
+
Vote.foreign_keys[0].table_name.should == 'votes'
|
23
|
+
connection.drop_table :votes
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
data/spec/view_spec.rb
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
require 'models/user'
|
4
|
+
|
5
|
+
describe "views" do
|
6
|
+
|
7
|
+
let(:migration) { ::ActiveRecord::Migration }
|
8
|
+
|
9
|
+
let(:dump) do
|
10
|
+
stream = StringIO.new
|
11
|
+
ActiveRecord::SchemaDumper.ignore_tables = %w[users comments]
|
12
|
+
ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, stream)
|
13
|
+
stream.string
|
14
|
+
end
|
15
|
+
|
16
|
+
let(:view_statement) { "SELECT * FROM users where deleted_at IS NULL" }
|
17
|
+
|
18
|
+
it "should return views" do
|
19
|
+
with_view "active_users", view_statement do
|
20
|
+
migration.connection.views.should have(1).view
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should be included in schema dump" do
|
25
|
+
with_view "active_users", view_statement do
|
26
|
+
dump.should match /active_users/
|
27
|
+
# I don't test view definition as it is transformed to different form
|
28
|
+
# comparing to original statement
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
protected
|
33
|
+
def with_view(name, definition)
|
34
|
+
migration.suppress_messages do
|
35
|
+
migration.create_view name, definition
|
36
|
+
yield
|
37
|
+
migration.drop_view name
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
metadata
CHANGED
@@ -1,108 +1,102 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: redhillonrails_core
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
|
6
|
-
- 1
|
7
|
-
- 1
|
8
|
-
- 3
|
9
|
-
version: 1.1.3
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.2.0
|
5
|
+
prerelease:
|
10
6
|
platform: ruby
|
11
|
-
authors:
|
12
|
-
-
|
7
|
+
authors:
|
8
|
+
- Michał Łomnicki
|
13
9
|
autorequire:
|
14
10
|
bindir: bin
|
15
11
|
cert_chain: []
|
16
|
-
|
17
|
-
date: 2011-02-25 00:00:00 +01:00
|
12
|
+
date: 2011-07-21 00:00:00.000000000 +02:00
|
18
13
|
default_executable:
|
19
|
-
dependencies:
|
20
|
-
- !ruby/object:Gem::Dependency
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
21
16
|
name: activerecord
|
22
|
-
|
23
|
-
|
24
|
-
requirements:
|
25
|
-
- -
|
26
|
-
- !ruby/object:Gem::Version
|
27
|
-
|
28
|
-
- 2
|
29
|
-
version: "2"
|
17
|
+
requirement: &84719870 !ruby/object:Gem::Requirement
|
18
|
+
none: false
|
19
|
+
requirements:
|
20
|
+
- - ! '>='
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '2'
|
30
23
|
type: :runtime
|
31
|
-
version_requirements: *id001
|
32
|
-
- !ruby/object:Gem::Dependency
|
33
|
-
name: rspec
|
34
24
|
prerelease: false
|
35
|
-
|
36
|
-
|
25
|
+
version_requirements: *84719870
|
26
|
+
- !ruby/object:Gem::Dependency
|
27
|
+
name: rspec
|
28
|
+
requirement: &84719590 !ruby/object:Gem::Requirement
|
29
|
+
none: false
|
30
|
+
requirements:
|
37
31
|
- - ~>
|
38
|
-
- !ruby/object:Gem::Version
|
39
|
-
segments:
|
40
|
-
- 2
|
41
|
-
- 4
|
42
|
-
- 0
|
32
|
+
- !ruby/object:Gem::Version
|
43
33
|
version: 2.4.0
|
44
34
|
type: :development
|
45
|
-
version_requirements: *id002
|
46
|
-
- !ruby/object:Gem::Dependency
|
47
|
-
name: pg
|
48
35
|
prerelease: false
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
36
|
+
version_requirements: *84719590
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: pg
|
39
|
+
requirement: &84719370 !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
41
|
+
requirements:
|
42
|
+
- - ! '>='
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: '0'
|
56
45
|
type: :development
|
57
|
-
version_requirements: *id003
|
58
|
-
- !ruby/object:Gem::Dependency
|
59
|
-
name: mysql
|
60
46
|
prerelease: false
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
47
|
+
version_requirements: *84719370
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: mysql
|
50
|
+
requirement: &84719110 !ruby/object:Gem::Requirement
|
51
|
+
none: false
|
52
|
+
requirements:
|
53
|
+
- - ! '>='
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
68
56
|
type: :development
|
69
|
-
version_requirements: *id004
|
70
|
-
- !ruby/object:Gem::Dependency
|
71
|
-
name: mysql2
|
72
57
|
prerelease: false
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
58
|
+
version_requirements: *84719110
|
59
|
+
- !ruby/object:Gem::Dependency
|
60
|
+
name: mysql2
|
61
|
+
requirement: &84718820 !ruby/object:Gem::Requirement
|
62
|
+
none: false
|
63
|
+
requirements:
|
64
|
+
- - ~>
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: 0.2.11
|
80
67
|
type: :development
|
81
|
-
version_requirements: *id005
|
82
|
-
- !ruby/object:Gem::Dependency
|
83
|
-
name: sqlite3-ruby
|
84
68
|
prerelease: false
|
85
|
-
|
86
|
-
|
69
|
+
version_requirements: *84718820
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: sqlite3-ruby
|
72
|
+
requirement: &84718540 !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
87
75
|
- - ~>
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
segments:
|
90
|
-
- 1
|
91
|
-
- 3
|
92
|
-
- 1
|
76
|
+
- !ruby/object:Gem::Version
|
93
77
|
version: 1.3.1
|
94
78
|
type: :development
|
95
|
-
|
96
|
-
|
97
|
-
|
79
|
+
prerelease: false
|
80
|
+
version_requirements: *84718540
|
81
|
+
- !ruby/object:Gem::Dependency
|
82
|
+
name: rake
|
83
|
+
requirement: &84718340 !ruby/object:Gem::Requirement
|
84
|
+
none: false
|
85
|
+
requirements:
|
86
|
+
- - ! '>='
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '0'
|
89
|
+
type: :development
|
90
|
+
prerelease: false
|
91
|
+
version_requirements: *84718340
|
92
|
+
description: Adds support in ActiveRecord for foreign_keys, complex indexes and other
|
93
|
+
database-related stuff. Easily create foreign_keys, complex indexes and views.
|
94
|
+
email:
|
98
95
|
- michal.lomnicki@gmail.com
|
99
96
|
executables: []
|
100
|
-
|
101
97
|
extensions: []
|
102
|
-
|
103
98
|
extra_rdoc_files: []
|
104
|
-
|
105
|
-
files:
|
99
|
+
files:
|
106
100
|
- .gitignore
|
107
101
|
- CHANGELOG
|
108
102
|
- Gemfile
|
@@ -118,8 +112,10 @@ files:
|
|
118
112
|
- lib/redhillonrails_core/active_record/connection_adapters/foreign_key_definition.rb
|
119
113
|
- lib/redhillonrails_core/active_record/connection_adapters/index_definition.rb
|
120
114
|
- lib/redhillonrails_core/active_record/connection_adapters/mysql_adapter.rb
|
115
|
+
- lib/redhillonrails_core/active_record/connection_adapters/mysql_adapter_fixes.rb
|
121
116
|
- lib/redhillonrails_core/active_record/connection_adapters/mysql_column.rb
|
122
117
|
- lib/redhillonrails_core/active_record/connection_adapters/postgresql_adapter.rb
|
118
|
+
- lib/redhillonrails_core/active_record/connection_adapters/schema_statements.rb
|
123
119
|
- lib/redhillonrails_core/active_record/connection_adapters/sqlite3_adapter.rb
|
124
120
|
- lib/redhillonrails_core/active_record/connection_adapters/table_definition.rb
|
125
121
|
- lib/redhillonrails_core/active_record/schema.rb
|
@@ -142,35 +138,32 @@ files:
|
|
142
138
|
- spec/schema_dumper_spec.rb
|
143
139
|
- spec/spec_helper.rb
|
144
140
|
- spec/support/reference.rb
|
141
|
+
- spec/table_definition_spec.rb
|
142
|
+
- spec/view_spec.rb
|
145
143
|
has_rdoc: true
|
146
144
|
homepage: https://github.com/mlomnicki/redhillonrails_core
|
147
145
|
licenses: []
|
148
|
-
|
149
146
|
post_install_message:
|
150
147
|
rdoc_options: []
|
151
|
-
|
152
|
-
require_paths:
|
148
|
+
require_paths:
|
153
149
|
- lib
|
154
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
requirements:
|
163
|
-
- -
|
164
|
-
- !ruby/object:Gem::Version
|
165
|
-
|
166
|
-
- 0
|
167
|
-
version: "0"
|
150
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
151
|
+
none: false
|
152
|
+
requirements:
|
153
|
+
- - ! '>='
|
154
|
+
- !ruby/object:Gem::Version
|
155
|
+
version: '0'
|
156
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
157
|
+
none: false
|
158
|
+
requirements:
|
159
|
+
- - ! '>='
|
160
|
+
- !ruby/object:Gem::Version
|
161
|
+
version: '0'
|
168
162
|
requirements: []
|
169
|
-
|
170
163
|
rubyforge_project: redhillonrails_core
|
171
|
-
rubygems_version: 1.
|
164
|
+
rubygems_version: 1.6.2
|
172
165
|
signing_key:
|
173
166
|
specification_version: 3
|
174
|
-
summary: Adds support in ActiveRecord for foreign_keys, complex indexes and other
|
167
|
+
summary: Adds support in ActiveRecord for foreign_keys, complex indexes and other
|
168
|
+
database-related stuff
|
175
169
|
test_files: []
|
176
|
-
|