exodus 1.0.6 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +1 -0
- data/CHANGELOG.md +7 -0
- data/README.md +29 -16
- data/lib/exodus.rb +46 -40
- data/lib/exodus/helpers/text_formatter.rb +1 -0
- data/lib/exodus/migrations/migration.rb +4 -0
- data/lib/exodus/version.rb +1 -1
- data/spec/exodus/exodus_spec.rb +42 -16
- data/tasks/exodus.rake +20 -4
- metadata +54 -82
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 200e6321b65c9da53640570039104a3431d9b01c
|
4
|
+
data.tar.gz: 3bfc62dbf17cb4e149fb0e05099f6cf90cbd7f40
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 93a228768b22948e1aa9d0901aafe751d855f807af5c136fc5e198277412e6b7172acd48a009fd066317e4f3a209e08330d26195dd9d19a1b6fbcf56d34dbff2
|
7
|
+
data.tar.gz: 7312deffd0e3ab6347ea390ab0d8374f3be0365eda5043450ea152be159b5d9c9818b01161f43c18857f851d6114a1855a0159d15ef83d5b4a4e60203304b513
|
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
## v1.1.0
|
2
|
+
|
3
|
+
* Changed the way migration are executed
|
4
|
+
* Cleaner output
|
5
|
+
* Ability to see which migration will be executed before rake db:migrate and db:rollback with rake db:migrate:show and db:rollback:show
|
6
|
+
* Fixed a text formatter issue
|
7
|
+
|
1
8
|
## v1.0.6
|
2
9
|
|
3
10
|
* Text formatter bug fix
|
data/README.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
Exodus -
|
1
|
+
Exodus - A migration framework for MongoDb
|
2
2
|
=============
|
3
3
|
|
4
|
-
|
4
|
+
## A migration Framework for a schemaless database?
|
5
5
|
|
6
6
|
After working with Mongo for long time now I can tell you working with a schemaless database does not mean you will never need any migrations. Within the same collection Mongo allows to have documents with a complete different structure, however in some case is you might want to keep data consistency; Especially when your code is live in production and used by millions of users.
|
7
7
|
|
@@ -11,8 +11,9 @@ Exodus - a migration framework for MongoDb
|
|
11
11
|
* It's Auto runnable on deploy
|
12
12
|
* When switching enviromment (dev, pre-prod, prod) you don't need to worry if the script has been ran or not. The framework takes care of it for you
|
13
13
|
|
14
|
+
Exodus has been used in production since March 2013.
|
14
15
|
|
15
|
-
|
16
|
+
## Installation
|
16
17
|
|
17
18
|
Add this line to your application's Gemfile:
|
18
19
|
|
@@ -26,7 +27,7 @@ Exodus - a migration framework for MongoDb
|
|
26
27
|
|
27
28
|
$ gem install exodus
|
28
29
|
|
29
|
-
|
30
|
+
## Configuration
|
30
31
|
|
31
32
|
You need to configure 4 things before using Exodus: the database name, the mongodb connection, the config file location and the path to the directory that will include your migrations:
|
32
33
|
|
@@ -46,7 +47,7 @@ Exodus - a migration framework for MongoDb
|
|
46
47
|
... And you're all set!
|
47
48
|
|
48
49
|
|
49
|
-
|
50
|
+
## Basic knowledge
|
50
51
|
|
51
52
|
* All Migrations have to be ruby classes that inherits from Migration class.
|
52
53
|
* Migrations have a direction (UP or DOWN)
|
@@ -59,7 +60,7 @@ Exodus - a migration framework for MongoDb
|
|
59
60
|
* Migrations will run in order using the migration_number
|
60
61
|
* Migrations can be rerunnable safe, rerunnable safe migrations will run on each db:migrate even if the migration has already been run!
|
61
62
|
|
62
|
-
|
63
|
+
### To Do when writting your own
|
63
64
|
|
64
65
|
* Give it a migration_number
|
65
66
|
* Initialize it and define status_complete and description
|
@@ -68,7 +69,7 @@ Exodus - a migration framework for MongoDb
|
|
68
69
|
* If your migration contains distinct steps that you want to split up I recommand using the "step" DSL
|
69
70
|
|
70
71
|
|
71
|
-
|
72
|
+
### Good example
|
72
73
|
|
73
74
|
class RenameNameToFirstName < Exodus::Migration
|
74
75
|
self.migration_number = 1
|
@@ -112,48 +113,60 @@ Exodus - a migration framework for MongoDb
|
|
112
113
|
end
|
113
114
|
end
|
114
115
|
|
115
|
-
|
116
|
+
## Commands
|
116
117
|
|
117
|
-
|
118
|
+
### db:migrate
|
118
119
|
Executes all migrations that haven't run yet. You can the STEP enviroment to run only the first x ones.
|
119
120
|
|
120
121
|
rake db:migrate
|
121
122
|
rake db:migrate STEP=2
|
122
123
|
|
123
|
-
|
124
|
+
### db:rollback
|
124
125
|
Rolls back all migrations that haven't run yet. You can set the STEP enviroment variable to rollback only the last x ones.
|
125
126
|
|
126
127
|
rake db:rollback
|
127
128
|
rake db:rollback STEP=2
|
128
129
|
|
129
|
-
|
130
|
+
### db:migrate:show
|
131
|
+
Print in the console all migrations that rake db:migrate will run. Does NOT run any migration. You can the STEP enviroment to run only the first x ones.
|
132
|
+
|
133
|
+
rake db:migrate:show
|
134
|
+
rake db:migrate:show STEP=2
|
135
|
+
|
136
|
+
### db:rollback:show
|
137
|
+
Print in the console all migrations that rake db:rollback will run. Does NOT run any migration. You can set the STEP enviroment variable to rollback only the last x ones.
|
138
|
+
|
139
|
+
rake db:rollback:show
|
140
|
+
rake db:rollback:show STEP=2
|
141
|
+
|
142
|
+
### db:migrate:custom
|
130
143
|
Executes all custom migrations that haven't run yet. Custom migrations will be loaded from your config file. Custom migrations will run in order of appearence. You can set the STEP enviroment variable to rollback only the last x ones.
|
131
144
|
|
132
145
|
rake db:migrate:custom
|
133
146
|
rake db:migrate:custom STEP=2
|
134
147
|
|
135
|
-
|
148
|
+
### db:rollback:custom
|
136
149
|
Executes all custom migrations that haven't run yet. Custom migrations will be loaded from your config file. Custom migrations will run in order of appearence. You can set the STEP enviroment variable to rollback only the last x ones.
|
137
150
|
|
138
151
|
rake db:rollback:custom
|
139
152
|
rake db:rollback:custom STEP=2
|
140
153
|
|
141
|
-
|
154
|
+
### db:migrate:list
|
142
155
|
Lists all the migrations.
|
143
156
|
|
144
157
|
rake db:migrate:list
|
145
158
|
|
146
|
-
|
159
|
+
### db:migrate:status
|
147
160
|
Gives a preview of what as been run on the current database.
|
148
161
|
|
149
162
|
rake db:migrate:status
|
150
163
|
|
151
|
-
|
164
|
+
### db:migrate:yml_status
|
152
165
|
Prints on the screen the content of the yml configuration file
|
153
166
|
|
154
167
|
rake db:migrate:yml_status
|
155
168
|
|
156
|
-
|
169
|
+
### db:mongo_info
|
157
170
|
Prints on the screen information about the current mongo connection
|
158
171
|
|
159
172
|
rake db:mongo_info
|
data/lib/exodus.rb
CHANGED
@@ -29,64 +29,69 @@ module Exodus
|
|
29
29
|
end
|
30
30
|
|
31
31
|
# Sorts and executes a number of migrations equal to step (or all of them if step is nil)
|
32
|
-
def
|
33
|
-
if
|
34
|
-
|
35
|
-
|
32
|
+
def sort_and_run_migrations(direction, migrations_info, step = nil, show_characteristic = false)
|
33
|
+
if migrations_info
|
34
|
+
sorted_migrations_info = order_with_direction(migrations_info, direction)
|
35
|
+
runnable_migrations = find_runable_migrations(direction, sorted_migrations_info, step)
|
36
|
+
|
37
|
+
if show_characteristic
|
38
|
+
runnable_migrations.map(&:characteristic)
|
39
|
+
else
|
40
|
+
run_migrations(direction, runnable_migrations)
|
41
|
+
end
|
36
42
|
else
|
37
43
|
raise StandardError, "no migrations given in argument!"
|
38
44
|
end
|
39
45
|
end
|
40
46
|
|
47
|
+
# Instanciates all of the migrations and returns the ones that are runnable
|
48
|
+
def find_runable_migrations(direction, migrations_info, step)
|
49
|
+
runnable_migrations = migrations_info.map do |migration_class, args|
|
50
|
+
migration = instanciate_migration(migration_class, args)
|
51
|
+
migration if migration.is_runnable?(direction)
|
52
|
+
end.compact
|
41
53
|
|
42
|
-
|
43
|
-
|
44
|
-
if migrations
|
45
|
-
migrations = migrations.shift(step.to_i) if step
|
46
|
-
run_each(direction, migrations)
|
47
|
-
else
|
48
|
-
puts "Unable to find migrations!"
|
49
|
-
end
|
50
|
-
end
|
54
|
+
step ? runnable_migrations.shift(step.to_i) : runnable_migrations
|
55
|
+
end
|
51
56
|
|
52
57
|
# Migrations order need to be reverted if the direction is down
|
53
58
|
# (we want the latest executed migration to be the first reverted)
|
54
|
-
def order_with_direction(
|
55
|
-
sorted_migrations = sort_migrations(
|
59
|
+
def order_with_direction(migrations_info, direction)
|
60
|
+
sorted_migrations = sort_migrations(migrations_info)
|
56
61
|
direction == Migration::UP ? sorted_migrations : sorted_migrations.reverse
|
57
62
|
end
|
58
63
|
|
59
|
-
|
60
|
-
|
64
|
+
# Sorts migrations using the migration number
|
65
|
+
def sort_migrations(migrations_info)
|
66
|
+
migrations_info.sort_by {|migration,args| migration.migration_number }
|
61
67
|
end
|
62
68
|
|
63
69
|
# Runs each migration separately, migration's arguments default value is set to an empty hash
|
64
|
-
def
|
65
|
-
migrations.each do |
|
66
|
-
print_tabulation { run_one_migration(
|
70
|
+
def run_migrations(direction, migrations)
|
71
|
+
migrations.each do |migration|
|
72
|
+
print_tabulation { run_one_migration(migration, direction) }
|
67
73
|
end
|
68
74
|
end
|
69
|
-
|
70
75
|
|
71
|
-
#
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
76
|
+
# Runs the migration and save the current status into mongo
|
77
|
+
def run_one_migration(migration, direction)
|
78
|
+
begin
|
79
|
+
migration.run(direction)
|
80
|
+
migration.status.error = nil
|
81
|
+
rescue Exception => e
|
82
|
+
migration.failure = e
|
83
|
+
migration.save!
|
84
|
+
raise
|
85
|
+
end
|
86
|
+
|
87
|
+
migration.save!
|
88
|
+
end
|
89
|
+
|
90
|
+
# Database lookup to find a migration given its class and its arguments
|
91
|
+
# Instanciates it if the migration is not present in the database
|
92
|
+
def instanciate_migration(migration_class, args)
|
93
|
+
args ||= {}
|
94
|
+
find_existing_migration(migration_class, args) || migration_class.new(:status => {:arguments => args})
|
90
95
|
end
|
91
96
|
|
92
97
|
# Looks up in the database if a migration with the same class and same arguments already exists
|
@@ -95,6 +100,7 @@ module Exodus
|
|
95
100
|
existing_migrations = migration_class.collection.find('status.arguments' => args)
|
96
101
|
existing_migrations.detect do |migration|
|
97
102
|
existing_migration = migration_class.load(migration)
|
103
|
+
|
98
104
|
return existing_migration if existing_migration.is_a?(migration_class)
|
99
105
|
end
|
100
106
|
end
|
@@ -21,6 +21,7 @@ module Exodus
|
|
21
21
|
|
22
22
|
paragraphes.each_with_index do |sentences, paragraph_number|
|
23
23
|
sentences.each_with_index do |sentence, column|
|
24
|
+
sentence = sentence.to_s
|
24
25
|
words = sentence.gsub('=>', ' => ').split(' ') || ''
|
25
26
|
|
26
27
|
if sentence.size > space_number && (words).size > 1
|
@@ -124,6 +124,10 @@ module Exodus
|
|
124
124
|
(direction == UP && self.status.current_status == self.status_complete) || (direction == DOWN && self.status.current_status == 0)
|
125
125
|
end
|
126
126
|
|
127
|
+
def characteristic
|
128
|
+
"#{self.class}: #{self.status.arguments}"
|
129
|
+
end
|
130
|
+
|
127
131
|
protected
|
128
132
|
|
129
133
|
# Executes a given block if the status has not being processed
|
data/lib/exodus/version.rb
CHANGED
data/spec/exodus/exodus_spec.rb
CHANGED
@@ -88,19 +88,22 @@ describe Exodus do
|
|
88
88
|
describe "When the migration has not been ran" do
|
89
89
|
describe "with a valid migration" do
|
90
90
|
it "should successfully create the migration" do
|
91
|
-
|
91
|
+
migration = Exodus.instanciate_migration(Migration_test6, {})
|
92
|
+
lambda{ Exodus.run_one_migration(migration, 'up')}.should
|
92
93
|
change {Exodus::Migration}.by(1)
|
93
94
|
end
|
94
95
|
end
|
95
96
|
|
96
97
|
describe "with a failing migration" do
|
98
|
+
let(:migration) {Exodus.instanciate_migration(Migration_test7, {})}
|
99
|
+
|
97
100
|
it "should raise an error" do
|
98
|
-
lambda{
|
101
|
+
lambda {Exodus.run_one_migration(migration, 'up')}.should
|
99
102
|
raise_error(StandardError)
|
100
103
|
end
|
101
104
|
|
102
105
|
it "should create the migration" do
|
103
|
-
lambda{
|
106
|
+
lambda {Exodus.run_one_migration(migration, 'up')}.should
|
104
107
|
change {Exodus::Migration}.by(1)
|
105
108
|
end
|
106
109
|
end
|
@@ -109,18 +112,20 @@ describe Exodus do
|
|
109
112
|
describe "When the migration has been ran" do
|
110
113
|
describe "with a valid migration" do
|
111
114
|
it "should not create a new migration" do
|
112
|
-
Exodus.
|
115
|
+
migration = Exodus.instanciate_migration(Migration_test6, {})
|
116
|
+
Exodus.run_one_migration(migration, 'up')
|
113
117
|
|
114
|
-
lambda{
|
118
|
+
lambda {Exodus.run_one_migration(migration, 'up')}.should
|
115
119
|
change {Exodus::Migration}.by(0)
|
116
120
|
end
|
117
121
|
end
|
118
122
|
|
119
123
|
describe "with a failing migration" do
|
120
124
|
it "should not create a new migration" do
|
121
|
-
Exodus.
|
125
|
+
migration = Exodus.instanciate_migration(Migration_test7, {})
|
126
|
+
Exodus.run_one_migration(migration, 'up') rescue nil
|
122
127
|
|
123
|
-
lambda{
|
128
|
+
lambda {Exodus.run_one_migration(migration, 'up')}.should
|
124
129
|
change {Exodus::Migration}.by(0)
|
125
130
|
end
|
126
131
|
end
|
@@ -153,28 +158,35 @@ describe Exodus do
|
|
153
158
|
|
154
159
|
describe "When a different migration has been ran" do
|
155
160
|
it "should not find any migration" do
|
156
|
-
Exodus.
|
161
|
+
migration = Exodus.instanciate_migration(Migration_test6, {})
|
162
|
+
Exodus.run_one_migration(migration, 'up')
|
163
|
+
|
157
164
|
Exodus.find_existing_migration(Migration_test8, {}).should be_nil
|
158
165
|
end
|
159
166
|
end
|
160
167
|
|
161
168
|
describe "When the migration has been ran" do
|
162
169
|
it "should find the migration" do
|
163
|
-
Exodus.
|
170
|
+
migration = Exodus.instanciate_migration(Migration_test8, {})
|
171
|
+
Exodus.run_one_migration(migration, 'up')
|
172
|
+
|
164
173
|
Exodus.find_existing_migration(Migration_test8, {}).class.should == Migration_test8
|
165
174
|
end
|
166
175
|
end
|
167
176
|
|
168
177
|
describe "When all migrations have been ran" do
|
169
178
|
it "should find the migration" do
|
170
|
-
Exodus.
|
171
|
-
Exodus.
|
179
|
+
migration6 = Exodus.instanciate_migration(Migration_test6, {})
|
180
|
+
migration8 = Exodus.instanciate_migration(Migration_test8, {})
|
181
|
+
Exodus.run_one_migration(migration6, 'up')
|
182
|
+
Exodus.run_one_migration(migration8, 'up')
|
183
|
+
|
172
184
|
Exodus.find_existing_migration(Migration_test8, {}).class.should == Migration_test8
|
173
185
|
end
|
174
186
|
end
|
175
187
|
end
|
176
188
|
|
177
|
-
describe "run_migrations and
|
189
|
+
describe "run_migrations and sort_and_run_migrations" do
|
178
190
|
before do
|
179
191
|
class Migration_test9 < Exodus::Migration
|
180
192
|
@migration_number = 9
|
@@ -197,7 +209,9 @@ describe Exodus do
|
|
197
209
|
|
198
210
|
describe "running the same migration in a different order with run_migrations" do
|
199
211
|
it "should successfully run them in different order" do
|
200
|
-
|
212
|
+
migrations_info = [[Migration_test9, {}], [Migration_test10, {}]]
|
213
|
+
migrations = migrations_info.map{|migration_info| Exodus.instanciate_migration(*migration_info)}
|
214
|
+
|
201
215
|
Exodus.run_migrations('up', migrations)
|
202
216
|
users = UserSupport.all
|
203
217
|
|
@@ -214,10 +228,10 @@ describe Exodus do
|
|
214
228
|
end
|
215
229
|
end
|
216
230
|
|
217
|
-
describe "running the same migration in a different order with
|
231
|
+
describe "running the same migration in a different order with sort_and_run_migrations" do
|
218
232
|
it "should successfully run them in the same order" do
|
219
233
|
migrations = [[Migration_test9, {}], [Migration_test10, {}]]
|
220
|
-
Exodus.
|
234
|
+
Exodus.sort_and_run_migrations('up', migrations)
|
221
235
|
users = UserSupport.all
|
222
236
|
|
223
237
|
users.first.name.should == "Thomas"
|
@@ -225,12 +239,24 @@ describe Exodus do
|
|
225
239
|
|
226
240
|
UserSupport.collection.drop
|
227
241
|
Exodus::Migration.collection.drop
|
228
|
-
Exodus.
|
242
|
+
Exodus.sort_and_run_migrations('up', migrations.reverse)
|
229
243
|
users = UserSupport.all
|
230
244
|
|
231
245
|
users.first.name.should == "Thomas"
|
232
246
|
users.last.name.should == "Tester"
|
233
247
|
end
|
234
248
|
end
|
249
|
+
|
250
|
+
describe "Getting migration information" do
|
251
|
+
it "should successfully print the migrations information" do
|
252
|
+
migrations = [[Migration_test9, {}], [Migration_test10, {}]]
|
253
|
+
Exodus.sort_and_run_migrations('up', migrations, nil, true).should == ["Migration_test9: #{{}}", "Migration_test10: #{{}}"]
|
254
|
+
end
|
255
|
+
|
256
|
+
it "should successfully print the first migration information" do
|
257
|
+
migrations = [[Migration_test9, {}], [Migration_test10, {}]]
|
258
|
+
Exodus.sort_and_run_migrations('up', migrations, 1, true).should == ["Migration_test9: #{{}}"]
|
259
|
+
end
|
260
|
+
end
|
235
261
|
end
|
236
262
|
end
|
data/tasks/exodus.rake
CHANGED
@@ -22,7 +22,7 @@ namespace :db do
|
|
22
22
|
task :migrate => :require_env do
|
23
23
|
time_it "db:migrate#{" step #{step}" if step}" do
|
24
24
|
migrations = Exodus::Migration.load_all(Exodus.migrations_info.migrate)
|
25
|
-
Exodus::
|
25
|
+
Exodus::sort_and_run_migrations('up', migrations, step)
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
@@ -30,7 +30,7 @@ namespace :db do
|
|
30
30
|
task :rollback => :require_env do
|
31
31
|
time_it "db:rollback#{" step #{step}" if step}" do
|
32
32
|
migrations = Exodus::Migration.load_all(Exodus.migrations_info.rollback)
|
33
|
-
Exodus::
|
33
|
+
Exodus::sort_and_run_migrations('down', migrations, step)
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
@@ -40,6 +40,13 @@ namespace :db do
|
|
40
40
|
end
|
41
41
|
|
42
42
|
namespace :migrate do
|
43
|
+
desc "Show which migrations will be run when calling 'rake db:migrate'"
|
44
|
+
task :show => :require_env do
|
45
|
+
migrations = Exodus::Migration.load_all(Exodus.migrations_info.migrate)
|
46
|
+
puts "List of all the migrations that will be executed by running 'rake db:rollback#{" STEP=#{step}" if step}': \n\n"
|
47
|
+
puts Exodus::sort_and_run_migrations('up', migrations, step, true)
|
48
|
+
end
|
49
|
+
|
43
50
|
desc "Manually migrates specified migrations (specify migrations or use config/migration.yml)"
|
44
51
|
task :custom, [:migrations_info] => :require_env do |t, args|
|
45
52
|
time_it "db:migrate_custom#{" step #{step}" if step}" do
|
@@ -49,7 +56,8 @@ namespace :db do
|
|
49
56
|
Exodus::Migration.load_custom(Exodus.migrations_info.migrate_custom)
|
50
57
|
end
|
51
58
|
|
52
|
-
|
59
|
+
migrations = migrations.shift(step.to_i) if step
|
60
|
+
Exodus::run_migrations('up', migrations)
|
53
61
|
end
|
54
62
|
end
|
55
63
|
|
@@ -70,6 +78,13 @@ namespace :db do
|
|
70
78
|
end
|
71
79
|
|
72
80
|
namespace :rollback do
|
81
|
+
desc "Show which migrations will be run when calling 'rake db:rollback'"
|
82
|
+
task :show => :require_env do
|
83
|
+
migrations = Exodus::Migration.load_all(Exodus.migrations_info.migrate)
|
84
|
+
puts "List of all the migrations that will be executed by running 'rake db:rollback#{" STEP=#{step}" if step}': \n\n"
|
85
|
+
puts Exodus::sort_and_run_migrations('down', migrations, step, true)
|
86
|
+
end
|
87
|
+
|
73
88
|
desc "Manually rolls the database back using specified migrations (specify migrations or use config/migration.yml)"
|
74
89
|
task :custom, [:migrations_info] => :require_env do |t, args|
|
75
90
|
time_it "db:rollback_custom#{" step #{step}" if step}" do
|
@@ -79,7 +94,8 @@ namespace :db do
|
|
79
94
|
Exodus::Migration.load_custom(Exodus.migrations_info.rollback_custom)
|
80
95
|
end
|
81
96
|
|
82
|
-
|
97
|
+
migrations = migrations.shift(step.to_i) if step
|
98
|
+
Exodus::run_migrations('down', migrations)
|
83
99
|
end
|
84
100
|
end
|
85
101
|
end
|
metadata
CHANGED
@@ -1,88 +1,62 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: exodus
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
5
|
-
prerelease:
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.1.0
|
6
5
|
platform: ruby
|
7
|
-
authors:
|
6
|
+
authors:
|
8
7
|
- Thomas Dmytryk
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
11
|
+
|
12
|
+
date: 2013-10-28 00:00:00 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
15
|
name: mongo_mapper
|
16
|
-
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
|
-
requirements:
|
19
|
-
- - ! '>='
|
20
|
-
- !ruby/object:Gem::Version
|
21
|
-
version: '0'
|
22
|
-
type: :runtime
|
23
16
|
prerelease: false
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version:
|
30
|
-
- !ruby/object:Gem::Dependency
|
31
|
-
name: bson_ext
|
32
|
-
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
|
-
requirements:
|
35
|
-
- - ! '>='
|
36
|
-
- !ruby/object:Gem::Version
|
37
|
-
version: '0'
|
17
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
18
|
+
requirements:
|
19
|
+
- &id002
|
20
|
+
- ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: "0"
|
38
23
|
type: :runtime
|
24
|
+
version_requirements: *id001
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: bson_ext
|
39
27
|
prerelease: false
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
- !ruby/object:Gem::Dependency
|
28
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
29
|
+
requirements:
|
30
|
+
- *id002
|
31
|
+
type: :runtime
|
32
|
+
version_requirements: *id003
|
33
|
+
- !ruby/object:Gem::Dependency
|
47
34
|
name: rspec
|
48
|
-
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
|
-
requirements:
|
51
|
-
- - ! '>='
|
52
|
-
- !ruby/object:Gem::Version
|
53
|
-
version: '0'
|
54
|
-
type: :development
|
55
35
|
prerelease: false
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
- - ! '>='
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '0'
|
62
|
-
- !ruby/object:Gem::Dependency
|
63
|
-
name: rake
|
64
|
-
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
|
-
requirements:
|
67
|
-
- - ! '>='
|
68
|
-
- !ruby/object:Gem::Version
|
69
|
-
version: '0'
|
36
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- *id002
|
70
39
|
type: :development
|
40
|
+
version_requirements: *id004
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
71
43
|
prerelease: false
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
version: '0'
|
44
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- *id002
|
47
|
+
type: :development
|
48
|
+
version_requirements: *id005
|
78
49
|
description: Exodus is a migration framework for MongoDb
|
79
|
-
email:
|
50
|
+
email:
|
80
51
|
- thomas@fanhattan.com
|
81
52
|
- thomas.dmytryk@supinfo.com
|
82
53
|
executables: []
|
54
|
+
|
83
55
|
extensions: []
|
56
|
+
|
84
57
|
extra_rdoc_files: []
|
85
|
-
|
58
|
+
|
59
|
+
files:
|
86
60
|
- .gitignore
|
87
61
|
- .rspec
|
88
62
|
- .rvmrc
|
@@ -107,31 +81,29 @@ files:
|
|
107
81
|
- spec/support/user_support.rb
|
108
82
|
- tasks/exodus.rake
|
109
83
|
homepage: https://github.com/ThomasAlxDmy/Exodus
|
110
|
-
licenses:
|
84
|
+
licenses:
|
111
85
|
- MIT
|
86
|
+
metadata: {}
|
87
|
+
|
112
88
|
post_install_message:
|
113
89
|
rdoc_options: []
|
114
|
-
|
90
|
+
|
91
|
+
require_paths:
|
115
92
|
- lib
|
116
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
123
|
-
none: false
|
124
|
-
requirements:
|
125
|
-
- - ! '>='
|
126
|
-
- !ruby/object:Gem::Version
|
127
|
-
version: '0'
|
93
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
94
|
+
requirements:
|
95
|
+
- *id002
|
96
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
97
|
+
requirements:
|
98
|
+
- *id002
|
128
99
|
requirements: []
|
100
|
+
|
129
101
|
rubyforge_project:
|
130
|
-
rubygems_version:
|
102
|
+
rubygems_version: 2.0.13
|
131
103
|
signing_key:
|
132
|
-
specification_version:
|
104
|
+
specification_version: 4
|
133
105
|
summary: Exodus uses mongomapper to provide a complete migration framework
|
134
|
-
test_files:
|
106
|
+
test_files:
|
135
107
|
- spec/exodus/exodus_spec.rb
|
136
108
|
- spec/exodus/migration_spec.rb
|
137
109
|
- spec/spec_helper.rb
|