Class: RelaxDB::Migration

Inherits:
Object
  • Object
show all
Defined in:
lib/relaxdb/migration.rb

Class Method Summary collapse

Class Method Details

.fv(file_name) ⇒ Object



34
35
36
# File 'lib/relaxdb/migration.rb', line 34

def self.fv file_name
  File.basename(file_name).split("_")[0].to_i
end

.run(klass, limit = 1000) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
# File 'lib/relaxdb/migration.rb', line 5

def self.run klass, limit = 1000
  query = lambda do |page_params|
    RelaxDB.paginate_view "#{klass}_all", :startkey => nil, :endkey => {}, :attributes => [:_id],
      :page_params => page_params, :limit => limit
  end
  
  objs = query.call({})
  until objs.empty?
    migrated = objs.map { |o| yield o }.flatten.reject { |o| o.nil? }
    RelaxDB.bulk_save! *migrated
    objs = objs.next_params ? query.call(objs.next_params) : []
  end
end

.run_all(file_names, action = lambda { |fn| require fn }) ⇒ Object

Runs all outstanding migrations in a given directory

Example

RelaxDB::Migration.run_all Dir["couchdb/migrations/**/*.rb"]


25
26
27
28
29
30
31
32
# File 'lib/relaxdb/migration.rb', line 25

def self.run_all file_names, action = lambda { |fn| require fn }
  v = RelaxDB::MigrationVersion.version
  file_names.select { |fn| fv(fn) > v }.each do |fn|
    RelaxDB.logger.info "Applying #{fn}"
    action.call fn
    RelaxDB::MigrationVersion.update fv(fn)
  end
end