Module: CassandraObject::Migrations::ClassMethods

Defined in:
lib/cassandra_object/migrations.rb

Instance Method Summary collapse

Instance Method Details

#instantiate(key, attributes) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/cassandra_object/migrations.rb', line 41

def instantiate(key, attributes)
  version = attributes.delete('schema_version')
  original_attributes = attributes.dup
  if version == current_schema_version
    return super(key, attributes)
  end
  
  versions_to_migrate = ((version.to_i + 1)..current_schema_version)
  
  migrations_to_run = versions_to_migrate.map do |v|
    migrations.find {|m| m.version == v}
  end
  
  if migrations_to_run.any?(&:nil?)
    raise MigrationNotFoundError.new(version, migrations)
  end
  
  migrations_to_run.inject(attributes) do |attrs, migration|
    migration.run(attrs)
    @schema_version = migration.version.to_s
    attrs
  end
  
  super(key, attributes).tap do |record|
    attributes.each do |name, _|
      record.attribute_will_change!(name) unless original_attributes.has_key?(name)
    end
  end
end

#migrate(version, &blk) ⇒ Object



32
33
34
35
36
37
38
39
# File 'lib/cassandra_object/migrations.rb', line 32

def migrate(version, &blk)
  self.migrations = self.migrations.dup
  self.migrations << Migration.new(version, blk)
  
  if version > self.current_schema_version 
    self.current_schema_version = version
  end
end