activerecord-postgis-adapter 6.0.1 → 7.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 978d238ad317f3e43d498f237d63573aa71291fe2485f2b35b0013e829bc0727
4
- data.tar.gz: 2520a77cc0070c3afaa4fdba2d771ba05e9fb569186e35a4e92dd24816f43ae3
3
+ metadata.gz: bb1e1b34ad600caf80e784c5ed95979d2712fe102d7845814d7258cec6605425
4
+ data.tar.gz: 6c9dcf403ec396a9482a9d88a02fd4282d6c9c50fbcc84d2581927f2bbf570d0
5
5
  SHA512:
6
- metadata.gz: 5a9e6472022e69fbaf2d07dd76f98cdf97c440f6009a26ccd59d1b580ca4ff3590b889e0c1afe9addb2f518e88decec6e1107a5b0301c12ce19b9df5e22073ff
7
- data.tar.gz: 102a2b33b86298a52ae3dac860bf75d0531ad32974b914f2e5ebc154d6d22c21c371770d6c649fa6abb7654984c5e3e3d4bdb6cab106ffb0304cd83f15f8e529
6
+ metadata.gz: be97e239ddd7b98c4b96616e456250c2ef624bf33517e02623d69ac1a4f94f64f46ecc1e0bf16afd5c036e36e6b3cba68f872ad261ebce44ef07a3b1661b21b5
7
+ data.tar.gz: 48d54259d8027b81ad8419bef0d66b1f73fa5145df8dd001bab340049b28c331bf7474f3614076b9de2f0626fc80a3da19cd1267519e9857b4f19d93008e416d
@@ -1,5 +1,23 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ module RGeo
4
+ module ActiveRecord
5
+ ##
6
+ # Extend rgeo-activerecord visitors to use PostGIS specific functionality
7
+ module SpatialToPostGISSql
8
+ def visit_in_spatial_context(node, collector)
9
+ # Use ST_GeomFromEWKT for EWKT geometries
10
+ if node.is_a?(String) && node =~ /SRID=[\d+]{0,};/
11
+ collector << "#{st_func('ST_GeomFromEWKT')}(#{quote(node)})"
12
+ else
13
+ super(node, collector)
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ RGeo::ActiveRecord::SpatialToSql.prepend RGeo::ActiveRecord::SpatialToPostGISSql
20
+
3
21
  module Arel # :nodoc:
4
22
  module Visitors # :nodoc:
5
23
  # Different super-class under JRuby JDBC adapter.
@@ -11,22 +29,6 @@ module Arel # :nodoc:
11
29
 
12
30
  class PostGIS < PostGISSuperclass # :nodoc:
13
31
  include RGeo::ActiveRecord::SpatialToSql
14
-
15
- FUNC_MAP = {
16
- "st_wkttosql" => "ST_GeomFromEWKT",
17
- }
18
-
19
- def st_func(standard_name)
20
- FUNC_MAP[standard_name.downcase] || standard_name
21
- end
22
-
23
- def visit_String(node, collector)
24
- collector << "#{st_func('ST_WKTToSQL')}(#{quote(node)})"
25
- end
26
-
27
- def visit_RGeo_ActiveRecord_SpatialNamedFunction(node, collector)
28
- aggregate(st_func(node.name), node, collector)
29
- end
30
32
  end
31
33
  end
32
34
  end
@@ -23,9 +23,7 @@ module ActiveRecord # :nodoc:
23
23
  # https://github.com/rails/rails/blob/master/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb
24
24
  # FULL REPLACEMENT because we need to create a different class.
25
25
  def postgis_connection(config)
26
- conn_params = config.symbolize_keys
27
-
28
- conn_params.delete_if { |_, v| v.nil? }
26
+ conn_params = config.symbolize_keys.compact
29
27
 
30
28
  # Map ActiveRecords param names to PGs.
31
29
  conn_params[:user] = conn_params.delete(:username) if conn_params[:username]
@@ -35,14 +33,12 @@ module ActiveRecord # :nodoc:
35
33
  valid_conn_param_keys = PG::Connection.conndefaults_hash.keys + [:requiressl]
36
34
  conn_params.slice!(*valid_conn_param_keys)
37
35
 
38
- conn = PG.connect(conn_params)
39
- ConnectionAdapters::PostGISAdapter.new(conn, logger, conn_params, config)
40
- rescue ::PG::Error => error
41
- if error.message.include?(conn_params[:dbname])
42
- raise ActiveRecord::NoDatabaseError
43
- else
44
- raise
45
- end
36
+ ConnectionAdapters::PostGISAdapter.new(
37
+ ConnectionAdapters::PostGISAdapter.new_client(conn_params),
38
+ logger,
39
+ conn_params,
40
+ config
41
+ )
46
42
  end
47
43
 
48
44
  end
@@ -49,11 +49,7 @@ module ActiveRecord
49
49
  def spatial_factory
50
50
  @spatial_factory ||=
51
51
  RGeo::ActiveRecord::SpatialFactoryStore.instance.factory(
52
- geo_type: @geo_type,
53
- has_m: @has_m,
54
- has_z: @has_z,
55
- sql_type: @sql_type,
56
- srid: @srid
52
+ factory_attrs
57
53
  )
58
54
  end
59
55
 
@@ -107,6 +103,16 @@ module ActiveRecord
107
103
  RGeo::WKRep::WKTParser.new(spatial_factory, support_ewkt: true, default_srid: @srid)
108
104
  end
109
105
  end
106
+
107
+ def factory_attrs
108
+ {
109
+ geo_type: @geo_type.underscore,
110
+ has_m: @has_m,
111
+ has_z: @has_z,
112
+ srid: @srid,
113
+ sql_type: type.to_s
114
+ }
115
+ end
110
116
  end
111
117
  end
112
118
  end
@@ -4,7 +4,7 @@ module ActiveRecord # :nodoc:
4
4
  module ConnectionAdapters # :nodoc:
5
5
  module PostGIS # :nodoc:
6
6
  class PostGISDatabaseTasks < ::ActiveRecord::Tasks::PostgreSQLDatabaseTasks # :nodoc:
7
- def initialize(config)
7
+ def initialize(db_config)
8
8
  super
9
9
  ensure_installation_configs
10
10
  end
@@ -14,19 +14,19 @@ module ActiveRecord # :nodoc:
14
14
  if extension_names
15
15
  setup_gis_from_extension
16
16
  end
17
- establish_connection(configuration)
17
+ establish_connection(db_config)
18
18
  end
19
19
 
20
20
  # Override to set the database owner and call setup_gis
21
21
  def create(master_established = false)
22
22
  establish_master_connection unless master_established
23
- extra_configs = { "encoding" => encoding }
24
- extra_configs["owner"] = username if has_su?
25
- connection.create_database(configuration["database"], configuration.merge(extra_configs))
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
26
  setup_gis
27
27
  rescue ::ActiveRecord::StatementInvalid => error
28
28
  if /database .* already exists/ === error.message
29
- raise ::ActiveRecord::Tasks::DatabaseAlreadyExists
29
+ raise ::ActiveRecord::DatabaseAlreadyExists
30
30
  else
31
31
  raise
32
32
  end
@@ -36,24 +36,24 @@ module ActiveRecord # :nodoc:
36
36
 
37
37
  # Override to use su_username and su_password
38
38
  def establish_master_connection
