mongoid_rails_migrations 1.2.1 → 1.6.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: c8fc6474257b2d2e0046a797c410b91e3ccac8e1
4
- data.tar.gz: aaed74adb2274149fe6dae16912cfa6f97dcf739
2
+ SHA256:
3
+ metadata.gz: 72576a321b2015fb560f410a5909cce262d4ce35b8773e4359fde3120e44e1eb
4
+ data.tar.gz: da19409b30015ec555bee75b273f36800d278daca8567d9bbf16e0d7b82b5c00
5
5
  SHA512:
6
- metadata.gz: 9606b16b2eab7e1e73e072eabc5bc96de07cc920d0f2c4c88352d21af7f3719ed180879fc6ce0ca6a817b2b3228d1abcac99ee98687ae9f6d040b97f7bf38780
7
- data.tar.gz: 6b1c82473b629467e43239a74ed7de02ec4704fdd3c0a9ec2aadc3c8e6f3d51e5468bcb62f849d52c15892ccb8f28baa0b9c054a2e312af0a45b6df2b68088bb
6
+ metadata.gz: 13653010703d967705e3c67cc7d69992ef2e40426a1c84e87042dd0239a261d7750b0436e74d4854f76cf0ea207460fe3da7edb3d99ca956fa70de57dea50990
7
+ data.tar.gz: a355aa9a0a3cf6b2838d1d9c95088bd78f5bd2ed80ba46f99ea93d015149cae56c2eea58e93c3c86e0a8786a7bfa226ef4e9e80fc1305b115ed66de308db5971
@@ -55,13 +55,13 @@ module Mongoid #:nodoc
55
55
  # If you'd prefer to use numeric prefixes, you can turn timestamped migrations
56
56
  # off by setting:
57
57
  #
58
- # Mongoid.config.timestamped_migrations = false
58
+ # Mongoid.configure.timestamped_migrations = false
59
59
  #
60
60
  # In environment.rb.
61
61
  #
62
62
  class Migration
63
63
  @@verbose = true
64
- cattr_accessor :verbose
64
+ cattr_accessor :verbose, :after_migrate, :buffer_output
65
65
 
66
66
  class << self
67
67
  def up_with_benchmarks #:nodoc:
@@ -89,6 +89,12 @@ module Mongoid #:nodoc
89
89
  when :down then announce "reverted (%.4fs)" % time.real; write
90
90
  end
91
91
 
92
+ begin
93
+ @@after_migrate.call(@@buffer_output, name, direction, false) if @@after_migrate
94
+ @@buffer_output = nil
95
+ rescue => e
96
+ say("Error in after_migrate hook: #{e}")
97
+ end
92
98
  result
93
99
  end
94
100
 
@@ -97,7 +103,6 @@ module Mongoid #:nodoc
97
103
  # it is safe for the call to proceed.
98
104
  def singleton_method_added(sym) #:nodoc:
99
105
  return if defined?(@ignore_new_methods) && @ignore_new_methods
100
-
101
106
  begin
102
107
  @ignore_new_methods = true
103
108
 
@@ -112,6 +117,8 @@ module Mongoid #:nodoc
112
117
  end
113
118
 
114
119
  def write(text="")
120
+ @@buffer_output ||= ""
121
+ @@buffer_output += text + "\n"
115
122
  puts(text) if verbose
116
123
  end
117
124
 
@@ -144,22 +151,10 @@ module Mongoid #:nodoc
144
151
  end
145
152
 
146
153
  def connection
147
- # ActiveRecord::Base.connection
148
- if ::Mongoid.respond_to?(:default_client)
149
- ::Mongoid.default_client
154
+ if ENV['MONGOID_CLIENT_NAME']
155
+ Mongoid.client(ENV['MONGOID_CLIENT_NAME'])
150
156
  else
151
- ::Mongoid.default_session
152
- end
153
- end
154
-
155
- def method_missing(method, *arguments, &block)
156
- arg_list = arguments.map(&:inspect) * ', '
157
-
158
- say_with_time "#{method}(#{arg_list})" do
159
- # unless arguments.empty? || method == :execute
160
- # arguments[0] = Migrator.proper_table_name(arguments.first)
161
- # end
162
- connection.send(method, *arguments, &block)
157
+ Mongoid.default_client
163
158
  end
164
159
  end
165
160
  end
@@ -168,25 +163,25 @@ module Mongoid #:nodoc
168
163
  # MigrationProxy is used to defer loading of the actual migration classes
169
164
  # until they are needed
170
165
  class MigrationProxy
171
-
172
- attr_accessor :name, :version, :filename
166
+ attr_accessor :name, :version, :filename, :sharded
173
167
 
174
168
  delegate :migrate, :announce, :write, :to=>:migration
175
169
 
176
170
  private
177
171
 
178
- def migration
179
- @migration ||= load_migration
180
- end
181
-
182
- def load_migration
183
- require(File.expand_path(filename))
184
- name.constantize
185
- end
172
+ def migration
173
+ @migration ||= load_migration
174
+ end
186
175
 
176
+ def load_migration
177
+ require(File.expand_path(filename))
178
+ name.constantize
179
+ end
187
180
  end
188
181
 
189
182
  class Migrator#:nodoc:
183
+ delegate :with_mongoid_client, :to => "self.class"
184
+
190
185
  class << self
191
186
  attr_writer :migrations_path
192
187
 
@@ -208,7 +203,10 @@ module Mongoid #:nodoc
208
203
 
209
204
  def rollback_to(migrations_path, target_version)
210
205
  all_versions = get_all_versions
211
- rollback_to = all_versions.index(target_version.to_i) + 1
206
+ target_version_index = all_versions.index(target_version.to_i)
207
+ raise UnknownMigrationVersionError.new(target_version) if target_version_index.nil?
208
+
209
+ rollback_to = target_version_index + 1
212
210
  rollback_steps = all_versions.size - rollback_to
213
211
  rollback migrations_path, rollback_steps
214
212
  end
@@ -233,31 +231,22 @@ module Mongoid #:nodoc
233
231
  @migrations_path ||= ['db/migrate']
234
232
  end
235
233
 
236
- # def schema_migrations_table_name
237
- # # Base.table_name_prefix + 'schema_migrations' + Base.table_name_suffix
238
- # 'data_migrations'
239
- # end
240
-
241
234
  def get_all_versions
242
- # table = Arel::Table.new(schema_migrations_table_name)
243
- # Base.connection.select_values(table.project(table['version']).to_sql).map(&:to_i).sort
244
- DataMigration.all.map { |datamigration| datamigration.version.to_i }.sort
235
+ with_mongoid_client(ENV['MONGOID_CLIENT_NAME']) do
236
+ DataMigration.all.map { |datamigration| datamigration.version.to_i }.sort
237
+ end
245
238
  end
246
239
 
247
240
  def current_version
248
- # sm_table = schema_migrations_table_name
249
- # if Base.connection.table_exists?(sm_table)
250
- # get_all_versions.max || 0
251
- # else
252
- # 0
253
- # end
254
241
  get_all_versions.max || 0
255
242
  end
256
243
 
257
- def proper_table_name(name)
258
- # Use the Active Record objects own table_name, or pre/suffix from ActiveRecord::Base if name is a symbol/string
259
- # name.table_name rescue "#{ActiveRecord::Base.table_name_prefix}#{name}#{ActiveRecord::Base.table_name_suffix}"
260
- name
244
+ def with_mongoid_client(mongoid_client_name, &block)
245
+ previous_mongoid_client_name = Mongoid::Threaded.client_override
246
+ Mongoid.override_client(mongoid_client_name)
247
+ block.call
248
+ ensure
249
+ Mongoid.override_client(previous_mongoid_client_name)
261
250
  end
262
251
 
263
252
  private
@@ -275,9 +264,12 @@ module Mongoid #:nodoc
275
264
  end
276
265
 
277
266
  def initialize(direction, migrations_path, target_version = nil)
278
- # raise StandardError.new("This database does not yet support migrations") unless Base.connection.supports_migrations?
279
- # Base.connection.initialize_schema_migrations_table
280
267
  @direction, @migrations_path, @target_version = direction, migrations_path, target_version
268
+
269
+ @mongoid_client_name = ENV["MONGOID_CLIENT_NAME"]
270
+ if @mongoid_client_name && !Mongoid.clients.has_key?(@mongoid_client_name)
271
+ raise Mongoid::Errors::NoClientConfig.new(@mongoid_client_name)
272
+ end
281
273
  end
282
274
 
283
275
  def current_version
