Skip to content
This repository was archived by the owner on Apr 17, 2018. It is now read-only.
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 19 additions & 4 deletions lib/dm-types.rb
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,27 @@ class Property
autoload :IPAddress, 'dm-types/ip_address'
autoload :Json, 'dm-types/json'
autoload :Regexp, 'dm-types/regexp'
autoload :ParanoidBoolean, 'dm-types/paranoid_boolean'
autoload :ParanoidDateTime, 'dm-types/paranoid_datetime'
autoload :ParanoidBoolean, 'dm-types/destroyed/boolean'
autoload :ParanoidDateTime, 'dm-types/destroyed/date_time'
autoload :Slug, 'dm-types/slug'
autoload :UUID, 'dm-types/uuid'
autoload :URI, 'dm-types/uri'
autoload :Yaml, 'dm-types/yaml'
autoload :APIKey, 'dm-types/api_key'
end
end

module Created
autoload :Date, 'dm-types/created/date'
autoload :DateTime, 'dm-types/created/date_time'
end # module Created

module Updated
autoload :Date, 'dm-types/updated/date'
autoload :DateTime, 'dm-types/updated/date_time'
end # module Updated

module Destroyed
autoload :Boolean, 'dm-types/destroyed/boolean'
autoload :DateTime, 'dm-types/destroyed/date_time'
end # module Destroyed
end # class Property
end # module DataMapper
21 changes: 21 additions & 0 deletions lib/dm-types/created/date.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
require 'dm-types/support/date_stamp'
require 'dm-types/support/temporal_stamp_property'

module DataMapper
class Property
module Created
class Date < ::DataMapper::Property::Date
include Types::Support::DateStamp
include Types::Support::TemporalStampProperty

required true
auto_validation false if accepted_options.include?(:auto_validation)

def stamp_resource(resource)
resource[name] ||= stamp_value if resource.new?
end

end # class Date
end # module Created
end # class Property
end # module DataMapper
21 changes: 21 additions & 0 deletions lib/dm-types/created/date_time.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
require 'dm-types/support/date_time_stamp'
require 'dm-types/support/temporal_stamp_property'

module DataMapper
class Property
module Created
class DateTime < ::DataMapper::Property::DateTime
include Types::Support::DateTimeStamp
include Types::Support::TemporalStampProperty

required true
auto_validation false if accepted_options.include?(:auto_validation)

def stamp_resource(resource)
resource[name] ||= stamp_value if resource.new?
end

end # class DateTime
end # module Created
end # class Property
end # module DataMapper
21 changes: 21 additions & 0 deletions lib/dm-types/destroyed/boolean.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
require 'dm-types/support/paranoid_property'

module DataMapper
class Property
module Destroyed
class Boolean < ::DataMapper::Property::Boolean
include Types::Support::ParanoidProperty

default false
lazy true

def stamp_value
true
end

end # class Boolean
end # module Destroyed

ParanoidBoolean = Destroyed::Boolean
end # module Property
end # module DataMapper
21 changes: 21 additions & 0 deletions lib/dm-types/destroyed/date_time.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
require 'dm-types/support/paranoid_property'

module DataMapper
class Property
module Destroyed
class DateTime < ::DataMapper::Property::DateTime
include Types::Support::ParanoidProperty

default nil
lazy true

def stamp_value
::DateTime.now
end

end # class DateTime
end # module Destroyed

ParanoidDateTime = Destroyed::DateTime
end # module Property
end # module DataMapper
8 changes: 3 additions & 5 deletions lib/dm-types/enum.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ module DataMapper
class Property
class Enum < Integer

include Flags
include Types::Support::Flags

def initialize(model, name, options = {})
super
Expand All @@ -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
Expand Down
2 changes: 1 addition & 1 deletion lib/dm-types/flag.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ module DataMapper
class Property
class Flag < Integer

include Flags
include Types::Support::Flags

def initialize(model, name, options = {})
super
Expand Down
55 changes: 0 additions & 55 deletions lib/dm-types/paranoid/base.rb

This file was deleted.

23 changes: 0 additions & 23 deletions lib/dm-types/paranoid_boolean.rb

This file was deleted.

22 changes: 0 additions & 22 deletions lib/dm-types/paranoid_datetime.rb

This file was deleted.

13 changes: 13 additions & 0 deletions lib/dm-types/support/date_stamp.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
module DataMapper
module Types
module Support
module DateStamp

def stamp_value
::Date.today
end

end # module DateStamp
end # module Support
end # module Types
end # module DataMapper
13 changes: 13 additions & 0 deletions lib/dm-types/support/date_time_stamp.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
module DataMapper
module Types
module Support
module DateTimeStamp

def stamp_value
::DateTime.now
end

end # module DateTimeStamp
end # module Support
end # module Types
end # module DataMapper
62 changes: 30 additions & 32 deletions lib/dm-types/support/flags.rb
Original file line number Diff line number Diff line change
@@ -1,41 +1,39 @@
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
25 changes: 25 additions & 0 deletions lib/dm-types/support/paranoid_property.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
require "dm-types/support/paranoid_resource"

module DataMapper
module Types
module Support
module ParanoidProperty

# @api private
def bind
unless model < DataMapper::Types::Support::ParanoidResource
model.__send__(:include, DataMapper::Types::Support::ParanoidResource)
end

model.paranoid_properties << self
model.default_scope(repository_name).update(name => self.class.default)
end

def stamp_resource(resource)
resource[name] = stamp_value
end

end # module UpdateStamp
end # module Support
end # class Property
end # module DataMapper
Loading