Module: CassandraObject::Migrations::ClassMethods

Defined in:
lib/cassandra_object/migrations.rb

Instance Method Summary collapse

Instance Method Details

#instantiate(key, attributes) ⇒ Object



39
40
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
# File 'lib/cassandra_object/migrations.rb', line 39

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|
    original_attributes.diff(attributes).keys.each do |attribute|
      record.attribute_will_change! attribute
    end
  end
end

#migrate(version, &blk) ⇒ Object



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

def migrate(version, &blk)
  write_inheritable_array(:migrations, [Migration.new(version, blk)])
  
  if version > self.current_schema_version 
    self.current_schema_version = version
  end
end