mongoid_rails_5_migrations 1.1.1

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.
Files changed (29) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +6 -0
  3. data/Gemfile +7 -0
  4. data/Gemfile.lock +132 -0
  5. data/README.rdoc +56 -0
  6. data/Rakefile +12 -0
  7. data/lib/mongoid_rails_migrations.rb +9 -0
  8. data/lib/mongoid_rails_migrations/active_record_ext/migrations.rb +414 -0
  9. data/lib/mongoid_rails_migrations/models/data_migration.rb +5 -0
  10. data/lib/mongoid_rails_migrations/mongoid_ext/mongoid.rb +21 -0
  11. data/lib/mongoid_rails_migrations/mongoid_ext/railtie.rb +18 -0
  12. data/lib/mongoid_rails_migrations/mongoid_ext/railties/database.rake +93 -0
  13. data/lib/mongoid_rails_migrations/version.rb +3 -0
  14. data/lib/rails/generators/mongoid/migration/migration_generator.rb +16 -0
  15. data/lib/rails/generators/mongoid/migration/templates/migration.rb +7 -0
  16. data/lib/rails/generators/mongoid/mongoid_generator.rb +26 -0
  17. data/mongoid_rails_migrations.gemspec +32 -0
  18. data/test/config.rb +9 -0
  19. data/test/helper.rb +34 -0
  20. data/test/migration_test.rb +164 -0
  21. data/test/migrations/duplicate/names/20100513073457_add_duplicate_survey_schema.rb +9 -0
  22. data/test/migrations/duplicate/names/20100513073724_add_duplicate_survey_schema.rb +9 -0
  23. data/test/migrations/duplicate/versions/20100513073457_add_another_duplicate_survey_schema.rb +9 -0
  24. data/test/migrations/duplicate/versions/20100513073457_add_duplicate_survey_schema.rb +9 -0
  25. data/test/migrations/other_valid/20160509073459_add_other_plan_survey_schema.rb +9 -0
  26. data/test/migrations/valid/20100513054656_add_baseline_survey_schema.rb +10 -0
  27. data/test/migrations/valid/20100513063902_add_improvement_plan_survey_schema.rb +9 -0
  28. data/test/models/survey_schema.rb +6 -0
  29. metadata +166 -0