39
- establish_connection(configuration.merge(
40
- "database" => "postgres",
41
- "password" => su_password,
42
- "schema_search_path" => "public",
43
- "username" => su_username
39
+ establish_connection(configuration_hash.merge(
40
+ database: "postgres",
41
+ password: su_password,
42
+ schema_search_path: "public",
43
+ username: su_username
44
44
  ))
45
45
  end
46
46
 
47
47
  def establish_su_connection
48
- establish_connection(configuration.merge(
49
- "password" => su_password,
50
- "schema_search_path" => "public",
51
- "username" => su_username
48
+ establish_connection(configuration_hash.merge(
49
+ password: su_password,
50
+ schema_search_path: "public",
51
+ username: su_username
52
52
  ))
53
53
  end
54
54
 
55
55
  def username
56
- @username ||= configuration["username"]
56
+ @username ||= configuration_hash[:username]
57
57
  end
58
58
 
59
59
  def quoted_username
@@ -61,29 +61,30 @@ module ActiveRecord # :nodoc:
61
61
  end
62
62
 
63
63
  def password
64
- @password ||= configuration["password"]
64
+ @password ||= configuration_hash[:password]
65
65
  end
66
66
 
67
67
  def su_username
68
- @su_username ||= configuration["su_username"] || username
68
+ @su_username ||= configuration_hash.fetch(:su_username, username)
69
69
  end
70
70
 
71
71
  def su_password
72
- @su_password ||= configuration["su_password"] || password
72
+ @su_password ||= configuration_hash.fetch(:su_password, password)
73
73
  end
74
74
 
75
75
  def has_su?
76
- @has_su = configuration.include?("su_username") unless defined?(@has_su)
77
- @has_su
76
+ return @has_su if defined?(@has_su)
77
+
78
+ @has_su = configuration_hash.include?(:su_username)
78
79
  end
79
80
 
80
81
  def search_path
81
- @search_path ||= configuration["schema_search_path"].to_s.strip.split(",").map(&:strip)
82
+ @search_path ||= configuration_hash[:schema_search_path].to_s.strip.split(",").map(&:strip)
82
83
  end
83
84
 
84
85
  def extension_names
85
86
  @extension_names ||= begin
86
- extensions = configuration["postgis_extension"]
87
+ extensions = configuration_hash[:postgis_extension]
87
88
  case extensions
88
89
  when ::String
89
90
  extensions.split(",")
@@ -96,11 +97,11 @@ module ActiveRecord # :nodoc:
96
97
  end
97
98
 
98
99
  def ensure_installation_configs
99
- if configuration["setup"] == "default" && !configuration["postgis_extension"]
100
+ if configuration_hash[:setup] == "default" && !configuration_hash[:postgis_extension]
100
101
  share_dir = `pg_config --sharedir`.strip rescue "/usr/share"
101
102
  control_file = ::File.expand_path("extension/postgis.control", share_dir)
102
103
  if ::File.readable?(control_file)
103
- configuration["postgis_extension"] = "postgis"
104
+ @configuration_hash = configuration_hash.merge(postgis_extension: "postgis").freeze
104
105
  end
105
106
  end
106
107
  end
@@ -113,7 +114,7 @@ module ActiveRecord # :nodoc:
113
114
  end
114
115
  connection.execute("CREATE EXTENSION IF NOT EXISTS #{extname} SCHEMA topology")
115
116
  else
116
- if (postgis_schema = configuration["postgis_schema"])
117
+ if (postgis_schema = configuration_hash[:postgis_schema])
117
118
  schema_clause = "WITH SCHEMA #{postgis_schema}"
118
119
  unless schema_exists?(postgis_schema)
119
120
  connection.execute("CREATE SCHEMA #{postgis_schema}")
@@ -3,7 +3,7 @@
3
3
  module ActiveRecord
4
4
  module ConnectionAdapters
5
5
  module PostGIS
6
- VERSION = "6.0.1"
6
+ VERSION = "7.0.0"
7
7
  end
8
8
  end
9
9
  end
@@ -7,13 +7,7 @@
7
7
 
8
8
  require "rgeo/active_record"
9
9
 
10
- # autoload AbstractAdapter to avoid circular require and void context warnings
11
- module ActiveRecord
12
- module ConnectionAdapters
13
- AbstractAdapter
14
- end
15
- end
16
-
10
+ require "active_record/connection_adapters"
17
11
  require "active_record/connection_adapters/postgresql_adapter"
18
12
  require "active_record/connection_adapters/postgis/version"
19
13
  require "active_record/connection_adapters/postgis/column_methods"
metadata CHANGED
@@ -1,14 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activerecord-postgis-adapter
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.0.1
4
+ version: 7.0.0
5
5
  platform: ruby
6
6
  authors:
7
- - Daniel Azuma, Tee Parham
7
+ - Daniel Azuma
8
+ - Tee Parham
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2020-08-16 00:00:00.000000000 Z
12
+ date: 2021-01-05 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: activerecord
@@ -16,28 +17,28 @@ dependencies:
16
17
  requirements:
17
18
  - - "~>"
18
19
  - !ruby/object:Gem::Version
19
- version: '6.0'
20
+ version: '6.1'
20
21
  type: :runtime
21
22
  prerelease: false
22
23
  version_requirements: !ruby/object:Gem::Requirement
23
24
  requirements:
24
25
  - - "~>"
25
26
  - !ruby/object:Gem::Version
26
- version: '6.0'
27
+ version: '6.1'
27
28
  - !ruby/object:Gem::Dependency
28
29
  name: rgeo-activerecord
29
30
  requirement: !ruby/object:Gem::Requirement
30
31
  requirements:
31
32
  - - "~>"
32
33
  - !ruby/object:Gem::Version
33
- version: '6.0'
34
+ version: 7.0.0
34
35
  type: :runtime
35
36
  prerelease: false
36
37
  version_requirements: !ruby/object:Gem::Requirement
37
38
  requirements:
38
39
  - - "~>"
39
40
  - !ruby/object:Gem::Version
40
- version: '6.0'
41
+ version: 7.0.0
41
42
  - !ruby/object:Gem::Dependency
42
43
  name: rake
43
44
  requirement: !ruby/object:Gem::Requirement
@@ -97,7 +98,10 @@ dependencies:
97
98
  description: ActiveRecord connection adapter for PostGIS. It is based on the stock
98
99
  PostgreSQL adapter, and adds built-in support for the spatial extensions provided
99
100
  by PostGIS. It uses the RGeo library to represent spatial data in Ruby.
100
- email: dazuma@gmail.com, parhameter@gmail.com
101
+ email:
102
+ - dazuma@gmail.com
103
+ - parhameter@gmail.com
104
+ - kfdoggett@gmail.com
101
105
  executables: []
102
106
  extensions: []
103
107
  extra_rdoc_files: []
@@ -120,7 +124,7 @@ files:
120
124
  - lib/activerecord-postgis-adapter.rb
121
125
  homepage: http://github.com/rgeo/activerecord-postgis-adapter
122
126
  licenses:
123
- - BSD
127
+ - BSD-3-Clause
124
128
  metadata: {}
125
129
  post_install_message:
126
130
  rdoc_options: []
@@ -137,7 +141,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
137
141
  - !ruby/object:Gem::Version
138
142
  version: '0'
139
143
  requirements: []
140
- rubygems_version: 3.1.2
144
+ rubygems_version: 3.0.8
141
145
  signing_key:
142
146
  specification_version: 4
143
147
  summary: ActiveRecord adapter for PostGIS, based on RGeo.