migrant 1.3.0 → 1.3.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +7 -0
- data/README.rdoc +10 -15
- data/VERSION +1 -1
- data/lib/dsl/data_type.rb +4 -6
- data/lib/migrant/migration_generator.rb +15 -13
- data/migrant.gemspec +2 -2
- data/test/helper.rb +1 -1
- data/test/test_migration_generator.rb +15 -17
- metadata +125 -130
data/.travis.yml
ADDED
data/README.rdoc
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
= Migrant
|
2
|
+
{<img src="https://secure.travis-ci.org/pascalh1011/migrant.png" />}[http://travis-ci.org/pascalh1011/migrant]
|
2
3
|
|
3
4
|
== Summary
|
4
5
|
|
5
|
-
Migrant gives you a clean DSL to describe your model schema (somewhat similar to DataMapper)
|
6
|
-
|
6
|
+
Migrant gives you a clean DSL to describe your model schema (somewhat similar to DataMapper).
|
7
|
+
It generates your migrations for you so you can spend more time describing your domain
|
7
8
|
model cleanly and less time managing your database layer.
|
8
9
|
|
9
|
-
You'll also get a handy .mock method to instantiate a filled
|
10
|
+
You'll also get a handy .mock method to instantiate a filled-in model for testing or debugging.
|
10
11
|
|
11
12
|
== Getting Started
|
12
13
|
|
@@ -14,9 +15,9 @@ In your Gemfile:
|
|
14
15
|
|
15
16
|
gem "migrant"
|
16
17
|
|
17
|
-
Rails: 3.0+ (Sorry folks, no plans for Rails 2 support)
|
18
|
-
Ruby: Tested with 1.8.7 MRI, 1.9.2 MRI, and Rubinius 1.2.1
|
19
|
-
Adapters: Tested with SQLite3, MySQL, MySQL2, Pg. Should work with any AR adapter in theory.
|
18
|
+
* Rails: 3.0+ (Sorry folks, no plans for Rails 2 support)
|
19
|
+
* Ruby: Tested with 1.8.7 MRI, 1.9.2 MRI, and Rubinius 1.2.1
|
20
|
+
* Adapters: Tested with SQLite3, MySQL, MySQL2, Pg. Should work with any AR adapter in theory.
|
20
21
|
|
21
22
|
== Jumping right in
|
22
23
|
|
@@ -105,7 +106,7 @@ These will call ActiveRecord::Base.serialize for you so don't do it again yourse
|
|
105
106
|
|
106
107
|
== Want more examples?
|
107
108
|
|
108
|
-
Check out the test models in test/rails_app/app/models
|
109
|
+
Check out the test models in +test/rails_app/app/models/*+
|
109
110
|
|
110
111
|
== Model Generator
|
111
112
|
|
@@ -125,12 +126,6 @@ Simply run rake db:upgrade or rails generate migrations to get the required migr
|
|
125
126
|
* Changing column types
|
126
127
|
* Rollbacks for all the above
|
127
128
|
|
128
|
-
== What won't
|
129
|
-
|
130
|
-
These actions won't be performed (because we don't want to hurt your data):
|
131
|
-
|
132
|
-
* Changing column types where data loss may occur (e.g. varchar -> int)
|
133
|
-
|
134
129
|
== Getting a mock of your model
|
135
130
|
|
136
131
|
> rails console
|
@@ -194,7 +189,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
194
189
|
|
195
190
|
Please be sure to install all the development dependencies via Bundler, then to run tests do:
|
196
191
|
|
197
|
-
> rake test
|
192
|
+
> rake test
|
198
193
|
|
199
|
-
Simplecov reports will be generated for each run
|
194
|
+
Simplecov reports will be generated for each run. If it's not at 100% line coverage, something's wrong!
|
200
195
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.3.
|
1
|
+
1.3.1
|
data/lib/dsl/data_type.rb
CHANGED
@@ -1,8 +1,6 @@
|
|
1
1
|
require 'faker'
|
2
2
|
|
3
3
|
module DataType
|
4
|
-
class DangerousMigration < Exception; end;
|
5
|
-
|
6
4
|
class Base
|
7
5
|
attr_accessor :aliases
|
8
6
|
|
@@ -59,8 +57,6 @@ module DataType
|
|
59
57
|
|
60
58
|
if current_structure
|
61
59
|
# General RDBMS data loss scenarios
|
62
|
-
raise DataType::DangerousMigration if (new_structure[:type] != :text && [:string, :text].include?(current_structure[:type]) && new_structure[:type] != current_structure[:type])
|
63
|
-
|
64
60
|
if new_structure[:limit] && current_structure[:limit].to_i != new_structure[:limit].to_i ||
|
65
61
|
new_structure[:type] != current_structure[:type]
|
66
62
|
column
|
@@ -72,10 +68,12 @@ module DataType
|
|
72
68
|
end
|
73
69
|
end
|
74
70
|
|
71
|
+
def dangerous_migration_from?(current_structure = nil)
|
72
|
+
current_structure && (column[:type] != :text && [:string, :text].include?(current_structure[:type]) && column[:type] != current_structure[:type])
|
73
|
+
end
|
74
|
+
|
75
75
|
def self.migrant_data_type?; true; end
|
76
76
|
end
|
77
|
-
|
78
|
-
|
79
77
|
end
|
80
78
|
|
81
79
|
require 'dsl/data_types/primitives'
|
@@ -26,6 +26,9 @@ module Migrant
|
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
|
+
# Rails 3.2+ caches table (non) existence so this needs to be cleared before we start
|
30
|
+
ActiveRecord::Base.connection.schema_cache.clear! if ActiveRecord::Base.connection.respond_to?(:schema_cache)
|
31
|
+
|
29
32
|
ActiveRecord::Base.descendants.select { |model| model.schema && model.schema.requires_migration? }.each do |model|
|
30
33
|
model.reset_column_information # db:migrate doesn't do this
|
31
34
|
@table_name = model.table_name
|
@@ -35,17 +38,15 @@ module Migrant
|
|
35
38
|
# Structure ActiveRecord::Base's column information so we can compare it directly to the schema
|
36
39
|
db_schema = Hash[*model.columns.collect {|c| [c.name.to_sym, Hash[*[:type, :limit].map { |type| [type, c.send(type)] }.flatten] ] }.flatten]
|
37
40
|
model.schema.columns.to_a.sort { |a,b| a.to_s <=> b.to_s }.each do |field_name, data_type|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
41
|
+
if data_type.dangerous_migration_from?(db_schema[field_name]) &&
|
42
|
+
ask_user("#{model}: '#{field_name}': Converting from ActiveRecord type #{db_schema[field_name][:type]} to #{data_type.column[:type]} could cause data loss. Continue?", %W{Yes No}, true) == "No"
|
43
|
+
log "Aborting dangerous action on #{field_name}."
|
44
|
+
elsif (options = data_type.structure_changes_from(db_schema[field_name]))
|
45
|
+
if db_schema[field_name]
|
46
|
+
change_column(field_name, options, db_schema[field_name])
|
47
|
+
else
|
48
|
+
add_column(field_name, options)
|
45
49
|
end
|
46
|
-
rescue DataType::DangerousMigration
|
47
|
-
log "Cannot generate migration automatically for #{model.table_name}, this would involve possible data loss on column: #{field_name}\nOld structure: #{db_schema[field_name].inspect}. New structure: #{data_type.column.inspect}\nPlease create and run this migration yourself (with the appropriate data integrity checks)", :error
|
48
|
-
return false
|
49
50
|
end
|
50
51
|
end
|
51
52
|
|
@@ -57,10 +58,11 @@ module Migrant
|
|
57
58
|
when 'Move' then
|
58
59
|
target = ask_user("Move '#{removed_field_name}' to:", @columns[:added].collect(&:first))
|
59
60
|
target_column = model.schema.columns[target]
|
60
|
-
|
61
|
+
|
62
|
+
unless target_column.dangerous_migration_from?(db_schema[removed_field_name])
|
61
63
|
target_column.structure_changes_from(db_schema[removed_field_name])
|
62
64
|
move_column(removed_field_name, target, db_schema[removed_field_name], target_column)
|
63
|
-
|
65
|
+
else
|
64
66
|
case ask_user("Unable to safely move '#{removed_field_name}' to '#{target}'. Keep the original column for now?", %W{Yes No}, true)
|
65
67
|
when 'No' then delete_column(removed_field_name, db_schema[removed_field_name])
|
66
68
|
end
|
@@ -89,7 +91,7 @@ module Migrant
|
|
89
91
|
# Example: changed_table_added_something_and_modified_something
|
90
92
|
@activity = 'changed_'+model.table_name+[['added', @columns[:added]], ['modified', @columns[:changed]], ['deleted', destroyed_columns],
|
91
93
|
['moved', @columns[:transferred]], ['renamed', @columns[:renamed]], ['indexed', @new_indexes]].reject { |v| v[1].empty? }.collect { |v| "_#{v[0]}_"+v[1].collect(&:first).join('_') }.join('_and')
|
92
|
-
@activity = @activity.split('_')[0..2].join('_') if @activity.length >= 240 # Most filesystems will raise Errno::ENAMETOOLONG otherwise
|
94
|
+
@activity = @activity.split('_')[0..2].join('_')+'_with_multiple_changes' if @activity.length >= 240 # Most filesystems will raise Errno::ENAMETOOLONG otherwise
|
93
95
|
|
94
96
|
render('change_migration')
|
95
97
|
else
|
data/migrant.gemspec
CHANGED
@@ -7,7 +7,7 @@ Gem::Specification.new do |s|
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Pascal Houliston"]
|
9
9
|
s.date = %q{2011-05-23}
|
10
|
-
s.description = %q{Easier schema management for Rails that
|
10
|
+
s.description = %q{Easier schema management for Rails that complements your domain model.}
|
11
11
|
s.email = %q{101pascal@gmail.com}
|
12
12
|
s.extra_rdoc_files = [
|
13
13
|
"LICENSE",
|
@@ -19,7 +19,7 @@ Gem::Specification.new do |s|
|
|
19
19
|
s.homepage = %q{http://github.com/pascalh1011/migrant}
|
20
20
|
s.require_paths = ["lib"]
|
21
21
|
s.rubygems_version = %q{1.5.2}
|
22
|
-
s.summary = %q{All the fun of ActiveRecord
|
22
|
+
s.summary = %q{All the fun of ActiveRecord without writing your migrations, and with a dash of mocking.}
|
23
23
|
|
24
24
|
s.add_development_dependency(%q<thoughtbot-shoulda>, [">= 0"])
|
25
25
|
s.add_development_dependency(%q<minitest>, [">= 1.6.0"])
|
data/test/helper.rb
CHANGED
@@ -61,7 +61,7 @@ Dir.glob(File.join(File.dirname(__FILE__), 'rails_app', 'db', 'migrate', '*')).e
|
|
61
61
|
File.delete(file)
|
62
62
|
end
|
63
63
|
|
64
|
-
require File.join(File.dirname(__FILE__), 'rails_app', 'config', 'environment')
|
64
|
+
#require File.join(File.dirname(__FILE__), 'rails_app', 'config', 'environment')
|
65
65
|
|
66
66
|
class Test::Unit::TestCase
|
67
67
|
end
|
@@ -28,7 +28,16 @@ class TestMigrationGenerator < Test::Unit::TestCase
|
|
28
28
|
return
|
29
29
|
end
|
30
30
|
end
|
31
|
-
flunk "No migration could be found"
|
31
|
+
flunk "No migration could be found like '#{template}'"
|
32
|
+
end
|
33
|
+
|
34
|
+
def any_template_match?(template)
|
35
|
+
Dir.glob(File.join(File.dirname(__FILE__), 'rails_app', 'db' ,'migrate', '*.rb')).each do |migration_file|
|
36
|
+
if migration_file.include?(template)
|
37
|
+
return true
|
38
|
+
end
|
39
|
+
end
|
40
|
+
false
|
32
41
|
end
|
33
42
|
|
34
43
|
def delete_last_migration
|
@@ -81,11 +90,14 @@ class TestMigrationGenerator < Test::Unit::TestCase
|
|
81
90
|
run_against_template('created_at')
|
82
91
|
end
|
83
92
|
|
84
|
-
should "
|
93
|
+
should "prompt the user to confirm changing existing columns where data loss may occur" do
|
94
|
+
STDIN._mock_responses('N')
|
95
|
+
|
85
96
|
Business.structure do
|
86
97
|
landline :integer # Was previously a string, which obviously may incur data loss
|
87
98
|
end
|
88
|
-
|
99
|
+
Migrant::MigrationGenerator.new.run
|
100
|
+
assert(any_template_match?('modified_landline'), 'Ignored a request not to generate a dangerous migration!')
|
89
101
|
Business.structure do
|
90
102
|
landline :text # Undo our bad for the next tests
|
91
103
|
end
|
@@ -161,20 +173,6 @@ class TestMigrationGenerator < Test::Unit::TestCase
|
|
161
173
|
end
|
162
174
|
|
163
175
|
|
164
|
-
should "remove extraneous text from a filename too large for the operating system" do
|
165
|
-
BusinessCategory.structure do
|
166
|
-
a_very_very_long_field_indeed_far_too_long_for_any_good_use_really true
|
167
|
-
a_very_very_long_field_indeed_far_too_long_for_any_good_use_really_2 true
|
168
|
-
a_very_very_long_field_indeed_far_too_long_for_any_good_use_really_3 true
|
169
|
-
end
|
170
|
-
|
171
|
-
BusinessCategory.belongs_to(:verylongclassthatissuretogenerateaverylargeoutputfilename)
|
172
|
-
generate_migrations
|
173
|
-
delete_last_migration # Can't actually test migration because the index name is too long!
|
174
|
-
# BusinessCategory.schema.undo_structure_column(:verylongclassthatissuretogenerateaverylargeoutputfilename_id)
|
175
|
-
BusinessCategory.reset_structure!
|
176
|
-
end
|
177
|
-
|
178
176
|
should "remove columns when requested and confirmed by the user" do
|
179
177
|
Chameleon.structure
|
180
178
|
Chameleon.reset_structure!
|
metadata
CHANGED
@@ -1,172 +1,170 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: migrant
|
3
|
-
version: !ruby/object:Gem::Version
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.3.1
|
4
5
|
prerelease:
|
5
|
-
version: 1.3.0
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
7
|
+
authors:
|
8
8
|
- Pascal Houliston
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2011-05-23 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
16
15
|
name: thoughtbot-shoulda
|
17
|
-
|
18
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: &74513810 !ruby/object:Gem::Requirement
|
19
17
|
none: false
|
20
|
-
requirements:
|
21
|
-
- -
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version:
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
24
22
|
type: :development
|
25
|
-
version_requirements: *id001
|
26
|
-
- !ruby/object:Gem::Dependency
|
27
|
-
name: minitest
|
28
23
|
prerelease: false
|
29
|
-
|
24
|
+
version_requirements: *74513810
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: minitest
|
27
|
+
requirement: &74513520 !ruby/object:Gem::Requirement
|
30
28
|
none: false
|
31
|
-
requirements:
|
32
|
-
- -
|
33
|
-
- !ruby/object:Gem::Version
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
34
32
|
version: 1.6.0
|
35
33
|
type: :development
|
36
|
-
version_requirements: *id002
|
37
|
-
- !ruby/object:Gem::Dependency
|
38
|
-
name: ansi
|
39
34
|
prerelease: false
|
40
|
-
|
35
|
+
version_requirements: *74513520
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: ansi
|
38
|
+
requirement: &74513240 !ruby/object:Gem::Requirement
|
41
39
|
none: false
|
42
|
-
requirements:
|
43
|
-
- -
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
version:
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
46
44
|
type: :development
|
47
|
-
version_requirements: *id003
|
48
|
-
- !ruby/object:Gem::Dependency
|
49
|
-
name: turn
|
50
45
|
prerelease: false
|
51
|
-
|
46
|
+
version_requirements: *74513240
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: turn
|
49
|
+
requirement: &74512790 !ruby/object:Gem::Requirement
|
52
50
|
none: false
|
53
|
-
requirements:
|
54
|
-
- -
|
55
|
-
- !ruby/object:Gem::Version
|
56
|
-
version:
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
57
55
|
type: :development
|
58
|
-
version_requirements: *id004
|
59
|
-
- !ruby/object:Gem::Dependency
|
60
|
-
name: sqlite3
|
61
56
|
prerelease: false
|
62
|
-
|
57
|
+
version_requirements: *74512790
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: sqlite3
|
60
|
+
requirement: &74512220 !ruby/object:Gem::Requirement
|
63
61
|
none: false
|
64
|
-
requirements:
|
65
|
-
- -
|
66
|
-
- !ruby/object:Gem::Version
|
67
|
-
version:
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
68
66
|
type: :development
|
69
|
-
version_requirements: *id005
|
70
|
-
- !ruby/object:Gem::Dependency
|
71
|
-
name: simplecov
|
72
67
|
prerelease: false
|
73
|
-
|
68
|
+
version_requirements: *74512220
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: simplecov
|
71
|
+
requirement: &74511770 !ruby/object:Gem::Requirement
|
74
72
|
none: false
|
75
|
-
requirements:
|
76
|
-
- -
|
77
|
-
- !ruby/object:Gem::Version
|
78
|
-
version:
|
73
|
+
requirements:
|
74
|
+
- - ! '>='
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
79
77
|
type: :development
|
80
|
-
version_requirements: *id006
|
81
|
-
- !ruby/object:Gem::Dependency
|
82
|
-
name: terminal-table
|
83
78
|
prerelease: false
|
84
|
-
|
79
|
+
version_requirements: *74511770
|
80
|
+
- !ruby/object:Gem::Dependency
|
81
|
+
name: terminal-table
|
82
|
+
requirement: &74511520 !ruby/object:Gem::Requirement
|
85
83
|
none: false
|
86
|
-
requirements:
|
87
|
-
- -
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version:
|
84
|
+
requirements:
|
85
|
+
- - ! '>='
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: '0'
|
90
88
|
type: :development
|
91
|
-
version_requirements: *id007
|
92
|
-
- !ruby/object:Gem::Dependency
|
93
|
-
name: term-ansicolor
|
94
89
|
prerelease: false
|
95
|
-
|
90
|
+
version_requirements: *74511520
|
91
|
+
- !ruby/object:Gem::Dependency
|
92
|
+
name: term-ansicolor
|
93
|
+
requirement: &74511130 !ruby/object:Gem::Requirement
|
96
94
|
none: false
|
97
|
-
requirements:
|
98
|
-
- -
|
99
|
-
- !ruby/object:Gem::Version
|
100
|
-
version:
|
95
|
+
requirements:
|
96
|
+
- - ! '>='
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '0'
|
101
99
|
type: :development
|
102
|
-
version_requirements: *id008
|
103
|
-
- !ruby/object:Gem::Dependency
|
104
|
-
name: rake
|
105
100
|
prerelease: false
|
106
|
-
|
101
|
+
version_requirements: *74511130
|
102
|
+
- !ruby/object:Gem::Dependency
|
103
|
+
name: rake
|
104
|
+
requirement: &74510740 !ruby/object:Gem::Requirement
|
107
105
|
none: false
|
108
|
-
requirements:
|
109
|
-
- -
|
110
|
-
- !ruby/object:Gem::Version
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
111
109
|
version: 0.8.7
|
112
110
|
type: :development
|
113
|
-
version_requirements: *id009
|
114
|
-
- !ruby/object:Gem::Dependency
|
115
|
-
name: simplecov
|
116
111
|
prerelease: false
|
117
|
-
|
112
|
+
version_requirements: *74510740
|
113
|
+
- !ruby/object:Gem::Dependency
|
114
|
+
name: simplecov
|
115
|
+
requirement: &74510150 !ruby/object:Gem::Requirement
|
118
116
|
none: false
|
119
|
-
requirements:
|
120
|
-
- -
|
121
|
-
- !ruby/object:Gem::Version
|
122
|
-
version:
|
117
|
+
requirements:
|
118
|
+
- - ! '>='
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
version: '0'
|
123
121
|
type: :development
|
124
|
-
version_requirements: *id010
|
125
|
-
- !ruby/object:Gem::Dependency
|
126
|
-
name: rails
|
127
122
|
prerelease: false
|
128
|
-
|
123
|
+
version_requirements: *74510150
|
124
|
+
- !ruby/object:Gem::Dependency
|
125
|
+
name: rails
|
126
|
+
requirement: &74509790 !ruby/object:Gem::Requirement
|
129
127
|
none: false
|
130
|
-
requirements:
|
131
|
-
- -
|
132
|
-
- !ruby/object:Gem::Version
|
128
|
+
requirements:
|
129
|
+
- - ! '>='
|
130
|
+
- !ruby/object:Gem::Version
|
133
131
|
version: 3.0.0
|
134
132
|
type: :runtime
|
135
|
-
version_requirements: *id011
|
136
|
-
- !ruby/object:Gem::Dependency
|
137
|
-
name: faker
|
138
133
|
prerelease: false
|
139
|
-
|
134
|
+
version_requirements: *74509790
|
135
|
+
- !ruby/object:Gem::Dependency
|
136
|
+
name: faker
|
137
|
+
requirement: &74509550 !ruby/object:Gem::Requirement
|
140
138
|
none: false
|
141
|
-
requirements:
|
142
|
-
- -
|
143
|
-
- !ruby/object:Gem::Version
|
144
|
-
version:
|
139
|
+
requirements:
|
140
|
+
- - ! '>='
|
141
|
+
- !ruby/object:Gem::Version
|
142
|
+
version: '0'
|
145
143
|
type: :runtime
|
146
|
-
version_requirements: *id012
|
147
|
-
- !ruby/object:Gem::Dependency
|
148
|
-
name: term-ansicolor
|
149
144
|
prerelease: false
|
150
|
-
|
145
|
+
version_requirements: *74509550
|
146
|
+
- !ruby/object:Gem::Dependency
|
147
|
+
name: term-ansicolor
|
148
|
+
requirement: &74509240 !ruby/object:Gem::Requirement
|
151
149
|
none: false
|
152
|
-
requirements:
|
153
|
-
- -
|
154
|
-
- !ruby/object:Gem::Version
|
155
|
-
version:
|
150
|
+
requirements:
|
151
|
+
- - ! '>='
|
152
|
+
- !ruby/object:Gem::Version
|
153
|
+
version: '0'
|
156
154
|
type: :runtime
|
157
|
-
|
158
|
-
|
155
|
+
prerelease: false
|
156
|
+
version_requirements: *74509240
|
157
|
+
description: Easier schema management for Rails that complements your domain model.
|
159
158
|
email: 101pascal@gmail.com
|
160
159
|
executables: []
|
161
|
-
|
162
160
|
extensions: []
|
163
|
-
|
164
|
-
extra_rdoc_files:
|
161
|
+
extra_rdoc_files:
|
165
162
|
- LICENSE
|
166
163
|
- README.rdoc
|
167
|
-
files:
|
164
|
+
files:
|
168
165
|
- .gitignore
|
169
166
|
- .rvmrc
|
167
|
+
- .travis.yml
|
170
168
|
- Gemfile
|
171
169
|
- LICENSE
|
172
170
|
- README.rdoc
|
@@ -249,30 +247,27 @@ files:
|
|
249
247
|
- test/verified_output/migrations/renamed_old_spots.rb
|
250
248
|
homepage: http://github.com/pascalh1011/migrant
|
251
249
|
licenses: []
|
252
|
-
|
253
250
|
post_install_message:
|
254
251
|
rdoc_options: []
|
255
|
-
|
256
|
-
require_paths:
|
252
|
+
require_paths:
|
257
253
|
- lib
|
258
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
254
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
259
255
|
none: false
|
260
|
-
requirements:
|
261
|
-
- -
|
262
|
-
- !ruby/object:Gem::Version
|
263
|
-
version:
|
264
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
256
|
+
requirements:
|
257
|
+
- - ! '>='
|
258
|
+
- !ruby/object:Gem::Version
|
259
|
+
version: '0'
|
260
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
265
261
|
none: false
|
266
|
-
requirements:
|
267
|
-
- -
|
268
|
-
- !ruby/object:Gem::Version
|
269
|
-
version:
|
262
|
+
requirements:
|
263
|
+
- - ! '>='
|
264
|
+
- !ruby/object:Gem::Version
|
265
|
+
version: '0'
|
270
266
|
requirements: []
|
271
|
-
|
272
267
|
rubyforge_project:
|
273
|
-
rubygems_version: 1.8.
|
268
|
+
rubygems_version: 1.8.16
|
274
269
|
signing_key:
|
275
270
|
specification_version: 3
|
276
|
-
summary: All the fun of ActiveRecord
|
271
|
+
summary: All the fun of ActiveRecord without writing your migrations, and with a dash
|
272
|
+
of mocking.
|
277
273
|
test_files: []
|
278
|
-
|