@@ -291,9 +283,12 @@ module Mongoid #:nodoc
291
283
  def run
292
284
  target = migrations.detect { |m| m.version == @target_version }
293
285
  raise UnknownMigrationVersionError.new(@target_version) if target.nil?
286
+
294
287
  unless (up? && migrated.include?(target.version.to_i)) || (down? && !migrated.include?(target.version.to_i))
295
288
  target.migrate(@direction)
296
- record_version_state_after_migrating(target.version)
289
+ with_mongoid_client(@mongoid_client_name) do
290
+ record_version_state_after_migrating(target.version)
291
+ end
297
292
  end
298
293
  end
299
294
 
@@ -312,19 +307,19 @@ module Mongoid #:nodoc
312
307
  next
313
308
  end
314
309
 
315
- # begin
316
- # ddl_transaction do
317
- # migration.migrate(@direction)
318
- # record_version_state_after_migrating(migration.version)
319
- # end
320
- # rescue => e
321
- # canceled_msg = Base.connection.supports_ddl_transactions? ? "this and " : ""
322
- # raise StandardError, "An error has occurred, #{canceled_msg}all later migrations canceled:\n\n#{e}", e.backtrace
323
- # end
324
310
  begin
325
311
  migration.migrate(@direction)
326
- record_version_state_after_migrating(migration.version)
312
+ with_mongoid_client(@mongoid_client_name) do
313
+ record_version_state_after_migrating(migration.version)
314
+ end
327
315
  rescue => e
316
+ output = Migration.buffer_output + "An error has occurred, #{migration.version} and all later migrations canceled:\n\n#{e}\n#{e.backtrace.join("\n")}"
317
+ begin
318
+ Migration.after_migrate.call(output, migration.name, @direction, true) if Migration.after_migrate
319
+ Migration.buffer_output = nil
320
+ rescue => error
321
+ puts("Error in after_migrate hook: #{error}")
322
+ end
328
323
  raise StandardError, "An error has occurred, #{migration.version} and all later migrations canceled:\n\n#{e}", e.backtrace
329
324
  end
330
325
  end
@@ -345,7 +340,7 @@ module Mongoid #:nodoc
345
340
  def migrations
346
341
  @migrations ||= begin
347
342
  files = Array(@migrations_path).inject([]) do |files, path|
348
- files += Dir["#{path}/[0-9]*_*.rb"]
343
+ files += Dir["#{path}/**/[0-9]*_*.rb"]
349
344
  end
350
345
 
351
346
  migrations = files.inject([]) do |klasses, file|
@@ -363,10 +358,15 @@ module Mongoid #:nodoc
363
358
  end
364
359
 
365
360
  migration = MigrationProxy.new
