From e5b834014ff9c89a07c1548671f9a1460b383497 Mon Sep 17 00:00:00 2001 From: Abdelkader Boudih Date: Sun, 17 Sep 2023 17:46:53 +0100 Subject: [PATCH 1/4] support rails 7.1.beta1 --- .github/workflows/tests.yml | 2 +- .gitignore | 1 + Gemfile | 2 -- activerecord-postgis-adapter.gemspec | 4 ++-- .../postgis/column_methods.rb | 6 +++++ .../postgis/oid/spatial.rb | 5 +++- .../postgis/schema_statements.rb | 4 ++-- .../postgis/spatial_table_definition.rb | 10 ++++---- .../connection_adapters/postgis/version.rb | 2 +- .../connection_adapters/postgis_adapter.rb | 24 +++++++++---------- lib/activerecord-postgis-adapter.rb | 2 +- test/cases/setup_test.rb | 4 ++-- test/test_helper.rb | 1 - 13 files changed, 37 insertions(+), 30 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 6c596dd2..8a66dfd0 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -31,7 +31,7 @@ jobs: pg: [11-3.0, 12-master, 13-master, 14-master, 15-master] steps: - name: Set Up Actions - uses: actions/checkout@v2 + uses: actions/checkout@v4 - name: Install GEOS run: sudo apt-get install libgeos-dev - name: Set Up Ruby diff --git a/.gitignore b/.gitignore index c39dc6ab..8c30272b 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,4 @@ Gemfile.lock .idea debug.log /test/db/* +.env diff --git a/Gemfile b/Gemfile index ce972f08..e5b1ac54 100644 --- a/Gemfile +++ b/Gemfile @@ -33,10 +33,8 @@ end # Need to install for tests gem "rails", github: "rails/rails", tag: "v#{activerecord_version}" - group :development do # Gems used by the ActiveRecord test suite gem "bcrypt" gem "mocha" - gem "sqlite3" end diff --git a/activerecord-postgis-adapter.gemspec b/activerecord-postgis-adapter.gemspec index 0c9a8b6e..e5a7d331 100644 --- a/activerecord-postgis-adapter.gemspec +++ b/activerecord-postgis-adapter.gemspec @@ -19,13 +19,13 @@ Gem::Specification.new do |spec| spec.required_ruby_version = ">= 2.7.0" - spec.add_dependency "activerecord", "~> 7.0.0" + spec.add_dependency "activerecord", "~> 7.1.beta1" spec.add_dependency "rgeo-activerecord", "~> 7.0.0" spec.add_development_dependency "rake", "~> 13.0" spec.add_development_dependency "minitest", "~> 5.4" spec.add_development_dependency "mocha", "~> 1.1" - spec.add_development_dependency "benchmark-ips", "~> 2.9.1" + spec.add_development_dependency "benchmark-ips", "~> 2.12" spec.add_development_dependency "rubocop", "~> 1.50" spec.metadata = { diff --git a/lib/active_record/connection_adapters/postgis/column_methods.rb b/lib/active_record/connection_adapters/postgis/column_methods.rb index bef9a0ac..559294bc 100644 --- a/lib/active_record/connection_adapters/postgis/column_methods.rb +++ b/lib/active_record/connection_adapters/postgis/column_methods.rb @@ -4,6 +4,7 @@ module ActiveRecord module ConnectionAdapters module PostGIS module ColumnMethods + def spatial(name, options = {}) raise "You must set a type. For example: 't.spatial type: :st_point'" unless options[:type] column(name, options[:type], **options) @@ -44,6 +45,11 @@ def st_point(name, options = {}) def st_polygon(name, options = {}) column(name, :st_polygon, **options) end + + private + def valid_column_definition_options + super + [:srid, :has_z, :has_m, :geographic, :spatial_type] + end end end diff --git a/lib/active_record/connection_adapters/postgis/oid/spatial.rb b/lib/active_record/connection_adapters/postgis/oid/spatial.rb index 9a292cae..46ed619f 100644 --- a/lib/active_record/connection_adapters/postgis/oid/spatial.rb +++ b/lib/active_record/connection_adapters/postgis/oid/spatial.rb @@ -25,7 +25,10 @@ def initialize(geo_type: "geometry", srid: 0, has_z: false, has_m: false, geogra # has_z: false # has_m: false def self.parse_sql_type(sql_type) - geo_type, srid, has_z, has_m = nil, 0, false, false + geo_type = nil + srid = 0 + has_z = false + has_m = false if sql_type =~ /(geography|geometry)\((.*)\)$/i # geometry(Point) diff --git a/lib/active_record/connection_adapters/postgis/schema_statements.rb b/lib/active_record/connection_adapters/postgis/schema_statements.rb index 4e092997..7bc0894d 100644 --- a/lib/active_record/connection_adapters/postgis/schema_statements.rb +++ b/lib/active_record/connection_adapters/postgis/schema_statements.rb @@ -7,13 +7,13 @@ module SchemaStatements # override # https://github.com/rails/rails/blob/7-0-stable/activerecord/lib/active_record/connection_adapters/postgresql/schema_statements.rb#L662 # Create a SpatialColumn instead of a PostgreSQL::Column - def new_column_from_field(table_name, field) + def new_column_from_field(table_name, field, _definitions) column_name, type, default, notnull, oid, fmod, collation, comment, attgenerated = field type_metadata = fetch_type_metadata(column_name, type, oid.to_i, fmod.to_i) default_value = extract_value_from_default(default) default_function = extract_default_function(default_value, default) - if match = default_function&.match(/\Anextval\('"?(?.+_(?seq\d*))"?'::regclass\)\z/) + if (match = default_function&.match(/\Anextval\('"?(?.+_(?seq\d*))"?'::regclass\)\z/)) serial = sequence_name_from_parts(table_name, column_name, match[:suffix]) == match[:sequence_name] end diff --git a/lib/active_record/connection_adapters/postgis/spatial_table_definition.rb b/lib/active_record/connection_adapters/postgis/spatial_table_definition.rb index 606a980e..6842f5b4 100644 --- a/lib/active_record/connection_adapters/postgis/spatial_table_definition.rb +++ b/lib/active_record/connection_adapters/postgis/spatial_table_definition.rb @@ -43,11 +43,11 @@ def geo_type(type = "GEOMETRY") end def limit_from_options(type, options = {}) - spatial_type = geo_type(type) - spatial_type << "Z" if options[:has_z] - spatial_type << "M" if options[:has_m] - spatial_type << ",#{options[:srid] || default_srid(options)}" - spatial_type + has_z = options[:has_z] ? 'Z' : '' + has_m = options[:has_m] ? 'M' : '' + srid = options[:srid] || default_srid(options) + field_type = [geo_type(type), has_z, has_m].compact.join + "#{field_type},#{srid}" end def default_srid(options) diff --git a/lib/active_record/connection_adapters/postgis/version.rb b/lib/active_record/connection_adapters/postgis/version.rb index aa8b9db4..671fa6a5 100644 --- a/lib/active_record/connection_adapters/postgis/version.rb +++ b/lib/active_record/connection_adapters/postgis/version.rb @@ -3,7 +3,7 @@ module ActiveRecord module ConnectionAdapters module PostGIS - VERSION = "8.0.2" + VERSION = "9.0.0" end end end diff --git a/lib/active_record/connection_adapters/postgis_adapter.rb b/lib/active_record/connection_adapters/postgis_adapter.rb index 125ab7e1..13ccab7f 100644 --- a/lib/active_record/connection_adapters/postgis_adapter.rb +++ b/lib/active_record/connection_adapters/postgis_adapter.rb @@ -9,18 +9,18 @@ require "active_record/connection_adapters" require "active_record/connection_adapters/postgresql_adapter" -require "active_record/connection_adapters/postgis/version" -require "active_record/connection_adapters/postgis/column_methods" -require "active_record/connection_adapters/postgis/schema_statements" -require "active_record/connection_adapters/postgis/database_statements" -require "active_record/connection_adapters/postgis/spatial_column_info" -require "active_record/connection_adapters/postgis/spatial_table_definition" -require "active_record/connection_adapters/postgis/spatial_column" -require "active_record/connection_adapters/postgis/arel_tosql" -require "active_record/connection_adapters/postgis/oid/spatial" -require "active_record/connection_adapters/postgis/oid/date_time" -require "active_record/connection_adapters/postgis/type" # has to be after oid/* -require "active_record/connection_adapters/postgis/create_connection" +require_relative "postgis/version" +require_relative "postgis/column_methods" +require_relative "postgis/schema_statements" +require_relative "postgis/database_statements" +require_relative "postgis/spatial_column_info" +require_relative "postgis/spatial_table_definition" +require_relative "postgis/spatial_column" +require_relative "postgis/arel_tosql" +require_relative "postgis/oid/spatial" +require_relative "postgis/oid/date_time" +require_relative "postgis/type" # has to be after oid/* +require_relative "postgis/create_connection" # :startdoc: module ActiveRecord diff --git a/lib/activerecord-postgis-adapter.rb b/lib/activerecord-postgis-adapter.rb index 8e6d27b4..edcac15f 100644 --- a/lib/activerecord-postgis-adapter.rb +++ b/lib/activerecord-postgis-adapter.rb @@ -1,3 +1,3 @@ # frozen_string_literal: true -require "active_record/connection_adapters/postgis_adapter" +require_relative "active_record/connection_adapters/postgis_adapter" diff --git a/test/cases/setup_test.rb b/test/cases/setup_test.rb index a28fc421..e7fe33ff 100644 --- a/test/cases/setup_test.rb +++ b/test/cases/setup_test.rb @@ -5,7 +5,7 @@ module PostGIS class SpatialQueriesTest < ActiveSupport::TestCase def test_ignore_tables - expect_to_ignore = %w( + expect_to_ignore = %w[ geography_columns geometry_columns layer @@ -13,7 +13,7 @@ def test_ignore_tables raster_overviews spatial_ref_sys topology - ) + ] assert_equal expect_to_ignore, ::ActiveRecord::SchemaDumper.ignore_tables end end diff --git a/test/test_helper.rb b/test/test_helper.rb index dda8837b..db3a6620 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -2,7 +2,6 @@ require "bundler/setup" Bundler.require :development - require "minitest/autorun" require "minitest/pride" require "mocha/minitest" From 4eaf00642c6924945096c426aa005305d34b6a45 Mon Sep 17 00:00:00 2001 From: Abdelkader Boudih Date: Sun, 1 Oct 2023 19:24:31 +0100 Subject: [PATCH 2/4] Update .gitignore --- .gitignore | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitignore b/.gitignore index 8c30272b..c39dc6ab 100644 --- a/.gitignore +++ b/.gitignore @@ -10,4 +10,3 @@ Gemfile.lock .idea debug.log /test/db/* -.env From 038fd2cbf446d8657bd36248781050928f961e54 Mon Sep 17 00:00:00 2001 From: Abdelkader Boudih Date: Sun, 1 Oct 2023 19:36:12 +0100 Subject: [PATCH 3/4] Update version.rb --- lib/active_record/connection_adapters/postgis/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/active_record/connection_adapters/postgis/version.rb b/lib/active_record/connection_adapters/postgis/version.rb index 671fa6a5..aa8b9db4 100644 --- a/lib/active_record/connection_adapters/postgis/version.rb +++ b/lib/active_record/connection_adapters/postgis/version.rb @@ -3,7 +3,7 @@ module ActiveRecord module ConnectionAdapters module PostGIS - VERSION = "9.0.0" + VERSION = "8.0.2" end end end From e5abf62638c9ac2051c8545669a63f66b49329fb Mon Sep 17 00:00:00 2001 From: Abdelkader Boudih Date: Fri, 6 Oct 2023 11:55:50 +0100 Subject: [PATCH 4/4] update to use 7.1.0 version of rails --- activerecord-postgis-adapter.gemspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/activerecord-postgis-adapter.gemspec b/activerecord-postgis-adapter.gemspec index e5a7d331..8efe5193 100644 --- a/activerecord-postgis-adapter.gemspec +++ b/activerecord-postgis-adapter.gemspec @@ -19,7 +19,7 @@ Gem::Specification.new do |spec| spec.required_ruby_version = ">= 2.7.0" - spec.add_dependency "activerecord", "~> 7.1.beta1" + spec.add_dependency "activerecord", "~> 7.1.0" spec.add_dependency "rgeo-activerecord", "~> 7.0.0" spec.add_development_dependency "rake", "~> 13.0"