exodus 1.0.4 → 1.0.5
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/CHANGELOG.md +4 -0
- data/README.md +0 -4
- data/lib/exodus.rb +1 -0
- data/lib/exodus/helpers/text_formatter.rb +75 -0
- data/lib/exodus/migrations/migration.rb +9 -11
- data/lib/exodus/migrations/migration_status.rb +9 -1
- data/lib/exodus/version.rb +1 -1
- metadata +3 -2
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -64,10 +64,6 @@ Exodus - a migration framework for MongoDb
|
|
64
64
|
## To Do when writting your own
|
65
65
|
|
66
66
|
* Give it a migration_number
|
67
|
-
class MyMigration < Exodus::Migration
|
68
|
-
self.migration_number = 1
|
69
|
-
end
|
70
|
-
|
71
67
|
* Initialize it and define status_complete and description
|
72
68
|
* Write the UP method that will be call when migrating the migration
|
73
69
|
* Write the DOWN method that will be call when rolling back the migration
|
data/lib/exodus.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'mongo_mapper'
|
2
|
+
require File.dirname(__FILE__) + '/exodus/helpers/text_formatter'
|
2
3
|
require File.dirname(__FILE__) + '/exodus/config/migration_info'
|
3
4
|
require File.dirname(__FILE__) + '/exodus/migrations/migration'
|
4
5
|
require File.dirname(__FILE__) + '/exodus/migrations/migration_error'
|
@@ -0,0 +1,75 @@
|
|
1
|
+
module Exodus
|
2
|
+
module TextFormatter
|
3
|
+
|
4
|
+
# Prints a paragraphes
|
5
|
+
def super_print(paragraphes, space_number = 50, title = true)
|
6
|
+
puts format_paragraph(space_number, title, *paragraphes)
|
7
|
+
end
|
8
|
+
|
9
|
+
private
|
10
|
+
|
11
|
+
# Transforms an array of paragraphes to a String using lines and columns
|
12
|
+
# Each paragraph is actually an Array of string, where each string is a sentence of a given column
|
13
|
+
# if the sentence contains to much caractere the sentence will be splitted (using whitespaces) and written on several lines
|
14
|
+
# e,g considering paragraphes = [["id", "type"]["id_1", "test"]]
|
15
|
+
# format_paragraph will print:
|
16
|
+
# id type
|
17
|
+
# id_1 test
|
18
|
+
def format_paragraph(space_number, title, *paragraphes)
|
19
|
+
column_size = paragraphes.max_by{|paragraph| paragraph.size}.size
|
20
|
+
@full_text = Hash[*column_size.times.map {|i| [i,[]]}.flatten(1)]
|
21
|
+
|
22
|
+
paragraphes.each_with_index do |sentences, paragraph_number|
|
23
|
+
sentences.each_with_index do |sentence, column|
|
24
|
+
if sentence.size > space_number && (words = sentence.gsub('=>', ' => ').split(' ')).size > 1
|
25
|
+
new_sentence = ""
|
26
|
+
words.each_with_index do |word, nb_word|
|
27
|
+
if new_sentence.size + word.size < space_number
|
28
|
+
new_sentence << word << ' '
|
29
|
+
else
|
30
|
+
insert_line(column, new_sentence) unless new_sentence.empty?
|
31
|
+
new_sentence = word << ' '
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
insert_line(column, new_sentence) unless new_sentence == @full_text[column].last
|
36
|
+
else
|
37
|
+
insert_line(column, sentence)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
@full_text.each {|column, lines| (@max_lines - lines.size).times { lines << '' }}
|
42
|
+
space = paragraph_number == 0 && title ? "/nbspace" : ""
|
43
|
+
@full_text.each {|column, lines| lines << space}
|
44
|
+
end
|
45
|
+
|
46
|
+
stringify_paragraph
|
47
|
+
end
|
48
|
+
|
49
|
+
# Creates a String from a Hash of the following format {column_number => [lines]}
|
50
|
+
# "/nbspace" is used to define a border
|
51
|
+
def stringify_paragraph
|
52
|
+
ordered_lines = {}
|
53
|
+
|
54
|
+
spaces = @full_text.map {|column, lines| lines.max_by {|sentence| sentence.size}.size}
|
55
|
+
@full_text.each_with_index do |(column, lines), i|
|
56
|
+
lines.each_with_index do |line, line_number|
|
57
|
+
if line == "/nbspace"
|
58
|
+
(ordered_lines[line_number] ||= "") << line.gsub("/nbspace", "-" * (spaces[i] + 4))
|
59
|
+
else
|
60
|
+
(ordered_lines[line_number] ||= "") << line.to_s.ljust(spaces[i] + 4)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
ordered_lines.values.join("\n")
|
66
|
+
end
|
67
|
+
|
68
|
+
# Inserts a line at the correcponding column and re-sets the number of maximum line if the maximum has been increased
|
69
|
+
def insert_line(column, line)
|
70
|
+
@max_lines ||= 0
|
71
|
+
@full_text[column] << line
|
72
|
+
@max_lines = @full_text[column].size if @max_lines < @full_text[column].size
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
module Exodus
|
2
2
|
class Migration
|
3
3
|
include MongoMapper::Document
|
4
|
+
extend Exodus::TextFormatter
|
4
5
|
set_collection_name 'migrations'
|
5
6
|
|
6
7
|
UP = 'up'
|
@@ -69,27 +70,24 @@ module Exodus
|
|
69
70
|
|
70
71
|
# Prints in the console all migrations class with their name and description
|
71
72
|
def list
|
72
|
-
|
73
|
-
puts '-' * 100, "\n"
|
73
|
+
last_info = [["Migration n#:", "Name:", "Description:"]]
|
74
74
|
|
75
|
-
Migration.sort_all.map do|migration, args|
|
76
|
-
|
77
|
-
puts "\t#{migration.migration_number} \t\t #{migration.name} \t\t #{m.description}"
|
75
|
+
last_info |= Migration.sort_all.map do|migration, args|
|
76
|
+
[migration.migration_number, migration.name, migration.new.description]
|
78
77
|
end
|
79
78
|
|
80
|
-
|
79
|
+
super_print(last_info, 70)
|
81
80
|
end
|
82
81
|
|
83
82
|
# Prints in the console all migrations that has been ran at least once with their name and description
|
84
83
|
def db_status
|
85
|
-
|
86
|
-
puts '-' * 175, "\n"
|
84
|
+
status_info = [["Migration n#:", "Name:", "Direction:", "Current Status:", "Arguments:", "Last completion Date:", "Current Message:"]]
|
87
85
|
|
88
|
-
Migration.all.
|
89
|
-
|
86
|
+
status_info |= Migration.all.map do|migration|
|
87
|
+
[migration.class.migration_number, migration.class.name, *migration.status.to_a_string]
|
90
88
|
end
|
91
89
|
|
92
|
-
|
90
|
+
super_print(status_info)
|
93
91
|
end
|
94
92
|
end
|
95
93
|
|
@@ -25,7 +25,15 @@ module Exodus
|
|
25
25
|
end
|
26
26
|
|
27
27
|
def to_string
|
28
|
-
"\t#{direction}\t\t #{
|
28
|
+
"\t#{direction}\t\t #{current_status} \t\t #{arguments}\t\t #{last_succesful_completion} \t\t #{message}"
|
29
|
+
end
|
30
|
+
|
31
|
+
def to_a
|
32
|
+
[direction, current_status, arguments, last_succesful_completion, message]
|
33
|
+
end
|
34
|
+
|
35
|
+
def to_a_string
|
36
|
+
self.to_a.map(&:to_s)
|
29
37
|
end
|
30
38
|
|
31
39
|
# Resets a status
|
data/lib/exodus/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: exodus
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.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: 2013-
|
12
|
+
date: 2013-07-08 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: mongo_mapper
|
@@ -95,6 +95,7 @@ files:
|
|
95
95
|
- exodus.gemspec
|
96
96
|
- lib/exodus.rb
|
97
97
|
- lib/exodus/config/migration_info.rb
|
98
|
+
- lib/exodus/helpers/text_formatter.rb
|
98
99
|
- lib/exodus/migrations/migration.rb
|
99
100
|
- lib/exodus/migrations/migration_error.rb
|
100
101
|
- lib/exodus/migrations/migration_status.rb
|