usesguid_migrations 1.0.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 ADDED
@@ -0,0 +1,4 @@
1
+ .* # Ignore all dotfiles...
2
+ !.gitignore # except for .gitignore
3
+ *.svn
4
+ pkg/*
data/History.txt ADDED
@@ -0,0 +1,3 @@
1
+ = 1.0.0 2009-11-113
2
+
3
+ * Ported from a plugin to Gem
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2009 C. Jason Harrelson (midas)
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,130 @@
1
+ = usesguid_migrations
2
+
3
+ http://github.com/midas/usesguid_migrations/tree/master
4
+
5
+
6
+ == DESCRIPTION
7
+
8
+ To be used with http://github.com/BMorearty/usesguid/tree/master. It can be a pain to explicitly declare the correct
9
+ column types, etc. for your usesguid migrations. For instance:
10
+
11
+ create_table :users, :id => false, :force => true do |t|
12
+ t.binary :id, :limit => 22, :null => false
13
+ ...
14
+ t.binary :account_id, :limit => 22, :null => false
15
+ end
16
+
17
+ execute "ALTER TABLE `users` MODIFY COLUMN `id` VARCHAR(22) BINARY CHARACTER SET latin1 COLLATE latin1_bin NOT NULL;"
18
+ execute "ALTER TABLE `users` ADD PRIMARY KEY (id)"
19
+ execute "ALTER TABLE `users` MODIFY COLUMN `account_id` VARCHAR(22) BINARY CHARACTER SET latin1 COLLATE latin1_bin NOT NULL;"
20
+
21
+ In addition, this technique will fail to keep you schema.rb file correctly up to date. The binary varchar(22) fields will actually be
22
+ output as:
23
+
24
+ t.string "id", :limit => 22, :null => false
25
+ t.string "account_id", :limit => 22
26
+
27
+ This will include no:
28
+
29
+ execute "ALTER TABLE `users` MODIFY COLUMN `id` VARCHAR(22) BINARY CHARACTER SET latin1 COLLATE latin1_bin NOT NULL;"
30
+ execute "ALTER TABLE `users` ADD PRIMARY KEY (id)"
31
+ execute "ALTER TABLE `users` MODIFY COLUMN `account_id` VARCHAR(22) BINARY CHARACTER SET latin1 COLLATE latin1_bin NOT NULL;"
32
+
33
+ So you will end up getting unique id collisions due to the non-case sensitivity of the string field in MySQL without a latin1_bin
34
+ collation.
35
+
36
+ Enter usesguid_migrations. This plugin will automatically create an id field (just as migrations currently do), but it will be of the
37
+ type necessary for usesguid to work correctly.
38
+
39
+
40
+ == FEATURES
41
+
42
+ * Automatically generate an id field with correct typing for usesguid
43
+ * Migration associated method for generating foreign keys with correct typing for usesguid
44
+ * Schema dumper will create schema.rb files with the correct typing for usesguid
45
+
46
+
47
+ == TO DO
48
+
49
+ * Add ability for the add_column and change_column methods to accept an option turning them into guids
50
+ * Tests, tests and more tests (if anyone has any ideas of how to accomplish this please let me know, I am currently at a loss of how to test something like this)
51
+
52
+
53
+ == REQUIREMENTS
54
+
55
+ * Rails 2.0 or above
56
+ * usesguid Gem (http://github.com/midas/usesguid)
57
+
58
+
59
+ == USAGE
60
+
61
+ Simply create a normal create table migration and an id field with correct typing for usesguid will be generated.
62
+
63
+ In addition, if you would like to declare a foreign key field that needs to be of the
64
+ correct type to use usesguid, just use the associated method:
65
+
66
+ create_table :whatevers, :force => true do |t|
67
+ t.references_with_guid :account
68
+ end
69
+
70
+ This will create a field named account_id that is of the correct type for usesguid. It will also assume that the column
71
+ is not nullable as it is more than likely a foreign key. to Make it nullable you must use th e:null => true option:
72
+
73
+ t.references_with_guid :account
74
+
75
+ or
76
+
77
+ t.references_with_guid :account, :null => true
78
+
79
+ If you need a table with a standard Rails id field just use the :guid option of the crate_table method.
80
+
81
+ create_table :users, :guid => false do |t|
82
+ ...
83
+ t.references_with_guid :account # will still use a guid regardless of the :guid => false option in the create_table params above
84
+ end
85
+
86
+ If you need a table with no id at all, just use the normal :primary_key option of the create_table method and
87
+ you will have no id field automatically generated.
88
+
89
+ create_table :users, :primary_key => false do |t|
90
+ ...
91
+ end
92
+
93
+ If you run into any issues with running tests or specs, it could be something strange happening in your schema.rb file. This
94
+ file is used to prepare the database for testing. To override this and make migrations be used to prepare the database, copy
95
+ and rename the testdb.rake.txt file to {project root}/lib/tasks/testdb.rake.
96
+
97
+
98
+ == INSTALL
99
+
100
+ From the command line:
101
+
102
+ sudo gem install usesguid_migrations
103
+
104
+ In Rails environment.rb:
105
+
106
+ config.gem "usesguid_migrations"
107
+
108
+
109
+ == LICENSE
110
+
111
+ Copyright (c) 2009 C. Jason Harrelson (midas)
112
+
113
+ Permission is hereby granted, free of charge, to any person obtaining
114
+ a copy of this software and associated documentation files (the
115
+ "Software"), to deal in the Software without restriction, including
116
+ without limitation the rights to use, copy, modify, merge, publish,
117
+ distribute, sublicense, and/or sell copies of the Software, and to
118
+ permit persons to whom the Software is furnished to do so, subject to
119
+ the following conditions:
120
+
121
+ The above copyright notice and this permission notice shall be
122
+ included in all copies or substantial portions of the Software.
123
+
124
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
125
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
126
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
127
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
128
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
129
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
130
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Rakefile ADDED
@@ -0,0 +1,50 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+
4
+ begin
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |gem|
7
+ gem.name = "usesguid_migrations"
8
+ gem.summary = %Q{Makes your migrations work with usesguid plugin without explicitly defining the keys migrations.}
9
+ gem.description = %Q{Makes your migrations work with usesguid plugin without explicitly defining the primary key id or foreign keys in migrations.}
10
+ gem.email = "jason@lookforwardenterprises.com"
11
+ gem.homepage = "http://github.com/midas/usesguid_migrations"
12
+ gem.authors = ["Jason Harrelson"]
13
+ gem.add_development_dependency "rspec"
14
+ gem.add_dependency "activerecord", ">= 2.3"
15
+ gem.add_dependency "usesguid"
16
+ end
17
+ Jeweler::GemcutterTasks.new
18
+ rescue LoadError
19
+ puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
20
+ end
21
+
22
+ require 'spec/rake/spectask'
23
+ Spec::Rake::SpecTask.new(:spec) do |spec|
24
+ spec.libs << 'lib' << 'spec'
25
+ spec.spec_files = FileList['spec/**/*_spec.rb']
26
+ end
27
+
28
+ Spec::Rake::SpecTask.new(:rcov) do |spec|
29
+ spec.libs << 'lib' << 'spec'
30
+ spec.pattern = 'spec/**/*_spec.rb'
31
+ spec.rcov = true
32
+ end
33
+
34
+ task :spec => :check_dependencies
35
+
36
+ task :default => :spec
37
+
38
+ require 'rake/rdoctask'
39
+ Rake::RDocTask.new do |rdoc|
40
+ if File.exist?('VERSION')
41
+ version = File.read('VERSION')
42
+ else
43
+ version = ""
44
+ end
45
+
46
+ rdoc.rdoc_dir = 'rdoc'
47
+ rdoc.title = "usesguid_migrations #{version}"
48
+ rdoc.rdoc_files.include('README*')
49
+ rdoc.rdoc_files.include('lib/**/*.rb')
50
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 1.0.0
@@ -0,0 +1,31 @@
1
+ module UsesguidMigrations
2
+ module ActiveRecordExtensions
3
+ module Base
4
+
5
+ def self.included( base )
6
+ base.extend( ClassMethods )
7
+ end
8
+
9
+ module ClassMethods
10
+ def self.extended( base )
11
+ class << base
12
+ alias_method_chain :abstract_class?, :lfe_usesguid_migrations
13
+ end
14
+ end
15
+
16
+ def abstract_class_with_lfe_usesguid_migrations?
17
+ abstract_class_without_lfe_usesguid_migrations? || !(name =~ /^Abstract/).nil?
18
+ end
19
+
20
+ def base_class?
21
+ self == base_class
22
+ end
23
+
24
+ def pluralized_table_name( table_name )
25
+ ActiveRecord::Base.pluralize_table_names ? table_name.to_s.pluralize : table_name
26
+ end
27
+ end
28
+
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,46 @@
1
+ module UsesguidMigrations
2
+ module ActiveRecordExtensions
3
+ module ConnectionAdapters
4
+ module MysqlAdapter
5
+
6
+ def primary_key_name( table_name, name=nil )
7
+ results = execute( "SHOW CREATE TABLE `#{table_name}`", name )
8
+ keys = []
9
+ primary_key = nil
10
+
11
+ results.each do |row|
12
+ row[1].each do |line|
13
+ keys << $1 if line =~ /^ [`"](.+?)[`"] varchar\(22\) character set latin1 collate latin1_bin NOT NULL?,?$/
14
+ primary_key = $1 if line =~ /^ PRIMARY KEY \([`"](.+?)[`"]\)$/
15
+ primary_key = $1 if line =~ /^ PRIMARY KEY \([`"](.+?)[`"]\),$/
16
+ primary_key = $1 if line =~ /^ PRIMARY KEY \([`"](.+?)[`"]\), $/
17
+ end
18
+ end
19
+
20
+ return keys.include?( primary_key ) ? primary_key : nil
21
+ end
22
+
23
+ def foreign_keys( table_name, name=nil )
24
+ results = execute( "SHOW CREATE TABLE `#{table_name}`", name )
25
+
26
+ null_foreign_keys = []
27
+ not_null_foreign_keys = []
28
+ primary_keys = []
29
+
30
+ results.each do |row|
31
+ row[1].each do |line|
32
+ null_foreign_keys << $1 if line =~ /^ [`"](.+?)[`"] varchar\(22\) character set latin1 collate latin1_bin default NULL?,?$/
33
+ not_null_foreign_keys << $1 if line =~ /^ [`"](.+?)[`"] varchar\(22\) character set latin1 collate latin1_bin NOT NULL?,?$/
34
+ primary_keys << $1 if line =~ /^ PRIMARY KEY \([`"](.+?)[`"]\)$/
35
+ primary_keys << $1 if line =~ /^ PRIMARY KEY \([`"](.+?)[`"]\),$/
36
+ end
37
+ end
38
+
39
+
40
+ return null_foreign_keys - primary_keys, not_null_foreign_keys - primary_keys
41
+ end
42
+
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,60 @@
1
+ module UsesguidMigrations
2
+ module ActiveRecordExtensions
3
+ module ConnectionAdapters
4
+ module SchemaStatements
5
+
6
+ def self.included( base )
7
+ base.module_eval do
8
+ alias_method_chain :create_table, :lfe_usesguid_migrations
9
+ end
10
+ end
11
+
12
+ def create_table_with_lfe_usesguid_migrations( table_name, options={} )
13
+ table_definition = ActiveRecord::ConnectionAdapters::TableDefinition.new( self )
14
+ #table_definition = TableDefinition.new( self )
15
+
16
+ if options[:guid] == false
17
+ table_definition.primary_key( options[:primary_key] || ActiveRecord::Base.get_primary_key( table_name ) ) unless options[:id] == false
18
+ else
19
+ table_definition.guid_primary_key( options[:primary_key] || ActiveRecord::Base.get_primary_key( table_name ) ) unless options[:id] == false
20
+ end
21
+
22
+ yield table_definition
23
+
24
+ if options[:force] && table_exists?( table_name )
25
+ drop_table( table_name, options )
26
+ end
27
+
28
+ create_sql = "CREATE#{' TEMPORARY' if options[:temporary]} TABLE "
29
+ create_sql << "#{quote_table_name( table_name )} ("
30
+ create_sql << table_definition.to_sql
31
+ create_sql << ") #{options[:options]}"
32
+ execute create_sql
33
+
34
+ # TODO this needs to be different for each adapter
35
+ unless table_name == "schema_migrations"
36
+ unless options[:id] == false || options[:guid] == false
37
+ execute "ALTER TABLE `#{table_name}` MODIFY COLUMN `#{table_definition.primary_key_name}` VARCHAR(22) BINARY CHARACTER SET latin1 COLLATE latin1_bin NOT NULL;"
38
+ execute "ALTER TABLE `#{table_name}` ADD PRIMARY KEY (#{table_definition.primary_key_name})"
39
+ end
40
+
41
+ return if table_definition.associative_keys.nil?
42
+
43
+ table_definition.associative_keys.each do |assoc|
44
+ key = assoc.name
45
+ opts = assoc.options
46
+ sql = "ALTER TABLE `#{table_name}` MODIFY COLUMN `#{key}` VARCHAR(#{opts[:limit] || 22}) BINARY CHARACTER SET latin1 COLLATE latin1_bin"
47
+ if opts[:null] == false || opts[:null].nil?
48
+ sql << " NOT NULL;"
49
+ else
50
+ sql << ";"
51
+ end
52
+ execute( sql )
53
+ end
54
+ end
55
+ end
56
+
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,38 @@
1
+ module UsesguidMigrations
2
+ module ActiveRecordExtensions
3
+ module ConnectionAdapters
4
+ module TableDefinition
5
+
6
+ def self.included( base )
7
+ base.class_eval do
8
+ include InstanceMethods
9
+ attr_accessor :primary_key_name
10
+ attr_accessor :associative_keys
11
+ end
12
+ end
13
+
14
+ module InstanceMethods
15
+ def guid_primary_key( name )
16
+ @primary_key_name = name
17
+ column( name, :binary, :limit => 22, :null => false )
18
+ end
19
+
20
+ def references_with_guid( name, options={} )
21
+ name = name.to_s
22
+ name = "#{name}_id" unless name.end_with?( "_id" )
23
+ guid( name, options )
24
+ end
25
+
26
+ def guid( name, options={} )
27
+ @associative_keys = [] if @associative_keys.nil?
28
+ options.merge!( :limit => 22 )
29
+ options.merge!( :null => false ) unless options[:null] == true # make not nullable the default for a guid column as it is likely a foreign key
30
+ @associative_keys << OpenStruct.new( :name => name, :options => options )
31
+ column( name, :binary, options )
32
+ end
33
+ end
34
+
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,29 @@
1
+ module UsesguidMigrations
2
+ module ActiveRecordExtensions
3
+ module Schema
4
+
5
+ def self.included( base )
6
+ base.extend( ClassMethods )
7
+ end
8
+
9
+ module ClassMethods
10
+ def self.extended( base )
11
+ class << base
12
+ attr_accessor :defining
13
+ alias :defining? :defining
14
+
15
+ alias_method_chain :define, :lfe_usesguid_migrations
16
+ end
17
+ end
18
+
19
+ def define_with_lfe_usesguid_migrations( info={}, &block )
20
+ self.defining = true
21
+ define_without_lfe_usesguid_migrations( info, &block )
22
+ ensure
23
+ self.defining = false
24
+ end
25
+ end
26
+
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,138 @@
1
+ module UsesguidMigrations
2
+ module ActiveRecordExtensions
3
+ module SchemaDumper
4
+
5
+ def self.included( base )
6
+ base.class_eval do
7
+ private
8
+ alias_method_chain :table, :lfe_usesguid_migrations
9
+ alias_method_chain :indexes, :lfe_usesguid_migrations
10
+ end
11
+ end
12
+
13
+ private
14
+
15
+ def table_with_lfe_usesguid_migrations( table, stream )
16
+ #table_without_lfe_usesguid_migrations( table, stream )
17
+ columns = @connection.columns( table )
18
+ begin
19
+ tbl = StringIO.new
20
+
21
+ guid_pk = @connection.primary_key_name( table )
22
+ guid_fks = @connection.foreign_keys( table )
23
+
24
+ if @connection.respond_to?( :pk_and_sequence_for )
25
+ pk, pk_seq = @connection.pk_and_sequence_for( table )
26
+ end
27
+ pk ||= 'id'
28
+
29
+ tbl.print " create_table #{table.inspect}"
30
+ if col = columns.detect { |c| c.name == pk }
31
+ tbl.print %Q(, :primary_key => "#{pk}") if pk != 'id'
32
+ if col.type == :string
33
+ tbl.print ", :id => false"
34
+ elsif col.type == :integer
35
+ tbl.print ", :guid => false"
36
+ end
37
+ else
38
+ tbl.print ", :id => false"
39
+ end
40
+ tbl.print ", :force => true"
41
+ tbl.puts " do |t|"
42
+
43
+ column_specs = columns.map do |column|
44
+ raise StandardError, "Unknown type '#{column.sql_type}' for column '#{column.name}'" if @types[column.type].nil?
45
+ next if column.name == pk
46
+ spec = {}
47
+ spec[:name] = column.name.inspect
48
+ spec[:type] = column.type.to_s
49
+ spec[:limit] = column.limit.inspect if column.limit != @types[column.type][:limit] && column.type != :decimal
50
+ spec[:precision] = column.precision.inspect if !column.precision.nil?
51
+ spec[:scale] = column.scale.inspect if !column.scale.nil?
52
+ spec[:null] = 'false' if !column.null
53
+ spec[:default] = default_string(column.default) if column.has_default?
54
+ (spec.keys - [:name, :type]).each{ |k| spec[k].insert(0, "#{k.inspect} => ") }
55
+ spec
56
+ end.compact
57
+
58
+ unless guid_pk.nil? || guid_pk.empty?
59
+ column_specs.insert( 0, { :name => "\"#{guid_pk}\"", :type => 'binary', :limit => ':limit => 22', :null => ':null => false' } )
60
+ end
61
+
62
+ names = column_specs.map { |h| h[:name] }
63
+
64
+ unless guid_fks.nil?
65
+ guid_fks.each do |fk|
66
+ pos = names.index( "\"#{fk}\"" )
67
+ if pos
68
+ spec = column_specs[pos]
69
+ spec[:type] = "binary"
70
+ end
71
+ end
72
+ end
73
+
74
+ # find all migration keys used in this table
75
+ keys = [:name, :limit, :precision, :scale, :default, :null] & column_specs.map(&:keys).flatten
76
+
77
+ # figure out the lengths for each column based on above keys
78
+ lengths = keys.map{ |key| column_specs.map{ |spec| spec[key] ? spec[key].length + 2 : 0 }.max }
79
+
80
+ # the string we're going to sprintf our values against, with standardized column widths
81
+ format_string = lengths.map{ |len| "%-#{len}s" }
82
+
83
+ # find the max length for the 'type' column, which is special
84
+ type_length = column_specs.map{ |column| column[:type].length }.max
85
+
86
+ # add column type definition to our format string
87
+ format_string.unshift " t.%-#{type_length}s "
88
+
89
+ format_string *= ''
90
+
91
+ column_specs.each do |colspec|
92
+ values = keys.zip(lengths).map{ |key, len| colspec.key?(key) ? colspec[key] + ", " : " " * len }
93
+ values.unshift colspec[:type]
94
+ tbl.print((format_string % values).gsub(/,\s*$/, ''))
95
+ tbl.puts
96
+ end
97
+
98
+ tbl.puts " end"
99
+ tbl.puts
100
+
101
+ indexes(table, tbl)
102
+
103
+ tbl.rewind
104
+ stream.print tbl.read
105
+ rescue => e
106
+ stream.puts "# Could not dump table #{table.inspect} because of following #{e.class}"
107
+ stream.puts "# #{e.message}"
108
+ stream.puts
109
+ end
110
+
111
+ stream
112
+ end
113
+
114
+ def indexes_with_lfe_usesguid_migrations( table, stream )
115
+ pk = @connection.primary_key_name( table )
116
+ null_foreign_keys, not_null_foreign_keys = @connection.foreign_keys( table )
117
+
118
+ unless pk.nil? || pk.empty?
119
+ stream.puts " execute \"ALTER TABLE `#{table}` MODIFY COLUMN `#{pk}` VARCHAR(22) BINARY CHARACTER SET latin1 COLLATE latin1_bin NOT NULL;\""
120
+ stream.puts " execute \"ALTER TABLE `#{table}` ADD PRIMARY KEY (#{pk})\""
121
+ end
122
+ stream.puts if (null_foreign_keys.nil? || null_foreign_keys.empty?) && (not_null_foreign_keys.nil? || not_null_foreign_keys.empty?)
123
+
124
+ null_foreign_keys.each do |key|
125
+ stream.puts " execute \"ALTER TABLE `#{table}` MODIFY COLUMN `#{key}` VARCHAR(22) BINARY CHARACTER SET latin1 COLLATE latin1_bin NULL;\""
126
+ end
127
+
128
+ not_null_foreign_keys.each do |key|
129
+ stream.puts " execute \"ALTER TABLE `#{table}` MODIFY COLUMN `#{key}` VARCHAR(22) BINARY CHARACTER SET latin1 COLLATE latin1_bin NOT NULL;\""
130
+ end
131
+
132
+ stream.puts unless (null_foreign_keys.nil? || null_foreign_keys.empty?) && (not_null_foreign_keys.nil? || not_null_foreign_keys.empty?)
133
+
134
+ indexes_without_lfe_usesguid_migrations( table, stream )
135
+ end
136
+ end
137
+ end
138
+ end
@@ -0,0 +1,26 @@
1
+ $:.unshift(File.dirname(__FILE__)) unless
2
+ $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
+
4
+ require 'usesguid_migrations/active_record_extensions/base'
5
+ require 'usesguid_migrations/active_record_extensions/schema'
6
+ require 'usesguid_migrations/active_record_extensions/schema_dumper'
7
+ require 'usesguid_migrations/active_record_extensions/connection_adapters/mysql_adapter'
8
+ require 'usesguid_migrations/active_record_extensions/connection_adapters/schema_statements'
9
+ require 'usesguid_migrations/active_record_extensions/connection_adapters/table_definition'
10
+
11
+ module UsesguidMigrations
12
+ VERSION = '1.0.0'
13
+ end
14
+
15
+ ActiveRecord::Base.send( :include, UsesguidMigrations::ActiveRecordExtensions::Base ) if defined?( ActiveRecord::Base )
16
+ ActiveRecord::Schema.send( :include, UsesguidMigrations::ActiveRecordExtensions::Schema ) if defined?( ActiveRecord::Schema )
17
+ ActiveRecord::SchemaDumper.send( :include, UsesguidMigrations::ActiveRecordExtensions::SchemaDumper ) if defined?( ActiveRecord::SchemaDumper )
18
+ if defined?( ActiveRecord::ConnectionAdapters::SchemaStatements )
19
+ ActiveRecord::ConnectionAdapters::SchemaStatements.send( :include, UsesguidMigrations::ActiveRecordExtensions::ConnectionAdapters::SchemaStatements )
20
+ end
21
+ if defined?( ActiveRecord::ConnectionAdapters::TableDefinition )
22
+ ActiveRecord::ConnectionAdapters::TableDefinition.send( :include, UsesguidMigrations::ActiveRecordExtensions::ConnectionAdapters::TableDefinition )
23
+ end
24
+ if defined?( ActiveRecord::ConnectionAdapters::MysqlAdapter )
25
+ ActiveRecord::ConnectionAdapters::MysqlAdapter.send( :include, UsesguidMigrations::ActiveRecordExtensions::ConnectionAdapters::MysqlAdapter )
26
+ end
data/script/console ADDED
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+ # File: script/console
3
+ irb = RUBY_PLATFORM =~ /(:?mswin|mingw)/ ? 'irb.bat' : 'irb'
4
+
5
+ libs = " -r irb/completion"
6
+ # Perhaps use a console_lib to store any extra methods I may want available in the cosole
7
+ # libs << " -r #{File.dirname(__FILE__) + '/../lib/console_lib/console_logger.rb'}"
8
+ libs << " -r #{File.dirname(__FILE__) + '/../lib/usesguid_migrations.rb'}"
9
+ puts "Loading usesguid_migrations gem"
10
+ exec "#{irb} #{libs} --simple-prompt"
data/testdb.rake.txt ADDED
@@ -0,0 +1,44 @@
1
+ module Rake
2
+ module TaskManager
3
+ def redefine_task(task_class, *args, &block)
4
+ task_name, deps = resolve_args(args)
5
+ task_name = task_class.scope_name(@scope, task_name)
6
+ deps = [deps] unless deps.respond_to?(:to_ary)
7
+ deps = deps.collect {|d| d.to_s }
8
+ task = @tasks[task_name.to_s] = task_class.new(task_name, self)
9
+ task.application = self
10
+ #task.add_comment(@last_comment)
11
+ @last_comment = nil
12
+ task.enhance(deps, &block)
13
+ task
14
+ end
15
+ end
16
+ class Task
17
+ class << self
18
+ def redefine_task(args, &block)
19
+ Rake.application.redefine_task(self, args, &block)
20
+ end
21
+ end
22
+ end
23
+ end
24
+
25
+ def redefine_task(args, &block)
26
+ Rake::Task.redefine_task(args, &block)
27
+ end
28
+
29
+ namespace :db do
30
+ namespace :test do
31
+
32
+ desc 'Prepare the test database and migrate schema'
33
+ redefine_task :prepare => :environment do
34
+ Rake::Task['db:test:migrate_schema'].invoke
35
+ end
36
+
37
+ desc 'Use the migrations to create the test database'
38
+ task :migrate_schema => 'db:test:purge' do
39
+ ActiveRecord::Base.establish_connection(ActiveRecord::Base.configurations['test'])
40
+ ActiveRecord::Migrator.migrate("db/migrate/")
41
+ end
42
+
43
+ end
44
+ end
@@ -0,0 +1,62 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{usesguid_migrations}
8
+ s.version = "1.0.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Jason Harrelson"]
12
+ s.date = %q{2009-11-13}
13
+ s.description = %q{Makes your migrations work with usesguid plugin without explicitly defining the primary key id or foreign keys in migrations.}
14
+ s.email = %q{jason@lookforwardenterprises.com}
15
+ s.extra_rdoc_files = [
16
+ "LICENSE",
17
+ "README.rdoc"
18
+ ]
19
+ s.files = [
20
+ ".gitignore",
21
+ "History.txt",
22
+ "LICENSE",
23
+ "README.rdoc",
24
+ "Rakefile",
25
+ "VERSION",
26
+ "lib/usesguid_migrations.rb",
27
+ "lib/usesguid_migrations/active_record_extensions/base.rb",
28
+ "lib/usesguid_migrations/active_record_extensions/connection_adapters/mysql_adapter.rb",
29
+ "lib/usesguid_migrations/active_record_extensions/connection_adapters/schema_statements.rb",
30
+ "lib/usesguid_migrations/active_record_extensions/connection_adapters/table_definition.rb",
31
+ "lib/usesguid_migrations/active_record_extensions/schema.rb",
32
+ "lib/usesguid_migrations/active_record_extensions/schema_dumper.rb",
33
+ "script/console",
34
+ "testdb.rake.txt",
35
+ "usesguid_migrations.gemspec"
36
+ ]
37
+ s.homepage = %q{http://github.com/midas/usesguid_migrations}
38
+ s.rdoc_options = ["--charset=UTF-8"]
39
+ s.require_paths = ["lib"]
40
+ s.rubygems_version = %q{1.3.5}
41
+ s.summary = %q{Makes your migrations work with usesguid plugin without explicitly defining the keys migrations.}
42
+
43
+ if s.respond_to? :specification_version then
44
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
45
+ s.specification_version = 3
46
+
47
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
48
+ s.add_development_dependency(%q<rspec>, [">= 0"])
49
+ s.add_runtime_dependency(%q<activerecord>, [">= 2.3"])
50
+ s.add_runtime_dependency(%q<usesguid>, [">= 0"])
51
+ else
52
+ s.add_dependency(%q<rspec>, [">= 0"])
53
+ s.add_dependency(%q<activerecord>, [">= 2.3"])
54
+ s.add_dependency(%q<usesguid>, [">= 0"])
55
+ end
56
+ else
57
+ s.add_dependency(%q<rspec>, [">= 0"])
58
+ s.add_dependency(%q<activerecord>, [">= 2.3"])
59
+ s.add_dependency(%q<usesguid>, [">= 0"])
60
+ end
61
+ end
62
+
metadata ADDED
@@ -0,0 +1,100 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: usesguid_migrations
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Jason Harrelson
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-11-13 00:00:00 -06:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: rspec
17
+ type: :development
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: "0"
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: activerecord
27
+ type: :runtime
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: "2.3"
34
+ version:
35
+ - !ruby/object:Gem::Dependency
36
+ name: usesguid
37
+ type: :runtime
38
+ version_requirement:
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: "0"
44
+ version:
45
+ description: Makes your migrations work with usesguid plugin without explicitly defining the primary key id or foreign keys in migrations.
46
+ email: jason@lookforwardenterprises.com
47
+ executables: []
48
+
49
+ extensions: []
50
+
51
+ extra_rdoc_files:
52
+ - LICENSE
53
+ - README.rdoc
54
+ files:
55
+ - .gitignore
56
+ - History.txt
57
+ - LICENSE
58
+ - README.rdoc
59
+ - Rakefile
60
+ - VERSION
61
+ - lib/usesguid_migrations.rb
62
+ - lib/usesguid_migrations/active_record_extensions/base.rb
63
+ - lib/usesguid_migrations/active_record_extensions/connection_adapters/mysql_adapter.rb
64
+ - lib/usesguid_migrations/active_record_extensions/connection_adapters/schema_statements.rb
65
+ - lib/usesguid_migrations/active_record_extensions/connection_adapters/table_definition.rb
66
+ - lib/usesguid_migrations/active_record_extensions/schema.rb
67
+ - lib/usesguid_migrations/active_record_extensions/schema_dumper.rb
68
+ - script/console
69
+ - testdb.rake.txt
70
+ - usesguid_migrations.gemspec
71
+ has_rdoc: true
72
+ homepage: http://github.com/midas/usesguid_migrations
73
+ licenses: []
74
+
75
+ post_install_message:
76
+ rdoc_options:
77
+ - --charset=UTF-8
78
+ require_paths:
79
+ - lib
80
+ required_ruby_version: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ version: "0"
85
+ version:
86
+ required_rubygems_version: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: "0"
91
+ version:
92
+ requirements: []
93
+
94
+ rubyforge_project:
95
+ rubygems_version: 1.3.5
96
+ signing_key:
97
+ specification_version: 3
98
+ summary: Makes your migrations work with usesguid plugin without explicitly defining the keys migrations.
99
+ test_files: []
100
+