25. class Set
def self.to_mongo(value)
value.to_a
end
def self.from_mongo(value)
Set.new(value || [])
end
end
26. class DowncasedString
def self.to_mongo(value)
value.nil? ? nil : value.to_s.downcase
end
def self.from_mongo(value)
value.nil? ? nil : value.to_s.downcase
end
end
27. class User
include MongoMapper::Document
key :email, DowncasedString
end
39. class Account
include MongoMapper::Document
many :sites
end
class Site
include MongoMapper::Document
key :account_id, ObjectId
belongs_to :account
end
51. module MongoMapper
module Plugins
def plugins
@plugins ||= []
end
def plugin(mod)
extend mod::ClassMethods if mod.const_defined?(:ClassMethods)
include mod::InstanceMethods if mod.const_defined?(:InstanceMethods)
mod.configure(self) if mod.respond_to?(:configure)
plugins << mod
end
end
end
52. module ActsAsListFu
module ClassMethods
def reorder(ids)
# reorder ids...
end
end
module InstanceMethods
def move_to_top
# move to top
end
end
def self.configure(model)
model.key :position, Integer, :default => 1
end
end
53. class Foo
include MongoMapper::Document
plugin ActsAsListFu
end
Foo.reorder(...)
Foo.new.move_to_top
58. module FancySchmancy
def some_method
puts 'some method'
end
end
MongoMapper::Document.append_extensions(FancySchmancy)
class Foo
include MongoMapper::Document
end
Foo.some_method # puts 'some method'
Foo.new.some_method # NoMethodError
59. module FancySchmancy
def some_method
puts 'some method'
end
end
MongoMapper::Document.append_inclusions(FancySchmancy)
class Foo
include MongoMapper::Document
end
Foo.new.some_method # puts 'some method'
Foo.some_method # NoMethodError
60. module FancySchmancy
def some_method
puts 'some method'
end
end
class Foo
include MongoMapper::Document
end
MongoMapper::Document.append_extensions(FancySchmancy)
class Bar
include MongoMapper::Document
end
Foo.some_method # puts 'some method'
Bar.some_method # puts 'some method'
61. module IdentityMapAddition
def self.included(model)
model.plugin MongoMapper::Plugins::IdentityMap
end
end
MongoMapper::Document.append_inclusions(IdentityMapAddition)