migratrix 0.0.6 → 0.0.7
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/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
|