-
Notifications
You must be signed in to change notification settings - Fork 10
/
dm-pg-types.rb
53 lines (46 loc) · 1.43 KB
/
dm-pg-types.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
require 'dm-core'
require 'dm-migrations'
require 'dm-types'
require 'dm-postgres-adapter'
module DataMapper
class Property
autoload :HStore, 'dm-pg-types/hstore'
autoload :DecimalArray, 'dm-pg-types/decimal_array'
autoload :StringArray, 'dm-pg-types/string_array'
end
module Migrations
module PostgresAdapter
def property_schema_hash(property)
schema = super
if property.kind_of?(Property::DecimalArray)
schema[:primitive] = "#{schema[:primitive]}(#{property.precision},#{property.scale})[]"
schema[:precision] = schema[:scale] = nil
elsif property.kind_of?(Property::StringArray)
schema[:primitive] = "#{schema[:primitive]}(#{property.length})[]"
schema[:length] = nil
end
schema
end
end
end
module PgTypes
def self.included(base)
base.extend ClassMethods
end
module ClassMethods
# Types for PostgreSQL databases.
#
# @return [Hash] types for PostgreSQL databases.
#
# @api private
def type_map
super.merge(
Property::HStore => {:primitive => 'HSTORE'},
Property::DecimalArray => {:primitive => "NUMERIC"},
Property::StringArray => {:primitive => "VARCHAR"}
).freeze
end
end
end
end
DataMapper::Adapters::PostgresAdapter.send(:include,DataMapper::PgTypes)