activerecord-postgis-adapter 7.0.1 → 7.1.0

Sign up to get free protection for your applications and to get access to all the features.
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