moargration 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +2 -0
- data/README.md +10 -3
- data/lib/moargration.rb +8 -2
- data/moargration.gemspec +1 -1
- data/test/moargration_test.rb +21 -0
- data/test/test_helper.rb +3 -0
- metadata +4 -3
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,11 +1,12 @@
|
|
1
1
|
# Moargration
|
2
2
|
|
3
|
-
Helping you migrate
|
3
|
+
Helping you migrate MOAR.
|
4
4
|
|
5
5
|
This is Ruby gem that takes environment variables to assist the execution of database migrations that would otherwise require two-step deploys.
|
6
6
|
|
7
7
|
For more information refer to [Rails migrations with no downtime](http://pedro.herokuapp.com/past/2011/7/13/rails_migrations_with_no_downtime/).
|
8
8
|
|
9
|
+
Currently works only with ActiveRecord 2.x.
|
9
10
|
|
10
11
|
## Setup
|
11
12
|
|
@@ -41,15 +42,21 @@ After the migration finishes you can unset that variable and enjoy your new data
|
|
41
42
|
|
42
43
|
## The example above is not completely obvious, I need a [BNF grammar](http://en.wikipedia.org/wiki/Backus%E2%80%93Naur_Form)
|
43
44
|
|
44
|
-
Sure thing
|
45
|
+
Sure thing:
|
45
46
|
|
46
47
|
<ignore> ::= <definition> { " " <definition> }
|
47
48
|
<definition> ::= <table> ":" <fields>
|
48
49
|
<fields> ::= <field> { "," <field> }
|
49
50
|
|
50
51
|
|
52
|
+
## Todo
|
53
|
+
|
54
|
+
* Sequel::Model support
|
55
|
+
* ActiveRecord 3 support
|
56
|
+
|
57
|
+
|
51
58
|
## Notes
|
52
59
|
|
53
60
|
Created by Pedro Belo.
|
54
61
|
Licensed as MIT.
|
55
|
-
Use at your own risk.
|
62
|
+
Use at your own risk.
|
data/lib/moargration.rb
CHANGED
@@ -4,8 +4,9 @@ module Moargration
|
|
4
4
|
extend self
|
5
5
|
|
6
6
|
def init
|
7
|
+
@@columns_to_ignore = {}
|
7
8
|
return unless ignore = ENV["MOARGRATION_IGNORE"]
|
8
|
-
columns_to_ignore = parse(ignore)
|
9
|
+
self.columns_to_ignore = parse(ignore)
|
9
10
|
hack_active_record!
|
10
11
|
end
|
11
12
|
|
@@ -17,8 +18,13 @@ module Moargration
|
|
17
18
|
@@columns_to_ignore
|
18
19
|
end
|
19
20
|
|
21
|
+
def ignoring?(table, column)
|
22
|
+
ignored_columns = columns_to_ignore[table.to_s] || []
|
23
|
+
ignored_columns.include?(column.to_s)
|
24
|
+
end
|
25
|
+
|
20
26
|
def parse(text)
|
21
|
-
|
27
|
+
text.strip.split(" ").inject({}) do |parsed, definition|
|
22
28
|
table, fields = definition.split(":", 2)
|
23
29
|
parsed[table] = fields.split(",") if fields
|
24
30
|
parsed
|
data/moargration.gemspec
CHANGED
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
|
5
5
|
Gem::Specification.new do |gem|
|
6
6
|
gem.name = "moargration"
|
7
|
-
gem.version = "0.0.
|
7
|
+
gem.version = "0.0.5"
|
8
8
|
gem.authors = ["Pedro Belo"]
|
9
9
|
gem.email = ["pedro@heroku.com"]
|
10
10
|
gem.description = %q{Helping you migrate, MOAR.}
|
data/test/moargration_test.rb
CHANGED
@@ -19,6 +19,27 @@ describe Moargration do
|
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
|
+
describe "ignoring?" do
|
23
|
+
it "helper to indicate if Moargration is set to ignore a column" do
|
24
|
+
Moargration.columns_to_ignore = { "samples" => %w( f1 ) }
|
25
|
+
assert Moargration.ignoring?(:samples, :f1)
|
26
|
+
assert !Moargration.ignoring?(:samples, :f2)
|
27
|
+
assert !Moargration.ignoring?(:other, :f1)
|
28
|
+
end
|
29
|
+
|
30
|
+
it "reads a table with multiple fields" do
|
31
|
+
Moargration.parse("table:f1,f2").must_equal("table" => %w( f1 f2 ))
|
32
|
+
end
|
33
|
+
|
34
|
+
it "reads multiple tables" do
|
35
|
+
Moargration.parse("t1:f1,f2 t2:f1").must_equal("t1" => %w( f1 f2 ), "t2" => %w( f1 ))
|
36
|
+
end
|
37
|
+
|
38
|
+
it "ignores tables without fields" do
|
39
|
+
Moargration.parse("t1:f1 t2 t3:f1").must_equal("t1" => %w( f1 ), "t3" => %w( f1 ))
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
22
43
|
describe "hack_active_record" do
|
23
44
|
it "hacks the model to ignore the specified columns" do
|
24
45
|
Moargration.columns_to_ignore = { "samples" => %w( f1 ) }
|
data/test/test_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: moargration
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2014-04-07 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: Helping you migrate, MOAR.
|
15
15
|
email:
|
@@ -46,10 +46,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
46
46
|
version: '0'
|
47
47
|
requirements: []
|
48
48
|
rubyforge_project:
|
49
|
-
rubygems_version: 1.8.
|
49
|
+
rubygems_version: 1.8.25
|
50
50
|
signing_key:
|
51
51
|
specification_version: 3
|
52
52
|
summary: To assist app developers with tricky database migrations
|
53
53
|
test_files:
|
54
54
|
- test/moargration_test.rb
|
55
55
|
- test/test_helper.rb
|
56
|
+
has_rdoc:
|