activerecord-postgis-adapter 4.1.2 → 5.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/lib/active_record/connection_adapters/postgis/column_methods.rb +2 -2
- data/lib/active_record/connection_adapters/postgis/create_connection.rb +1 -1
- data/lib/active_record/connection_adapters/postgis/oid/spatial.rb +14 -9
- data/lib/active_record/connection_adapters/postgis/railtie.rb +4 -1
- data/lib/active_record/connection_adapters/postgis/schema_statements.rb +5 -6
- data/lib/active_record/connection_adapters/postgis/spatial_column.rb +2 -2
- data/lib/active_record/connection_adapters/postgis/spatial_table_definition.rb +19 -86
- data/lib/active_record/connection_adapters/postgis/version.rb +1 -1
- data/lib/active_record/connection_adapters/postgis_adapter.rb +3 -11
- data/lib/activerecord-postgis-adapter.rb +1 -1
- metadata +7 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 7b3f788f4ff2a7994a5b09fe55a85fb34e4c07af
|
4
|
+
data.tar.gz: 150c100ea1c01b61c118a3072780514c313cd44d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4cb6baff936647c96561d781260d6cd3b61e56130ea87c337d4285050686f81b68c5130fdcd4696684583fccdcba6ec21a1b602ed542ad2bdc648eba71474899
|
7
|
+
data.tar.gz: 41c64f27461a9fa46d1046fb9e8376ad5fa80ad5737dbd4d0b26e25b13891363a83f059be730eec27fe742fa21e41c68720c4629a797b09a589a7ece3d3ea429
|
@@ -30,7 +30,7 @@ module ActiveRecord # :nodoc:
|
|
30
30
|
conn_params[:dbname] = conn_params.delete(:database) if conn_params[:database]
|
31
31
|
|
32
32
|
# Forward only valid config params to PGconn.connect.
|
33
|
-
valid_conn_param_keys =
|
33
|
+
valid_conn_param_keys = PGconn.conndefaults_hash.keys + [:requiressl]
|
34
34
|
conn_params.slice!(*valid_conn_param_keys)
|
35
35
|
|
36
36
|
# The postgres drivers don't allow the creation of an unconnected PGconn object,
|
@@ -24,16 +24,21 @@ module ActiveRecord
|
|
24
24
|
def self.parse_sql_type(sql_type)
|
25
25
|
geo_type, srid, has_z, has_m = nil, 0, false, false
|
26
26
|
|
27
|
-
if sql_type =~ /
|
27
|
+
if sql_type =~ /[geography,geometry]\((.*)\)$/i
|
28
28
|
# geometry(Point,4326)
|
29
|
-
params = Regexp.last_match(
|
30
|
-
if params.
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
29
|
+
params = Regexp.last_match(1).split(",")
|
30
|
+
if params.size > 1
|
31
|
+
if params.first =~ /([a-z]+[^zm])(z?)(m?)/i
|
32
|
+
has_z = Regexp.last_match(2).length > 0
|
33
|
+
has_m = Regexp.last_match(3).length > 0
|
34
|
+
geo_type = Regexp.last_match(1)
|
35
|
+
end
|
36
|
+
if params.last =~ /(\d+)/
|
37
|
+
srid = Regexp.last_match(1).to_i
|
38
|
+
end
|
39
|
+
else
|
40
|
+
# geometry(Point)
|
41
|
+
geo_type = params[0]
|
37
42
|
end
|
38
43
|
else
|
39
44
|
# geometry
|
@@ -1,9 +1,12 @@
|
|
1
|
+
require "rails/railtie"
|
2
|
+
require "active_record/connection_adapters/postgis_adapter"
|
3
|
+
|
1
4
|
module ActiveRecord # :nodoc:
|
2
5
|
module ConnectionAdapters # :nodoc:
|
3
6
|
module PostGIS # :nodoc:
|
4
7
|
class Railtie < ::Rails::Railtie # :nodoc:
|
5
8
|
rake_tasks do
|
6
|
-
load "
|
9
|
+
load ::File.expand_path("databases.rake", ::File.dirname(__FILE__))
|
7
10
|
end
|
8
11
|
end
|
9
12
|
end
|
@@ -6,7 +6,7 @@ module ActiveRecord
|
|
6
6
|
# pass table_name to #new_column
|
7
7
|
def columns(table_name)
|
8
8
|
# Limit, precision, and scale are all handled by the superclass.
|
9
|
-
column_definitions(table_name).map do |column_name, type, default, notnull, oid, fmod, collation
|
9
|
+
column_definitions(table_name).map do |column_name, type, default, notnull, oid, fmod, collation|
|
10
10
|
oid = oid.to_i
|
11
11
|
fmod = fmod.to_i
|
12
12
|
type_metadata = fetch_type_metadata(column_name, type, oid, fmod)
|
@@ -14,12 +14,12 @@ module ActiveRecord
|
|
14
14
|
default_value = extract_value_from_default(default)
|
15
15
|
|
16
16
|
default_function = extract_default_function(default_value, default)
|
17
|
-
new_column(table_name, column_name, default_value, cast_type, type_metadata, !notnull, default_function, collation
|
17
|
+
new_column(table_name, column_name, default_value, cast_type, type_metadata, !notnull, default_function, collation)
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
21
|
# override
|
22
|
-
def new_column(table_name, column_name, default, cast_type, sql_type_metadata = nil, null = true, default_function = nil, collation = nil
|
22
|
+
def new_column(table_name, column_name, default, cast_type, sql_type_metadata = nil, null = true, default_function = nil, collation = nil)
|
23
23
|
# JDBC gets true/false in Rails 4, where other platforms get 't'/'f' strings.
|
24
24
|
if null.is_a?(String)
|
25
25
|
null = (null == "t")
|
@@ -34,7 +34,6 @@ module ActiveRecord
|
|
34
34
|
table_name,
|
35
35
|
default_function,
|
36
36
|
collation,
|
37
|
-
comment,
|
38
37
|
cast_type,
|
39
38
|
column_info)
|
40
39
|
end
|
@@ -52,10 +51,10 @@ module ActiveRecord
|
|
52
51
|
#
|
53
52
|
# type_to_sql(:geography, "Point,4326")
|
54
53
|
# => "geography(Point,4326)"
|
55
|
-
def type_to_sql(type,
|
54
|
+
def type_to_sql(type, options = {})
|
56
55
|
case type
|
57
56
|
when :geometry, :geography
|
58
|
-
"#{type}(#{limit})"
|
57
|
+
"#{type}(#{options[:limit]})"
|
59
58
|
else
|
60
59
|
super
|
61
60
|
end
|
@@ -8,7 +8,7 @@ module ActiveRecord # :nodoc:
|
|
8
8
|
# cast_type example classes:
|
9
9
|
# OID::Spatial
|
10
10
|
# OID::Integer
|
11
|
-
def initialize(name, default, sql_type_metadata = nil, null = true, table_name = nil, default_function = nil, collation = nil,
|
11
|
+
def initialize(name, default, sql_type_metadata = nil, null = true, table_name = nil, default_function = nil, collation = nil, cast_type = nil, opts = nil)
|
12
12
|
@cast_type = cast_type
|
13
13
|
@geographic = !!(sql_type_metadata.sql_type =~ /geography\(/i)
|
14
14
|
if opts
|
@@ -29,7 +29,7 @@ module ActiveRecord # :nodoc:
|
|
29
29
|
# @geometric_type = geo_type_from_sql_type(sql_type)
|
30
30
|
build_from_sql_type(sql_type_metadata.sql_type)
|
31
31
|
end
|
32
|
-
super(name, default, sql_type_metadata, null, table_name, default_function, collation
|
32
|
+
super(name, default, sql_type_metadata, null, table_name, default_function, collation)
|
33
33
|
if spatial?
|
34
34
|
if @srid
|
35
35
|
@limit = { srid: @srid, type: to_type_name(geometric_type) }
|
@@ -11,109 +11,42 @@ module ActiveRecord # :nodoc:
|
|
11
11
|
options.merge!(limit) if limit.is_a?(::Hash)
|
12
12
|
end
|
13
13
|
|
14
|
-
geo_type =
|
14
|
+
geo_type = ColumnDefinitionUtils.geo_type(options[:type] || type || info[:type])
|
15
15
|
base_type = info[:type] || (options[:geographic] ? :geography : :geometry)
|
16
16
|
|
17
17
|
# puts name.dup << " - " << type.to_s << " - " << options.to_s << " :: " << geo_type.to_s << " - " << base_type.to_s
|
18
18
|
|
19
|
-
|
20
|
-
|
21
|
-
end
|
19
|
+
options[:limit] = ColumnDefinitionUtils.limit_from_options(geo_type, options)
|
20
|
+
options[:spatial_type] = geo_type
|
22
21
|
column = super(name, base_type, options)
|
23
|
-
column.spatial_type = geo_type
|
24
|
-
column.geographic = options[:geographic]
|
25
|
-
column.srid = options[:srid]
|
26
|
-
column.has_z = options[:has_z]
|
27
|
-
column.has_m = options[:has_m]
|
28
22
|
else
|
29
23
|
column = super(name, type, options)
|
30
24
|
end
|
31
25
|
|
32
26
|
column
|
33
27
|
end
|
34
|
-
|
35
|
-
private
|
36
|
-
|
37
|
-
def create_column_definition(name, type)
|
38
|
-
if PostGISAdapter.spatial_column_options(type.to_sym)
|
39
|
-
PostGIS::ColumnDefinition.new(name, type)
|
40
|
-
else
|
41
|
-
super
|
42
|
-
end
|
43
|
-
end
|
44
28
|
end
|
45
29
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
spatial_type << ",#{options[:srid] || 4326}"
|
54
|
-
spatial_type
|
55
|
-
end
|
56
|
-
|
57
|
-
# limit is how column options are passed to #type_to_sql
|
58
|
-
# returns: "Point,4326"
|
59
|
-
def limit
|
60
|
-
"".tap do |value|
|
61
|
-
value << self.class.geo_type(spatial_type)
|
62
|
-
value << "Z" if has_z?
|
63
|
-
value << "M" if has_m?
|
64
|
-
value << ",#{srid}"
|
30
|
+
module ColumnDefinitionUtils
|
31
|
+
class << self
|
32
|
+
def geo_type(type = "GEOMETRY")
|
33
|
+
g_type = type.to_s.delete("_").upcase
|
34
|
+
return "POINT" if g_type == "STPOINT"
|
35
|
+
return "POLYGON" if g_type == "STPOLYGON"
|
36
|
+
g_type
|
65
37
|
end
|
66
|
-
end
|
67
|
-
|
68
|
-
def self.geo_type(type = "GEOMETRY")
|
69
|
-
g_type = type.to_s.delete("_").upcase
|
70
|
-
return "POINT" if g_type == "STPOINT"
|
71
|
-
return "POLYGON" if g_type == "STPOLYGON"
|
72
|
-
g_type
|
73
|
-
end
|
74
|
-
|
75
|
-
def spatial_type
|
76
|
-
@spatial_type
|
77
|
-
end
|
78
|
-
|
79
|
-
def spatial_type=(value)
|
80
|
-
@spatial_type = value.to_s
|
81
|
-
end
|
82
38
|
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
end
|
90
|
-
|
91
|
-
def srid
|
92
|
-
if @srid
|
93
|
-
@srid.to_i
|
94
|
-
else
|
95
|
-
geographic? ? 4326 : PostGISAdapter::DEFAULT_SRID
|
39
|
+
def limit_from_options(type, options = {})
|
40
|
+
spatial_type = geo_type(type)
|
41
|
+
spatial_type << "Z" if options[:has_z]
|
42
|
+
spatial_type << "M" if options[:has_m]
|
43
|
+
spatial_type << ",#{options[:srid] || default_srid(options)}"
|
44
|
+
spatial_type
|
96
45
|
end
|
97
|
-
end
|
98
|
-
|
99
|
-
def srid=(value)
|
100
|
-
@srid = value
|
101
|
-
end
|
102
46
|
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
def has_z=(value)
|
108
|
-
@has_z = !!value
|
109
|
-
end
|
110
|
-
|
111
|
-
def has_m?
|
112
|
-
@has_m
|
113
|
-
end
|
114
|
-
|
115
|
-
def has_m=(value)
|
116
|
-
@has_m = !!value
|
47
|
+
def default_srid(options)
|
48
|
+
options[:geographic] ? 4326 : PostGISAdapter::DEFAULT_SRID
|
49
|
+
end
|
117
50
|
end
|
118
51
|
end
|
119
52
|
end
|
@@ -3,16 +3,8 @@
|
|
3
3
|
|
4
4
|
# :stopdoc:
|
5
5
|
|
6
|
-
require "rgeo/active_record"
|
7
|
-
|
8
|
-
# autoload AbstractAdapter to avoid circular require and void context warnings
|
9
|
-
module ActiveRecord
|
10
|
-
module ConnectionAdapters
|
11
|
-
AbstractAdapter
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
6
|
require "active_record/connection_adapters/postgresql_adapter"
|
7
|
+
require "rgeo/active_record"
|
16
8
|
require "active_record/connection_adapters/postgis/version"
|
17
9
|
require "active_record/connection_adapters/postgis/column_methods"
|
18
10
|
require "active_record/connection_adapters/postgis/schema_statements"
|
@@ -28,7 +20,7 @@ require "active_record/connection_adapters/postgis/postgis_database_tasks"
|
|
28
20
|
::ActiveRecord::ConnectionAdapters::PostGIS.initial_setup
|
29
21
|
|
30
22
|
if defined?(::Rails::Railtie)
|
31
|
-
|
23
|
+
load ::File.expand_path("postgis/railtie.rb", ::File.dirname(__FILE__))
|
32
24
|
end
|
33
25
|
|
34
26
|
# :startdoc:
|
@@ -94,7 +86,7 @@ module ActiveRecord
|
|
94
86
|
}
|
95
87
|
end
|
96
88
|
|
97
|
-
def quote(value
|
89
|
+
def quote(value)
|
98
90
|
if RGeo::Feature::Geometry.check_type(value)
|
99
91
|
"'#{RGeo::WKRep::WKBGenerator.new(hex_format: true, type_format: :ewkb, emit_ewkb_srid: true).generate(value)}'"
|
100
92
|
elsif value.is_a?(RGeo::Cartesian::BoundingBox)
|
@@ -1 +1 @@
|
|
1
|
-
require "active_record/connection_adapters/postgis_adapter"
|
1
|
+
require "active_record/connection_adapters/postgis_adapter.rb"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activerecord-postgis-adapter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 5.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Azuma, Tee Parham
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-05-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -16,28 +16,28 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 5.
|
19
|
+
version: '5.1'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 5.
|
26
|
+
version: '5.1'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rgeo-activerecord
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '5.1'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '5.1'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rake
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -138,7 +138,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
138
138
|
version: '0'
|
139
139
|
requirements: []
|
140
140
|
rubyforge_project:
|
141
|
-
rubygems_version: 2.
|
141
|
+
rubygems_version: 2.6.11
|
142
142
|
signing_key:
|
143
143
|
specification_version: 4
|
144
144
|
summary: ActiveRecord adapter for PostGIS, based on RGeo.
|