361
+ migration.sharded = file.match?(/\/shards\/#{version}_#{name}\.rb/)
366
362
  migration.name = name.camelize
367
363
  migration.version = version
368
364
  migration.filename = file
369
- klasses << migration
365
+
366
+ if (@mongoid_client_name && migration.sharded) || (!@mongoid_client_name && !migration.sharded)
367
+ klasses << migration
368
+ end
369
+ klasses
370
370
  end
371
371
 
372
372
  migrations = migrations.sort_by(&:version)
@@ -402,42 +402,24 @@ module Mongoid #:nodoc
402
402
  end
403
403
 
404
404
  private
405
- def record_version_state_after_migrating(version)
406
- # table = Arel::Table.new(self.class.schema_migrations_table_name)
407
-
408
- @migrated_versions ||= []
409
- # if down?
410
- # @migrated_versions.delete(version)
411
- # table.where(table["version"].eq(version.to_s)).delete
412
- # else
413
- # @migrated_versions.push(version).sort!
414
- # table.insert table["version"] => version.to_s
415
- # end
416
- if down?
417
- @migrated_versions.delete(version)
418
- DataMigration.where(:version => version.to_s).first.destroy
419
- else
420
- @migrated_versions.push(version).sort!
421
- DataMigration.create(:version => version.to_s)
422
- end
423
- end
424
405
 
425
- def up?
426
- @direction == :up
406
+ def record_version_state_after_migrating(version)
407
+ @migrated_versions ||= []
408
+ if down?
409
+ @migrated_versions.delete(version)
410
+ DataMigration.where(:version => version.to_s).destroy_all
411
+ else
412
+ @migrated_versions.push(version).sort!
413
+ DataMigration.find_or_create_by(:version => version.to_s)
427
414
  end
415
+ end
428
416
 
429
- def down?
430
- @direction == :down
431
- end
417
+ def up?
418
+ @direction == :up
419
+ end
432
420
 
433
- # Wrap the migration in a transaction only if supported by the adapter.
434
- def ddl_transaction(&block)
435
- # if Base.connection.supports_ddl_transactions?
436
- # Base.transaction { block.call }
437
- # else
438
- # block.call
439
- # end
440
- block.call
441
- end
421
+ def down?
422
+ @direction == :down
423
+ end
442
424
  end
443
425
  end
@@ -2,4 +2,4 @@ class DataMigration
2
2
  include Mongoid::Document
3
3
 
4
4
  field :version
5
- end
5
+ end
@@ -1,21 +1,7 @@
1
1
  # encoding: utf-8
2
2
  module Mongoid
3
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
4
+ Config.option :timestamped_migrations, default: true
5
+ # Specify whether or not to use shards migrations as default type
6
+ Config.option :shards_migration_as_default, default: false
7
+ end
@@ -1,34 +1,12 @@
1
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
2
+ if Rake::Task.task_defined?("db:drop")
3
+ Rake::Task["db:drop"].clear
16
4
  end
17
5
 
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
6
+ desc 'Drops the database for the current Mongoid client'
7
+ task :drop => :environment do
8
+ # Unlike Mongoid's default, this implementation supports the MONGOID_CLIENT_NAME override
9
+ Mongoid::Migration.connection.database.drop
32
10
  end
33
11
 
34
12
  desc 'Current database version'
@@ -43,7 +21,7 @@ namespace :db do
43
21
  end
44
22
 
45
23
  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.'
24
+ 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
25
  task :redo => :environment do
48
26
  if ENV["VERSION"]
49
27
  Rake::Task["db:migrate:down"].invoke
@@ -74,7 +52,7 @@ namespace :db do
74
52
 
75
53
  desc 'Display status of migrations'
76
54
  task :status => :environment do
77
- Mongoid::Migrator.status("db/migrate/")
55
+ Mongoid::Migrator.status(Mongoid::Migrator.migrations_path)
78
56
  end
79
57
  end
80
58
 
@@ -88,18 +66,6 @@ namespace :db do
88
66
  task :rollback_to => :environment do
89
67
  version = ENV["VERSION"] ? ENV["VERSION"].to_i : nil
90
68
  raise "VERSION is required" unless version
91
- Mongoid::Migrator.rollback_to('db/migrate/', version)
92
- end
93
-
94
- namespace :schema do
95
- task :load do
96
- # noop
97
- end
98
- end
99
-
100
- namespace :test do
101
- task :prepare do
102
- # Stub out for MongoDB
103
- end
69
+ Mongoid::Migrator.rollback_to(Mongoid::Migrator.migrations_path, version)
104
70
  end
105
71
  end
@@ -1,3 +1,3 @@
1
1
  module MongoidRailsMigrations #:nodoc:
2
- VERSION = '1.2.1'
2
+ VERSION = '1.6.1'
3
3
  end
@@ -3,9 +3,16 @@ require 'rails/generators/mongoid/mongoid_generator'
3
3
  module Mongoid
4
4
  module Generators
5
5
  class MigrationGenerator < Base
6
+ class_option :shards, type: :boolean, optional: true, desc: "Create migration in shards subfolder"
6
7
 
7
8
  def create_migration_file
8
- migration_template "migration.rb", "db/migrate/#{file_name}.rb"
9
+ destination_folder = "db/migrate"
10
+ if options.fetch(:shards, Config.shards_migration_as_default)
11
+ destination_folder = "#{destination_folder}/shards"
12
+ FileUtils.mkdir_p("#{Rails.root}/#{destination_folder}")
13
+ end
14
+
15
+ migration_template "migration.rb", "#{destination_folder}/#{file_name}.rb"
9
16
  end
10
17
 
11
18
  protected
@@ -13,4 +20,4 @@ module Mongoid
13
20
 
14
21
  end
15
22
  end
16
- end
23
+ end
@@ -4,4 +4,4 @@ class <%= migration_class_name %> < Mongoid::Migration
4
4
 
5
5
  def self.down
6
6
  end
7
- end
7
+ end
@@ -5,8 +5,8 @@ require 'mongoid_rails_migrations/version'
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = 'mongoid_rails_migrations'
7
7
  spec.version = MongoidRailsMigrations::VERSION
8
- spec.authors = ['Alan Da Costa']
9
- spec.email = ['alandacosta@gmail.com']
8
+ spec.authors = ['Alan Da Costa', 'Adrien Rey-Jarthon']
9
+ spec.email = ['alandacosta@gmail.com', 'jobs@adrienjarthon.com']
10
10
 
11
11
  spec.summary = 'Data migrations for Mongoid.'
12
12
  spec.description = 'Data migrations for Mongoid in Active Record style, minus column input.'
@@ -19,7 +19,9 @@ Gem::Specification.new do |spec|
19
19
  rails_version = '>= 4.2.0'
20
20
 
21
21
  spec.add_runtime_dependency('bundler', '>= 1.0.0')
22
- spec.add_runtime_dependency('mongoid', '>= 4.0.0')
22
+ # 9.0.0 broke client override isolation: https://jira.mongodb.org/browse/MONGOID-5815
23
+ # got fixed in 9.0.3 so rejectings versions in between to prevent bad surprises:
24
+ spec.add_runtime_dependency('mongoid', '>= 5.0.0', '!= 9.0.0', '!= 9.0.1', '!= 9.0.2')
23
25
  spec.add_runtime_dependency('rails', rails_version)
24
26
  spec.add_runtime_dependency('railties', rails_version)
25
27
  spec.add_runtime_dependency('activesupport', rails_version)
metadata CHANGED
@@ -1,14 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongoid_rails_migrations
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.1
4
+ version: 1.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alan Da Costa
8
- autorequire:
8
+ - Adrien Rey-Jarthon
9
+ autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2019-02-04 00:00:00.000000000 Z
12
+ date: 2024-11-19 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: bundler
@@ -30,14 +31,32 @@ dependencies:
30
31
  requirements:
31
32
  - - ">="
32
33
  - !ruby/object:Gem::Version
33
- version: 4.0.0
34
+ version: 5.0.0
35
+ - - "!="
36
+ - !ruby/object:Gem::Version
37
+ version: 9.0.0
38
+ - - "!="
39
+ - !ruby/object:Gem::Version
40
+ version: 9.0.1
41
+ - - "!="
42
+ - !ruby/object:Gem::Version
43
+ version: 9.0.2
34
44
  type: :runtime
35
45
  prerelease: false
36
46
  version_requirements: !ruby/object:Gem::Requirement
37
47
  requirements:
38
48
  - - ">="
39
49
  - !ruby/object:Gem::Version
40
- version: 4.0.0
50
+ version: 5.0.0
51
+ - - "!="
52
+ - !ruby/object:Gem::Version
53
+ version: 9.0.0
54
+ - - "!="
55
+ - !ruby/object:Gem::Version
56
+ version: 9.0.1
57
+ - - "!="
58
+ - !ruby/object:Gem::Version
59
+ version: 9.0.2
41
60
  - !ruby/object:Gem::Dependency
42
61
  name: rails
43
62
  requirement: !ruby/object:Gem::Requirement
@@ -111,6 +130,7 @@ dependencies:
111
130
  description: Data migrations for Mongoid in Active Record style, minus column input.
112
131
  email:
113
132
  - alandacosta@gmail.com
133
+ - jobs@adrienjarthon.com
114
134
  executables: []
115
135
  extensions: []
116
136
  extra_rdoc_files: []
@@ -130,7 +150,7 @@ homepage: http://github.com/adacosta/mongoid_rails_migrations
130
150
  licenses:
131
151
  - MIT
132
152
  metadata: {}
133
- post_install_message:
153
+ post_install_message:
134
154
  rdoc_options: []
135
155
  require_paths:
136
156
  - lib
@@ -145,10 +165,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
145
165
  - !ruby/object:Gem::Version
146
166
  version: '0'
147
167
  requirements: []
148
- rubyforge_project:
149
- rubygems_version: 2.5.1
150
- signing_key:
168
+ rubygems_version: 3.5.16
169
+ signing_key:
151
170
  specification_version: 4
152
171
  summary: Data migrations for Mongoid.
153
172
  test_files: []
154
- has_rdoc: