jonbell-mongrations 0.1.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,2 @@
1
+ *.swp
2
+ *~
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2010 [name of plugin creator]
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.markdown ADDED
@@ -0,0 +1,56 @@
1
+ Mongrations
2
+ ===========
3
+
4
+ Mongrations aims to be similar to ActiveRecord's data migrations, except
5
+ instead of worrying about schema changes, offering a way to change data when
6
+ necessary.
7
+
8
+ Example: You decide after a few weeks of running an application that you want
9
+ to add timestamps, and want to display the created_at time for an application.
10
+
11
+ You could put a default timestamp into the model (and in this case that might
12
+ be appropriate), but you might also just want to say, "everything needs to get
13
+ a new timestamp that doesn't already have one, let's say when the US beat
14
+ Canada in hockey in the Olympics."
15
+
16
+
17
+ Example
18
+ =======
19
+
20
+ To generate a mongration, just do:
21
+
22
+ `script/generate mongration whatever_you_want_your_mongration_to_be`
23
+
24
+ To run it, do
25
+
26
+ `rake db:mongrate`
27
+
28
+ Other rake tasks added have been `db:mongrate:redo`, `db:mongrate:up`, `db:mongrate:down`, `db:mongrate:rollback`.
29
+
30
+
31
+ Dependencies
32
+ ============
33
+
34
+ You need Mongo and MongoMapper for this to be of any use.
35
+
36
+ Also, this has only been tested on Rails 3.2.3.
37
+
38
+ Disclaimer
39
+ ==========
40
+
41
+ *This is not ready for production*
42
+
43
+ I just adapted this, at 10:30PM, half watching the Olympics. I'm not responsible
44
+ for any damage to your data, your mongodb, your bongos, your cat, your wife, or
45
+ your kids as a result of installing this plugin.
46
+
47
+ Give it a few days. Please report bugs.
48
+
49
+ Credit
50
+ ======
51
+ Original code is from Rails 2.3.5 and ActiveRecord 2.3.5, now adapted to work
52
+ with MongoMapper.
53
+
54
+ License
55
+ =======
56
+ Released under the MIT license
data/Rakefile ADDED
@@ -0,0 +1,23 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'rake/testtask'
4
+ require 'rake/rdoctask'
5
+
6
+ begin
7
+ require 'jeweler'
8
+ Jeweler::Tasks.new do |gem|
9
+ gem.name = "jonbell-mongrations"
10
+ gem.summary = %Q{Data migrating for MongoMapper}
11
+ gem.description = %Q{Mongrations aims to be similar to ActiveRecord's data migrations, except
12
+ instead of worrying about schema changes, offering a way to change data when
13
+ necessary}
14
+ gem.email = "jonbell@spamcop.net"
15
+ gem.homepage = "http://github.com/jonbell/mongrations"
16
+ gem.authors = ["jonbell"]
17
+ gem.add_dependency "mongo_mapper", ">= 0.11.0"
18
+ # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
19
+ end
20
+ Jeweler::GemcutterTasks.new
21
+ rescue LoadError
22
+ puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
23
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.0
@@ -0,0 +1,15 @@
1
+ Rails::Generator::Commands::Base.class_eval do
2
+ def next_migration_string(padding = 3)
3
+ Time.now.utc.strftime("%Y%m%d%H%M%S")
4
+ end
5
+ end
6
+
7
+ class MongrationGenerator < Rails::Generator::NamedBase
8
+
9
+ def manifest
10
+ record do |m|
11
+ m.directory File.join('db/mongrations')
12
+ m.migration_template 'mongration.rb', 'db/mongrations'
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,7 @@
1
+ class <%= class_name.underscore.camelize %> < MongoMapper::Mongration
2
+ def self.up
3
+ end
4
+
5
+ def self.down
6
+ end
7
+ end
data/init.rb ADDED
@@ -0,0 +1,8 @@
1
+ # Include hook code here
2
+ require "mongo_mapper"
3
+
4
+ require File.join(File.dirname(__FILE__), "lib", "mongration")
5
+ require File.join(File.dirname(__FILE__), "lib", "mongo_mapper", "mongration")
6
+ require File.join(File.dirname(__FILE__), "lib", "mongo_mapper", "migration_proxy")
7
+ require File.join(File.dirname(__FILE__), "lib", "mongo_mapper", "migrator")
8
+ require File.join(File.dirname(__FILE__), "lib", "mongo_mapper", "schema_migration")
data/install.rb ADDED
@@ -0,0 +1 @@
1
+ # Install hook code here
@@ -0,0 +1,30 @@
1
+ module MongoMapper
2
+ class MongoMapperError < StandardError; end
3
+
4
+ class IrreversibleMigration < MongoMapperError#:nodoc:
5
+ end
6
+
7
+ class DuplicateMigrationVersionError < MongoMapperError#:nodoc:
8
+ def initialize(version)
9
+ super("Multiple migrations have the version number #{version}")
10
+ end
11
+ end
12
+
13
+ class DuplicateMigrationNameError < MongoMapperError#:nodoc:
14
+ def initialize(name)
15
+ super("Multiple migrations have the name #{name}")
16
+ end
17
+ end
18
+
19
+ class UnknownMigrationVersionError < MongoMapperError #:nodoc:
20
+ def initialize(version)
21
+ super("No migration with version number #{version}")
22
+ end
23
+ end
24
+
25
+ class IllegalMigrationNameError < MongoMapperError#:nodoc:
26
+ def initialize(name)
27
+ super("Illegal name for migration file: #{name}\n\t(only lower case letters, numbers, and '_' allowed)")
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,22 @@
1
+ # MigrationProxy is used to defer loading of the actual migration classes
2
+ # until they are needed
3
+ module MongoMapper
4
+ class MigrationProxy
5
+
6
+ attr_accessor :name, :version, :filename
7
+
8
+ delegate :migrate, :announce, :write, :to=>:migration
9
+
10
+ private
11
+
12
+ def migration
13
+ @migration ||= load_migration
14
+ end
15
+
16
+ def load_migration
17
+ load(filename)
18
+ name.constantize
19
+ end
20
+
21
+ end
22
+ end
@@ -0,0 +1,169 @@
1
+ module MongoMapper
2
+ class Migrator#:nodoc:
3
+ class << self
4
+ def migrate(migrations_path, target_version = nil)
5
+ case
6
+ when target_version.nil? then up(migrations_path, target_version)
7
+ when current_version > target_version then down(migrations_path, target_version)
8
+ else up(migrations_path, target_version)
9
+ end
10
+ end
11
+
12
+ def rollback(migrations_path, steps=1)
13
+ migrator = self.new(:down, migrations_path)
14
+ start_index = migrator.migrations.index(migrator.current_migration)
15
+
16
+ return unless start_index
17
+
18
+ finish = migrator.migrations[start_index + steps]
19
+ down(migrations_path, finish ? finish.version : 0)
20
+ end
21
+
22
+ def up(migrations_path, target_version = nil)
23
+ self.new(:up, migrations_path, target_version).migrate
24
+ end
25
+
26
+ def down(migrations_path, target_version = nil)
27
+ self.new(:down, migrations_path, target_version).migrate
28
+ end
29
+
30
+ def run(direction, migrations_path, target_version)
31
+ self.new(direction, migrations_path, target_version).run
32
+ end
33
+
34
+ def get_all_versions
35
+ MongoMapper::SchemaMigration.all.map{|sm| sm.version.to_i}.sort
36
+ end
37
+
38
+ def current_version
39
+ get_all_versions.max || 0
40
+ end
41
+
42
+ def proper_table_name(name)
43
+ # Use the Active Record objects own table_name, or pre/suffix from MongoMapper::Base if name is a symbol/string
44
+ name.table_name rescue "#{MongoMapper::Base.table_name_prefix}#{name}#{MongoMapper::Base.table_name_suffix}"
45
+ end
46
+ end
47
+
48
+ def initialize(direction, migrations_path, target_version = nil)
49
+ @direction, @migrations_path, @target_version = direction, migrations_path, target_version
50
+ end
51
+
52
+ def current_version
53
+ migrated.last || 0
54
+ end
55
+
56
+ def current_migration
57
+ migrations.detect { |m| m.version == current_version }
58
+ end
59
+
60
+ def run
61
+ target = migrations.detect { |m| m.version == @target_version }
62
+ raise UnknownMigrationVersionError.new(@target_version) if target.nil?
63
+ unless (up? && migrated.include?(target.version.to_i)) || (down? && !migrated.include?(target.version.to_i))
64
+ target.migrate(@direction)
65
+ record_version_state_after_migrating(target.version)
66
+ end
67
+ end
68
+
69
+ def migrate
70
+ current = migrations.detect { |m| m.version == current_version }
71
+ target = migrations.detect { |m| m.version == @target_version }
72
+
73
+ if target.nil? && !@target_version.nil? && @target_version > 0
74
+ raise UnknownMigrationVersionError.new(@target_version)
75
+ end
76
+
77
+ start = up? ? 0 : (migrations.index(current) || 0)
78
+ finish = migrations.index(target) || migrations.size - 1
79
+ runnable = migrations[start..finish]
80
+
81
+ # skip the last migration if we're headed down, but not ALL the way down
82
+ runnable.pop if down? && !target.nil?
83
+
84
+ runnable.each do |migration|
85
+ # On our way up, we skip migrating the ones we've already migrated
86
+ next if up? && migrated.include?(migration.version.to_i)
87
+
88
+ # On our way down, we skip reverting the ones we've never migrated
89
+ if down? && !migrated.include?(migration.version.to_i)
90
+ migration.announce 'never migrated, skipping'; migration.write
91
+ next
92
+ end
93
+
94
+ migration.migrate(@direction)
95
+ record_version_state_after_migrating(migration.version)
96
+ end
97
+ end
98
+
99
+ def migrations
100
+ @migrations ||= begin
101
+ files = Dir["#{@migrations_path}/[0-9]*_*.rb"]
102
+
103
+ migrations = files.inject([]) do |klasses, file|
104
+ version, name = file.scan(/([0-9]+)_([_a-z0-9]*).rb/).first
105
+
106
+ raise IllegalMigrationNameError.new(file) unless version
107
+ version = version.to_i
108
+
109
+ if klasses.detect { |m| m.version == version }
110
+ raise DuplicateMigrationVersionError.new(version)
111
+ end
112
+
113
+ if klasses.detect { |m| m.name == name.camelize }
114
+ raise DuplicateMigrationNameError.new(name.camelize)
115
+ end
116
+
117
+ klasses << returning(MigrationProxy.new) do |migration|
118
+ migration.name = name.camelize
119
+ migration.version = version
120
+ migration.filename = file
121
+ end
122
+ end
123
+
124
+ migrations = migrations.sort_by(&:version)
125
+ down? ? migrations.reverse : migrations
126
+ end
127
+ end
128
+
129
+ def pending_migrations
130
+ already_migrated = migrated
131
+ migrations.reject { |m| already_migrated.include?(m.version.to_i) }
132
+ end
133
+
134
+ def migrated
135
+ @migrated_versions ||= self.class.get_all_versions
136
+ end
137
+
138
+ private
139
+ def record_version_state_after_migrating(version)
140
+ @migrated_versions ||= []
141
+ if down?
142
+ @migrated_versions.delete(version.to_i)
143
+ sm = MongoMapper::SchemaMigration.find_by_version(version.to_s)
144
+ sm && sm.delete
145
+ else
146
+ @migrated_versions.push(version.to_i).sort!
147
+ MongoMapper::SchemaMigration.create(:version => version)
148
+ end
149
+ end
150
+
151
+ def up?
152
+ @direction == :up
153
+ end
154
+
155
+ def down?
156
+ @direction == :down
157
+ end
158
+
159
+ # Wrap the migration in a transaction only if supported by the adapter.
160
+ def ddl_transaction(&block)
161
+ if Base.connection.supports_ddl_transactions?
162
+ Base.transaction { block.call }
163
+ else
164
+ block.call
165
+ end
166
+ end
167
+ end
168
+
169
+ end
@@ -0,0 +1,96 @@
1
+ module MongoMapper
2
+ class Mongration
3
+ @@verbose = true
4
+ cattr_accessor :verbose
5
+
6
+ class << self
7
+ def up_with_benchmarks #:nodoc:
8
+ migrate(:up)
9
+ end
10
+
11
+ # Execute this migration in the named direction
12
+ def migrate(direction)
13
+ return unless respond_to?(direction)
14
+
15
+ case direction
16
+ when :up then announce "migrating"
17
+ when :down then announce "reverting"
18
+ end
19
+
20
+ result = nil
21
+ time = Benchmark.measure { result = send("#{direction}_without_benchmarks") }
22
+
23
+ case direction
24
+ when :up then announce "migrated (%.4fs)" % time.real; write
25
+ when :down then announce "reverted (%.4fs)" % time.real; write
26
+ end
27
+
28
+ result
29
+ end
30
+
31
+ # Because the method added may do an alias_method, it can be invoked
32
+ # recursively. We use @ignore_new_methods as a guard to indicate whether
33
+ # it is safe for the call to proceed.
34
+ def singleton_method_added(sym) #:nodoc:
35
+ return if defined?(@ignore_new_methods) && @ignore_new_methods
36
+
37
+ begin
38
+ @ignore_new_methods = true
39
+
40
+ case sym
41
+ when :up, :down
42
+ klass = (class << self; self; end)
43
+ klass.send(:alias_method_chain, sym, "benchmarks")
44
+ end
45
+ ensure
46
+ @ignore_new_methods = false
47
+ end
48
+ end
49
+
50
+ def write(text="")
51
+ puts(text) if verbose
52
+ end
53
+
54
+ def announce(message)
55
+ text = "#{@version} #{name}: #{message}"
56
+ length = [0, 75 - text.length].max
57
+ write "== %s %s" % [text, "=" * length]
58
+ end
59
+
60
+ def say(message, subitem=false)
61
+ write "#{subitem ? " ->" : "--"} #{message}"
62
+ end
63
+
64
+ def say_with_time(message)
65
+ say(message)
66
+ result = nil
67
+ time = Benchmark.measure { result = yield }
68
+ say "%.4fs" % time.real, :subitem
69
+ say("#{result} rows", :subitem) if result.is_a?(Integer)
70
+ result
71
+ end
72
+
73
+ def suppress_messages
74
+ save, self.verbose = verbose, false
75
+ yield
76
+ ensure
77
+ self.verbose = save
78
+ end
79
+
80
+ def connection
81
+ MongoMapper.connection
82
+ end
83
+
84
+ def method_missing(method, *arguments, &block)
85
+ arg_list = arguments.map(&:inspect) * ', '
86
+
87
+ say_with_time "#{method}(#{arg_list})" do
88
+ unless arguments.empty? || method == :execute
89
+ arguments[0] = Migrator.proper_table_name(arguments.first)
90
+ end
91
+ connection.send(method, *arguments, &block)
92
+ end
93
+ end
94
+ end
95
+ end
96
+ end
@@ -0,0 +1,8 @@
1
+ module MongoMapper
2
+ class SchemaMigration
3
+ include MongoMapper::Document
4
+
5
+ key :version, String
6
+
7
+ end
8
+ end
@@ -0,0 +1,17 @@
1
+ require 'mongo_mapper'
2
+
3
+ module MongoMapper
4
+ autoload :MongoMapperError, 'mongo_mapper/exceptions'
5
+ autoload :IrreversibleMigration, 'mongo_mapper/exceptions'
6
+ autoload :DuplicateMigrationVersionError, 'mongo_mapper/exceptions'
7
+ autoload :DuplicateMigrationNameError, 'mongo_mapper/exceptions'
8
+ autoload :UnknownMigrationVersionError, 'mongo_mapper/exceptions'
9
+ autoload :IllegalMigrationNameError, 'mongo_mapper/exceptions'
10
+
11
+ autoload :MigrationProxy, 'mongo_mapper/migration_proxy'
12
+ autoload :Migrator, 'mongo_mapper/migrator'
13
+ autoload :Mongration, 'mongo_mapper/mongration'
14
+ autoload :SchemaMigration, 'mongo_mapper/schema_migration'
15
+ end
16
+
17
+ require 'mongrations/railtie' if defined?(Rails)
@@ -0,0 +1,10 @@
1
+ require 'rails'
2
+ require File.join(File.dirname(__FILE__), '..', 'mongrations')
3
+
4
+ module Mongrations
5
+ class Railtie < Rails::Railtie
6
+ rake_tasks do
7
+ load File.join(File.dirname(__FILE__), '..', '..', 'tasks', 'mongo.rake')
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,39 @@
1
+ namespace :mongo do
2
+ desc "Migrate the database through scripts in db/mongrations. Target specific version with VERSION=x."
3
+ task :mongrate => :environment do
4
+ MongoMapper::Migrator.migrate("db/mongrations/", ENV["VERSION"] ? ENV["VERSION"].to_i : nil)
5
+ end
6
+
7
+ namespace :mongrate do
8
+ desc 'Rollbacks the database one mongration and re migrate up. If you want to rollback more than one step, define STEP=x. Target specific version with VERSION=x.'
9
+ task :redo => :environment do
10
+ if ENV["VERSION"]
11
+ Rake::Task["mongo:mongrate:down"].invoke
12
+ Rake::Task["mongo:mongrate:up"].invoke
13
+ else
14
+ Rake::Task["mongo:mongo_rollback"].invoke
15
+ Rake::Task["mongo:mongrate"].invoke
16
+ end
17
+ end
18
+
19
+ desc 'Runs the "up" for a given mongration VERSION.'
20
+ task :up => :environment do
21
+ version = ENV["VERSION"] ? ENV["VERSION"].to_i : nil
22
+ raise "VERSION is required" unless version
23
+ MongoMapper::Migrator.run(:up, "db/mongrations/", version)
24
+ end
25
+
26
+ desc 'Runs the "down" for a given mongration VERSION.'
27
+ task :down => :environment do
28
+ version = ENV["VERSION"] ? ENV["VERSION"].to_i : nil
29
+ raise "VERSION is required" unless version
30
+ MongoMapper::Migrator.run(:down, "db/mongrations/", version)
31
+ end
32
+ end
33
+
34
+ desc 'Rolls the schema back to the previous version. Specify the number of steps with STEP=n'
35
+ task :mongo_rollback => :environment do
36
+ step = ENV['STEP'] ? ENV['STEP'].to_i : 1
37
+ MongoMapper::Migrator.rollback('db/mongrations/', step)
38
+ end
39
+ end
data/tasks/mongo.rake ADDED
@@ -0,0 +1,39 @@
1
+ namespace :mongo do
2
+ desc "Migrate the database through scripts in db/mongrations. Target specific version with VERSION=x."
3
+ task :mongrate => :environment do
4
+ MongoMapper::Migrator.migrate("db/mongrations/", ENV["VERSION"] ? ENV["VERSION"].to_i : nil)
5
+ end
6
+
7
+ namespace :mongrate do
8
+ desc 'Rollbacks the database one mongration and re migrate up. If you want to rollback more than one step, define STEP=x. Target specific version with VERSION=x.'
9
+ task :redo => :environment do
10
+ if ENV["VERSION"]
11
+ Rake::Task["mongo:mongrate:down"].invoke
12
+ Rake::Task["mongo:mongrate:up"].invoke
13
+ else
14
+ Rake::Task["mongo:mongo_rollback"].invoke
15
+ Rake::Task["mongo:mongrate"].invoke
16
+ end
17
+ end
18
+
19
+ desc 'Runs the "up" for a given mongration VERSION.'
20
+ task :up => :environment do
21
+ version = ENV["VERSION"] ? ENV["VERSION"].to_i : nil
22
+ raise "VERSION is required" unless version
23
+ MongoMapper::Migrator.run(:up, "db/mongrations/", version)
24
+ end
25
+
26
+ desc 'Runs the "down" for a given mongration VERSION.'
27
+ task :down => :environment do
28
+ version = ENV["VERSION"] ? ENV["VERSION"].to_i : nil
29
+ raise "VERSION is required" unless version
30
+ MongoMapper::Migrator.run(:down, "db/mongrations/", version)
31
+ end
32
+ end
33
+
34
+ desc 'Rolls the schema back to the previous version. Specify the number of steps with STEP=n'
35
+ task :mongo_rollback => :environment do
36
+ step = ENV['STEP'] ? ENV['STEP'].to_i : 1
37
+ MongoMapper::Migrator.rollback('db/mongrations/', step)
38
+ end
39
+ end
@@ -0,0 +1,8 @@
1
+ require 'test_helper'
2
+
3
+ class MongrationsTest < ActiveSupport::TestCase
4
+ # Replace this with your real tests.
5
+ test "the truth" do
6
+ assert true
7
+ end
8
+ end
@@ -0,0 +1,3 @@
1
+ require 'rubygems'
2
+ require 'active_support'
3
+ require 'active_support/test_case'
data/uninstall.rb ADDED
@@ -0,0 +1 @@
1
+ # Uninstall hook code here
metadata ADDED
@@ -0,0 +1,99 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jonbell-mongrations
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 1
8
+ - 0
9
+ version: 0.1.0
10
+ platform: ruby
11
+ authors:
12
+ - jonbell
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2012-04-05 00:00:00 -05:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: mongo_mapper
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 0
29
+ - 11
30
+ - 0
31
+ version: 0.11.0
32
+ type: :runtime
33
+ version_requirements: *id001
34
+ description: |-
35
+ Mongrations aims to be similar to ActiveRecord's data migrations, except
36
+ instead of worrying about schema changes, offering a way to change data when
37
+ necessary
38
+ email: jonbell@spamcop.net
39
+ executables: []
40
+
41
+ extensions: []
42
+
43
+ extra_rdoc_files:
44
+ - README.markdown
45
+ files:
46
+ - .gitignore
47
+ - MIT-LICENSE
48
+ - README.markdown
49
+ - Rakefile
50
+ - VERSION
51
+ - generators/mongration/mongration_generator.rb
52
+ - generators/mongration/templates/mongration.rb
53
+ - init.rb
54
+ - install.rb
55
+ - lib/mongo_mapper/exceptions.rb
56
+ - lib/mongo_mapper/migration_proxy.rb
57
+ - lib/mongo_mapper/migrator.rb
58
+ - lib/mongo_mapper/mongration.rb
59
+ - lib/mongo_mapper/schema_migration.rb
60
+ - lib/mongrations.rb
61
+ - lib/mongrations/railtie.rb
62
+ - lib/tasks/mongo.rake
63
+ - tasks/mongo.rake
64
+ - test/mongrations_test.rb
65
+ - test/test_helper.rb
66
+ - uninstall.rb
67
+ has_rdoc: true
68
+ homepage: http://github.com/jonbell/mongrations
69
+ licenses: []
70
+
71
+ post_install_message:
72
+ rdoc_options:
73
+ - --charset=UTF-8
74
+ require_paths:
75
+ - lib
76
+ required_ruby_version: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ segments:
81
+ - 0
82
+ version: "0"
83
+ required_rubygems_version: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - ">="
86
+ - !ruby/object:Gem::Version
87
+ segments:
88
+ - 0
89
+ version: "0"
90
+ requirements: []
91
+
92
+ rubyforge_project:
93
+ rubygems_version: 1.3.6
94
+ signing_key:
95
+ specification_version: 3
96
+ summary: Data migrating for MongoMapper
97
+ test_files:
98
+ - test/mongrations_test.rb
99
+ - test/test_helper.rb