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
|