Skip to content

Instantly share code, notes, and snippets.

@jgaskins
Created November 15, 2012 13:54
Show Gist options
  • Save jgaskins/4078742 to your computer and use it in GitHub Desktop.
Save jgaskins/4078742 to your computer and use it in GitHub Desktop.
Perpetuity::Mapper idea
require 'set'
class Mapper
def initialize
self.class.base_class.add_mapper self.class
end
def self.mappers
@mappers ||= Set.new
end
def self.[] klass
base_class.models[klass].new
end
def self.model klass
base_class.models[klass] = self
base_class.add_mapper self
end
def self.models
@models ||= Hash.new do
raise "No mapper for class '#{klass}'"
end
end
def self.add_mapper mapper
base_class.mappers << mapper
end
def self.base_class
Mapper
end
end
Article = Class.new
class ArticleMapper < Mapper
model Article
end
User = Class.new
class UserMapper < Mapper
model User
end
Comment = Class.new
class CommentMapper < Mapper
model Comment
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment