30. class AddFields < ActiveRecord::Migration
def up
change_table :quotas do |t|
t.column :free, :integer
end
Quota.all do |qota|
quota.free = calculate_free(quota)
quota.save
end
end
end
32. class AddFields < ActiveRecord::Migration
def up
change_table :quotas do |t|
t.column :free, :integer
end
execute "COMMIT"
Quota.all do |qota|
quota.free = calculate_free(quota)
quota.save
end
end
end
38. module DB
STORE = {
keyOne: [{id:
{id:
keyTwo: [{id:
{id:
{id:
}
1,
2,
1,
3,
4,
prop:
prop:
prop:
prop:
prop:
"bar", vsn: 2, free: 20 },
"foo", vsn: 2, free: 10 }],
"bar"},
"bar"},
"bar"}]
!
def self.find_all keys, prop
keys.map { |k|
STORE.fetch(k.to_sym, []).map { |e|
e if e[:prop] == prop
}.compact
}
end
end
39. def is_version2? data; data[:vsn] == 2; end
def get_free id; 20; end
def save data; data; end
!
def transfrom_to_v2 data
return data if is_version2?(data)
!
data[:vsn] = 2
data[:free] = calculate_free(data[:id])
save data
end
41. DRY it up: Deprecator
https://github.com/sideshowcoder/deprecator
42. class Thing
def initialize *args
args.each do |k, v|
self.instance_variable_set "@#{k}", v
end
@version = 0 unless @version
end
attr_accessor :version
!
include Deprecator::Versioning
ensure_version 2, :upgrade_to
!
def upgrade_to expected_version
# handle the version upgrade
save
end
!
def save
# save back to the store
end
end
50. Talks to listen to
!
•
Schemalessness: http://cloud.dzone.com/articles/martinfowler-schemalessness
•
Introduction to NoSQL: http://www.youtube.com/watch?
v=qI_g07C_Q5I