Module: ActiveRecord::ConnectionAdapters::PostGIS
- Defined in:
- lib/active_record/connection_adapters/postgis.rb,
lib/active_record/connection_adapters/postgis/quoting.rb,
lib/active_record/connection_adapters/postgis/version.rb,
lib/active_record/connection_adapters/postgis/constants.rb,
lib/active_record/connection_adapters/postgis/type/point.rb,
lib/active_record/connection_adapters/postgis/oid/spatial.rb,
lib/active_record/connection_adapters/postgis/test_helpers.rb,
lib/active_record/connection_adapters/postgis/type/polygon.rb,
lib/active_record/connection_adapters/postgis/type/spatial.rb,
lib/active_record/connection_adapters/postgis/schema_dumper.rb,
lib/active_record/connection_adapters/postgis/type/geometry.rb,
lib/active_record/connection_adapters/postgis/column_methods.rb,
lib/active_record/connection_adapters/postgis/type/geography.rb,
lib/active_record/connection_adapters/postgis/table_definition.rb,
lib/active_record/connection_adapters/postgis/type/line_string.rb,
lib/active_record/connection_adapters/postgis/type/multi_point.rb,
lib/active_record/connection_adapters/postgis/column_extensions.rb,
lib/active_record/connection_adapters/postgis/oid/spatial_types.rb,
lib/active_record/connection_adapters/postgis/schema_statements.rb,
lib/active_record/connection_adapters/postgis/adapter_extensions.rb,
lib/active_record/connection_adapters/postgis/type/multi_polygon.rb,
lib/active_record/connection_adapters/postgis/spatial_column_type.rb,
lib/active_record/connection_adapters/postgis/spatial_column_methods.rb,
lib/active_record/connection_adapters/postgis/type/multi_line_string.rb,
lib/active_record/connection_adapters/postgis/type/geometry_collection.rb
Defined Under Namespace
Modules: AdapterExtensions, ColumnDefinitionUtils, ColumnExtensions, ColumnMethods, OID, Quoting, RegisterTypes, SchemaDumper, SchemaStatements, SpatialColumnMethods, TableDefinition, TestHelpers, Type Classes: Error, SpatialColumnAssertion, SpatialColumnType, SpatialTableDefinition
Constant Summary collapse
- SPATIAL_TYPES_FOR_REGISTRATION =
%i[ st_geography st_geometry st_geometry_collection st_line_string st_multi_line_string st_multi_point st_multi_polygon st_point st_polygon line_string ].freeze
- SPATIAL_OPTIONS_FOR_REGISTRATION =
%i[srid has_z has_m geographic].freeze
- VERSION =
"0.3.1"
- SPATIAL_TYPES =
%i[ geometry geography point line_string polygon multi_point multi_line_string multi_polygon geometry_collection ].freeze
- GEOMETRIC_TYPES =
%i[ st_geography st_geometry st_geometry_collection st_line_string st_multi_line_string st_multi_point st_multi_polygon st_point st_polygon ].freeze
- VALID_TYPES =
%w[ point line_string polygon multi_point multi_line_string multi_polygon geometry_collection geography ].freeze
Class Method Summary collapse
Class Method Details
.initialize! ⇒ Object
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 |
# File 'lib/active_record/connection_adapters/postgis.rb', line 36 def self.initialize! return if @initialized @initialized = true # Extend PostgreSQL Column class with spatial functionality PostgreSQL::Column.include(ColumnExtensions) # Add spatial object quoting support PostgreSQLAdapter.prepend(Quoting) # Allow PostGIS specific options in table definitions # The `define_column_methods` call already makes these available on the `TableDefinition` instance. # The issue might be deeper in how schema.rb is processed or how options are validated. # Let's ensure that the column methods are defined *before* any schema loading that might trigger validation. PostgreSQL::Table.include( PostGIS::TableDefinition ) # Using st_* prefix to avoid conflicts with PostgreSQL native geometric types PostgreSQLAdapter::NATIVE_DATABASE_TYPES[:st_geography] = { name: "geography" } PostgreSQLAdapter::NATIVE_DATABASE_TYPES[:st_geometry] = { name: "geometry" } PostgreSQLAdapter::NATIVE_DATABASE_TYPES[:st_geometry_collection] = { name: "geometry(GeometryCollection)" } PostgreSQLAdapter::NATIVE_DATABASE_TYPES[:st_line_string] = { name: "geometry(LineString)" } PostgreSQLAdapter::NATIVE_DATABASE_TYPES[:st_multi_line_string] = { name: "geometry(MultiLineString)" } PostgreSQLAdapter::NATIVE_DATABASE_TYPES[:st_multi_point] = { name: "geometry(MultiPoint)" } PostgreSQLAdapter::NATIVE_DATABASE_TYPES[:st_multi_polygon] = { name: "geometry(MultiPolygon)" } PostgreSQLAdapter::NATIVE_DATABASE_TYPES[:st_point] = { name: "geometry(Point)" } PostgreSQLAdapter::NATIVE_DATABASE_TYPES[:st_polygon] = { name: "geometry(Polygon)" } # Legacy aliases for compatibility with activerecord-postgis-adapter PostgreSQLAdapter::NATIVE_DATABASE_TYPES[:geography] = { name: "geography" } PostgreSQLAdapter::NATIVE_DATABASE_TYPES[:geometry] = { name: "geometry" } PostgreSQLAdapter::NATIVE_DATABASE_TYPES[:geometry_collection] = { name: "geometry(GeometryCollection)" } PostgreSQLAdapter::NATIVE_DATABASE_TYPES[:line_string] = { name: "geometry(LineString)" } PostgreSQLAdapter::NATIVE_DATABASE_TYPES[:multi_line_string] = { name: "geometry(MultiLineString)" } PostgreSQLAdapter::NATIVE_DATABASE_TYPES[:multi_point] = { name: "geometry(MultiPoint)" } PostgreSQLAdapter::NATIVE_DATABASE_TYPES[:multi_polygon] = { name: "geometry(MultiPolygon)" } PostgreSQLAdapter::NATIVE_DATABASE_TYPES[:polygon] = { name: "geometry(Polygon)" } # Tell Rails these are valid column methods for schema dumping - PostgreSQL only PostgreSQL::TableDefinition.send(:define_column_methods, :st_geography, :st_geometry, :st_geometry_collection, :st_line_string, :st_multi_line_string, :st_multi_point, :st_multi_polygon, :st_point, :st_polygon, # Legacy column methods for compatibility with activerecord-postgis-adapter :geography, :geometry, :geometry_collection, :line_string, :multi_line_string, :multi_point, :multi_polygon, :polygon, *SPATIAL_OPTIONS_FOR_REGISTRATION) # prevent unknown OID warning and register PostGIS types PostgreSQLAdapter.singleton_class.prepend(RegisterTypes) # Prepend our extensions to handle spatial columns PostgreSQLAdapter.prepend(AdapterExtensions) # Register spatial types with ActiveRecord::Type - use st_* prefix to avoid conflicts adapter_name = :postgresql # Register specific spatial types with their corresponding classes ActiveRecord::Type.register(:st_geography, Type::Geography, adapter: adapter_name) ActiveRecord::Type.register(:st_geometry, Type::Geometry, adapter: adapter_name) ActiveRecord::Type.register(:st_geometry_collection, Type::GeometryCollection, adapter: adapter_name) ActiveRecord::Type.register(:st_line_string, Type::LineString, adapter: adapter_name) ActiveRecord::Type.register(:st_multi_line_string, Type::MultiLineString, adapter: adapter_name) ActiveRecord::Type.register(:st_multi_point, Type::MultiPoint, adapter: adapter_name) ActiveRecord::Type.register(:st_multi_polygon, Type::MultiPolygon, adapter: adapter_name) ActiveRecord::Type.register(:st_point, Type::Point, adapter: adapter_name) ActiveRecord::Type.register(:st_polygon, Type::Polygon, adapter: adapter_name) # Legacy type registrations for compatibility with activerecord-postgis-adapter ActiveRecord::Type.register(:geography, Type::Geography, adapter: adapter_name) ActiveRecord::Type.register(:geometry, Type::Geometry, adapter: adapter_name) ActiveRecord::Type.register(:geometry_collection, Type::GeometryCollection, adapter: adapter_name) ActiveRecord::Type.register(:line_string, Type::LineString, adapter: adapter_name) ActiveRecord::Type.register(:multi_line_string, Type::MultiLineString, adapter: adapter_name) ActiveRecord::Type.register(:multi_point, Type::MultiPoint, adapter: adapter_name) ActiveRecord::Type.register(:multi_polygon, Type::MultiPolygon, adapter: adapter_name) ActiveRecord::Type.register(:polygon, Type::Polygon, adapter: adapter_name) # Ignore PostGIS system tables in schema dumps - PostgreSQL specific PostgreSQL::SchemaDumper.ignore_tables |= %w[ geography_columns geometry_columns layer raster_columns raster_overviews spatial_ref_sys topology ] end |