migratrix 0.0.6 → 0.0.7
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/migratrix/loggable.rb +8 -4
- data/lib/migratrix/migration.rb +0 -1
- data/lib/migratrix/migratrix.rb +32 -3
- data/lib/migratrix.rb +1 -1
- data/spec/lib/loggable_spec.rb +32 -0
- data/spec/lib/migration_spec.rb +3 -1
- data/spec/lib/migratrix_spec.rb +8 -11
- data/spec/spec_helper.rb +7 -10
- metadata +5 -6
- data/lib/migratrix/logger.rb +0 -56
- data/spec/lib/logger_spec.rb +0 -89
data/lib/migratrix/loggable.rb
CHANGED
@@ -1,14 +1,18 @@
|
|
1
|
+
require 'active_support/concern'
|
1
2
|
module Migratrix
|
2
3
|
module Loggable
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
3
6
|
module ClassMethods
|
4
7
|
def logger
|
5
|
-
::Migratrix::
|
8
|
+
::Migratrix::Migratrix.logger
|
6
9
|
end
|
7
10
|
end
|
8
11
|
|
9
|
-
|
10
|
-
|
12
|
+
module InstanceMethods
|
13
|
+
def logger
|
14
|
+
::Migratrix::Migratrix.logger
|
15
|
+
end
|
11
16
|
end
|
12
|
-
|
13
17
|
end
|
14
18
|
end
|
data/lib/migratrix/migration.rb
CHANGED
data/lib/migratrix/migratrix.rb
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
# Main "App" or Driver class for Migrating. Responsible for loading
|
2
2
|
# and integrating all the parts of a migration.
|
3
|
-
|
4
3
|
module Migratrix
|
4
|
+
include ::Migratrix::Loggable
|
5
|
+
|
5
6
|
def self.migrate!(name, options={})
|
6
7
|
::Migratrix::Migratrix.migrate(name, options)
|
7
8
|
end
|
@@ -11,12 +12,11 @@ module Migratrix
|
|
11
12
|
end
|
12
13
|
|
13
14
|
def self.logger=(new_logger)
|
14
|
-
::Migratrix::Migratrix.logger= new_logger
|
15
|
+
::Migratrix::Migratrix.logger = new_logger
|
15
16
|
end
|
16
17
|
|
17
18
|
class Migratrix
|
18
19
|
include ::Migratrix::Loggable
|
19
|
-
extend ::Migratrix::Loggable::ClassMethods
|
20
20
|
|
21
21
|
def initialize
|
22
22
|
end
|
@@ -62,6 +62,35 @@ module Migratrix
|
|
62
62
|
%w(limit where)
|
63
63
|
end
|
64
64
|
|
65
|
+
# ----------------------------------------------------------------------
|
66
|
+
# Logger singleton; tries to hook into Rails.logger if it exists (it
|
67
|
+
# won't if you log anything during startup because Migratrix is
|
68
|
+
# loaded before Rails). To fix this, after rails start up call
|
69
|
+
# Migratrix::Migratrix.logger = Rails.logger
|
70
|
+
def self.create_logger(stream)
|
71
|
+
logger = Logger.new(stream)
|
72
|
+
logger.formatter = proc { |severity, datetime, progname, msg|
|
73
|
+
"#{severity[0]} #{datetime.strftime('%F %H:%M:%S')}: #{msg}\n"
|
74
|
+
}
|
75
|
+
logger
|
76
|
+
end
|
77
|
+
|
78
|
+
def self.init_logger
|
79
|
+
return Rails.logger if Rails.logger
|
80
|
+
@@logger = create_logger($stdout)
|
81
|
+
end
|
82
|
+
|
83
|
+
def self.logger
|
84
|
+
@@logger ||= self.init_logger
|
85
|
+
end
|
86
|
+
|
87
|
+
def self.logger=(new_logger)
|
88
|
+
@@logger = new_logger
|
89
|
+
end
|
90
|
+
# ----------------------------------------------------------------------
|
91
|
+
|
92
|
+
|
93
|
+
|
65
94
|
# ----------------------------------------------------------------------
|
66
95
|
# Candidate for exract class? MigrationRegistry?
|
67
96
|
def loaded?(name)
|
data/lib/migratrix.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'pathname'
|
2
2
|
require 'forwardable'
|
3
|
+
require 'logger'
|
3
4
|
|
4
5
|
module Migratrix
|
5
6
|
APP=Pathname.new(__FILE__).dirname + "migratrix"
|
@@ -12,7 +13,6 @@ module Migratrix
|
|
12
13
|
require EXT + 'string_ext'
|
13
14
|
require EXT + 'object_ext'
|
14
15
|
require EXT + 'andand'
|
15
|
-
require APP + 'logger'
|
16
16
|
require APP + 'loggable'
|
17
17
|
require APP + 'exceptions'
|
18
18
|
require APP + 'migration'
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
# class SomeLoggableThing
|
4
|
+
# include Migratrix::Loggable
|
5
|
+
# end
|
6
|
+
|
7
|
+
shared_examples_for "loggable" do
|
8
|
+
# let(:loggable) { SomeLoggableThing.new }
|
9
|
+
let(:buffer) { StringIO.new }
|
10
|
+
let(:logger) { Migratrix::Migratrix.create_logger(buffer) }
|
11
|
+
|
12
|
+
before do
|
13
|
+
Timecop.freeze(Time.local(2011, 6, 28, 3, 14, 15))
|
14
|
+
end
|
15
|
+
|
16
|
+
after do
|
17
|
+
Timecop.return
|
18
|
+
end
|
19
|
+
|
20
|
+
it "is loggable" do
|
21
|
+
loggable.class.ancestors.should include(Migratrix::Loggable)
|
22
|
+
end
|
23
|
+
|
24
|
+
describe "instance" do
|
25
|
+
it "can log" do
|
26
|
+
with_logger(logger) do
|
27
|
+
loggable.logger.info("This is a test")
|
28
|
+
end
|
29
|
+
buffer.string.should == "I 2011-06-28 03:14:15: This is a test\n"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
data/spec/lib/migration_spec.rb
CHANGED
@@ -3,10 +3,12 @@ require 'spec_helper'
|
|
3
3
|
# This migration is embedded in migration_spec.rb to allow testing of
|
4
4
|
# the class methods that specialize subclasses.
|
5
5
|
class Migratrix::TestMigration < Migratrix::Migration
|
6
|
-
|
7
6
|
end
|
8
7
|
|
9
8
|
describe Migratrix::Migration do
|
9
|
+
let(:loggable) { Migratrix::TestMigration.new }
|
10
|
+
it_should_behave_like "loggable"
|
11
|
+
|
10
12
|
describe ".new" do
|
11
13
|
it "does not modify given options hash" do
|
12
14
|
conditions = ["id=? AND approved=?", 42, true]
|
data/spec/lib/migratrix_spec.rb
CHANGED
@@ -99,12 +99,6 @@ describe Migratrix::Migratrix do
|
|
99
99
|
end
|
100
100
|
end
|
101
101
|
|
102
|
-
describe ".logger" do
|
103
|
-
it "sets up a default logger to stdout" do
|
104
|
-
migratrix.logger.class.should == ::Migratrix::Logger
|
105
|
-
end
|
106
|
-
end
|
107
|
-
|
108
102
|
describe ".logger=" do
|
109
103
|
let (:migration) { migratrix.create_migration :marbles }
|
110
104
|
let (:buffer) { StringIO.new }
|
@@ -115,11 +109,14 @@ describe Migratrix::Migratrix do
|
|
115
109
|
end
|
116
110
|
|
117
111
|
it "sets logger globally across all Migratrices, the Migratrix module, Migrators and Models" do
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
112
|
+
logger = Migratrix::Migratrix.create_logger(buffer)
|
113
|
+
Migratrix::Migratrix.logger = logger
|
114
|
+
with_logger(logger) do
|
115
|
+
Migratrix.logger.should == logger
|
116
|
+
Migratrix::Migratrix.logger.should == logger
|
117
|
+
migratrix.logger.should == logger
|
118
|
+
migration.logger.should == logger
|
119
|
+
Migratrix::MarblesMigration.logger.should == logger
|
123
120
|
end
|
124
121
|
end
|
125
122
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -8,6 +8,7 @@ require 'ruby-debug'
|
|
8
8
|
require 'rails'
|
9
9
|
require 'timecop'
|
10
10
|
require 'logger'
|
11
|
+
require 'active_support/concern'
|
11
12
|
|
12
13
|
# Requires supporting ruby files with custom matchers and macros, etc,
|
13
14
|
# in spec/support/ and its subdirectories.
|
@@ -41,22 +42,18 @@ def reset_migratrix!(migratrix)
|
|
41
42
|
migratrix.registered_migrations.clear
|
42
43
|
end
|
43
44
|
|
44
|
-
# Redirect singleton logger to
|
45
|
-
#
|
46
|
-
def
|
45
|
+
# Redirect singleton logger to logger of our choice, then release it
|
46
|
+
# after the spec finishes or crashes.
|
47
|
+
def with_logger(logger, &block)
|
47
48
|
begin
|
48
|
-
|
49
|
-
Migratrix::
|
49
|
+
old_logger = Migratrix::Migratrix.logger
|
50
|
+
Migratrix::Migratrix.logger = logger
|
50
51
|
yield
|
51
52
|
ensure
|
52
|
-
Migratrix::
|
53
|
+
Migratrix::Migratrix.logger = old_logger
|
53
54
|
end
|
54
55
|
end
|
55
56
|
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
57
|
RSpec.configure do |config|
|
61
58
|
# == Mock Framework
|
62
59
|
#
|
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.0.
|
4
|
+
version: 0.0.7
|
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-15 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: trollop
|
16
|
-
requirement: &
|
16
|
+
requirement: &2157814860 !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: *2157814860
|
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
|
@@ -39,14 +39,13 @@ files:
|
|
39
39
|
- lib/migratrix/active_record_migration_helpers.rb
|
40
40
|
- lib/migratrix/exceptions.rb
|
41
41
|
- lib/migratrix/loggable.rb
|
42
|
-
- lib/migratrix/logger.rb
|
43
42
|
- lib/migratrix/migration.rb
|
44
43
|
- lib/migratrix/migratrix.rb
|
45
44
|
- lib/patches/andand.rb
|
46
45
|
- lib/patches/object_ext.rb
|
47
46
|
- lib/patches/string_ext.rb
|
48
47
|
- spec/fixtures/migrations/marbles_migration.rb
|
49
|
-
- spec/lib/
|
48
|
+
- spec/lib/loggable_spec.rb
|
50
49
|
- spec/lib/migration_spec.rb
|
51
50
|
- spec/lib/migrator_spec.rb
|
52
51
|
- spec/lib/migratrix_spec.rb
|
data/lib/migratrix/logger.rb
DELETED
@@ -1,56 +0,0 @@
|
|
1
|
-
module Migratrix
|
2
|
-
class Logger
|
3
|
-
attr_accessor :level, :stream
|
4
|
-
|
5
|
-
FATAL = 0
|
6
|
-
ERROR = 1
|
7
|
-
WARN = 2
|
8
|
-
DEBUG = 3
|
9
|
-
INFO = 4
|
10
|
-
|
11
|
-
@@singleton_instance = new
|
12
|
-
|
13
|
-
def self.logger
|
14
|
-
@@singleton_instance
|
15
|
-
end
|
16
|
-
|
17
|
-
def self.set_logger(stream=$stdout, level=INFO)
|
18
|
-
self.logger.stream=stream
|
19
|
-
self.logger.level=level
|
20
|
-
end
|
21
|
-
|
22
|
-
def initialize(stream, level)
|
23
|
-
# :nocov: SimpleCov can't see into this method.
|
24
|
-
@stream, @level = stream, level
|
25
|
-
end
|
26
|
-
|
27
|
-
def fatal(msg)
|
28
|
-
log(msg, FATAL)
|
29
|
-
end
|
30
|
-
|
31
|
-
def error(msg)
|
32
|
-
log(msg, ERROR)
|
33
|
-
end
|
34
|
-
|
35
|
-
def warn(msg)
|
36
|
-
log(msg, WARN)
|
37
|
-
end
|
38
|
-
|
39
|
-
def debug(msg)
|
40
|
-
log(msg, DEBUG)
|
41
|
-
end
|
42
|
-
|
43
|
-
def info(msg)
|
44
|
-
log(msg, INFO)
|
45
|
-
end
|
46
|
-
|
47
|
-
def log(msg, level)
|
48
|
-
if level <= @level
|
49
|
-
@stream.puts "%c %s: %s" % ["FEWDI"[level], Time.now.strftime("%F %T"), msg]
|
50
|
-
@stream.flush
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
private_class_method :new
|
55
|
-
end
|
56
|
-
end
|
data/spec/lib/logger_spec.rb
DELETED
@@ -1,89 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Migratrix::Logger do
|
4
|
-
let(:logger) { Migratrix::Logger.logger }
|
5
|
-
|
6
|
-
describe "sanity check kitty" do
|
7
|
-
it "is sanity checked" do
|
8
|
-
Migratrix::Logger.should_not be_nil
|
9
|
-
Migratrix::Logger.class.should == Class
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
describe "singleton-ness" do
|
14
|
-
it "is singleton-y" do
|
15
|
-
Migratrix::Logger.logger.class.should == Migratrix::Logger
|
16
|
-
end
|
17
|
-
|
18
|
-
it "cannot be new'ed" do
|
19
|
-
lambda { Migratrix::Logger.new }.should raise_error(NoMethodError)
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
describe "default" do
|
24
|
-
it "logs to $stdout" do
|
25
|
-
logger.stream == $stdout
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
|
30
|
-
describe "logging" do
|
31
|
-
let(:buffer) { StringIO.new }
|
32
|
-
|
33
|
-
before do
|
34
|
-
Timecop.freeze(Time.local(2011, 6, 28, 3, 14, 15))
|
35
|
-
end
|
36
|
-
|
37
|
-
after do
|
38
|
-
Timecop.return
|
39
|
-
end
|
40
|
-
|
41
|
-
it "formats info message with level and timestamp" do
|
42
|
-
with_logger_streaming_to(buffer) do
|
43
|
-
logger.info("Test Message")
|
44
|
-
buffer.string.should == "I 2011-06-28 03:14:15: Test Message\n"
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
it "formats debug message with level and timestamp" do
|
49
|
-
with_logger_streaming_to(buffer) do
|
50
|
-
logger.debug("Test Message")
|
51
|
-
buffer.string.should == "D 2011-06-28 03:14:15: Test Message\n"
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
it "formats warning message with level and timestamp" do
|
56
|
-
with_logger_streaming_to(buffer) do
|
57
|
-
logger.warn("Test Message")
|
58
|
-
buffer.string.should == "W 2011-06-28 03:14:15: Test Message\n"
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
it "formats error message with level and timestamp" do
|
63
|
-
with_logger_streaming_to(buffer) do
|
64
|
-
logger.error("Test Message")
|
65
|
-
buffer.string.should == "E 2011-06-28 03:14:15: Test Message\n"
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
it "formats fatal message with level and timestamp" do
|
70
|
-
with_logger_streaming_to(buffer) do
|
71
|
-
logger.fatal("Test Message")
|
72
|
-
buffer.string.should == "F 2011-06-28 03:14:15: Test Message\n"
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
it "rejects messages below logger level" do
|
77
|
-
with_logger_streaming_to(buffer, Migratrix::Logger::ERROR) do
|
78
|
-
logger.info("Test Message")
|
79
|
-
logger.debug("Test Message")
|
80
|
-
logger.warn("Test Message")
|
81
|
-
buffer.size.should == 0
|
82
|
-
logger.error("Test Error")
|
83
|
-
logger.fatal("Test Fatal")
|
84
|
-
buffer.string.should == "E 2011-06-28 03:14:15: Test Error\nF 2011-06-28 03:14:15: Test Fatal\n"
|
85
|
-
end
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
end
|