@@ -0,0 +1,5 @@
1
+ class DataMigration
2
+ include Mongoid::Document
3
+
4
+ field :version
5
+ end
@@ -0,0 +1,21 @@
1
+ # encoding: utf-8
2
+ module Mongoid
3
+ # Specify whether or not to use timestamps for migration versions
4
+ # NOTE: newer style is a module
5
+ # Config.module_eval would work for both but still need to determine the type
6
+ # that's why we do it the ug way.
7
+ if Config.is_a? Class
8
+ # older mongoid style; pre 2.0.0.rc.1
9
+ Config.module_eval do
10
+ cattr_accessor :timestamped_migrations
11
+ class_variable_set(:@@timestamped_migrations, true) unless class_variable_get(:@@timestamped_migrations)
12
+
13
+ def self.reset
14
+ @@timestamped_migrations = true
15
+ end
16
+ end
17
+ else # module
18
+ # newer mongoid style; >= 2.0.0.rc.1
19
+ Config.option :timestamped_migrations, :default => true
20
+ end
21
+ end
@@ -0,0 +1,18 @@
1
+ # encoding: utf-8
2
+
3
+ if defined?(Rails::Railtie)
4
+ module Rails #:nodoc:
5
+ module Mongoid #:nodoc:
6
+ class Railtie < Rails::Railtie
7
+ if config.respond_to?(:app_generators)
8
+ config.app_generators.orm :mongoid, :migration => true
9
+ else
10
+ config.generators.orm :mongoid, :migration => true
11
+ end
12
+ rake_tasks do
13
+ load "mongoid_rails_migrations/mongoid_ext/railties/database.rake"
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,93 @@
1
+ namespace :db do
2
+ unless Rake::Task.task_defined?("db:drop")
3
+ desc 'Drops all the collections for the database for the current Rails.env'
4
+ task :drop => :environment do
5
+ Mongoid.master.collections.each {|col| col.drop_indexes && col.drop unless ['system.indexes', 'system.users'].include?(col.name) }
6
+ end
7
+ end
8
+
9
+ unless Rake::Task.task_defined?("db:seed")
10
+ # if another ORM has defined db:seed, don't run it twice.
11
+ desc 'Load the seed data from db/seeds.rb'
12
+ task :seed => :environment do
13
+ seed_file = File.join(Rails.application.root, 'db', 'seeds.rb')
14
+ load(seed_file) if File.exist?(seed_file)
15
+ end
16
+ end
17
+
18
+ unless Rake::Task.task_defined?("db:setup")
19
+ desc 'Create the database, and initialize with the seed data'
20
+ task :setup => [ 'db:create', 'db:seed' ]
21
+ end
22
+
23
+ unless Rake::Task.task_defined?("db:reseed")
24
+ desc 'Delete data and seed'
25
+ task :reseed => [ 'db:drop', 'db:seed' ]
26
+ end
27
+
28
+ unless Rake::Task.task_defined?("db:create")
29
+ task :create => :environment do
30
+ # noop
31
+ end
32
+ end
33
+
34
+ desc 'Current database version'
35
+ task :version => :environment do
36
+ puts Mongoid::Migrator.current_version.to_s
37
+ end
38
+
39
+ desc "Migrate the database through scripts in db/migrate. Target specific version with VERSION=x. Turn off output with VERBOSE=false."
40
+ task :migrate => :environment do
41
+ Mongoid::Migration.verbose = ENV["VERBOSE"] ? ENV["VERBOSE"] == "true" : true
42
+ Mongoid::Migrator.migrate(Mongoid::Migrator.migrations_path, ENV["VERSION"] ? ENV["VERSION"].to_i : nil)
43
+ end
44
+
45
+ namespace :migrate do
46
+ desc 'Rollback the database one migration and re migrate up. If you want to rollback more than one step, define STEP=x. Target specific version with VERSION=x.'
47
+ task :redo => :environment do
48
+ if ENV["VERSION"]
49
+ Rake::Task["db:migrate:down"].invoke
50
+ Rake::Task["db:migrate:up"].invoke
51
+ else
52
+ Rake::Task["db:rollback"].invoke
53
+ Rake::Task["db:migrate"].invoke
54
+ end
55
+ end
56
+
57
+ desc 'Resets your database using your migrations for the current environment'
58
+ # should db:create be changed to db:setup? It makes more sense wanting to seed
59
+ task :reset => ["db:drop", "db:create", "db:migrate"]
60
+
61
+ desc 'Runs the "up" for a given migration VERSION.'
62
+ task :up => :environment do
63
+ version = ENV["VERSION"] ? ENV["VERSION"].to_i : nil
64
+ raise "VERSION is required" unless version
65
+ Mongoid::Migrator.run(:up, Mongoid::Migrator.migrations_path, version)
66
+ end
67
+
68
+ desc 'Runs the "down" for a given migration VERSION.'
69
+ task :down => :environment do
70
+ version = ENV["VERSION"] ? ENV["VERSION"].to_i : nil
71
+ raise "VERSION is required" unless version
72
+ Mongoid::Migrator.run(:down, Mongoid::Migrator.migrations_path, version)
73
+ end
74
+ end
75
+
76
+ desc 'Rolls the database back to the previous migration. Specify the number of steps with STEP=n'
77
+ task :rollback => :environment do
78
+ step = ENV['STEP'] ? ENV['STEP'].to_i : 1
79
+ Mongoid::Migrator.rollback(Mongoid::Migrator.migrations_path, step)
80
+ end
81
+
82
+ namespace :schema do
83
+ task :load do
84
+ # noop
85
+ end
86
+ end
87
+
88
+ namespace :test do
89
+ task :prepare do
90
+ # Stub out for MongoDB
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,3 @@
1
+ module MongoidRailsMigrations #:nodoc:
2
+ VERSION = '1.1.1'
3
+ end
@@ -0,0 +1,16 @@
1
+ require 'rails/generators/mongoid/mongoid_generator'
2
+
3
+ module Mongoid
4
+ module Generators
5
+ class MigrationGenerator < Base
6
+
7
+ def create_migration_file
8
+ migration_template "migration.rb", "db/migrate/#{file_name}.rb"
9
+ end
10
+
11
+ protected
12
+ attr_reader :migration_action
13
+
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,7 @@
1
+ class <%= migration_class_name %> < Mongoid::Migration
2
+ def self.up
3
+ end
4
+
5
+ def self.down
6
+ end
7
+ end
@@ -0,0 +1,26 @@
1
+ require 'rails/generators'
2
+
3
+ module Mongoid #:nodoc:
4
+ module Generators #:nodoc:
5
+ class Base < ::Rails::Generators::NamedBase #:nodoc:
6
+ include Rails::Generators::Migration
7
+
8
+ # A simple redef is fine because rails caches this path on class.inherited
9
+ # mongoid uses @_mongoid_source_root ||=, but that's not necessary
10
+ def self.source_root
11
+ File.expand_path("../../#{base_name}/#{generator_name}/templates", __FILE__)
12
+ end
13
+
14
+ # Implement the required interface for Rails::Generators::Migration.
15
+ def self.next_migration_number(dirname) #:nodoc:
16
+ next_migration_number = current_migration_number(dirname) + 1
17
+ if Mongoid.configure.timestamped_migrations
18
+ [Time.now.utc.strftime("%Y%m%d%H%M%S"), "%.14d" % next_migration_number].max
19
+ else
20
+ "%.3d" % next_migration_number
21
+ end
22
+ end
23
+
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,32 @@
1
+ require File.join(File.dirname(__FILE__), 'lib', 'mongoid_rails_migrations', 'version')
2
+
3
+ Gem::Specification.new do |s|
4
+ s.platform = Gem::Platform::RUBY
5
+ s.name = 'mongoid_rails_5_migrations'
6
+ s.version = MongoidRailsMigrations::VERSION
7
+ s.summary = 'TEMPORARY RAILS 5 SPECIFIC GEM. Data migrations for Mongoid in Active Record style, minus column input.'
8
+ s.license = 'MIT'
9
+ s.description = 'TEMPORARY RAILS 5 SPECIFIC GEM. Migrations for the migrator.'
10
+
11
+ s.required_ruby_version = '>= 1.8.6'
12
+ s.required_rubygems_version = '>= 1.3.6'
13
+
14
+ s.author = 'Alan Da Costa'
15
+ s.email = 'alandacosta@gmail.com'
16
+ s.date = %q{2018-05-30}
17
+ s.homepage = 'http://github.com/adacosta/mongoid_rails_migrations'
18
+
19
+ s.require_paths = ['lib']
20
+ s.files = Dir['.gitignore', 'Gemfile', 'Gemfile.lock', 'Rakefile', 'README.rdoc', 'mongoid_rails_migrations.gemspec', 'lib/**/*']
21
+ s.test_files = Dir['test/**/*']
22
+ s.has_rdoc = false
23
+
24
+ rails_version = '>= 4.2.0'
25
+
26
+ s.add_runtime_dependency('bundler', '>= 1.0.0')
27
+ s.add_runtime_dependency('mongoid', '>= 4.0.0')
28
+ s.add_runtime_dependency('rails', rails_version)
29
+ s.add_runtime_dependency('railties', rails_version)
30
+ s.add_runtime_dependency('activesupport', rails_version)
31
+ s.add_development_dependency 'rake'
32
+ end
data/test/config.rb ADDED
@@ -0,0 +1,9 @@
1
+ require File.join(File.dirname(__FILE__), '..', 'lib', 'mongoid_rails_migrations')
2
+ require File.join(File.dirname(__FILE__), '..', 'lib', 'rails', 'generators', 'mongoid', 'mongoid_generator')
3
+
4
+ Mongoid.configure.connect_to('mongoid_test')
5
+
6
+ # require all models
7
+ Dir[File.join(File.dirname(__FILE__), 'models', '*.rb')].each { |file| require file }
8
+
9
+ MIGRATIONS_ROOT = File.join(File.dirname(__FILE__), 'migrations')
data/test/helper.rb ADDED
@@ -0,0 +1,34 @@
1
+ $:.unshift(File.dirname(__FILE__))
2
+
3
+ require 'bundler/setup'
4
+ Bundler.require(:test)
5
+
6
+ require 'mongoid'
7
+ require 'config'
8
+ require 'minitest/autorun'
9
+ require 'rake'
10
+ require 'rake/testtask'
11
+ require 'rdoc/task'
12
+
13
+ # leave out active_record, in favor of a monogo adapter
14
+ %w(
15
+ action_controller
16
+ action_mailer
17
+ active_resource
18
+ rails/test_unit
19
+ mongoid
20
+ ).each do |framework|
21
+ begin
22
+ require "#{framework}/railtie"
23
+ rescue LoadError
24
+ end
25
+ end
26
+
27
+
28
+ ActiveSupport.test_order = :sorted if ActiveSupport.respond_to?(:test_order)
29
+
30
+ module TestMongoidRailsMigrations
31
+ class Application < Rails::Application; end
32
+ end
33
+
34
+ TestMongoidRailsMigrations::Application.load_tasks
@@ -0,0 +1,164 @@
1
+ require File.dirname(__FILE__) + '/helper'
2
+
3
+ class Mongoid::Migration
4
+ class <<self
5
+ attr_accessor :message_count
6
+
7
+ def puts(text="")
8
+ self.message_count ||= 0
9
+ self.message_count += 1
10
+ end
11
+ end
12
+ end
13
+
14
+ module Mongoid
15
+ class TestCase < ActiveSupport::TestCase #:nodoc:
16
+
17
+ def setup
18
+ Mongoid::Migration.verbose = true
19
+ # same as db:drop command in lib/mongoid_rails_migrations/mongoid_ext/railties/database.rake
20
+ if Mongoid.respond_to?(:default_client)
21
+ Mongoid.default_client.database.drop
22
+ else
23
+ Mongoid.default_session.drop
24
+ end
25
+ end
26
+
27
+ def teardown; end
28
+
29
+ def test_drop_works
30
+ assert_equal 0, Mongoid::Migrator.current_version, "db:drop should take us down to version 0"
31
+ end
32
+
33
+ def test_migrations_path
34
+ assert_equal ["db/migrate"], Mongoid::Migrator.migrations_path
35
+
36
+ Mongoid::Migrator.migrations_path += ["engines/my_engine/db/migrate"]
37
+
38
+ assert_equal ["db/migrate", "engines/my_engine/db/migrate"], Mongoid::Migrator.migrations_path
39
+ end
40
+
41
+ def test_finds_migrations
42
+ assert Mongoid::Migrator.new(:up, MIGRATIONS_ROOT + "/valid").migrations.size == 2
43
+ assert_equal 2, Mongoid::Migrator.new(:up, MIGRATIONS_ROOT + "/valid").pending_migrations.size
44
+ end
45
+
46
+ def test_finds_migrations_in_multiple_paths
47
+ migration_paths = [MIGRATIONS_ROOT + "/valid", MIGRATIONS_ROOT + "/other_valid"]
48
+
49
+ assert Mongoid::Migrator.new(:up, migration_paths).migrations.size == 3
50
+ assert_equal 3, Mongoid::Migrator.new(:up, migration_paths).pending_migrations.size
51
+ end
52
+
53
+ def test_migrator_current_version
54
+ Mongoid::Migrator.migrate(MIGRATIONS_ROOT + "/valid", 20100513054656)
55
+ assert_equal(20100513054656, Mongoid::Migrator.current_version)
56
+ end
57
+
58
+ def test_migrator
59
+ assert SurveySchema.first.nil?, "All SurveySchemas should be clear before migration run"
60
+
61
+ Mongoid::Migrator.up(MIGRATIONS_ROOT + "/valid")
62
+
63
+ assert_equal 20100513063902, Mongoid::Migrator.current_version
64
+ assert !SurveySchema.first.nil?
65
+
66
+ Mongoid::Migrator.down(MIGRATIONS_ROOT + "/valid")
67
+ assert_equal 0, Mongoid::Migrator.current_version
68
+
69
+ assert SurveySchema.create(:label => 'Questionable Survey')
70
+ assert_equal 1, SurveySchema.all.size
71
+ end
72
+
73
+ def test_migrator_two_up_and_one_down
74
+ assert SurveySchema.where(:label => 'Baseline Survey').first.nil?
75
+ assert_equal 0, SurveySchema.all.size
76
+
77
+ Mongoid::Migrator.up(MIGRATIONS_ROOT + "/valid", 20100513054656)
78
+
79
+ assert !SurveySchema.where(:label => 'Baseline Survey').first.nil?
80
+ assert_equal 1, SurveySchema.all.size
81
+
82
+ assert SurveySchema.where(:label => 'Improvement Plan Survey').first.nil?
83
+
84
+ Mongoid::Migrator.up(MIGRATIONS_ROOT + "/valid", 20100513063902)
85
+ assert_equal 20100513063902, Mongoid::Migrator.current_version
86
+
87
+ assert !SurveySchema.where(:label => 'Improvement Plan Survey').first.nil?
88
+ assert_equal 2, SurveySchema.all.size
89
+
90
+ Mongoid::Migrator.down(MIGRATIONS_ROOT + "/valid", 20100513054656)
91
+ assert_equal 20100513054656, Mongoid::Migrator.current_version
92
+
93
+ assert SurveySchema.where(:label => 'Improvement Plan Survey').first.nil?
94
+ assert !SurveySchema.where(:label => 'Baseline Survey').first.nil?
95
+ assert_equal 1, SurveySchema.all.size
96
+ end
97
+
98
+ def test_finds_pending_migrations
99
+ Mongoid::Migrator.up(MIGRATIONS_ROOT + "/valid", 20100513054656)
100
+ pending_migrations = Mongoid::Migrator.new(:up, MIGRATIONS_ROOT + "/valid").pending_migrations
101
+
102
+ assert_equal 1, pending_migrations.size
103
+ assert_equal pending_migrations[0].version, 20100513063902
104
+ assert_equal pending_migrations[0].name, 'AddImprovementPlanSurveySchema'
105
+ end
106
+
107
+ def test_migrator_rollback
108
+ Mongoid::Migrator.migrate(MIGRATIONS_ROOT + "/valid")
109
+ assert_equal(20100513063902, Mongoid::Migrator.current_version)
110
+
111
+ Mongoid::Migrator.rollback(MIGRATIONS_ROOT + "/valid")
112
+ assert_equal(20100513054656, Mongoid::Migrator.current_version)
113
+
114
+ Mongoid::Migrator.rollback(MIGRATIONS_ROOT + "/valid")
115
+ assert_equal(0, Mongoid::Migrator.current_version)
116
+ end
117
+
118
+ def test_migrator_forward
119
+ Mongoid::Migrator.migrate(MIGRATIONS_ROOT + "/valid", 20100513054656)
120
+ assert_equal(20100513054656, Mongoid::Migrator.current_version)
121
+
122
+ Mongoid::Migrator.forward(MIGRATIONS_ROOT + "/valid", 20100513063902)
123
+ assert_equal(20100513063902, Mongoid::Migrator.current_version)
124
+ end
125
+
126
+ def test_migrator_with_duplicate_names
127
+ assert_raise(Mongoid::DuplicateMigrationNameError) do
128
+ Mongoid::Migrator.migrate(MIGRATIONS_ROOT + "/duplicate/names", nil)
129
+ end
130
+ end
131
+
132
+ def test_migrator_with_duplicate_versions
133
+ assert_raise(Mongoid::DuplicateMigrationVersionError) do
134
+ Mongoid::Migrator.migrate(MIGRATIONS_ROOT + "/duplicate/versions", nil)
135
+ end
136
+ end
137
+
138
+ def test_migrator_with_missing_version_numbers
139
+ assert_raise(Mongoid::UnknownMigrationVersionError) do
140
+ Mongoid::Migrator.migrate(MIGRATIONS_ROOT + "/valid", 500)
141
+ end
142
+ end
143
+
144
+ def test_default_state_of_timestamped_migrations
145
+ assert Mongoid.configure.timestamped_migrations, "Mongoid.configure.timestamped_migrations should default to true"
146
+ end
147
+
148
+ def test_timestamped_migrations_generates_non_sequential_next_number
149
+ next_number = Mongoid::Generators::Base.next_migration_number(MIGRATIONS_ROOT + "/valid")
150
+ assert_not_equal "20100513063903", next_number
151
+ end
152
+
153
+ def test_turning_off_timestamped_migrations
154
+ Mongoid.configure.timestamped_migrations = false
155
+ next_number = Mongoid::Generators::Base.next_migration_number(MIGRATIONS_ROOT + "/valid")
156
+ assert_equal "20100513063903", next_number
157
+ end
158
+
159
+ def test_migration_returns_connection_without_error
160
+ Mongoid::Migration.connection
161
+ end
162
+
163
+ end
164
+ end