activerecord-postgis-adapter 7.1.1 → 8.0.0
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 +4 -4
- data/lib/active_record/connection_adapters/postgis/oid/spatial.rb +1 -1
- data/lib/active_record/connection_adapters/postgis/schema_statements.rb +0 -27
- data/lib/active_record/connection_adapters/postgis/spatial_column.rb +8 -9
- data/lib/active_record/connection_adapters/postgis/spatial_column_info.rb +1 -1
- data/lib/active_record/connection_adapters/postgis/spatial_table_definition.rb +2 -2
- data/lib/active_record/connection_adapters/postgis/version.rb +1 -1
- data/lib/active_record/connection_adapters/postgis_adapter.rb +39 -9
- metadata +9 -26
- data/lib/active_record/connection_adapters/postgis/databases.rake +0 -19
- data/lib/active_record/connection_adapters/postgis/postgis_database_tasks.rb +0 -142
- data/lib/active_record/connection_adapters/postgis/railtie.rb +0 -13
- data/lib/active_record/connection_adapters/postgis/setup.rb +0 -19
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 88b08c026151d4f1a930e5fc3299bbf1898a20df441f86b57cde0aabcd29b4cb
|
4
|
+
data.tar.gz: 823b5b9511687fa663273242d5cce9d490610b813df495ad81b43c241c3b443e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f851b74ce6e9da1a4aac3bfcf8acbda44e563f049de04eaf832a8b49cf2acc41cf98495a9ff123786d9bd871658d97637453ae6d845e55f0bf4f5074db01eab7
|
7
|
+
data.tar.gz: 7e47c25711cf8ee49c62a8ad89f9d0b0e5525bf4fb1b45ddb185db6477d0e114a4868a50c612e9a51e880499213cb6cb82f051adf993618eb0978cc0d0f45dc7
|
@@ -9,7 +9,7 @@ module ActiveRecord
|
|
9
9
|
# Accepts `geo_type`, `srid`, `has_z`, `has_m`, and `geographic` as parameters.
|
10
10
|
# Responsible for parsing sql_types returned from the database and WKT features.
|
11
11
|
class Spatial < Type::Value
|
12
|
-
def initialize(geo_type:
|
12
|
+
def initialize(geo_type: "geometry", srid: 0, has_z: false, has_m: false, geographic: false)
|
13
13
|
@geo_type = geo_type
|
14
14
|
@srid = srid
|
15
15
|
@has_z = has_z
|
@@ -83,33 +83,6 @@ module ActiveRecord
|
|
83
83
|
@spatial_column_info ||= {}
|
84
84
|
@spatial_column_info[table_name.to_sym] ||= SpatialColumnInfo.new(self, table_name.to_s)
|
85
85
|
end
|
86
|
-
|
87
|
-
def initialize_type_map(map = type_map)
|
88
|
-
%w(
|
89
|
-
geography
|
90
|
-
geometry
|
91
|
-
geometry_collection
|
92
|
-
line_string
|
93
|
-
multi_line_string
|
94
|
-
multi_point
|
95
|
-
multi_polygon
|
96
|
-
st_point
|
97
|
-
st_polygon
|
98
|
-
).each do |geo_type|
|
99
|
-
map.register_type(geo_type) do |_, _, sql_type|
|
100
|
-
# sql_type is a string that comes from the database definition
|
101
|
-
# examples:
|
102
|
-
# "geometry(Point,4326)"
|
103
|
-
# "geography(Point,4326)"
|
104
|
-
# "geometry(Polygon,4326) NOT NULL"
|
105
|
-
# "geometry(Geography,4326)"
|
106
|
-
geo_type, srid, has_z, has_m, geographic = OID::Spatial.parse_sql_type(sql_type)
|
107
|
-
OID::Spatial.new(geo_type: geo_type, srid: srid, has_z: has_z, has_m: has_m, geographic: geographic)
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
super
|
112
|
-
end
|
113
86
|
end
|
114
87
|
end
|
115
88
|
end
|
@@ -32,13 +32,11 @@ module ActiveRecord # :nodoc:
|
|
32
32
|
end
|
33
33
|
super(name, default, sql_type_metadata, null, default_function,
|
34
34
|
collation: collation, comment: comment, serial: serial)
|
35
|
-
if spatial?
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
@limit[:geographic] = true if @geographic
|
41
|
-
end
|
35
|
+
if spatial? && @srid
|
36
|
+
@limit = { srid: @srid, type: to_type_name(geometric_type) }
|
37
|
+
@limit[:has_z] = true if @has_z
|
38
|
+
@limit[:has_m] = true if @has_m
|
39
|
+
@limit[:geographic] = true if @geographic
|
42
40
|
end
|
43
41
|
end
|
44
42
|
|
@@ -73,9 +71,10 @@ module ActiveRecord # :nodoc:
|
|
73
71
|
|
74
72
|
def to_type_name(geometric_type)
|
75
73
|
name = geometric_type.type_name.underscore
|
76
|
-
|
74
|
+
case name
|
75
|
+
when "point"
|
77
76
|
"st_point"
|
78
|
-
|
77
|
+
when "polygon"
|
79
78
|
"st_polygon"
|
80
79
|
else
|
81
80
|
name
|
@@ -21,7 +21,7 @@ module ActiveRecord # :nodoc:
|
|
21
21
|
dimension = row[1].to_i
|
22
22
|
has_m = !!(type =~ /m$/i)
|
23
23
|
type.sub!(/m$/, "")
|
24
|
-
has_z = dimension > 3 || dimension == 3 && !has_m
|
24
|
+
has_z = dimension > 3 || (dimension == 3 && !has_m)
|
25
25
|
result[name] = {
|
26
26
|
dimension: dimension,
|
27
27
|
has_m: has_m,
|
@@ -9,8 +9,8 @@ module ActiveRecord # :nodoc:
|
|
9
9
|
# super: https://github.com/rails/rails/blob/master/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb
|
10
10
|
def new_column_definition(name, type, **options)
|
11
11
|
if (info = PostGISAdapter.spatial_column_options(type.to_sym))
|
12
|
-
if (limit = options.delete(:limit))
|
13
|
-
options.merge!(limit)
|
12
|
+
if (limit = options.delete(:limit)) && limit.is_a?(::Hash)
|
13
|
+
options.merge!(limit)
|
14
14
|
end
|
15
15
|
|
16
16
|
geo_type = ColumnDefinitionUtils.geo_type(options[:type] || type || info[:type])
|
@@ -17,18 +17,9 @@ require "active_record/connection_adapters/postgis/spatial_column_info"
|
|
17
17
|
require "active_record/connection_adapters/postgis/spatial_table_definition"
|
18
18
|
require "active_record/connection_adapters/postgis/spatial_column"
|
19
19
|
require "active_record/connection_adapters/postgis/arel_tosql"
|
20
|
-
require "active_record/connection_adapters/postgis/setup"
|
21
20
|
require "active_record/connection_adapters/postgis/oid/spatial"
|
22
21
|
require "active_record/connection_adapters/postgis/type" # has to be after oid/*
|
23
22
|
require "active_record/connection_adapters/postgis/create_connection"
|
24
|
-
require "active_record/connection_adapters/postgis/postgis_database_tasks"
|
25
|
-
|
26
|
-
ActiveRecord::ConnectionAdapters::PostGIS.initial_setup
|
27
|
-
|
28
|
-
if defined?(Rails::Railtie)
|
29
|
-
require "active_record/connection_adapters/postgis/railtie"
|
30
|
-
end
|
31
|
-
|
32
23
|
# :startdoc:
|
33
24
|
|
34
25
|
module ActiveRecord
|
@@ -72,6 +63,35 @@ module ActiveRecord
|
|
72
63
|
DEFAULT_SRID
|
73
64
|
end
|
74
65
|
|
66
|
+
class << self
|
67
|
+
def initialize_type_map(map = type_map)
|
68
|
+
%w[
|
69
|
+
geography
|
70
|
+
geometry
|
71
|
+
geometry_collection
|
72
|
+
line_string
|
73
|
+
multi_line_string
|
74
|
+
multi_point
|
75
|
+
multi_polygon
|
76
|
+
st_point
|
77
|
+
st_polygon
|
78
|
+
].each do |geo_type|
|
79
|
+
map.register_type(geo_type) do |_, _, sql_type|
|
80
|
+
# sql_type is a string that comes from the database definition
|
81
|
+
# examples:
|
82
|
+
# "geometry(Point,4326)"
|
83
|
+
# "geography(Point,4326)"
|
84
|
+
# "geometry(Polygon,4326) NOT NULL"
|
85
|
+
# "geometry(Geography,4326)"
|
86
|
+
geo_type, srid, has_z, has_m, geographic = PostGIS::OID::Spatial.parse_sql_type(sql_type)
|
87
|
+
PostGIS::OID::Spatial.new(geo_type: geo_type, srid: srid, has_z: has_z, has_m: has_m, geographic: geographic)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
super
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
75
95
|
def srs_database_columns
|
76
96
|
{
|
77
97
|
auth_name_column: "auth_name",
|
@@ -115,6 +135,16 @@ module ActiveRecord
|
|
115
135
|
end
|
116
136
|
end
|
117
137
|
end
|
138
|
+
SchemaDumper.ignore_tables |= %w[
|
139
|
+
geography_columns
|
140
|
+
geometry_columns
|
141
|
+
layer
|
142
|
+
raster_columns
|
143
|
+
raster_overviews
|
144
|
+
spatial_ref_sys
|
145
|
+
topology
|
146
|
+
]
|
147
|
+
Tasks::DatabaseTasks.register_task(/postgis/, "ActiveRecord::Tasks::PostgreSQLDatabaseTasks")
|
118
148
|
end
|
119
149
|
|
120
150
|
# if using JRUBY, create ArJdbc::PostGIS module
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activerecord-postgis-adapter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 8.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Azuma
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2022-01-03 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activerecord
|
@@ -17,14 +17,14 @@ dependencies:
|
|
17
17
|
requirements:
|
18
18
|
- - "~>"
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version:
|
20
|
+
version: 7.0.0
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
25
|
- - "~>"
|
26
26
|
- !ruby/object:Gem::Version
|
27
|
-
version:
|
27
|
+
version: 7.0.0
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: rgeo-activerecord
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
@@ -45,14 +45,14 @@ dependencies:
|
|
45
45
|
requirements:
|
46
46
|
- - "~>"
|
47
47
|
- !ruby/object:Gem::Version
|
48
|
-
version: '
|
48
|
+
version: '13.0'
|
49
49
|
type: :development
|
50
50
|
prerelease: false
|
51
51
|
version_requirements: !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
53
|
- - "~>"
|
54
54
|
- !ruby/object:Gem::Version
|
55
|
-
version: '
|
55
|
+
version: '13.0'
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
57
|
name: minitest
|
58
58
|
requirement: !ruby/object:Gem::Requirement
|
@@ -81,20 +81,6 @@ dependencies:
|
|
81
81
|
- - "~>"
|
82
82
|
- !ruby/object:Gem::Version
|
83
83
|
version: '1.1'
|
84
|
-
- !ruby/object:Gem::Dependency
|
85
|
-
name: appraisal
|
86
|
-
requirement: !ruby/object:Gem::Requirement
|
87
|
-
requirements:
|
88
|
-
- - "~>"
|
89
|
-
- !ruby/object:Gem::Version
|
90
|
-
version: '2.0'
|
91
|
-
type: :development
|
92
|
-
prerelease: false
|
93
|
-
version_requirements: !ruby/object:Gem::Requirement
|
94
|
-
requirements:
|
95
|
-
- - "~>"
|
96
|
-
- !ruby/object:Gem::Version
|
97
|
-
version: '2.0'
|
98
84
|
description: ActiveRecord connection adapter for PostGIS. It is based on the stock
|
99
85
|
PostgreSQL adapter, and adds built-in support for the spatial extensions provided
|
100
86
|
by PostGIS. It uses the RGeo library to represent spatial data in Ruby.
|
@@ -111,12 +97,8 @@ files:
|
|
111
97
|
- lib/active_record/connection_adapters/postgis/column_methods.rb
|
112
98
|
- lib/active_record/connection_adapters/postgis/create_connection.rb
|
113
99
|
- lib/active_record/connection_adapters/postgis/database_statements.rb
|
114
|
-
- lib/active_record/connection_adapters/postgis/databases.rake
|
115
100
|
- lib/active_record/connection_adapters/postgis/oid/spatial.rb
|
116
|
-
- lib/active_record/connection_adapters/postgis/postgis_database_tasks.rb
|
117
|
-
- lib/active_record/connection_adapters/postgis/railtie.rb
|
118
101
|
- lib/active_record/connection_adapters/postgis/schema_statements.rb
|
119
|
-
- lib/active_record/connection_adapters/postgis/setup.rb
|
120
102
|
- lib/active_record/connection_adapters/postgis/spatial_column.rb
|
121
103
|
- lib/active_record/connection_adapters/postgis/spatial_column_info.rb
|
122
104
|
- lib/active_record/connection_adapters/postgis/spatial_table_definition.rb
|
@@ -127,7 +109,8 @@ files:
|
|
127
109
|
homepage: http://github.com/rgeo/activerecord-postgis-adapter
|
128
110
|
licenses:
|
129
111
|
- BSD-3-Clause
|
130
|
-
metadata:
|
112
|
+
metadata:
|
113
|
+
rubygems_mfa_required: 'true'
|
131
114
|
post_install_message:
|
132
115
|
rdoc_options: []
|
133
116
|
require_paths:
|
@@ -136,7 +119,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
136
119
|
requirements:
|
137
120
|
- - ">="
|
138
121
|
- !ruby/object:Gem::Version
|
139
|
-
version: 2.
|
122
|
+
version: 2.7.0
|
140
123
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
141
124
|
requirements:
|
142
125
|
- - ">="
|
@@ -1,19 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
namespace :db do
|
4
|
-
namespace :gis do
|
5
|
-
desc 'Setup PostGIS data in the database'
|
6
|
-
task setup: [:load_config] do
|
7
|
-
environments = [Rails.env]
|
8
|
-
environments << 'test' if Rails.env.development?
|
9
|
-
environments.each do |environment|
|
10
|
-
ActiveRecord::Base.configurations
|
11
|
-
.configs_for(env_name: environment)
|
12
|
-
.reject { |env| env.configuration_hash[:database].blank? }
|
13
|
-
.each do |env|
|
14
|
-
ActiveRecord::ConnectionAdapters::PostGIS::PostGISDatabaseTasks.new(env).setup_gis
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
@@ -1,142 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module ActiveRecord # :nodoc:
|
4
|
-
module ConnectionAdapters # :nodoc:
|
5
|
-
module PostGIS # :nodoc:
|
6
|
-
class PostGISDatabaseTasks < ::ActiveRecord::Tasks::PostgreSQLDatabaseTasks # :nodoc:
|
7
|
-
def initialize(db_config)
|
8
|
-
super
|
9
|
-
ensure_installation_configs
|
10
|
-
end
|
11
|
-
|
12
|
-
def setup_gis
|
13
|
-
establish_su_connection
|
14
|
-
if extension_names
|
15
|
-
setup_gis_from_extension
|
16
|
-
end
|
17
|
-
establish_connection(db_config)
|
18
|
-
end
|
19
|
-
|
20
|
-
# Override to set the database owner and call setup_gis
|
21
|
-
def create(master_established = false)
|
22
|
-
establish_master_connection unless master_established
|
23
|
-
extra_configs = { encoding: encoding }
|
24
|
-
extra_configs[:owner] = username if has_su?
|
25
|
-
connection.create_database(db_config.database, configuration_hash.merge(extra_configs))
|
26
|
-
setup_gis
|
27
|
-
rescue ::ActiveRecord::StatementInvalid => error
|
28
|
-
if /database .* already exists/ === error.message
|
29
|
-
raise ::ActiveRecord::DatabaseAlreadyExists
|
30
|
-
else
|
31
|
-
raise
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
private
|
36
|
-
|
37
|
-
# Override to use su_username and su_password
|
38
|
-
def establish_master_connection
|
39
|
-
establish_connection(configuration_hash.merge(
|
40
|
-
database: "postgres",
|
41
|
-
password: su_password,
|
42
|
-
schema_search_path: "public",
|
43
|
-
username: su_username
|
44
|
-
))
|
45
|
-
end
|
46
|
-
|
47
|
-
def establish_su_connection
|
48
|
-
establish_connection(configuration_hash.merge(
|
49
|
-
password: su_password,
|
50
|
-
schema_search_path: "public",
|
51
|
-
username: su_username
|
52
|
-
))
|
53
|
-
end
|
54
|
-
|
55
|
-
def username
|
56
|
-
@username ||= configuration_hash[:username]
|
57
|
-
end
|
58
|
-
|
59
|
-
def quoted_username
|
60
|
-
@quoted_username ||= ::ActiveRecord::Base.connection.quote_column_name(username)
|
61
|
-
end
|
62
|
-
|
63
|
-
def password
|
64
|
-
@password ||= configuration_hash[:password]
|
65
|
-
end
|
66
|
-
|
67
|
-
def su_username
|
68
|
-
@su_username ||= configuration_hash.fetch(:su_username, username)
|
69
|
-
end
|
70
|
-
|
71
|
-
def su_password
|
72
|
-
@su_password ||= configuration_hash.fetch(:su_password, password)
|
73
|
-
end
|
74
|
-
|
75
|
-
def has_su?
|
76
|
-
return @has_su if defined?(@has_su)
|
77
|
-
|
78
|
-
@has_su = configuration_hash.include?(:su_username)
|
79
|
-
end
|
80
|
-
|
81
|
-
def search_path
|
82
|
-
@search_path ||= configuration_hash[:schema_search_path].to_s.strip.split(",").map(&:strip)
|
83
|
-
end
|
84
|
-
|
85
|
-
def extension_names
|
86
|
-
@extension_names ||= begin
|
87
|
-
extensions = configuration_hash[:postgis_extension]
|
88
|
-
case extensions
|
89
|
-
when ::String
|
90
|
-
extensions.split(",")
|
91
|
-
when ::Array
|
92
|
-
extensions
|
93
|
-
else
|
94
|
-
["postgis"]
|
95
|
-
end
|
96
|
-
end
|
97
|
-
end
|
98
|
-
|
99
|
-
def ensure_installation_configs
|
100
|
-
if configuration_hash[:setup] == "default" && !configuration_hash[:postgis_extension]
|
101
|
-
share_dir = `pg_config --sharedir`.strip rescue "/usr/share"
|
102
|
-
control_file = ::File.expand_path("extension/postgis.control", share_dir)
|
103
|
-
if ::File.readable?(control_file)
|
104
|
-
@configuration_hash = configuration_hash.merge(postgis_extension: "postgis").freeze
|
105
|
-
end
|
106
|
-
end
|
107
|
-
end
|
108
|
-
|
109
|
-
def setup_gis_from_extension
|
110
|
-
extension_names.each do |extname|
|
111
|
-
if extname == "postgis_topology"
|
112
|
-
unless search_path.include?("topology")
|
113
|
-
raise ArgumentError, "'topology' must be in schema_search_path for postgis_topology"
|
114
|
-
end
|
115
|
-
connection.execute("CREATE EXTENSION IF NOT EXISTS #{extname} SCHEMA topology")
|
116
|
-
else
|
117
|
-
if (postgis_schema = configuration_hash[:postgis_schema])
|
118
|
-
schema_clause = "WITH SCHEMA #{postgis_schema}"
|
119
|
-
unless schema_exists?(postgis_schema)
|
120
|
-
connection.execute("CREATE SCHEMA #{postgis_schema}")
|
121
|
-
connection.execute("GRANT ALL ON SCHEMA #{postgis_schema} TO PUBLIC")
|
122
|
-
end
|
123
|
-
else
|
124
|
-
schema_clause = ""
|
125
|
-
end
|
126
|
-
|
127
|
-
connection.execute("CREATE EXTENSION IF NOT EXISTS #{extname} #{schema_clause}")
|
128
|
-
end
|
129
|
-
end
|
130
|
-
end
|
131
|
-
|
132
|
-
def schema_exists?(schema_name)
|
133
|
-
connection.execute(
|
134
|
-
"SELECT schema_name FROM information_schema.schemata WHERE schema_name = '#{schema_name}'"
|
135
|
-
).any?
|
136
|
-
end
|
137
|
-
end
|
138
|
-
|
139
|
-
::ActiveRecord::Tasks::DatabaseTasks.register_task(/postgis/, PostGISDatabaseTasks)
|
140
|
-
end
|
141
|
-
end
|
142
|
-
end
|
@@ -1,13 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module ActiveRecord # :nodoc:
|
4
|
-
module ConnectionAdapters # :nodoc:
|
5
|
-
module PostGIS # :nodoc:
|
6
|
-
class Railtie < ::Rails::Railtie # :nodoc:
|
7
|
-
rake_tasks do
|
8
|
-
load "active_record/connection_adapters/postgis/databases.rake"
|
9
|
-
end
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
@@ -1,19 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module ActiveRecord # :nodoc:
|
4
|
-
module ConnectionAdapters # :nodoc:
|
5
|
-
module PostGIS # :nodoc:
|
6
|
-
def self.initial_setup
|
7
|
-
::ActiveRecord::SchemaDumper.ignore_tables |= %w(
|
8
|
-
geography_columns
|
9
|
-
geometry_columns
|
10
|
-
layer
|
11
|
-
raster_columns
|
12
|
-
raster_overviews
|
13
|
-
spatial_ref_sys
|
14
|
-
topology
|
15
|
-
)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|