migratrix 0.0.9 → 0.8.1
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/migratrix.rb +62 -6
- data/lib/migratrix/exceptions.rb +4 -1
- data/lib/migratrix/{extractors → extractions}/active_record.rb +14 -10
- data/lib/migratrix/{extractors/extractor.rb → extractions/extraction.rb} +21 -20
- data/lib/migratrix/loads/load.rb +43 -0
- data/lib/migratrix/loads/yaml.rb +15 -0
- data/lib/migratrix/migration.rb +115 -27
- data/lib/migratrix/migratrix.rb +43 -84
- data/lib/migratrix/registry.rb +20 -0
- data/lib/migratrix/transforms/map.rb +57 -0
- data/lib/migratrix/transforms/transform.rb +268 -0
- data/lib/migratrix/valid_options.rb +22 -0
- data/lib/patches/object_ext.rb +0 -4
- data/spec/fixtures/migrations/marbles_migration.rb +6 -4
- data/spec/lib/migratrix/{loggable_spec.rb → _loggable_spec.rb} +0 -0
- data/spec/lib/migratrix/extractions/active_record_spec.rb +146 -0
- data/spec/lib/migratrix/extractions/extraction_spec.rb +71 -0
- data/spec/lib/migratrix/loads/load_spec.rb +59 -0
- data/spec/lib/migratrix/loads/yaml_spec.rb +39 -0
- data/spec/lib/migratrix/migration_spec.rb +195 -27
- data/spec/lib/migratrix/migratrix_spec.rb +57 -85
- data/spec/lib/migratrix/registry_spec.rb +28 -0
- data/spec/lib/migratrix/transforms/map_spec.rb +55 -0
- data/spec/lib/migratrix/transforms/transform_spec.rb +134 -0
- data/spec/lib/migratrix_spec.rb +98 -0
- data/spec/lib/patches/object_ext_spec.rb +0 -7
- data/spec/spec_helper.rb +18 -13
- metadata +21 -10
- data/spec/lib/migratrix/extractors/active_record_spec.rb +0 -43
- data/spec/lib/migratrix/extractors/extractor_spec.rb +0 -63
- data/spec/lib/migratrix_module_spec.rb +0 -63
@@ -1,13 +1,6 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Object do
|
4
|
-
describe "#in?" do
|
5
|
-
it "returns true if object is included in collection" do
|
6
|
-
3.should be_in([1,2,3,4])
|
7
|
-
"sexy".should be_in("dylsexyc")
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
4
|
describe "#deep_copy" do
|
12
5
|
let(:ray) { [1,2,3]}
|
13
6
|
let(:hash) { {a: 42, b: 69, c: 13, d: 64} }
|
data/spec/spec_helper.rb
CHANGED
@@ -28,19 +28,7 @@ Dir[SPEC + "support/**/*.rb"].each {|f| require f}
|
|
28
28
|
|
29
29
|
require LIB + 'migratrix'
|
30
30
|
|
31
|
-
|
32
|
-
# test collision prevention, I needed to reach into Migratrix and
|
33
|
-
# mindwipe it of any migrations. Here's the shiv to do that. I
|
34
|
-
# originally put an API to do this on Migratrix but these specs are
|
35
|
-
# the only clients of it so I removed it again. If you find a
|
36
|
-
# legitimate use for it, feel free to re-add a remove_migration
|
37
|
-
# method and send me a patch.
|
38
|
-
def reset_migratrix!(migratrix)
|
39
|
-
Migratrix.constants.map(&:to_s).select {|m| m =~ /.+Migration$/}.each do |migration|
|
40
|
-
Migratrix.send(:remove_const, migration.to_sym)
|
41
|
-
end
|
42
|
-
migratrix.registered_migrations.clear
|
43
|
-
end
|
31
|
+
require SPEC + "fixtures/migrations/marbles_migration"
|
44
32
|
|
45
33
|
# Redirect singleton logger to logger of our choice, then release it
|
46
34
|
# after the spec finishes or crashes.
|
@@ -54,7 +42,24 @@ def with_logger(logger, &block)
|
|
54
42
|
end
|
55
43
|
end
|
56
44
|
|
45
|
+
def with_logging_to(stream, &block)
|
46
|
+
begin
|
47
|
+
old_logger = Migratrix::Migratrix.logger
|
48
|
+
Migratrix::Migratrix.log_to stream
|
49
|
+
yield
|
50
|
+
ensure
|
51
|
+
Migratrix::Migratrix.logger = old_logger
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
57
55
|
RSpec.configure do |config|
|
56
|
+
config.before(:each) do
|
57
|
+
@test_logger_buffer = StringIO.new
|
58
|
+
@test_logger = Migratrix::Migratrix.create_logger(@test_logger_buffer)
|
59
|
+
Migratrix::Migratrix.init_logger
|
60
|
+
Migratrix::Migratrix.logger = @test_logger
|
61
|
+
|
62
|
+
end
|
58
63
|
# == Mock Framework
|
59
64
|
#
|
60
65
|
# If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: migratrix
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-10-
|
12
|
+
date: 2011-10-24 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: trollop
|
16
|
-
requirement: &
|
16
|
+
requirement: &2164512960 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,7 +21,7 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *2164512960
|
25
25
|
description: Migratrix, a Rails legacy database migration tool supporting multiple
|
26
26
|
strategies, including arbitrary n-ary migrations (1->n, n->1, n->m), arbitrary inputs
|
27
27
|
and outputs (ActiveRecord, bare SQL, CSV) and migration logging
|
@@ -38,22 +38,33 @@ files:
|
|
38
38
|
- lib/migratrix.rb
|
39
39
|
- lib/migratrix/active_record_migration_helpers.rb
|
40
40
|
- lib/migratrix/exceptions.rb
|
41
|
-
- lib/migratrix/
|
42
|
-
- lib/migratrix/
|
41
|
+
- lib/migratrix/extractions/active_record.rb
|
42
|
+
- lib/migratrix/extractions/extraction.rb
|
43
|
+
- lib/migratrix/loads/load.rb
|
44
|
+
- lib/migratrix/loads/yaml.rb
|
43
45
|
- lib/migratrix/loggable.rb
|
44
46
|
- lib/migratrix/migration.rb
|
45
47
|
- lib/migratrix/migratrix.rb
|
48
|
+
- lib/migratrix/registry.rb
|
49
|
+
- lib/migratrix/transforms/map.rb
|
50
|
+
- lib/migratrix/transforms/transform.rb
|
51
|
+
- lib/migratrix/valid_options.rb
|
46
52
|
- lib/patches/andand.rb
|
47
53
|
- lib/patches/object_ext.rb
|
48
54
|
- lib/patches/string_ext.rb
|
49
55
|
- spec/fixtures/migrations/marbles_migration.rb
|
50
|
-
- spec/lib/migratrix/
|
51
|
-
- spec/lib/migratrix/
|
52
|
-
- spec/lib/migratrix/
|
56
|
+
- spec/lib/migratrix/_loggable_spec.rb
|
57
|
+
- spec/lib/migratrix/extractions/active_record_spec.rb
|
58
|
+
- spec/lib/migratrix/extractions/extraction_spec.rb
|
59
|
+
- spec/lib/migratrix/loads/load_spec.rb
|
60
|
+
- spec/lib/migratrix/loads/yaml_spec.rb
|
53
61
|
- spec/lib/migratrix/migration_spec.rb
|
54
62
|
- spec/lib/migratrix/migrator_spec.rb
|
55
63
|
- spec/lib/migratrix/migratrix_spec.rb
|
56
|
-
- spec/lib/
|
64
|
+
- spec/lib/migratrix/registry_spec.rb
|
65
|
+
- spec/lib/migratrix/transforms/map_spec.rb
|
66
|
+
- spec/lib/migratrix/transforms/transform_spec.rb
|
67
|
+
- spec/lib/migratrix_spec.rb
|
57
68
|
- spec/lib/patches/object_ext_spec.rb
|
58
69
|
- spec/lib/patches/string_ext_spec.rb
|
59
70
|
- spec/spec_helper.rb
|
@@ -1,43 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'active_record'
|
3
|
-
|
4
|
-
class TestModel < ::ActiveRecord::Base
|
5
|
-
# self.abstract_class = true
|
6
|
-
end
|
7
|
-
|
8
|
-
class TestActiveRecordExtractor < Migratrix::Extractors::ActiveRecord
|
9
|
-
end
|
10
|
-
|
11
|
-
describe Migratrix::Extractors::ActiveRecord do
|
12
|
-
let(:extractor) { TestActiveRecordExtractor.new }
|
13
|
-
describe "sanity check cat" do
|
14
|
-
it "is sanity checked" do
|
15
|
-
Migratrix::Extractors::Extractor.should_not be_nil
|
16
|
-
TestActiveRecordExtractor.should_not be_nil
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
describe ".new" do
|
21
|
-
it "raises TypeError unless source is Active" do
|
22
|
-
lambda { TestActiveRecordExtractor.new :source => Object }.should raise_error(TypeError)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
describe "#source=" do
|
27
|
-
it "raises TypeError unless source is Active" do
|
28
|
-
lambda { extractor.source = Object }.should raise_error(TypeError)
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
describe "#obtain_source" do
|
33
|
-
it "raises ExtractorSourceUndefined unless source is defined" do
|
34
|
-
lambda { extractor.extract }.should raise_error(Migratrix::ExtractorSourceUndefined)
|
35
|
-
end
|
36
|
-
|
37
|
-
it "returns the legacy ActiveRecord class" do
|
38
|
-
extractor.source = TestModel
|
39
|
-
extractor.obtain_source(TestModel).should == TestModel
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
@@ -1,63 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
class TestExtractor < Migratrix::Extractors::Extractor
|
4
|
-
end
|
5
|
-
|
6
|
-
describe Migratrix::Extractors::Extractor do
|
7
|
-
describe "sanity check cat" do
|
8
|
-
it "is sanity checked" do
|
9
|
-
Migratrix::Extractors::Extractor.should_not be_nil
|
10
|
-
TestExtractor.should_not be_nil
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
describe "unimplemented method" do
|
15
|
-
let(:base_extractor) { Migratrix::Extractors::Extractor.new }
|
16
|
-
[:obtain_source, :handle_where, :handle_limit, :handle_offset, :handle_order, :to_query, :execute_extract].each do |method|
|
17
|
-
describe "#{method}" do
|
18
|
-
it "raises NotImplementedError" do
|
19
|
-
lambda { base_extractor.send(method, nil) }.should raise_error(NotImplementedError)
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
describe "#extract (default strategy)" do
|
26
|
-
describe "with no options" do
|
27
|
-
let(:extractor) { TestExtractor.new }
|
28
|
-
it "should call handle_source and execute_extract only" do
|
29
|
-
extractor.should_receive(:obtain_source).with(nil).and_return(13)
|
30
|
-
extractor.should_receive(:execute_extract).with(13).and_return(64)
|
31
|
-
extractor.extract.should == 64
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
describe "with all options" do
|
36
|
-
let(:extractor) { TestExtractor.new "where" => 1, "order" => 2, "limit" => 3, "offset" => 4 }
|
37
|
-
it "should call entire handler chain" do
|
38
|
-
extractor.should_receive(:obtain_source).with(nil).and_return("A")
|
39
|
-
extractor.should_receive(:handle_where).with("A", 1).and_return("B")
|
40
|
-
extractor.should_receive(:handle_order).with("B", 2).and_return("C")
|
41
|
-
extractor.should_receive(:handle_limit).with("C", 3).and_return("D")
|
42
|
-
extractor.should_receive(:handle_offset).with("D", 4).and_return("E")
|
43
|
-
extractor.should_receive(:execute_extract).with("E").and_return("BONG")
|
44
|
-
extractor.extract.should == "BONG"
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
describe "with overridden options" do
|
49
|
-
let(:extractor) { TestExtractor.new }
|
50
|
-
let(:overrides) { {"where" => 5, "order" => 6, "limit" => 7, "offset" => 8 } }
|
51
|
-
it "should call entire handler chain" do
|
52
|
-
extractor.should_receive(:obtain_source).with(nil).and_return("A")
|
53
|
-
extractor.should_receive(:handle_where).with("A", 5).and_return("B")
|
54
|
-
extractor.should_receive(:handle_order).with("B", 6).and_return("C")
|
55
|
-
extractor.should_receive(:handle_limit).with("C", 7).and_return("D")
|
56
|
-
extractor.should_receive(:handle_offset).with("D", 8).and_return("E")
|
57
|
-
extractor.should_receive(:execute_extract).with("E").and_return("BONG")
|
58
|
-
extractor.extract(overrides).should == "BONG"
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
@@ -1,63 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Migratrix do
|
4
|
-
describe "sanity check kitty" do
|
5
|
-
it "is sanity checked" do
|
6
|
-
Migratrix.should_not be_nil
|
7
|
-
Migratrix.class.should == Module
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
describe "convenience delegator methods" do
|
12
|
-
def spec_delegates_to_migratrix(method, *args)
|
13
|
-
if args.size > 0
|
14
|
-
Migratrix::Migratrix.should_receive(method).with(*args).once
|
15
|
-
else
|
16
|
-
Migratrix::Migratrix.should_receive(method).once
|
17
|
-
end
|
18
|
-
Migratrix.send(method, *args)
|
19
|
-
end
|
20
|
-
|
21
|
-
describe ".migrate!" do
|
22
|
-
let (:migratrix) { Migratrix::Migratrix.new }
|
23
|
-
|
24
|
-
before do
|
25
|
-
reset_migratrix! migratrix
|
26
|
-
Migratrix::Migratrix.stub!(:new).and_return(migratrix)
|
27
|
-
migratrix.migrations_path = SPEC + "fixtures/migrations"
|
28
|
-
end
|
29
|
-
|
30
|
-
it "delegates to Migratrix::Migratrix" do
|
31
|
-
Migratrix.migrate! :marbles
|
32
|
-
Migratrix::MarblesMigration.should be_migrated
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
describe ".logger" do
|
37
|
-
it "delegates to Migratrix::Migratrix" do
|
38
|
-
spec_delegates_to_migratrix :logger
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
describe ".logger=" do
|
43
|
-
let (:logger) { Logger.new(StringIO.new) }
|
44
|
-
it "delegates to Migratrix::Migratrix" do
|
45
|
-
spec_delegates_to_migratrix :logger=, logger
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
describe ".log_to" do
|
50
|
-
let (:buffer) { StringIO.new }
|
51
|
-
it "delegates to Migratrix::Migratrix" do
|
52
|
-
spec_delegates_to_migratrix :log_to, buffer
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
describe ".reload_migration" do
|
57
|
-
it "delegates to Migratrix::Migratrix" do
|
58
|
-
spec_delegates_to_migratrix :reload_migration, :marbles
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|