Skip to content

Instantly share code, notes, and snippets.

@solnic
Created August 18, 2010 09:31
Show Gist options
  • Select an option

  • Save solnic/534161 to your computer and use it in GitHub Desktop.

Select an option

Save solnic/534161 to your computer and use it in GitHub Desktop.
diff --git a/lib/dm-types/enum.rb b/lib/dm-types/enum.rb
index 68997d3..dc73415 100644
--- a/lib/dm-types/enum.rb
+++ b/lib/dm-types/enum.rb
@@ -1,17 +1,10 @@
require 'dm-core'
+require 'dm-types/support/flags'
module DataMapper
class Property
class Enum < Integer
- accept_options :flags
-
- attr_reader :flag_map
-
- def self.[](*values)
- klass = ::Class.new(self)
- klass.flags(values)
- klass
- end
+ include Flags
def initialize(model, name, options = {}, type = nil)
super
@@ -33,10 +26,6 @@ module DataMapper
end
end
- def custom?
- true
- end
-
def load(value)
flag_map[value]
end
diff --git a/lib/dm-types/flag.rb b/lib/dm-types/flag.rb
index cb3841b..6cd322e 100644
--- a/lib/dm-types/flag.rb
+++ b/lib/dm-types/flag.rb
@@ -1,17 +1,10 @@
require 'dm-core'
+require 'dm-types/support/flags'
module DataMapper
class Property
class Flag < Integer
- accept_options :flags
-
- attr_reader :flag_map
-
- def self.[](*values)
- klass = ::Class.new(self)
- klass.flags(values)
- klass
- end
+ include Flags
def initialize(model, name, options = {}, type = nil)
super
@@ -24,10 +17,6 @@ module DataMapper
end
end
- def custom?
- true
- end
-
def load(value)
return [] if value.nil? || value <= 0
module DataMapper
class Property
module Flags
def self.included(base)
base.class_eval <<-RUBY, __FILE__, __LINE__ + 1
extend DataMapper::Property::Flags::ClassMethods
accept_options :flags
attr_reader :flag_map
class << self
attr_accessor :generated_classes
end
self.generated_classes = {}
RUBY
end
def custom?
true
end
module ClassMethods
# TODO: document
# @api public
def [](*values)
if klass = generated_classes[values]
klass
else
klass = ::Class.new(self)
klass.flags(values)
generated_classes[values] = klass
klass
end
end
end
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment