exodus 1.0.1 → 1.0.2

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/.gitignore CHANGED
@@ -1,7 +1,7 @@
1
1
  .DS_Store
2
2
  */.DS_Store
3
- *.gem
4
3
  *.rbc
4
+ *.gem
5
5
  .bundle
6
6
  .config
7
7
  .yardoc
@@ -1,3 +1,7 @@
1
+ ## v1.0.2
2
+
3
+ * Gem can now been included in any ruby project
4
+
1
5
  ## v1.0.1
2
6
 
3
7
  * Small refactoring
data/README.md CHANGED
@@ -15,19 +15,36 @@ Exodus - a migration framework for MongoDb
15
15
 
16
16
 
17
17
  # Installation
18
+
19
+ Add this line to your application's Gemfile:
18
20
 
19
- gem install exodus
21
+ $ gem 'exodus'
22
+
23
+ And then execute bundle install:
24
+
25
+ $ bundle
26
+
27
+ Or install it yourself as:
28
+
29
+ $ gem install exodus
20
30
 
21
31
  # Configuration
22
32
 
23
- You need to configure 3 things before using Exodus: the database name, the mongodb connection and the config file location
33
+ You need to configure 4 things before using Exodus: the database name, the mongodb connection, the config file location and the path to the directory that will include your migrations:
34
+
35
+ require 'exodus'
24
36
 
25
37
  Exodus.configure do |config|
26
38
  config.db = 'migration_db'
27
39
  config.connection = Mongo::MongoClient.new("127.0.0.1", 27017, :pool_size => 5, :pool_timeout => 5)
28
40
  config.config_file = File.dirname(__FILE__) + '/config/config.yml'
41
+ config.migrations_directory = File.dirname(__FILE__) + '/models/migrations'
29
42
  end
30
43
 
44
+ Then you just need to loads the migrations tasks by adding the following line to your rakefile:
45
+
46
+ load Exodus.tasks
47
+
31
48
  ... And you're all set!
32
49
 
33
50
 
@@ -140,6 +157,11 @@ Exodus - a migration framework for MongoDb
140
157
  ## db:migrate:yml_status
141
158
  Prints on the screen the content of the yml configuration file
142
159
 
143
- rake db:migrate:status
160
+ rake db:migrate:yml_status
161
+
162
+ ## db:mongo_info
163
+ Prints on the screen information about the current mongo connection
164
+
165
+ rake db:mongo_info
144
166
 
145
167
 
@@ -6,7 +6,7 @@ Gem::Specification.new do |gem|
6
6
  gem.email = ['thomas@fanhattan.com', 'thomas.dmytryk@supinfo.com']
7
7
  gem.description = %q{Exodus is a migration framework for MongoDb}
8
8
  gem.summary = %q{Exodus uses mongomapper to provide a complete migration framework}
9
- gem.homepage = ''
9
+ gem.homepage = 'https://github.com/ThomasAlxDmy/Exodus'
10
10
  gem.license = 'MIT'
11
11
 
12
12
  gem.files = `git ls-files`.split($\)
@@ -16,13 +16,24 @@ module Exodus
16
16
  yield(configuration) if block_given?
17
17
  end
18
18
 
19
+ # Loads existing migrations into memory
20
+ def load_migrations
21
+ raise StandardError, 'A migrations directory is needed in order to load migrations.' unless migrations_info.migrations_directory
22
+ Dir[migrations_info.migrations_directory + '/*.rb'].each { |file| require file}
23
+ end
24
+
25
+ # Returns the path of the rake file
26
+ def tasks
27
+ File.dirname(__FILE__) + '/../tasks/exodus.rake'
28
+ end
29
+
19
30
  # Executes a number of migrations equal to step (or all of them if step is nil)
20
31
  def run_migrations(direction, migrations, step = nil)
21
32
  if migrations
22
- sorted_migrations = order_with_direction(sorted_migrations, direction)
33
+ sorted_migrations = order_with_direction(migrations, direction)
23
34
  sorted_migrations = sorted_migrations.shift(step.to_i) if step
24
35
 
25
- run_each(sorted_migrations)
36
+ run_each(direction, sorted_migrations)
26
37
  else
27
38
  puts "no migrations given in argument!"
28
39
  end
@@ -1,6 +1,6 @@
1
1
  module Exodus
2
2
  class MigrationInfo
3
- attr_accessor :info
3
+ attr_accessor :info, :migrations_directory
4
4
  attr_reader :config_file, :db, :connection
5
5
 
6
6
  def initialize(file = nil)
@@ -1,9 +1,11 @@
1
1
  module Exodus
2
2
  class Migration
3
3
  include MongoMapper::Document
4
+ set_collection_name 'migrations'
5
+
4
6
  UP = 'up'
5
7
  DOWN = 'down'
6
- @migrations_with_args = []
8
+ @migrations = []
7
9
 
8
10
  timestamps!
9
11
 
@@ -21,10 +23,15 @@ module Exodus
21
23
  def inherited(klass)
22
24
  klass.embedded_callbacks_on if defined?(MongoMapper::Plugins::EmbeddedCallbacks::ClassMethods) #MongoMapper version compatibility
23
25
  klass.migration_number = 0
24
- @migrations_with_args << [klass]
26
+ @migrations << [klass]
25
27
  super(klass)
26
28
  end
27
29
 
30
+ # Sorts all migrations by migration number
31
+ def sort_all
32
+ @migrations.sort_by {|migration,args| migration.migration_number }
33
+ end
34
+
28
35
  # Using a list of migrations
29
36
  # Formats and overrides migrations without arguments using ones that have given arguments
30
37
  # Removes duplicates
@@ -36,15 +43,15 @@ module Exodus
36
43
  formated_migration = format(migration, args)
37
44
  migration, args = formated_migration
38
45
 
39
- unless @migrations_with_args.include?(formated_migration)
40
- @migrations_with_args.delete_if {|loaded_migration, loaded_args| migration == loaded_migration && (loaded_args.nil? || loaded_args.empty?) }
41
- @migrations_with_args << formated_migration
46
+ unless @migrations.include?(formated_migration)
47
+ @migrations.delete_if {|loaded_migration, loaded_args| migration == loaded_migration && (loaded_args.nil? || loaded_args.empty?) }
48
+ @migrations << formated_migration
42
49
  end
43
50
  end
44
51
  end
45
52
  end
46
53
 
47
- @migrations_with_args
54
+ @migrations
48
55
  end
49
56
 
50
57
  # Using a list of migrations formats them and removes duplicates
@@ -65,7 +72,7 @@ module Exodus
65
72
  puts "\n Migration n#: \t\t Name: \t\t\t\t Description:"
66
73
  puts '-' * 100, "\n"
67
74
 
68
- @migrations_with_args.map do|migration, args|
75
+ Migration.sort_all.map do|migration, args|
69
76
  m = migration.new
70
77
  puts "\t#{migration.migration_number} \t\t #{migration.name} \t\t #{m.description}"
71
78
  end
@@ -1,3 +1,3 @@
1
1
  module Exodus
2
- VERSION = "1.0.1"
2
+ VERSION = "1.0.2"
3
3
  end
@@ -12,13 +12,14 @@ end
12
12
  task :require_env do
13
13
  require 'csv'
14
14
  require File.dirname(__FILE__) + '/../lib/exodus'
15
+ Exodus.load_migrations
15
16
  end
16
17
 
17
18
  namespace :db do
18
19
  desc "Migrate the database"
19
20
  task :migrate => :require_env do
20
21
  time_it "db:migrate#{" step #{step}" if step}" do
21
- migrations = Migration.load_all(Exodus.migrations_info.migrate)
22
+ migrations = Exodus::Migration.load_all(Exodus.migrations_info.migrate)
22
23
  Exodus::run_migrations('up', migrations, step)
23
24
  end
24
25
  end
@@ -26,11 +27,16 @@ namespace :db do
26
27
  desc "Rolls the database back to the previous version"
27
28
  task :rollback => :require_env do
28
29
  time_it "db:rollback#{" step #{step}" if step}" do
29
- migrations = Migration.load_all(Exodus.migrations_info.rollback)
30
+ migrations = Exodus::Migration.load_all(Exodus.migrations_info.rollback)
30
31
  Exodus::run_migrations('down', migrations, step)
31
32
  end
32
33
  end
33
34
 
35
+ desc "Shows informations about the current mongo connection"
36
+ task :mongo_info => :require_env do
37
+ p MongoMapper.database
38
+ end
39
+
34
40
  namespace :migrate do
35
41
  desc "Manually migrates specified migrations (specify migrations or use config/migration.yml)"
36
42
  task :custom, [:migrations_info] => :require_env do |t, args|
@@ -38,7 +44,7 @@ namespace :db do
38
44
  migrations = if args[:migrations_info]
39
45
  YAML.load(args[:migrations_info])
40
46
  else
41
- Migration.load_custom(Exodus.migrations_info.migrate_custom)
47
+ Exodus::Migration.load_custom(Exodus.migrations_info.migrate_custom)
42
48
  end
43
49
 
44
50
  Exodus::run_migrations('up', migrations, step)
@@ -47,7 +53,7 @@ namespace :db do
47
53
 
48
54
  desc "Lists all the migrations"
49
55
  task :list => :require_env do
50
- Migration.list
56
+ Exodus::Migration.list
51
57
  end
52
58
 
53
59
  desc "Loads migration.yml and displays it"
@@ -57,7 +63,7 @@ namespace :db do
57
63
 
58
64
  desc "Displays the current status of migrations"
59
65
  task :status => :require_env do
60
- Migration.db_status
66
+ Exodus::Migration.db_status
61
67
  end
62
68
  end
63
69
 
@@ -68,7 +74,7 @@ namespace :db do
68
74
  migrations = if args[:migrations_info]
69
75
  YAML.load(args[:migrations_info])
70
76
  else
71
- Migration.load_custom(Exodus.migrations_info.rollback_custom)
77
+ Exodus::Migration.load_custom(Exodus.migrations_info.rollback_custom)
72
78
  end
73
79
 
74
80
  Exodus::run_migrations('down', migrations, step)
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.1
4
+ version: 1.0.2
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-05-28 00:00:00.000000000 Z
12
+ date: 2013-05-29 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: mongo_mapper
@@ -104,7 +104,7 @@ files:
104
104
  - spec/support/config.yml
105
105
  - spec/support/user_support.rb
106
106
  - tasks/exodus.rake
107
- homepage: ''
107
+ homepage: https://github.com/ThomasAlxDmy/Exodus
108
108
  licenses:
109
109
  - MIT
110
110
  post_install_message: