activerecord-postgis-adapter 7.0.1 → 7.1.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: 0ca517c070d542c846f7bbba2e01c0767d51bc796f63cc97dea7a6c0c93af2de
4
- data.tar.gz: e1f44ef4078302a420dc27582a1ae5e4ff768591f9879ad9ba91bb288e9016df
3
+ metadata.gz: fcaaf2a57395c122e6541b1e40bd416f5f31fd1e512c250e5222ec5bb3feb650
4
+ data.tar.gz: 2772452b3ea880ecab759cb5add73d2ed22a89a78e12eae087aff60a061a8f20
5
5
  SHA512:
6
- metadata.gz: 1333881d9758c1b0d1bf4de5ffb24ddd6a3c10d38edab2063ab20ef994ba9f80bd05a5e949ecc254ce210eaef8ff46a5b2ebf310e7282eb88bbe2719867e852e
7
- data.tar.gz: 35876e4747fc87bf5e27b36c354e3c47c20cf81b4dd51daee3369ed290115a71dc297c1d5a07cc4f83637995a3ae2c1b73feeb86e107b4450997f9ff7215243c
6
+ metadata.gz: 743b335ad32f5d872eebd7c512d7557102ed137664e4336a8c26154fe5f3b2bc3ded2b8e0ebe73195e05e8bb9affb538f7dde93e2aa095b142078e464c2fed98
7
+ data.tar.gz: 8cfc035141871044857863337a94f4c854423afc784f305853cd1a838dde14ec729a941c50a14edc5841829e8c21ce8c4f04c1826611ecb853d8239fb95401f4
@@ -10,7 +10,11 @@ module ActiveRecord # :nodoc:
10
10
  module ConnectionHandling # :nodoc:
11
11
  if RUBY_ENGINE == "jruby"
12
12
 
13
+ # modified from https://github.com/jruby/activerecord-jdbc-adapter/blob/master/lib/arjdbc/postgresql/connection_methods.rb#L3
13
14
  def postgis_connection(config)
15
+ config = config.deep_dup
16
+ config = symbolize_keys_if_necessary(config)
17
+
14
18
  config[:adapter_class] = ConnectionAdapters::PostGISAdapter
15
19
  postgresql_connection(config)
16
20
  end
@@ -9,7 +9,7 @@ namespace :db do
9
9
  environments.each do |environment|
10
10
  ActiveRecord::Base.configurations
11
11
  .configs_for(env_name: environment)
12
- .reject { |env| env.configuration_hash['database'].blank? }
12
+ .reject { |env| env.configuration_hash[:database].blank? }
13
13
  .each do |env|
14
14
  ActiveRecord::ConnectionAdapters::PostGIS::PostGISDatabaseTasks.new(env).setup_gis
15
15
  end
@@ -4,16 +4,17 @@ module ActiveRecord
4
4
  module ConnectionAdapters
5
5
  module PostGIS
6
6
  module OID
7
+ # OID used to represent geometry/geography database types and attributes.
8
+ #
9
+ # Accepts `geo_type`, `srid`, `has_z`, `has_m`, and `geographic` as parameters.
10
+ # Responsible for parsing sql_types returned from the database and WKT features.
7
11
  class Spatial < Type::Value
8
- # sql_type is a string that comes from the database definition
9
- # examples:
10
- # "geometry(Point,4326)"
11
- # "geography(Point,4326)"
12
- # "geometry(Polygon,4326) NOT NULL"
13
- # "geometry(Geography,4326)"
14
- def initialize(oid, sql_type)
15
- @sql_type = sql_type
16
- @geo_type, @srid, @has_z, @has_m = self.class.parse_sql_type(sql_type)
12
+ def initialize(geo_type: 'geometry', srid: 0, has_z: false, has_m: false, geographic: false)
13
+ @geo_type = geo_type
14
+ @srid = srid
15
+ @has_z = has_z
16
+ @has_m = has_m
17
+ @geographic = geographic
17
18
  end
18
19
 
19
20
  # sql_type: geometry, geometry(Point), geometry(Point,4326), ...
@@ -43,7 +44,9 @@ module ActiveRecord
43
44
  # otherType(a,b)
44
45
  geo_type = sql_type
45
46
  end
46
- [geo_type, srid, has_z, has_m]
47
+ geographic = sql_type.match?(/geography/)
48
+
49
+ [geo_type, srid, has_z, has_m, geographic]
47
50
  end
48
51
 
49
52
  def spatial_factory
@@ -53,16 +56,12 @@ module ActiveRecord
53
56
  )
54
57
  end
55
58
 
56
- def geographic?
57
- @sql_type =~ /geography/
58
- end
59
-
60
59
  def spatial?
61
60
  true
62
61
  end
63
62
 
64
63
  def type
65
- geographic? ? :geography : :geometry
64
+ @geographic ? :geography : :geometry
66
65
  end
67
66
 
68
67
  # support setting an RGeo object or a WKT string
@@ -96,8 +96,15 @@ module ActiveRecord
96
96
  st_point
