guard-migrate 0.1.7 → 0.2.0

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: b7d5e05d595a1d5a18a611c7b9c1a04f3f4ded17
4
+ data.tar.gz: fc3bdde15e2540bf963accf03b1712917fc162f8
5
+ SHA512:
6
+ metadata.gz: c43f0dd14b4785264fae876157ae970fce76a000e9e7780a83d83821f66a87dda40917210b68be13ca8371b29c66812c495ac927c0cfced46e5ba53f9f9305c0
7
+ data.tar.gz: 80e14d5b39058868178d2a83761d99ed91c15e16f2ab7c83d1b6875532e6513046f2519593347b30292fafe98a83f709ace71007d96d6744ee4db8d46b9eaab2
data/README.rdoc CHANGED
@@ -1,6 +1,6 @@
1
1
 
2
2
  = Guard::Migrate
3
-
3
+ {<img src="https://badge.fury.io/rb/guard-migrate.png" alt="Gem Version" />}[http://badge.fury.io/rb/guard-migrate]
4
4
  {<img src="https://secure.travis-ci.org/glanotte/guard-migrate.png" />}[http://travis-ci.org/glanotte/guard-migrate]
5
5
 
6
6
  Migrate guard allows you to keep you migrations up to date while developing without needing to rerun them every time. I developed it because when I am first working out a project, the schema can change several times and this saves me several downs/ups/resets.
@@ -52,6 +52,6 @@ Available options:
52
52
  {Geoff Lanotte}[https://github.com/glanotte]
53
53
  == Copyright
54
54
 
55
- Copyright (c) 2011 Geoff Lanotte. See LICENSE.txt for
55
+ Copyright (c) 2013 Geoff Lanotte. See LICENSE.txt for
56
56
  further details.
57
57
 
data/lib/guard/migrate.rb CHANGED
@@ -4,6 +4,7 @@ require 'guard/guard'
4
4
  module Guard
5
5
  class Migrate < Guard
6
6
  autoload :Notify, 'guard/migrate/notify'
7
+ autoload :Migration, 'guard/migrate/migration'
7
8
  attr_reader :seed, :rails_env
8
9
 
9
10
  def initialize(watchers=[], options={})
@@ -65,20 +66,21 @@ module Guard
65
66
  # Called on file(s) modifications
66
67
  def run_on_changes(paths)
67
68
  if paths.any?{|path| path.match(%r{^db/migrate/(\d+).+\.rb})}
68
- migrate(paths.map{|path| path.scan(%r{^db/migrate/(\d+).+\.rb}).flatten.first})
69
+ migrations = paths.map {|path| Migration.new(path)}
70
+ migrate(migrations)
69
71
  elsif paths.any?{|path| path.match(%r{^db/seeds\.rb$})}
70
72
  seed_only
71
73
  end
72
74
  end
73
75
 
74
- def migrate(paths = [])
75
- return if !reset? && paths.empty?
76
+ def migrate(migrations = [])
77
+ return if !reset? && migrations.empty?
76
78
  if reset?
77
79
  UI.info "Running #{rake_string}"
78
80
  result = system(rake_string)
79
81
  result &&= "reset"
80
82
  else
81
- result = run_all_migrations(paths)
83
+ result = run_all_migrations(migrations)
82
84
  end
83
85
 
84
86
  Notify.new(result).notify
@@ -91,14 +93,14 @@ module Guard
91
93
  Notify.new(result).notify
92
94
  end
93
95
 
94
- def run_redo?(path)
95
- !reset? && path && !path.empty?
96
+ def run_redo?(version)
97
+ !reset? && version && !version.empty?
96
98
  end
97
99
 
98
- def rake_string(path = nil)
100
+ def rake_string(version = nil)
99
101
  [
100
102
  rake_command,
101
- migrate_string(path),
103
+ migrate_string(version),
102
104
  seed_string,
103
105
  clone_string,
104
106
  rails_env_string
@@ -116,12 +118,16 @@ module Guard
116
118
 
117
119
  private
118
120
 
119
- def run_all_migrations(paths)
121
+ def run_all_migrations(migrations)
120
122
  result = nil
121
- paths.each do |path|
122
- UI.info "Running #{rake_string(path)}"
123
- result = system rake_string(path)
124
- break unless result
123
+ migrations.each do |migration|
124
+ if migration.valid?
125
+ UI.info "Running #{rake_string(migration.version)}"
126
+ result = system rake_string(migration.version)
127
+ break unless result
128
+ else
129
+ UI.info "Skip empty migration - #{migration.version}"
130
+ end
125
131
  end
126
132
 
127
133
  result
@@ -146,10 +152,10 @@ module Guard
146
152
  "db:seed" if @seed
147
153
  end
148
154
 
149
- def migrate_string(path)
155
+ def migrate_string(version)
150
156
  string = "db:migrate"
151
157
  string += ":reset" if reset?
152
- string += ":redo VERSION=#{path}" if run_redo?(path)
158
+ string += ":redo VERSION=#{version}" if run_redo?(version)
153
159
  string
154
160
  end
155
161
 
@@ -0,0 +1,27 @@
1
+ module Guard
2
+ class Migrate
3
+ class Migration
4
+
5
+ attr_accessor :path
6
+
7
+ def initialize(_path)
8
+ @path = _path
9
+ end
10
+
11
+ def version
12
+ path.scan(%r{^db/migrate/(\d+).+\.rb}).flatten.first
13
+ end
14
+
15
+ def valid?
16
+ file = File.open(path, 'r')
17
+ content = file.read.gsub(/\s+/, '')
18
+ !content.empty? && content.match(/def(up|down|change)end/).nil?
19
+ rescue Errno::ENOENT
20
+ false
21
+ ensure
22
+ begin; file.close; rescue; end
23
+ end
24
+
25
+ end
26
+ end
27
+ end
@@ -1,5 +1,5 @@
1
1
  module Guard
2
2
  module MigrateVersion
3
- VERSION = "0.1.7"
3
+ VERSION = "0.2.0"
4
4
  end
5
5
  end
@@ -1,10 +1,19 @@
1
1
  require 'spec_helper'
2
+ require 'tempfile'
2
3
 
3
4
  describe Guard::Migrate do
4
5
  let(:options){ {}}
5
6
  let(:paths){{}}
6
7
 
7
8
  subject{ Guard::Migrate.new(paths, options) }
9
+
10
+ before(:all) do
11
+ FileUtils.mkdir_p('db/migrate')
12
+ end
13
+
14
+ after(:all) do
15
+ FileUtils.rm_rf('db')
16
+ end
8
17
 
9
18
  describe "options" do
10
19
  context "bundler" do
@@ -156,7 +165,7 @@ describe Guard::Migrate do
156
165
 
157
166
  context "run on change should fixup the path to only the version" do
158
167
  ##I don't like this test much - consider refactoring
159
- let(:paths){ ['db/migrate/1234_i_like_cheese.rb'] }
168
+ let(:paths){ [create_valid_up_and_down_migration('1234_i_like_cheese').path] }
160
169
  it "should run the rake command" do
161
170
  subject.should_receive(:system).with(subject.rake_string('1234'))
162
171
  subject.run_on_changes paths
@@ -164,11 +173,43 @@ describe Guard::Migrate do
164
173
  end
165
174
 
166
175
  context "run on change when set to reset should only run migrations one time" do
167
- let(:paths){ ['db/migrate/1234_i_like_cheese.rb', 'db/migrate/1235_i_really_like_cheese.rb'] }
176
+ let(:paths){ [create_valid_up_and_down_migration('1234_i_like_cheese').path, create_valid_change_migration('1235_i_like_cheese').path] }
168
177
  let(:options){ {:reset => true, :test_clone => true} }
169
178
  it "should run the rake command" do
170
179
  subject.should_receive(:system).with(subject.rake_string('1234'))
171
180
  subject.run_on_changes paths
172
181
  end
173
182
  end
183
+
184
+ context "valid/invalid migrations" do
185
+
186
+ it "should keep valid up/down migrations" do
187
+ migration = create_valid_up_and_down_migration('1234_i_like_cheese')
188
+
189
+ subject.should_receive(:system).with(subject.rake_string('1234'))
190
+ subject.run_on_changes [migration.path]
191
+ end
192
+
193
+ it "should keep valid change migrations" do
194
+ migration = create_valid_change_migration('1234_i_like_cheese')
195
+
196
+ subject.should_receive(:system).with(subject.rake_string('1234'))
197
+ subject.run_on_changes [migration.path]
198
+ end
199
+
200
+ it "should remove empty up/down migrations" do
201
+ migration = create_invalid_up_and_down_migration('1234_i_like_cheese')
202
+
203
+ subject.should_not_receive(:system).with(subject.rake_string('1234'))
204
+ subject.run_on_changes [migration.path]
205
+ end
206
+
207
+ it "should remove empty change migrations" do
208
+ migration = create_invalid_change_migration('1234_i_like_cheese')
209
+
210
+ subject.should_not_receive(:system).with(subject.rake_string('1234'))
211
+ subject.run_on_changes [migration.path]
212
+ end
213
+ end
214
+
174
215
  end
data/spec/spec_helper.rb CHANGED
@@ -26,4 +26,6 @@ RSpec.configure do |config|
26
26
  config.after(:each) do
27
27
  ENV["GUARD_ENV"] = nil
28
28
  end
29
+
30
+ config.include MigrationFactory
29
31
  end
@@ -0,0 +1,77 @@
1
+ module MigrationFactory
2
+
3
+ def create_valid_up_and_down_migration(name)
4
+ create_migration(name, valid_up_and_down_migration)
5
+ end
6
+
7
+ def create_valid_change_migration(name)
8
+ create_migration(name, valid_change_migration)
9
+ end
10
+
11
+ def create_invalid_up_and_down_migration(name)
12
+ create_migration(name, invalid_up_and_down_migration)
13
+ end
14
+
15
+ def create_invalid_change_migration(name)
16
+ create_migration(name, invalid_change_migration)
17
+ end
18
+
19
+ private
20
+
21
+ def create_migration(name, content)
22
+ migration = File.new("db/migrate/#{name}.rb", 'w')
23
+ migration.write(content)
24
+ migration.close
25
+ migration
26
+ end
27
+
28
+ def valid_up_and_down_migration
29
+ <<-EOS
30
+ class ILikeCheese < ActiveRecord::Migration
31
+ def up
32
+ add_column :my_table, :my_column, :string
33
+ end
34
+
35
+ def down
36
+ remove_column :my_table, :my_column
37
+ end
38
+ end
39
+
40
+ EOS
41
+ end
42
+
43
+ def valid_change_migration
44
+ <<-EOS
45
+ class ILikeCheese < ActiveRecord::Migration
46
+ def change
47
+ add_column :my_table, :my_column, :string
48
+ end
49
+ end
50
+
51
+ EOS
52
+ end
53
+
54
+ def invalid_up_and_down_migration
55
+ <<-EOS
56
+ class ILikeCheese < ActiveRecord::Migration
57
+ def up
58
+ end
59
+
60
+ def down
61
+ end
62
+ end
63
+
64
+ EOS
65
+ end
66
+
67
+ def invalid_change_migration
68
+ <<-EOS
69
+ class ILikeCheese < ActiveRecord::Migration
70
+ def change
71
+ end
72
+ end
73
+
74
+ EOS
75
+ end
76
+
77
+ end
metadata CHANGED
@@ -1,36 +1,32 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: guard-migrate
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.7
5
- prerelease:
4
+ version: 0.2.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Geoff Lanotte
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2012-12-03 00:00:00.000000000 Z
11
+ date: 2013-09-04 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: guard
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - '>='
20
18
  - !ruby/object:Gem::Version
21
19
  version: 1.3.0
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - '>='
28
25
  - !ruby/object:Gem::Version
29
26
  version: 1.3.0
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: rspec
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
31
  - - ~>
36
32
  - !ruby/object:Gem::Version
@@ -38,7 +34,6 @@ dependencies:
38
34
  type: :development
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
38
  - - ~>
44
39
  - !ruby/object:Gem::Version
@@ -46,7 +41,6 @@ dependencies:
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: guard-rspec
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
45
  - - ~>
52
46
  - !ruby/object:Gem::Version
@@ -54,7 +48,6 @@ dependencies:
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
52
  - - ~>
60
53
  - !ruby/object:Gem::Version
@@ -66,6 +59,7 @@ executables: []
66
59
  extensions: []
67
60
  extra_rdoc_files: []
68
61
  files:
62
+ - lib/guard/migrate/migration.rb
69
63
  - lib/guard/migrate/notify.rb
70
64
  - lib/guard/migrate/templates/Guardfile
71
65
  - lib/guard/migrate/version.rb
@@ -76,8 +70,10 @@ files:
76
70
  - spec/guard/migrate/template_spec.rb
77
71
  - spec/guard/migrate_spec.rb
78
72
  - spec/spec_helper.rb
73
+ - spec/support/migration_factory.rb
79
74
  homepage: http://rubygems.org/gems/guard-migrate
80
75
  licenses: []
76
+ metadata: {}
81
77
  post_install_message:
82
78
  rdoc_options:
83
79
  - --charset=UTF-8
@@ -86,25 +82,24 @@ rdoc_options:
86
82
  require_paths:
87
83
  - lib
88
84
  required_ruby_version: !ruby/object:Gem::Requirement
89
- none: false
90
85
  requirements:
91
- - - ! '>='
86
+ - - '>='
92
87
  - !ruby/object:Gem::Version
93
88
  version: '0'
94
89
  required_rubygems_version: !ruby/object:Gem::Requirement
95
- none: false
96
90
  requirements:
97
- - - ! '>='
91
+ - - '>='
98
92
  - !ruby/object:Gem::Version
99
93
  version: 1.3.6
100
94
  requirements: []
101
95
  rubyforge_project: guard-migrate
102
- rubygems_version: 1.8.24
96
+ rubygems_version: 2.0.3
103
97
  signing_key:
104
- specification_version: 3
98
+ specification_version: 4
105
99
  summary: Guard gem for rails migrations
106
100
  test_files:
107
101
  - spec/guard/migrate/notifier_spec.rb
108
102
  - spec/guard/migrate/template_spec.rb
109
103
  - spec/guard/migrate_spec.rb
110
104
  - spec/spec_helper.rb
105
+ - spec/support/migration_factory.rb