leifcr-mongrations 0.1.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 5a4fa8cb3eb9e92370130c33f6bdddf8aa86b1d9
4
+ data.tar.gz: d642e0451b8b3eb30a26b9e34c2da68de89e2a88
5
+ SHA512:
6
+ metadata.gz: fb5a97d2bc8e07b825ae18f53505dc87f620d11df432810fc1d4b1e6abba83886481b9cf0fbc0986b8e2e7a13144fb3278be9bea142cec2b267bf09ab931fd63
7
+ data.tar.gz: 846b26b38da1d03427cd373a7868693dc4514dd413f9643fba4969eb6afc0d3288302ace59718925faeb57e94a8083c1c986fd3c710498e3bc972856f321646a
data/Gemfile ADDED
@@ -0,0 +1,8 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gem "mongo_mapper", ">= 0.12.0"
4
+
5
+ group :development do
6
+ gem "bundler", ">= 1.3.5"
7
+ gem "jeweler", "~> 1.8.8"
8
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,69 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ activemodel (3.2.15)
5
+ activesupport (= 3.2.15)
6
+ builder (~> 3.0.0)
7
+ activesupport (3.2.15)
8
+ i18n (~> 0.6, >= 0.6.4)
9
+ multi_json (~> 1.0)
10
+ addressable (2.3.5)
11
+ bson (1.9.2)
12
+ builder (3.0.4)
13
+ faraday (0.8.8)
14
+ multipart-post (~> 1.2.0)
15
+ git (1.2.6)
16
+ github_api (0.10.1)
17
+ addressable
18
+ faraday (~> 0.8.1)
19
+ hashie (>= 1.2)
20
+ multi_json (~> 1.4)
21
+ nokogiri (~> 1.5.2)
22
+ oauth2
23
+ hashie (2.0.5)
24
+ highline (1.6.20)
25
+ httpauth (0.2.0)
26
+ i18n (0.6.5)
27
+ jeweler (1.8.8)
28
+ builder
29
+ bundler (~> 1.0)
30
+ git (>= 1.2.5)
31
+ github_api (= 0.10.1)
32
+ highline (>= 1.6.15)
33
+ nokogiri (= 1.5.10)
34
+ rake
35
+ rdoc
36
+ json (1.8.1)
37
+ jwt (0.1.8)
38
+ multi_json (>= 1.5)
39
+ mongo (1.9.2)
40
+ bson (~> 1.9.2)
41
+ mongo_mapper (0.12.0)
42
+ activemodel (~> 3.0)
43
+ activesupport (~> 3.0)
44
+ plucky (~> 0.5.2)
45
+ multi_json (1.8.2)
46
+ multi_xml (0.5.5)
47
+ multipart-post (1.2.0)
48
+ nokogiri (1.5.10)
49
+ oauth2 (0.9.2)
50
+ faraday (~> 0.8)
51
+ httpauth (~> 0.2)
52
+ jwt (~> 0.1.4)
53
+ multi_json (~> 1.0)
54
+ multi_xml (~> 0.5)
55
+ rack (~> 1.2)
56
+ plucky (0.5.2)
57
+ mongo (~> 1.5)
58
+ rack (1.5.2)
59
+ rake (10.1.0)
60
+ rdoc (4.0.1)
61
+ json (~> 1.4)
62
+
63
+ PLATFORMS
64
+ ruby
65
+
66
+ DEPENDENCIES
67
+ bundler (>= 1.3.5)
68
+ jeweler (~> 1.8.8)
69
+ mongo_mapper (>= 0.12.0)
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 mongo:mongrate`
27
+
28
+ Other rake tasks added have been `mongo:mongrate:redo`, `mongo:mongrate:up`, `mongo:mongrate:down`, `mongo: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,20 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'rake/testtask'
4
+
5
+ begin
6
+ require 'jeweler'
7
+ Jeweler::Tasks.new do |gem|
8
+ gem.name = "leifcr-mongrations"
9
+ gem.summary = %Q{Data migrating for MongoMapper}
10
+ gem.description = %Q{Mongrations aims to be similar to ActiveRecord's data migrations, except
11
+ instead of worrying about schema changes, offering a way to change data when
12
+ necessary}
13
+ gem.email = "leifcr@gmail.com"
14
+ gem.homepage = "http://github.com/leifcr/mongrations"
15
+ gem.authors = ["jonbell", "leifcr"]
16
+ end
17
+ Jeweler::GemcutterTasks.new
18
+ rescue LoadError
19
+ puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
20
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.6
@@ -0,0 +1,7 @@
1
+ class <%= migration_class_name %> < Mongrations::Mongration
2
+ def self.up
3
+ end
4
+
5
+ def self.down
6
+ end
7
+ end
@@ -0,0 +1,15 @@
1
+ require 'rails/generators/named_base'
2
+ require 'rails/generators/migration'
3
+ class MongrationGenerator < Rails::Generators::NamedBase
4
+ include Rails::Generators::Migration
5
+
6
+ source_root File.join(File.dirname(__FILE__), 'mongrations', 'templates')
7
+
8
+ def self.next_migration_number(dirname)
9
+ Time.now.utc.strftime("%Y%m%d%H%M%S")
10
+ end
11
+
12
+ def create_mongration
13
+ migration_template('mongration.rb', "db/mongrations/#{file_name}")
14
+ end
15
+ 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,66 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+ # stub: leifcr-mongrations 0.1.6 ruby lib
6
+
7
+ Gem::Specification.new do |s|
8
+ s.name = "leifcr-mongrations"
9
+ s.version = "0.1.6"
10
+
11
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
+ s.authors = ["jonbell", "leifcr"]
13
+ s.date = "2013-10-28"
14
+ s.description = "Mongrations aims to be similar to ActiveRecord's data migrations, except\ninstead of worrying about schema changes, offering a way to change data when\nnecessary"
15
+ s.email = "leifcr@gmail.com"
16
+ s.extra_rdoc_files = [
17
+ "README.markdown"
18
+ ]
19
+ s.files = [
20
+ "Gemfile",
21
+ "Gemfile.lock",
22
+ "MIT-LICENSE",
23
+ "README.markdown",
24
+ "Rakefile",
25
+ "VERSION",
26
+ "generators/mongrations/templates/mongration.rb",
27
+ "generators/mongrations_generator.rb",
28
+ "init.rb",
29
+ "install.rb",
30
+ "leifcr-mongrations.gemspec",
31
+ "lib/mongrations.rb",
32
+ "lib/mongrations/exceptions.rb",
33
+ "lib/mongrations/migration_proxy.rb",
34
+ "lib/mongrations/migrator.rb",
35
+ "lib/mongrations/mongration.rb",
36
+ "lib/mongrations/railtie.rb",
37
+ "lib/mongrations/schema_migration.rb",
38
+ "tasks/mongo.rake",
39
+ "test/mongrations_test.rb",
40
+ "test/test_helper.rb",
41
+ "uninstall.rb"
42
+ ]
43
+ s.homepage = "http://github.com/leifcr/mongrations"
44
+ s.require_paths = ["lib"]
45
+ s.rubygems_version = "2.1.4"
46
+ s.summary = "Data migrating for MongoMapper"
47
+
48
+ if s.respond_to? :specification_version then
49
+ s.specification_version = 4
50
+
51
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
52
+ s.add_runtime_dependency(%q<mongo_mapper>, [">= 0.12.0"])
53
+ s.add_development_dependency(%q<bundler>, [">= 1.3.5"])
54
+ s.add_development_dependency(%q<jeweler>, ["~> 1.8.8"])
55
+ else
56
+ s.add_dependency(%q<mongo_mapper>, [">= 0.12.0"])
57
+ s.add_dependency(%q<bundler>, [">= 1.3.5"])
58
+ s.add_dependency(%q<jeweler>, ["~> 1.8.8"])
59
+ end
60
+ else
61
+ s.add_dependency(%q<mongo_mapper>, [">= 0.12.0"])
62
+ s.add_dependency(%q<bundler>, [">= 1.3.5"])
63
+ s.add_dependency(%q<jeweler>, ["~> 1.8.8"])
64
+ end
65
+ end
66
+
@@ -0,0 +1,30 @@
1
+ module Mongrations
2
+ class MongrationError < ::MongoMapper::Error; end
3
+
4
+ class IrreversibleMigration < MongrationError#:nodoc:
5
+ end
6
+
7
+ class DuplicateMigrationVersionError < MongrationError#:nodoc:
8
+ def initialize(version)
9
+ super("Multiple migrations have the version number #{version}")
10
+ end
11
+ end
12
+
13
+ class DuplicateMigrationNameError < MongrationError#:nodoc:
14
+ def initialize(name)
15
+ super("Multiple migrations have the name #{name}")
16
+ end
17
+ end
18
+
19
+ class UnknownMigrationVersionError < MongrationError #:nodoc:
20
+ def initialize(version)
21
+ super("No migration with version number #{version}")
22
+ end
23
+ end
24
+
25
+ class IllegalMigrationNameError < MongrationError#: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 Mongrations
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 Mongrations
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
+ Mongrations::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
+ migration = MigrationProxy.new
118
+ migration.name = name.camelize
119
+ migration.version = version
120
+ migration.filename = file
121
+ klasses << migration
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 = Mongrations::SchemaMigration.find_by_version(version.to_s)
144
+ sm && sm.delete
145
+ else
146
+ @migrated_versions.push(version.to_i).sort!
147
+ Mongrations::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,100 @@
1
+ module Mongrations
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
+ def down_with_benchmarks #:nodoc:
12
+ migrate(:up)
13
+ end
14
+
15
+ # Execute this migration in the named direction
16
+ def migrate(direction)
17
+ return unless respond_to?(direction)
18
+
19
+ case direction
20
+ when :up then announce "migrating"
21
+ when :down then announce "reverting"
22
+ end
23
+
24
+ result = nil
25
+ time = Benchmark.measure { result = send("#{direction}_without_benchmarks") }
26
+
27
+ case direction
28
+ when :up then announce "migrated (%.4fs)" % time.real; write
29
+ when :down then announce "reverted (%.4fs)" % time.real; write
30
+ end
31
+
32
+ result
33
+ end
34
+
35
+ # Because the method added may do an alias_method, it can be invoked
36
+ # recursively. We use @ignore_new_methods as a guard to indicate whether
37
+ # it is safe for the call to proceed.
38
+ def singleton_method_added(sym) #:nodoc:
39
+ return if defined?(@ignore_new_methods) && @ignore_new_methods
40
+
41
+ begin
42
+ @ignore_new_methods = true
43
+
44
+ case sym
45
+ when :up, :down
46
+ klass = (class << self; self; end)
47
+ klass.send(:alias_method_chain, sym, "benchmarks")
48
+ end
49
+ ensure
50
+ @ignore_new_methods = false
51
+ end
52
+ end
53
+
54
+ def write(text="")
55
+ puts(text) if verbose
56
+ end
57
+
58
+ def announce(message)
59
+ text = "#{@version} #{name}: #{message}"
60
+ length = [0, 75 - text.length].max
61
+ write "== %s %s" % [text, "=" * length]
62
+ end
63
+
64
+ def say(message, subitem=false)
65
+ write "#{subitem ? " ->" : "--"} #{message}"
66
+ end
67
+
68
+ def say_with_time(message)
69
+ say(message)
70
+ result = nil
71
+ time = Benchmark.measure { result = yield }
72
+ say "%.4fs" % time.real, :subitem
73
+ say("#{result} rows", :subitem) if result.is_a?(Integer)
74
+ result
75
+ end
76
+
77
+ def suppress_messages
78
+ save, self.verbose = verbose, false
79
+ yield
80
+ ensure
81
+ self.verbose = save
82
+ end
83
+
84
+ def connection
85
+ MongoMapper.connection
86
+ end
87
+
88
+ def method_missing(method, *arguments, &block)
89
+ arg_list = arguments.map(&:inspect) * ', '
90
+
91
+ say_with_time "#{method}(#{arg_list})" do
92
+ unless arguments.empty? || method == :execute
93
+ arguments[0] = Migrator.proper_table_name(arguments.first)
94
+ end
95
+ connection.send(method, *arguments, &block)
96
+ end
97
+ end
98
+ end
99
+ end
100
+ end
@@ -0,0 +1,14 @@
1
+ require 'rails'
2
+ require '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
+
10
+ generators do
11
+ require File.join(File.dirname(__FILE__), '..', '..', 'generators', 'mongrations_generator.rb')
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,9 @@
1
+ module Mongrations
2
+ class SchemaMigration
3
+ include MongoMapper::Document
4
+ set_collection_name 'mongo_mapper.schema_migrations'
5
+
6
+ key :version, String
7
+
8
+ end
9
+ end
@@ -0,0 +1,17 @@
1
+ require 'mongo_mapper'
2
+
3
+ module Mongrations
4
+ autoload :MongoMapperError, 'mongrations/exceptions'
5
+ autoload :IrreversibleMigration, 'mongrations/exceptions'
6
+ autoload :DuplicateMigrationVersionError, 'mongrations/exceptions'
7
+ autoload :DuplicateMigrationNameError, 'mongrations/exceptions'
8
+ autoload :UnknownMigrationVersionError, 'mongrations/exceptions'
9
+ autoload :IllegalMigrationNameError, 'mongrations/exceptions'
10
+
11
+ autoload :MigrationProxy, 'mongrations/migration_proxy'
12
+ autoload :Migrator, 'mongrations/migrator'
13
+ autoload :Mongration, 'mongrations/mongration'
14
+ autoload :SchemaMigration, 'mongrations/schema_migration'
15
+ end
16
+
17
+ require 'mongrations/railtie' if defined?(Rails)
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
+ Mongrations::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
+ Mongrations::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
+ Mongrations::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
+ Mongrations::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,111 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: leifcr-mongrations
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.6
5
+ platform: ruby
6
+ authors:
7
+ - jonbell
8
+ - leifcr
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-10-28 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: mongo_mapper
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - '>='
19
+ - !ruby/object:Gem::Version
20
+ version: 0.12.0
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - '>='
26
+ - !ruby/object:Gem::Version
27
+ version: 0.12.0
28
+ - !ruby/object:Gem::Dependency
29
+ name: bundler
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - '>='
33
+ - !ruby/object:Gem::Version
34
+ version: 1.3.5
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - '>='
40
+ - !ruby/object:Gem::Version
41
+ version: 1.3.5
42
+ - !ruby/object:Gem::Dependency
43
+ name: jeweler
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ~>
47
+ - !ruby/object:Gem::Version
48
+ version: 1.8.8
49
+ type: :development
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ~>
54
+ - !ruby/object:Gem::Version
55
+ version: 1.8.8
56
+ description: |-
57
+ Mongrations aims to be similar to ActiveRecord's data migrations, except
58
+ instead of worrying about schema changes, offering a way to change data when
59
+ necessary
60
+ email: leifcr@gmail.com
61
+ executables: []
62
+ extensions: []
63
+ extra_rdoc_files:
64
+ - README.markdown
65
+ files:
66
+ - Gemfile
67
+ - Gemfile.lock
68
+ - MIT-LICENSE
69
+ - README.markdown
70
+ - Rakefile
71
+ - VERSION
72
+ - generators/mongrations/templates/mongration.rb
73
+ - generators/mongrations_generator.rb
74
+ - init.rb
75
+ - install.rb
76
+ - leifcr-mongrations.gemspec
77
+ - lib/mongrations.rb
78
+ - lib/mongrations/exceptions.rb
79
+ - lib/mongrations/migration_proxy.rb
80
+ - lib/mongrations/migrator.rb
81
+ - lib/mongrations/mongration.rb
82
+ - lib/mongrations/railtie.rb
83
+ - lib/mongrations/schema_migration.rb
84
+ - tasks/mongo.rake
85
+ - test/mongrations_test.rb
86
+ - test/test_helper.rb
87
+ - uninstall.rb
88
+ homepage: http://github.com/leifcr/mongrations
89
+ licenses: []
90
+ metadata: {}
91
+ post_install_message:
92
+ rdoc_options: []
93
+ require_paths:
94
+ - lib
95
+ required_ruby_version: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - '>='
98
+ - !ruby/object:Gem::Version
99
+ version: '0'
100
+ required_rubygems_version: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - '>='
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ requirements: []
106
+ rubyforge_project:
107
+ rubygems_version: 2.1.4
108
+ signing_key:
109
+ specification_version: 4
110
+ summary: Data migrating for MongoMapper
111
+ test_files: []