97
97
  st_polygon
98
98
  ).each do |geo_type|
99
- map.register_type(geo_type) do |oid, _, sql_type|
100
- OID::Spatial.new(oid, sql_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)
101
108
  end
102
109
  end
103
110
 
@@ -67,7 +67,7 @@ module ActiveRecord # :nodoc:
67
67
  end
68
68
 
69
69
  def build_from_sql_type(sql_type)
70
- geo_type, @srid, @has_z, @has_m = OID::Spatial.parse_sql_type(sql_type)
70
+ geo_type, @srid, @has_z, @has_m, @geographic = OID::Spatial.parse_sql_type(sql_type)
71
71
  set_geometric_type_from_name(geo_type)
72
72
  end
73
73
 
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ActiveRecord
4
+ module ConnectionAdapters
5
+ module PostGIS
6
+ module Type
7
+ # Look for :postgis types first, then check for :postgresql
8
+ # types to simulate a kind of Type inheritance.
9
+ def lookup(*args, adapter: current_adapter_name, **kwargs)
10
+ super(*args, adapter: adapter, **kwargs)
11
+ rescue ArgumentError => e
12
+ raise e unless current_adapter_name == :postgis
13
+
14
+ super(*args, adapter: :postgresql, **kwargs)
15
+ end
16
+ end
17
+ end
18
+ end
19
+
20
+ # Type uses `class << self` syntax so we have to prepend to the singleton_class
21
+ Type.singleton_class.prepend(ActiveRecord::ConnectionAdapters::PostGIS::Type)
22
+ end
@@ -3,7 +3,7 @@
3
3
  module ActiveRecord
4
4
  module ConnectionAdapters
5
5
  module PostGIS
6
- VERSION = "7.0.1"
6
+ VERSION = "7.1.0"
7
7
  end
8
8
  end
9
9
  end
@@ -18,6 +18,7 @@ require "active_record/connection_adapters/postgis/spatial_column"
18
18
  require "active_record/connection_adapters/postgis/arel_tosql"
19
19
  require "active_record/connection_adapters/postgis/setup"
20
20
  require "active_record/connection_adapters/postgis/oid/spatial"
21
+ require "active_record/connection_adapters/postgis/type" # has to be after oid/*
21
22
  require "active_record/connection_adapters/postgis/create_connection"
22
23
  require "active_record/connection_adapters/postgis/postgis_database_tasks"
23
24
 
@@ -32,7 +33,7 @@ end
32
33
  module ActiveRecord
33
34
  module ConnectionAdapters
34
35
  class PostGISAdapter < PostgreSQLAdapter
35
- ADAPTER_NAME = 'PostGIS'.freeze
36
+ ADAPTER_NAME = 'PostGIS'
36
37
 
37
38
  SPATIAL_COLUMN_OPTIONS =
38
39
  {
@@ -87,6 +88,39 @@ module ActiveRecord
87
88
  super
88
89
  end
89
90
  end
91
+
92
+ # PostGIS specific types
93
+ [
94
+ :geography,
95
+ :geometry,
96
+ :geometry_collection,
97
+ :line_string,
98
+ :multi_line_string,
99
+ :multi_point,
100
+ :multi_polygon,
101
+ :st_point,
102
+ :st_polygon,
103
+ ].each do |geo_type|
104
+ ActiveRecord::Type.register(geo_type, PostGIS::OID::Spatial, adapter: :postgis)
105
+ end
106
+ end
107
+ end
108
+ end
109
+
110
+ # if using JRUBY, create ArJdbc::PostGIS module
111
+ # and prepend it to the PostgreSQL adapter since
112
+ # it is the default adapter_spec.
113
+ # see: https://github.com/jruby/activerecord-jdbc-adapter/blob/master/lib/arjdbc/postgresql/adapter.rb#27
114
+ if RUBY_ENGINE == "jruby"
115
+ module ArJdbc
116
+ module PostGIS
117
+ ADAPTER_NAME = 'PostGIS'
118
+
119
+ def adapter_name
120
+ ADAPTER_NAME
121
+ end
90
122
  end
91
123
  end
124
+
125
+ ArJdbc::PostgreSQL.prepend(ArJdbc::PostGIS)
92
126
  end
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: 7.0.1
4
+ version: 7.1.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: 2021-01-13 00:00:00.000000000 Z
12
+ date: 2021-03-28 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activerecord
@@ -119,6 +119,7 @@ files:
119
119
  - lib/active_record/connection_adapters/postgis/spatial_column.rb
120
120
  - lib/active_record/connection_adapters/postgis/spatial_column_info.rb
121
121
  - lib/active_record/connection_adapters/postgis/spatial_table_definition.rb
122
+ - lib/active_record/connection_adapters/postgis/type.rb
122
123
  - lib/active_record/connection_adapters/postgis/version.rb
123
124
  - lib/active_record/connection_adapters/postgis_adapter.rb
124
125
  - lib/activerecord-postgis-adapter.rb