datamapper 0.3.2 → 0.9.3
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +0 -0
- data/Manifest.txt +5 -0
- data/README.txt +11 -0
- data/Rakefile +70 -0
- data/lib/datamapper.rb +8 -0
- metadata +152 -319
- data/CHANGELOG +0 -145
- data/FAQ +0 -96
- data/MIT-LICENSE +0 -22
- data/QUICKLINKS +0 -12
- data/README +0 -105
- data/environment.rb +0 -62
- data/example.rb +0 -156
- data/lib/data_mapper.rb +0 -88
- data/lib/data_mapper/adapters/abstract_adapter.rb +0 -43
- data/lib/data_mapper/adapters/data_object_adapter.rb +0 -480
- data/lib/data_mapper/adapters/mysql_adapter.rb +0 -72
- data/lib/data_mapper/adapters/postgresql_adapter.rb +0 -258
- data/lib/data_mapper/adapters/sql/coersion.rb +0 -134
- data/lib/data_mapper/adapters/sql/commands/load_command.rb +0 -545
- data/lib/data_mapper/adapters/sql/mappings/associations_set.rb +0 -34
- data/lib/data_mapper/adapters/sql/mappings/column.rb +0 -279
- data/lib/data_mapper/adapters/sql/mappings/conditions.rb +0 -172
- data/lib/data_mapper/adapters/sql/mappings/schema.rb +0 -60
- data/lib/data_mapper/adapters/sql/mappings/table.rb +0 -459
- data/lib/data_mapper/adapters/sql/quoting.rb +0 -24
- data/lib/data_mapper/adapters/sqlite3_adapter.rb +0 -159
- data/lib/data_mapper/associations.rb +0 -106
- data/lib/data_mapper/associations/belongs_to_association.rb +0 -160
- data/lib/data_mapper/associations/has_and_belongs_to_many_association.rb +0 -437
- data/lib/data_mapper/associations/has_many_association.rb +0 -283
- data/lib/data_mapper/associations/has_n_association.rb +0 -143
- data/lib/data_mapper/associations/reference.rb +0 -47
- data/lib/data_mapper/attributes.rb +0 -73
- data/lib/data_mapper/auto_migrations.rb +0 -36
- data/lib/data_mapper/base.rb +0 -17
- data/lib/data_mapper/callbacks.rb +0 -107
- data/lib/data_mapper/context.rb +0 -112
- data/lib/data_mapper/database.rb +0 -234
- data/lib/data_mapper/dependency_queue.rb +0 -28
- data/lib/data_mapper/embedded_value.rb +0 -145
- data/lib/data_mapper/identity_map.rb +0 -47
- data/lib/data_mapper/is/tree.rb +0 -121
- data/lib/data_mapper/migration.rb +0 -155
- data/lib/data_mapper/persistence.rb +0 -852
- data/lib/data_mapper/property.rb +0 -310
- data/lib/data_mapper/query.rb +0 -164
- data/lib/data_mapper/support/blank.rb +0 -35
- data/lib/data_mapper/support/connection_pool.rb +0 -117
- data/lib/data_mapper/support/enumerable.rb +0 -35
- data/lib/data_mapper/support/errors.rb +0 -16
- data/lib/data_mapper/support/inflector.rb +0 -265
- data/lib/data_mapper/support/object.rb +0 -54
- data/lib/data_mapper/support/serialization.rb +0 -96
- data/lib/data_mapper/support/silence.rb +0 -10
- data/lib/data_mapper/support/string.rb +0 -72
- data/lib/data_mapper/support/struct.rb +0 -7
- data/lib/data_mapper/support/symbol.rb +0 -82
- data/lib/data_mapper/support/typed_set.rb +0 -65
- data/lib/data_mapper/types/base.rb +0 -44
- data/lib/data_mapper/types/string.rb +0 -34
- data/lib/data_mapper/validatable_extensions/errors.rb +0 -12
- data/lib/data_mapper/validatable_extensions/macros.rb +0 -7
- data/lib/data_mapper/validatable_extensions/validatable_instance_methods.rb +0 -62
- data/lib/data_mapper/validatable_extensions/validation_base.rb +0 -18
- data/lib/data_mapper/validatable_extensions/validations/formats/email.rb +0 -43
- data/lib/data_mapper/validatable_extensions/validations/validates_acceptance_of.rb +0 -7
- data/lib/data_mapper/validatable_extensions/validations/validates_confirmation_of.rb +0 -7
- data/lib/data_mapper/validatable_extensions/validations/validates_each.rb +0 -7
- data/lib/data_mapper/validatable_extensions/validations/validates_format_of.rb +0 -28
- data/lib/data_mapper/validatable_extensions/validations/validates_length_of.rb +0 -15
- data/lib/data_mapper/validatable_extensions/validations/validates_numericality_of.rb +0 -7
- data/lib/data_mapper/validatable_extensions/validations/validates_presence_of.rb +0 -7
- data/lib/data_mapper/validatable_extensions/validations/validates_true_for.rb +0 -7
- data/lib/data_mapper/validatable_extensions/validations/validates_uniqueness_of.rb +0 -40
- data/lib/data_mapper/validations.rb +0 -20
- data/lib/data_mapper/validations/number_validator.rb +0 -40
- data/lib/data_mapper/validations/string_validator.rb +0 -20
- data/lib/data_mapper/validations/validator.rb +0 -13
- data/performance.rb +0 -307
- data/plugins/can_has_sphinx/LICENSE +0 -23
- data/plugins/can_has_sphinx/README +0 -4
- data/plugins/can_has_sphinx/REVISION +0 -1
- data/plugins/can_has_sphinx/Rakefile +0 -22
- data/plugins/can_has_sphinx/init.rb +0 -1
- data/plugins/can_has_sphinx/install.rb +0 -1
- data/plugins/can_has_sphinx/lib/acts_as_sphinx.rb +0 -123
- data/plugins/can_has_sphinx/lib/sphinx.rb +0 -460
- data/plugins/can_has_sphinx/scripts/sphinx.sh +0 -47
- data/plugins/can_has_sphinx/tasks/acts_as_sphinx_tasks.rake +0 -41
- data/profile_data_mapper.rb +0 -40
- data/rakefile.rb +0 -159
- data/spec/acts_as_tree_spec.rb +0 -67
- data/spec/adapters/data_object_adapter_spec.rb +0 -31
- data/spec/associations/belongs_to_association_spec.rb +0 -98
- data/spec/associations/has_and_belongs_to_many_association_spec.rb +0 -377
- data/spec/associations/has_many_association_spec.rb +0 -337
- data/spec/attributes_spec.rb +0 -52
- data/spec/auto_migrations_spec.rb +0 -101
- data/spec/callbacks_spec.rb +0 -186
- data/spec/can_has_sphinx.rb +0 -5
- data/spec/coersion_spec.rb +0 -41
- data/spec/column_spec.rb +0 -114
- data/spec/count_command_spec.rb +0 -45
- data/spec/database_spec.rb +0 -18
- data/spec/dataobjects_spec.rb +0 -27
- data/spec/delete_command_spec.rb +0 -11
- data/spec/dependency_spec.rb +0 -29
- data/spec/embedded_value_spec.rb +0 -161
- data/spec/fixtures/animals.yaml +0 -33
- data/spec/fixtures/animals_exhibits.yaml +0 -2
- data/spec/fixtures/careers.yaml +0 -5
- data/spec/fixtures/comments.yaml +0 -1
- data/spec/fixtures/exhibits.yaml +0 -90
- data/spec/fixtures/fruit.yaml +0 -6
- data/spec/fixtures/people.yaml +0 -37
- data/spec/fixtures/posts.yaml +0 -3
- data/spec/fixtures/projects.yaml +0 -13
- data/spec/fixtures/sections.yaml +0 -5
- data/spec/fixtures/serializers.yaml +0 -6
- data/spec/fixtures/tasks.yaml +0 -6
- data/spec/fixtures/tasks_tasks.yaml +0 -2
- data/spec/fixtures/tomatoes.yaml +0 -1
- data/spec/fixtures/users.yaml +0 -1
- data/spec/fixtures/zoos.yaml +0 -24
- data/spec/is_a_tree_spec.rb +0 -149
- data/spec/legacy_spec.rb +0 -16
- data/spec/load_command_spec.rb +0 -322
- data/spec/magic_columns_spec.rb +0 -26
- data/spec/migration_spec.rb +0 -267
- data/spec/mock_adapter.rb +0 -20
- data/spec/models/animal.rb +0 -12
- data/spec/models/candidate.rb +0 -8
- data/spec/models/career.rb +0 -7
- data/spec/models/chain.rb +0 -8
- data/spec/models/comment.rb +0 -6
- data/spec/models/exhibit.rb +0 -14
- data/spec/models/fence.rb +0 -7
- data/spec/models/fruit.rb +0 -8
- data/spec/models/job.rb +0 -8
- data/spec/models/person.rb +0 -30
- data/spec/models/post.rb +0 -14
- data/spec/models/project.rb +0 -41
- data/spec/models/sales_person.rb +0 -5
- data/spec/models/section.rb +0 -8
- data/spec/models/serializer.rb +0 -5
- data/spec/models/task.rb +0 -9
- data/spec/models/tomato.rb +0 -27
- data/spec/models/user.rb +0 -12
- data/spec/models/zoo.rb +0 -13
- data/spec/natural_key_spec.rb +0 -36
- data/spec/paranoia_spec.rb +0 -38
- data/spec/persistence_spec.rb +0 -479
- data/spec/postgres_spec.rb +0 -96
- data/spec/property_spec.rb +0 -151
- data/spec/query_spec.rb +0 -77
- data/spec/save_command_spec.rb +0 -94
- data/spec/schema_spec.rb +0 -8
- data/spec/serialize_spec.rb +0 -19
- data/spec/single_table_inheritance_spec.rb +0 -43
- data/spec/spec_helper.rb +0 -45
- data/spec/support/blank_spec.rb +0 -8
- data/spec/support/inflector_spec.rb +0 -41
- data/spec/support/object_spec.rb +0 -9
- data/spec/support/serialization_spec.rb +0 -61
- data/spec/support/silence_spec.rb +0 -15
- data/spec/support/string_spec.rb +0 -7
- data/spec/support/struct_spec.rb +0 -12
- data/spec/support/typed_set_spec.rb +0 -66
- data/spec/symbolic_operators_spec.rb +0 -27
- data/spec/table_spec.rb +0 -79
- data/spec/types/string.rb +0 -81
- data/spec/validates_confirmation_of_spec.rb +0 -55
- data/spec/validates_format_of_spec.rb +0 -78
- data/spec/validates_length_of_spec.rb +0 -117
- data/spec/validates_uniqueness_of_spec.rb +0 -92
- data/spec/validations/number_validator.rb +0 -59
- data/spec/validations/string_validator.rb +0 -14
- data/spec/validations_spec.rb +0 -141
- data/tasks/fixtures.rb +0 -53
@@ -1,54 +0,0 @@
|
|
1
|
-
module DataMapper
|
2
|
-
module Support
|
3
|
-
module Object
|
4
|
-
|
5
|
-
def self.included(base)
|
6
|
-
|
7
|
-
nested_constants = Hash.new do |h,k|
|
8
|
-
klass = Object
|
9
|
-
k.split('::').each do |c|
|
10
|
-
klass = klass.const_get(c)
|
11
|
-
end
|
12
|
-
h[k] = klass
|
13
|
-
end
|
14
|
-
|
15
|
-
base.instance_variable_set("@nested_constants", nested_constants)
|
16
|
-
base.send(:include, ClassMethods)
|
17
|
-
end
|
18
|
-
|
19
|
-
module ClassMethods
|
20
|
-
def recursive_const_get(nested_name)
|
21
|
-
@nested_constants[nested_name]
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
class Object #:nodoc:
|
29
|
-
include DataMapper::Support::Object
|
30
|
-
end
|
31
|
-
|
32
|
-
# require 'benchmark'
|
33
|
-
#
|
34
|
-
# N = 1_000_000
|
35
|
-
#
|
36
|
-
# puts Benchmark.measure {
|
37
|
-
# N.times { Object.recursive_const_get('DataMapper::Support::Object') }
|
38
|
-
# }
|
39
|
-
#
|
40
|
-
# puts Benchmark.measure {
|
41
|
-
# N.times {
|
42
|
-
# klass = Object
|
43
|
-
# 'DataMapper::Support::Object'.split('::').each do |c|
|
44
|
-
# klass = klass.const_get(c)
|
45
|
-
# end
|
46
|
-
# klass
|
47
|
-
# }
|
48
|
-
# }
|
49
|
-
#
|
50
|
-
# __END__
|
51
|
-
# >>> object.rb
|
52
|
-
#
|
53
|
-
# 0.910000 0.000000 0.910000 ( 0.916914)
|
54
|
-
# 6.140000 0.010000 6.150000 ( 6.151984)
|
@@ -1,96 +0,0 @@
|
|
1
|
-
require 'rexml/document'
|
2
|
-
|
3
|
-
begin
|
4
|
-
require 'faster_csv'
|
5
|
-
rescue LoadError
|
6
|
-
nil
|
7
|
-
end
|
8
|
-
|
9
|
-
begin
|
10
|
-
require 'json/ext'
|
11
|
-
rescue LoadError
|
12
|
-
require 'json/pure'
|
13
|
-
end
|
14
|
-
|
15
|
-
module DataMapper
|
16
|
-
module Support
|
17
|
-
module Serialization
|
18
|
-
|
19
|
-
def to_yaml(opts = {})
|
20
|
-
|
21
|
-
YAML::quick_emit( object_id, opts ) do |out|
|
22
|
-
out.map(nil, to_yaml_style ) do |map|
|
23
|
-
database_context.table(self).columns.each do |column|
|
24
|
-
lazy_load!(column.name) if column.lazy?
|
25
|
-
value = get_value_for_column(column)
|
26
|
-
map.add(column.to_s, value.is_a?(Class) ? value.to_s : value)
|
27
|
-
end
|
28
|
-
(self.instance_variable_get("@yaml_added") || []).each do |k,v|
|
29
|
-
map.add(k.to_s, v)
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
end
|
35
|
-
|
36
|
-
def to_xml
|
37
|
-
to_xml_document.to_s
|
38
|
-
end
|
39
|
-
|
40
|
-
def xml_element_name ## overloadable
|
41
|
-
Inflector.underscore(self.class.name)
|
42
|
-
end
|
43
|
-
|
44
|
-
def to_xml_document
|
45
|
-
doc = REXML::Document.new
|
46
|
-
|
47
|
-
table = database_context.table(self.class)
|
48
|
-
# root = doc.add_element(Inflector.underscore(self.class.name))
|
49
|
-
root = doc.add_element(xml_element_name)
|
50
|
-
|
51
|
-
key_attribute = root.attributes << REXML::Attribute.new(table.key.to_s, key)
|
52
|
-
|
53
|
-
# Single-quoted attributes are ugly. :p
|
54
|
-
# NOTE: I don't want to break existing REXML specs for everyone, so I'm
|
55
|
-
# overwriting REXML::Attribute#to_string just for this instance.
|
56
|
-
def key_attribute.to_string
|
57
|
-
%Q[#@expanded_name="#{to_s().gsub(/"/, '"')}"]
|
58
|
-
end
|
59
|
-
|
60
|
-
table.columns.each do |column|
|
61
|
-
next if column.key?
|
62
|
-
value = get_value_for_column(column)
|
63
|
-
node = root.add_element(column.to_s)
|
64
|
-
node << REXML::Text.new(value.to_s) unless value.nil?
|
65
|
-
end
|
66
|
-
|
67
|
-
doc
|
68
|
-
end
|
69
|
-
|
70
|
-
def to_json(*a)
|
71
|
-
table = database_context.table(self.class)
|
72
|
-
|
73
|
-
result = '{ '
|
74
|
-
|
75
|
-
result << table.columns.map do |column|
|
76
|
-
"#{column.name.to_json}: #{get_value_for_column(column).to_json(*a)}"
|
77
|
-
end.join(', ')
|
78
|
-
|
79
|
-
result << ' }'
|
80
|
-
result
|
81
|
-
end
|
82
|
-
|
83
|
-
def to_csv(writer = "")
|
84
|
-
FasterCSV.generate(writer) do |csv|
|
85
|
-
csv << database_context.table(self.class).columns.map { |column| get_value_for_column(column) }
|
86
|
-
end
|
87
|
-
return writer
|
88
|
-
end
|
89
|
-
|
90
|
-
def get_value_for_column(column)
|
91
|
-
send(column.type == :boolean ? column.name.to_s.ensure_ends_with('?') : column.name)
|
92
|
-
end
|
93
|
-
|
94
|
-
end
|
95
|
-
end # module Support
|
96
|
-
end # module DataMapper
|
@@ -1,72 +0,0 @@
|
|
1
|
-
module DataMapper
|
2
|
-
module Support
|
3
|
-
module String
|
4
|
-
|
5
|
-
# I set the constant on the String itself to avoid inheritance chain lookups.
|
6
|
-
def self.included(base)
|
7
|
-
base.extend(ClassMethods)
|
8
|
-
end
|
9
|
-
|
10
|
-
module ClassMethods
|
11
|
-
# Overwrite this method to provide your own translations.
|
12
|
-
def translate(value)
|
13
|
-
translations[value] || value
|
14
|
-
end
|
15
|
-
|
16
|
-
def translations
|
17
|
-
@translations || @translations = {}
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
def ensure_starts_with(part)
|
22
|
-
[0,1] == part ? self : (part + self)
|
23
|
-
end
|
24
|
-
|
25
|
-
def ensure_ends_with(part)
|
26
|
-
[-1,1] == part ? self : (self + part)
|
27
|
-
end
|
28
|
-
|
29
|
-
def ensure_wrapped_with(a, b = nil)
|
30
|
-
ensure_starts_with(a).ensure_ends_with(b || a)
|
31
|
-
end
|
32
|
-
|
33
|
-
# Matches any whitespace (including newline) and replaces with a single space
|
34
|
-
# EXAMPLE:
|
35
|
-
# <<QUERY.compress_lines
|
36
|
-
# SELECT name
|
37
|
-
# FROM users
|
38
|
-
# QUERY
|
39
|
-
# => "SELECT name FROM users"
|
40
|
-
def compress_lines(spaced = true)
|
41
|
-
split($/).map { |line| line.strip }.join(spaced ? ' ' : '')
|
42
|
-
end
|
43
|
-
|
44
|
-
# Useful for heredocs - removes whitespace margin.
|
45
|
-
def margin(indicator = nil)
|
46
|
-
lines = self.dup.split($/)
|
47
|
-
|
48
|
-
min_margin = 0
|
49
|
-
lines.each do |line|
|
50
|
-
if line =~ /^(\s+)/ && (min_margin == 0 || $1.size < min_margin)
|
51
|
-
min_margin = $1.size
|
52
|
-
end
|
53
|
-
end
|
54
|
-
lines.map { |line| line.sub(/^\s{#{min_margin}}/, '') }.join($/)
|
55
|
-
end
|
56
|
-
|
57
|
-
# Formats String for easy translation. Replaces an arbitrary number of
|
58
|
-
# values using numeric identifier replacement.
|
59
|
-
#
|
60
|
-
# "%s %s %s" % %w(one two three) #=> "one two three"
|
61
|
-
# "%3$s %2$s %1$s" % %w(one two three) #=> "three two one"
|
62
|
-
def t(*values)
|
63
|
-
self.class::translate(self) % values
|
64
|
-
end
|
65
|
-
|
66
|
-
end # module String
|
67
|
-
end # module Support
|
68
|
-
end # module DataMapper
|
69
|
-
|
70
|
-
class String #:nodoc:
|
71
|
-
include DataMapper::Support::String
|
72
|
-
end
|
@@ -1,82 +0,0 @@
|
|
1
|
-
module DataMapper
|
2
|
-
module Support
|
3
|
-
|
4
|
-
# Extends
|
5
|
-
module Symbol
|
6
|
-
|
7
|
-
class Operator
|
8
|
-
|
9
|
-
attr_reader :value, :type, :options
|
10
|
-
|
11
|
-
def initialize(value, type, options = nil)
|
12
|
-
@value, @type, @options = value, type, options
|
13
|
-
end
|
14
|
-
|
15
|
-
def to_sym
|
16
|
-
@value
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
def gt
|
21
|
-
Operator.new(self, :gt)
|
22
|
-
end
|
23
|
-
|
24
|
-
def gte
|
25
|
-
Operator.new(self, :gte)
|
26
|
-
end
|
27
|
-
|
28
|
-
def lt
|
29
|
-
Operator.new(self, :lt)
|
30
|
-
end
|
31
|
-
|
32
|
-
def lte
|
33
|
-
Operator.new(self, :lte)
|
34
|
-
end
|
35
|
-
|
36
|
-
def not
|
37
|
-
Operator.new(self, :not)
|
38
|
-
end
|
39
|
-
|
40
|
-
def eql
|
41
|
-
Operator.new(self, :eql)
|
42
|
-
end
|
43
|
-
|
44
|
-
def like
|
45
|
-
Operator.new(self, :like)
|
46
|
-
end
|
47
|
-
|
48
|
-
def in
|
49
|
-
Operator.new(self, :in)
|
50
|
-
end
|
51
|
-
|
52
|
-
def to_proc
|
53
|
-
lambda { |value| value.send(self) }
|
54
|
-
end
|
55
|
-
|
56
|
-
# Calculations:
|
57
|
-
|
58
|
-
def count
|
59
|
-
Operator.new(self, :count)
|
60
|
-
end
|
61
|
-
|
62
|
-
def max
|
63
|
-
Operator.new(self, :max)
|
64
|
-
end
|
65
|
-
|
66
|
-
def avg
|
67
|
-
Operator.new(self, :avg)
|
68
|
-
end
|
69
|
-
|
70
|
-
alias average avg
|
71
|
-
|
72
|
-
def min
|
73
|
-
Operator.new(self, :min)
|
74
|
-
end
|
75
|
-
|
76
|
-
end # module Symbol
|
77
|
-
end # module Support
|
78
|
-
end # module DataMapper
|
79
|
-
|
80
|
-
class Symbol #:nodoc:
|
81
|
-
include DataMapper::Support::Symbol
|
82
|
-
end
|
@@ -1,65 +0,0 @@
|
|
1
|
-
require 'set'
|
2
|
-
|
3
|
-
module DataMapper
|
4
|
-
module Support
|
5
|
-
class TypedSet
|
6
|
-
|
7
|
-
include ::Enumerable
|
8
|
-
|
9
|
-
def initialize(*types)
|
10
|
-
@types = types
|
11
|
-
@set = SortedSet.new
|
12
|
-
end
|
13
|
-
|
14
|
-
def <<(item)
|
15
|
-
raise ArgumentError.new("#{item.inspect} must be a kind of: #{@types.inspect}") unless @types.any? { |type| type === item }
|
16
|
-
@set << item
|
17
|
-
return self
|
18
|
-
end
|
19
|
-
|
20
|
-
def concat(values)
|
21
|
-
[*values].each { |item| self << item }
|
22
|
-
self
|
23
|
-
end
|
24
|
-
|
25
|
-
def inspect
|
26
|
-
"#<DataMapper::Support::TypedSet#{@types.inspect}: {#{entries.inspect[1...-1]}}>"
|
27
|
-
end
|
28
|
-
|
29
|
-
def each
|
30
|
-
@set.each { |item| yield(item) }
|
31
|
-
end
|
32
|
-
|
33
|
-
def delete?(item)
|
34
|
-
@set.delete?(item)
|
35
|
-
end
|
36
|
-
|
37
|
-
def size
|
38
|
-
@set.size
|
39
|
-
end
|
40
|
-
alias length size
|
41
|
-
|
42
|
-
def empty?
|
43
|
-
@set.empty?
|
44
|
-
end
|
45
|
-
alias blank? empty?
|
46
|
-
|
47
|
-
def clear
|
48
|
-
@set.clear
|
49
|
-
end
|
50
|
-
|
51
|
-
def +(other)
|
52
|
-
x = self.class.new(*@types)
|
53
|
-
each { |entry| x << entry }
|
54
|
-
other.each { |entry| x << entry } unless other.blank?
|
55
|
-
return x
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
class Class
|
62
|
-
def <=>(other)
|
63
|
-
name <=> other.name
|
64
|
-
end
|
65
|
-
end
|
@@ -1,44 +0,0 @@
|
|
1
|
-
require 'data_mapper/validations/number_validator'
|
2
|
-
require 'data_mapper/validations/string_validator'
|
3
|
-
|
4
|
-
module DataMapper
|
5
|
-
module Types
|
6
|
-
TYPE_MAP = {}
|
7
|
-
|
8
|
-
module Base
|
9
|
-
module ClassMethods
|
10
|
-
def context(ctx)
|
11
|
-
contexts(ctx)
|
12
|
-
end
|
13
|
-
|
14
|
-
def contexts(*ctxs)
|
15
|
-
@contexts || @contexts = %w{__all__} << ctxs.map { |c| c.to_s }
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
def self.included(klass)
|
20
|
-
klass.extend(ClassMethods)
|
21
|
-
end
|
22
|
-
|
23
|
-
def do_validations
|
24
|
-
raise NotImplementedError.new
|
25
|
-
end
|
26
|
-
|
27
|
-
def valid?(context = "__all__")
|
28
|
-
@errors = []
|
29
|
-
|
30
|
-
if self.class.contexts.include?(context.to_s)
|
31
|
-
do_validations
|
32
|
-
|
33
|
-
@errors.empty?
|
34
|
-
else
|
35
|
-
true
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
def errors
|
40
|
-
@errors || @errors = []
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
@@ -1,34 +0,0 @@
|
|
1
|
-
require 'data_mapper/types/base'
|
2
|
-
|
3
|
-
module DataMapper
|
4
|
-
module Types
|
5
|
-
class String < ::String
|
6
|
-
include Types::Base
|
7
|
-
|
8
|
-
TYPE_MAP[:string] = self
|
9
|
-
TYPE_MAP[::String] = self
|
10
|
-
|
11
|
-
def self.length
|
12
|
-
length_validator
|
13
|
-
end
|
14
|
-
|
15
|
-
def self.matches(regexp)
|
16
|
-
match_validator.matches(regexp)
|
17
|
-
end
|
18
|
-
|
19
|
-
def self.length_validator
|
20
|
-
@length_validator ||
|
21
|
-
@length_validator = Validations::NumberValidator.new
|
22
|
-
end
|
23
|
-
|
24
|
-
def self.match_validator
|
25
|
-
@match_validator || @match_validator = Validations::StringValidator.new
|
26
|
-
end
|
27
|
-
|
28
|
-
def do_validations
|
29
|
-
errors.concat(self.class.length_validator.errors_for(length))
|
30
|
-
errors.concat(self.class.match_validator.errors_for(self))
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|