mongration 0.0.4.pre.beta → 0.0.5.pre.beta

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 20730b095053fceae0d065822f9492a8e70eb89b
4
- data.tar.gz: 4a57e71108a1453971fc04145a31b6ba1c2bf4eb
3
+ metadata.gz: f1f71d2e5d3c7e355445796dab1273bae59e0391
4
+ data.tar.gz: b894bde28c6d7af02bbc3ccba842f135dfce8bc1
5
5
  SHA512:
6
- metadata.gz: 7ed9c54e2a8c160eb8ca9089e83c07310dd6b916e1e8b86f460e6f753892d6f0e43a7e5ab0b340b67ec3a6cd14a6a9b53c22e878e401dd695a81bdb538a995a3
7
- data.tar.gz: 7708282338c9c5740a675c65f1f6ee836280f59c0e03cb95d030430353500c5bed606e6cf2c3bea99dc34c46ab6b616691f90832ad3aade93831275d96b09eb6
6
+ metadata.gz: 8700887b66be864d7246255249c160bd4a128b0aae90de3eaa2ff50ee99f1ed8ec0946565bc7a1328bb8a32838ff8c8bb3fc815c104b8d0ab80c3265c2ff710c
7
+ data.tar.gz: 8c50e8a7405c20581a2fdcf6795d2b24208bc08916732c9c9a36188a52890bd5d811a445d20c8627ad63af51151d460186dc9e37f82d0e21c92817d6eb87a7c2
@@ -3,10 +3,6 @@ require 'rake'
3
3
 
4
4
  require 'mongration/version'
5
5
  require 'mongration/errors'
6
-
7
- require 'mongration/file'
8
- require 'mongration/migration'
9
-
10
6
  require 'mongration/rake_tasks'
11
7
  require 'mongration/configuration'
12
8
 
@@ -14,9 +10,9 @@ module Mongration
14
10
  extend self
15
11
 
16
12
  autoload :CreateMigration, 'mongration/create_migration'
17
- autoload :MigrateAllUp, 'mongration/migrate_all_up'
18
- autoload :MigrateUp, 'mongration/migrate_up'
19
- autoload :MigrateDown, 'mongration/migrate_down'
13
+ autoload :File, 'mongration/file'
14
+ autoload :Migrate, 'mongration/migrate'
15
+ autoload :Migration, 'mongration/migration'
20
16
  autoload :NullOutput, 'mongration/null_output'
21
17
  autoload :Rollback, 'mongration/rollback'
22
18
  autoload :Status, 'mongration/status'
@@ -33,13 +29,16 @@ module Mongration
33
29
 
34
30
  case version
35
31
  when nil
36
- MigrateAllUp.perform
32
+ files = File.pending
33
+ Migrate::Up.new(files).perform
37
34
 
38
35
  when pending
39
- MigrateUp.new(version).perform
36
+ files = File.pending.select { |f| f.version <= version }
37
+ Migrate::Up.new(files).perform
40
38
 
41
39
  when migrated
42
- MigrateDown.new(version).perform
40
+ files = File.migrated.select { |f| f.version > version }.reverse
41
+ Migrate::Down.new(files).perform
43
42
 
44
43
  else
45
44
  out.puts("Invalid Version: #{version} does not exist.")
@@ -53,9 +52,8 @@ module Mongration
53
52
  # @return [void]
54
53
  #
55
54
  def rollback(step = 1)
56
- step.times do
57
- Rollback.perform
58
- end
55
+ files = File.migrated.reverse.first(step)
56
+ Migrate::Down.new(files).perform
59
57
  end
60
58
 
61
59
  # Creates a migration with the given name
@@ -3,6 +3,9 @@ module Mongration
3
3
  # @private
4
4
  class File
5
5
  include Comparable
6
+ extend Forwardable
7
+
8
+ def_delegators :klass, :up, :down
6
9
 
7
10
  def self.all_file_names
8
11
  Dir[::File.join(Mongration.configuration.dir, '*.rb')].map do |path|
@@ -40,27 +43,6 @@ module Mongration
40
43
  @file_name = file_name
41
44
  end
42
45
 
43
- def up
44
- Mongration.out.puts("#{version} #{class_name}: migrating")
45
-
46
- load_file
47
- klass.up
48
-
49
- Migration.create_by_file_name(file_name)
50
- Mongration.out.puts("#{version} #{class_name}: migrated")
51
- true
52
-
53
- rescue => e
54
- Mongration.out.puts("#{e.class}: An error has occured, this and all later migrations cancelled")
55
- false
56
- end
57
-
58
- def down
59
- load_file
60
- klass.down
61
- Migration.destroy_by_file_name(file_name)
62
- end
63
-
64
46
  def name
65
47
  underscored_name.gsub('_', ' ')
66
48
  end
@@ -81,16 +63,17 @@ module Mongration
81
63
  number <=> other.number
82
64
  end
83
65
 
84
- private
85
-
86
- def load_file
87
- load(::File.join(Mongration.configuration.dir, @file_name))
66
+ alias_method :_load, :load
67
+ def load
68
+ _load(::File.join(Mongration.configuration.dir, @file_name))
88
69
  end
89
70
 
90
71
  def klass
91
72
  class_name.constantize
92
73
  end
93
74
 
75
+ private
76
+
94
77
  def underscored_name
95
78
  @file_name.chomp('.rb').gsub(/^\d+_/, '')
96
79
  end
@@ -0,0 +1,7 @@
1
+ module Mongration
2
+ module Migrate
3
+ autoload :Direction, 'mongration/migrate/direction'
4
+ autoload :Down, 'mongration/migrate/down'
5
+ autoload :Up, 'mongration/migrate/up'
6
+ end
7
+ end
@@ -0,0 +1,42 @@
1
+ module Mongration
2
+ module Migrate
3
+ class Direction
4
+
5
+ def initialize(files)
6
+ @files = files
7
+ end
8
+
9
+ def perform
10
+ @files.each do |file|
11
+ file.load
12
+
13
+ summarize(description_for(file)) do
14
+ migrate(file)
15
+ end
16
+
17
+ persist(file)
18
+ end
19
+ end
20
+
21
+ private
22
+
23
+ def summarize(description)
24
+ Mongration.out.puts("#{description}: #{before_text}")
25
+
26
+ begin
27
+ yield
28
+ rescue => e
29
+ Mongration.out.puts("#{e.inspect}: An error has occured, this and all later migrations cancelled")
30
+ raise e
31
+ end
32
+
33
+ Mongration.out.puts("#{description}: #{after_text}")
34
+ Mongration.out.puts
35
+ end
36
+
37
+ def description_for(file)
38
+ "#{file.version} #{file.class_name}"
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,26 @@
1
+ module Mongration
2
+ module Migrate
3
+
4
+ # @private
5
+ class Down < Direction
6
+
7
+ private
8
+
9
+ def migrate(file)
10
+ file.down
11
+ end
12
+
13
+ def persist(file)
14
+ Migration.destroy_by_file_name(file.file_name)
15
+ end
16
+
17
+ def before_text
18
+ 'reverting'
19
+ end
20
+
21
+ def after_text
22
+ 'reverted'
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,6 @@
1
+ module Mongration
2
+ module Migrate
3
+ class Move
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,26 @@
1
+ module Mongration
2
+ module Migrate
3
+
4
+ # @private
5
+ class Up < Direction
6
+
7
+ private
8
+
9
+ def migrate(file)
10
+ file.up
11
+ end
12
+
13
+ def persist(file)
14
+ Migration.create_by_file_name(file.file_name)
15
+ end
16
+
17
+ def before_text
18
+ 'migrating'
19
+ end
20
+
21
+ def after_text
22
+ 'migrated'
23
+ end
24
+ end
25
+ end
26
+ end
@@ -1,3 +1,3 @@
1
1
  module Mongration
2
- VERSION = '0.0.4-beta'
2
+ VERSION = '0.0.5-beta'
3
3
  end
@@ -17,6 +17,7 @@ describe 'Mongration.migrate' do
17
17
  it 'includes success message' do
18
18
  expect(Mongration.out).to receive(:puts).with('001 AddFoo: migrating')
19
19
  expect(Mongration.out).to receive(:puts).with('001 AddFoo: migrated')
20
+ allow(Mongration.out).to receive(:puts)
20
21
  migrate
21
22
  end
22
23
  end
@@ -33,7 +34,9 @@ describe 'Mongration.migrate' do
33
34
  )
34
35
  end
35
36
 
36
- let(:migrate) { Mongration.migrate }
37
+ let(:migrate) do
38
+ expect { Mongration.migrate }.to raise_error
39
+ end
37
40
 
38
41
  it 'does not run later migrations' do
39
42
  migrate
@@ -42,7 +45,8 @@ describe 'Mongration.migrate' do
42
45
 
43
46
  it 'includes failed message' do
44
47
  expect(Mongration.out).to receive(:puts).with('1 MigrationWithError: migrating')
45
- expect(Mongration.out).to receive(:puts).with(/StandardError: An error has occured, this and all later migrations cancelled/)
48
+ expect(Mongration.out).to receive(:puts).with('#<StandardError: StandardError>: An error has occured, this and all later migrations cancelled')
49
+ allow(Mongration.out).to receive(:puts)
46
50
  migrate
47
51
  end
48
52
  end
@@ -2,12 +2,40 @@ require 'spec_helper'
2
2
 
3
3
  describe 'Mongration.rollback' do
4
4
 
5
- it 'rollsback a migration' do
6
- foo_create_migration
7
- Mongration.migrate
5
+ context 'when the rollback is successful' do
6
+ before do
7
+ foo_create_migration
8
+ Mongration.migrate
9
+ end
8
10
 
9
- Mongration.rollback
10
- expect(Foo.count).to eq(0)
11
+ it 'rollsback a migration' do
12
+ Mongration.rollback
13
+ expect(Foo.count).to eq(0)
14
+ end
15
+
16
+ it 'outputs messaging when starting and finishing the rollback' do
17
+ expect(Mongration.out).to receive(:puts).with('001 AddFoo: reverting')
18
+ expect(Mongration.out).to receive(:puts).with('001 AddFoo: reverted')
19
+ allow(Mongration.out).to receive(:puts)
20
+ Mongration.rollback
21
+ end
22
+ end
23
+
24
+ context 'when the rollback is not successful' do
25
+ before do
26
+ create_migration(
27
+ '1_migration_with_error',
28
+ down: 'raise StandardError'
29
+ )
30
+ Mongration.migrate
31
+ end
32
+
33
+ it 'outputs messaging when rollback raises an error' do
34
+ expect(Mongration.out).to receive(:puts).with('1 MigrationWithError: reverting')
35
+ expect(Mongration.out).to receive(:puts).with('#<StandardError: StandardError>: An error has occured, this and all later migrations cancelled')
36
+ allow(Mongration.out).to receive(:puts)
37
+ expect { Mongration.rollback }.to raise_error
38
+ end
11
39
  end
12
40
 
13
41
  it 'can rollback twice' do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongration
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4.pre.beta
4
+ version: 0.0.5.pre.beta
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Dalton
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-23 00:00:00.000000000 Z
11
+ date: 2014-10-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mongoid
@@ -133,9 +133,11 @@ files:
133
133
  - lib/mongration/create_migration/migration_file_writer.rb
134
134
  - lib/mongration/errors.rb
135
135
  - lib/mongration/file.rb
136
- - lib/mongration/migrate_all_up.rb
137
- - lib/mongration/migrate_down.rb
138
- - lib/mongration/migrate_up.rb
136
+ - lib/mongration/migrate.rb
137
+ - lib/mongration/migrate/direction.rb
138
+ - lib/mongration/migrate/down.rb
139
+ - lib/mongration/migrate/move.rb
140
+ - lib/mongration/migrate/up.rb
139
141
  - lib/mongration/migration.rb
140
142
  - lib/mongration/null_output.rb
141
143
  - lib/mongration/rake_tasks.rb
@@ -1,20 +0,0 @@
1
- module Mongration
2
-
3
- # @private
4
- class MigrateAllUp
5
-
6
- def self.perform
7
- new.perform
8
- end
9
-
10
- def perform
11
- files_to_migrate.take_while(&:up)
12
- end
13
-
14
- private
15
-
16
- def files_to_migrate
17
- File.pending
18
- end
19
- end
20
- end
@@ -1,20 +0,0 @@
1
- module Mongration
2
-
3
- # @private
4
- class MigrateDown
5
-
6
- def initialize(version)
7
- @version = version
8
- end
9
-
10
- def perform
11
- files_to_rollback.each(&:down)
12
- end
13
-
14
- private
15
-
16
- def files_to_rollback
17
- File.migrated.select { |f| f.version > @version }.reverse
18
- end
19
- end
20
- end
@@ -1,20 +0,0 @@
1
- module Mongration
2
-
3
- # @private
4
- class MigrateUp
5
-
6
- def initialize(version)
7
- @version = version
8
- end
9
-
10
- def perform
11
- files_to_migrate.take_while(&:up)
12
- end
13
-
14
- private
15
-
16
- def files_to_migrate
17
- File.pending.select { |f| f.version <= @version }
18
- end
19
- end
20
- end