diff --git a/lib/dm-types/enum.rb b/lib/dm-types/enum.rb index 3578ed4..973a4be 100644 --- a/lib/dm-types/enum.rb +++ b/lib/dm-types/enum.rb @@ -5,7 +5,7 @@ module DataMapper class Property class Enum < Integer - include Flags + include Types::Support::Flags def initialize(model, name, options = {}) super @@ -19,10 +19,8 @@ def initialize(model, name, options = {}) if defined?(::DataMapper::Validations) unless model.skip_auto_validation_for?(self) - if self.class.ancestors.include?(Property::Enum) - allowed = flag_map.values_at(*flag_map.keys.sort) - model.validates_within name, model.options_with_message({ :set => allowed }, self, :within) - end + allowed = flag_map.values_at(*flag_map.keys.sort) + model.validates_within name, model.options_with_message({ :set => allowed }, self, :within) end end end diff --git a/lib/dm-types/flag.rb b/lib/dm-types/flag.rb index f9a24d5..43ce396 100644 --- a/lib/dm-types/flag.rb +++ b/lib/dm-types/flag.rb @@ -5,7 +5,7 @@ module DataMapper class Property class Flag < Integer - include Flags + include Types::Support::Flags def initialize(model, name, options = {}) super diff --git a/lib/dm-types/paranoid_boolean.rb b/lib/dm-types/paranoid_boolean.rb index b03364e..6c6d4e1 100644 --- a/lib/dm-types/paranoid_boolean.rb +++ b/lib/dm-types/paranoid_boolean.rb @@ -8,15 +8,12 @@ class ParanoidBoolean < Boolean # @api private def bind - property_name = name.inspect + unless model < DataMapper::Types::Paranoid::Base + model.__send__ :include, DataMapper::Types::Paranoid::Base + end - model.class_eval <<-RUBY, __FILE__, __LINE__ + 1 - include DataMapper::Types::Paranoid::Base - - set_paranoid_property(#{property_name}) { true } - - default_scope(#{repository_name.inspect}).update(#{property_name} => false) - RUBY + model.set_paranoid_property(name) { true } + model.default_scope(repository_name).update(name => false) end end # class ParanoidBoolean end # module Property diff --git a/lib/dm-types/paranoid_datetime.rb b/lib/dm-types/paranoid_datetime.rb index e70dafe..6fa0711 100644 --- a/lib/dm-types/paranoid_datetime.rb +++ b/lib/dm-types/paranoid_datetime.rb @@ -7,15 +7,12 @@ class ParanoidDateTime < DateTime # @api private def bind - property_name = name.inspect + unless model < DataMapper::Types::Paranoid::Base + model.__send__ :include, DataMapper::Types::Paranoid::Base + end - model.class_eval <<-RUBY, __FILE__, __LINE__ + 1 - include DataMapper::Types::Paranoid::Base - - set_paranoid_property(#{property_name}) { ::DateTime.now } - - default_scope(#{repository_name.inspect}).update(#{property_name} => nil) - RUBY + model.set_paranoid_property(name) { ::DateTime.now } + model.default_scope(repository_name).update(name => nil) end end # class ParanoidDateTime end # module Property diff --git a/lib/dm-types/support/flags.rb b/lib/dm-types/support/flags.rb index 1599b85..d912d87 100644 --- a/lib/dm-types/support/flags.rb +++ b/lib/dm-types/support/flags.rb @@ -1,41 +1,40 @@ module DataMapper - class Property - module Flags - def self.included(base) - base.class_eval <<-RUBY, __FILE__, __LINE__ + 1 - extend DataMapper::Property::Flags::ClassMethods + module Types + module Support + module Flags + def self.included(model) + model.extend ClassMethods + model.accept_options :flags + model.__send__ :attr_reader, :flag_map + model.instance_variable_set(:@generated_classes, {}) - accept_options :flags - attr_reader :flag_map - - class << self + class << model attr_accessor :generated_classes end + end - self.generated_classes = {} - RUBY - end - - def custom? - true - end + def custom? + true + end - module ClassMethods - # TODO: document - # @api public - def [](*values) - if klass = generated_classes[values.flatten] - klass - else - klass = ::Class.new(self) - klass.flags(values) + module ClassMethods + # TODO: document + # @api public + def [](*values) + if klass = generated_classes[values.flatten] + klass + else + klass = ::Class.new(self) + klass.flags(values) - generated_classes[values.flatten] = klass + generated_classes[values.flatten] = klass - klass + klass + end end - end - end - end - end -end + end # module ClassMethods + + end # module Flags + end # module Support + end # module Types +end # module DataMapper