exodus 1.1.5 → 1.1.6
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/CHANGELOG.md +4 -0
- data/lib/exodus/migrations/migration.rb +25 -8
- data/lib/exodus/version.rb +1 -1
- data/spec/exodus/migration_spec.rb +4 -3
- data/tasks/exodus.rake +1 -1
- metadata +1 -1
data/CHANGELOG.md
CHANGED
@@ -12,7 +12,6 @@ module Exodus
|
|
12
12
|
|
13
13
|
key :description, String
|
14
14
|
key :status_complete, Integer, :default => 1
|
15
|
-
key :rerunnable_safe, Boolean, :default => false # Be careful if the job is rerunnable_safe he will re-run on each db:migrate
|
16
15
|
|
17
16
|
has_one :status, :class_name => "Exodus::MigrationStatus", :autosave => true
|
18
17
|
|
@@ -40,8 +39,8 @@ module Exodus
|
|
40
39
|
def load_all(migrations)
|
41
40
|
if migrations
|
42
41
|
migrations.each do |migration, args|
|
43
|
-
if migration
|
44
|
-
formated_migration = format(migration, args)
|
42
|
+
if migration
|
43
|
+
formated_migration = format(migration, args || {})
|
45
44
|
migration, args = formated_migration
|
46
45
|
|
47
46
|
unless @migrations.include?(formated_migration)
|
@@ -58,7 +57,7 @@ module Exodus
|
|
58
57
|
# Using a list of migrations formats them and removes duplicates
|
59
58
|
# migrations: list of migrations => [[MyMigration, {:my_args => 'some_args'}]]
|
60
59
|
def load_custom(migrations)
|
61
|
-
migrations
|
60
|
+
migrations ||= []
|
62
61
|
migrations.map {|migration_str, args| format(migration_str, args) }.uniq
|
63
62
|
end
|
64
63
|
|
@@ -90,6 +89,18 @@ module Exodus
|
|
90
89
|
|
91
90
|
super_print(status_info)
|
92
91
|
end
|
92
|
+
|
93
|
+
def rerunnable_safe=(safe)
|
94
|
+
migrations = Migration.instance_variable_get("@migrations")
|
95
|
+
deletion = migrations.delete([self])
|
96
|
+
Migration.instance_variable_set("@migrations", migrations) if deletion
|
97
|
+
|
98
|
+
@rerunnable_safe = safe
|
99
|
+
end
|
100
|
+
|
101
|
+
def rerunnable_safe?
|
102
|
+
@rerunnable_safe == true
|
103
|
+
end
|
93
104
|
end
|
94
105
|
|
95
106
|
# Makes sure status get instanciated on migration's instanciation
|
@@ -104,25 +115,31 @@ module Exodus
|
|
104
115
|
self.status.direction = direction
|
105
116
|
|
106
117
|
# reset the status if the job is rerunnable and has already be completed
|
107
|
-
self.status.reset! if self.rerunnable_safe && completed?(direction)
|
118
|
+
self.status.reset! if self.class.rerunnable_safe? && completed?(direction)
|
108
119
|
self.status.execution_time = time_it { self.send(direction) }
|
109
120
|
self.status.last_succesful_completion = Time.now
|
110
121
|
end
|
111
122
|
|
112
123
|
# Sets an error to migration status
|
113
124
|
def failure=(exception)
|
114
|
-
self.status.error = MigrationError.new(
|
125
|
+
self.status.error = MigrationError.new(
|
126
|
+
:error_message => exception.message,
|
127
|
+
:error_class => exception.class,
|
128
|
+
:error_backtrace => exception.backtrace)
|
115
129
|
end
|
116
130
|
|
117
131
|
# Checks if a migration can be run
|
118
132
|
def is_runnable?(direction)
|
119
|
-
rerunnable_safe ||
|
133
|
+
self.class.rerunnable_safe? ||
|
134
|
+
(direction == UP && status.current_status < status_complete) ||
|
135
|
+
(direction == DOWN && status.current_status > 0)
|
120
136
|
end
|
121
137
|
|
122
138
|
# Checks if a migration as been completed
|
123
139
|
def completed?(direction)
|
124
140
|
return false if self.status.execution_time == 0
|
125
|
-
(direction == UP && self.status.current_status == self.status_complete) ||
|
141
|
+
(direction == UP && self.status.current_status == self.status_complete) ||
|
142
|
+
(direction == DOWN && self.status.current_status == 0)
|
126
143
|
end
|
127
144
|
|
128
145
|
def characteristic
|
data/lib/exodus/version.rb
CHANGED
@@ -11,7 +11,7 @@ describe Exodus::Migration do
|
|
11
11
|
|
12
12
|
it "should have default value for [status_complete, rerunnable_safe]" do
|
13
13
|
subject.status_complete.should == 1
|
14
|
-
subject.rerunnable_safe.should be_false
|
14
|
+
(subject.class.rerunnable_safe?).should be_false
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
@@ -59,9 +59,10 @@ describe Exodus::Migration do
|
|
59
59
|
end
|
60
60
|
|
61
61
|
class RerunnableMigrationTest < Exodus::Migration
|
62
|
+
self.rerunnable_safe = true
|
63
|
+
|
62
64
|
def initialize(args = {})
|
63
65
|
super(args)
|
64
|
-
self.rerunnable_safe = true
|
65
66
|
end
|
66
67
|
|
67
68
|
def up
|
@@ -202,7 +203,7 @@ describe Exodus::Migration do
|
|
202
203
|
end
|
203
204
|
|
204
205
|
it "should be runable when if the task is safe" do
|
205
|
-
subject.rerunnable_safe = true
|
206
|
+
subject.class.rerunnable_safe = true
|
206
207
|
|
207
208
|
subject.is_runnable?('up').should be_true
|
208
209
|
subject.is_runnable?('down').should be_true
|
data/tasks/exodus.rake
CHANGED
@@ -7,7 +7,7 @@ task :require_env do
|
|
7
7
|
Exodus.load_migrations
|
8
8
|
end
|
9
9
|
|
10
|
-
namespace Exodus.configuration.rake_namespace + 'db' do
|
10
|
+
namespace Exodus.configuration.rake_namespace.to_s + 'db' do
|
11
11
|
desc "Migrate the database"
|
12
12
|
task :migrate => :require_env do
|
13
13
|
time_it "db:migrate#{" step #{step}" if step}" do
|