activerecord-postgis-adapter 1.0.0 → 1.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.
@@ -9,8 +9,8 @@ module Arel # :nodoc:
9
9
 
10
10
  include ::RGeo::ActiveRecord::SpatialToSql
11
11
 
12
- def st_func(standard_name_)
13
- FUNC_MAP[standard_name_.downcase] || standard_name_
12
+ def st_func(standard_name)
13
+ FUNC_MAP[standard_name.downcase] || standard_name
14
14
  end
15
15
 
16
16
  alias_method :visit_in_spatial_context, :visit
@@ -9,16 +9,16 @@ module ActiveRecord # :nodoc:
9
9
  DEFAULT_SRID = 0
10
10
 
11
11
  module CommonAdapterMethods # :nodoc:
12
- def set_rgeo_factory_settings(factory_settings_)
13
- @rgeo_factory_settings = factory_settings_
12
+ def set_rgeo_factory_settings(factory_settings)
13
+ @rgeo_factory_settings = factory_settings
14
14
  end
15
15
 
16
16
  def adapter_name
17
17
  PostGISAdapter::ADAPTER_NAME
18
18
  end
19
19
 
20
- def spatial_column_constructor(name_)
21
- PostGISAdapter::SPATIAL_COLUMN_CONSTRUCTORS[name_]
20
+ def spatial_column_constructor(name)
21
+ PostGISAdapter::SPATIAL_COLUMN_CONSTRUCTORS[name]
22
22
  end
23
23
 
24
24
  def postgis_lib_version
@@ -33,11 +33,11 @@ module ActiveRecord # :nodoc:
33
33
  {:srtext_column => 'srtext', :proj4text_column => 'proj4text', :auth_name_column => 'auth_name', :auth_srid_column => 'auth_srid'}
34
34
  end
35
35
 
36
- def quote(value_, column_=nil)
37
- if ::RGeo::Feature::Geometry.check_type(value_)
38
- "'#{::RGeo::WKRep::WKBGenerator.new(:hex_format => true, :type_format => :ewkb, :emit_ewkb_srid => true).generate(value_)}'"
39
- elsif value_.is_a?(::RGeo::Cartesian::BoundingBox)
40
- "'#{value_.min_x},#{value_.min_y},#{value_.max_x},#{value_.max_y}'::box"
36
+ def quote(value, column=nil)
37
+ if ::RGeo::Feature::Geometry.check_type(value)
38
+ "'#{::RGeo::WKRep::WKBGenerator.new(:hex_format => true, :type_format => :ewkb, :emit_ewkb_srid => true).generate(value)}'"
39
+ elsif value.is_a?(::RGeo::Cartesian::BoundingBox)
40
+ "'#{value.min_x},#{value.min_y},#{value.max_x},#{value.max_y}'::box"
41
41
  else
42
42
  super
43
43
  end
@@ -1,21 +1,11 @@
1
1
  module ActiveRecord # :nodoc:
2
-
3
2
  module ConnectionAdapters # :nodoc:
4
-
5
3
  module PostGISAdapter # :nodoc:
6
4
 
7
-
8
5
  def self.initial_setup
9
- gis_ignore_tables_ = ['geometry_columns', 'spatial_ref_sys', 'layer', 'topology']
10
- ignore_tables_ = ::ActiveRecord::SchemaDumper.ignore_tables
11
- gis_ignore_tables_.each do |table_|
12
- ignore_tables_ << table_ unless ignore_tables_.include?(table_)
13
- end
6
+ ::ActiveRecord::SchemaDumper.ignore_tables |= %w[geometry_columns spatial_ref_sys layer topology]
14
7
  end
15
8
 
16
-
17
9
  end
18
-
19
10
  end
20
-
21
11
  end
@@ -1,7 +1,7 @@
1
1
  module ActiveRecord
2
2
  module ConnectionAdapters
3
3
  module PostGISAdapter
4
- VERSION = "1.0.0".freeze
4
+ VERSION = '1.1.0'.freeze
5
5
  end
6
6
  end
7
7
  end
@@ -0,0 +1,190 @@
1
+ require 'test_helper'
2
+
3
+ module RGeo
4
+ module ActiveRecord # :nodoc:
5
+ module PostGISAdapter # :nodoc:
6
+ module Tests # :nodoc:
7
+ class BasicTest < BASE_TEST_CLASS # :nodoc:
8
+ DATABASE_CONFIG_PATH = ::File.dirname(__FILE__)+'/database.yml'
9
+ OVERRIDE_DATABASE_CONFIG_PATH = ::File.dirname(__FILE__)+'/database_local.yml'
10
+
11
+ include AdapterTestHelper
12
+
13
+ define_test_methods do
14
+
15
+ def populate_ar_class(content)
16
+ klass = create_ar_class
17
+ case content
18
+ when :mercator_point
19
+ klass.connection.create_table(:spatial_test) do |t_|
20
+ t_.column 'latlon', :point, :srid => 3785
21
+ end
22
+ when :latlon_point_geographic
23
+ klass.connection.create_table(:spatial_test) do |t_|
24
+ t_.column 'latlon', :point, :srid => 4326, :geographic => true
25
+ end
26
+ when :no_constraints
27
+ klass.connection.create_table(:spatial_test) do |t_|
28
+ t_.column 'geo', :geometry, :no_constraints => true
29
+ end
30
+ end
31
+ klass
32
+ end
33
+
34
+ def test_version
35
+ refute_nil ::ActiveRecord::ConnectionAdapters::PostGISAdapter::VERSION
36
+ end
37
+
38
+ def test_postgis_available
39
+ connection = create_ar_class.connection
40
+ assert_equal 'PostGIS', connection.adapter_name
41
+ refute_nil connection.postgis_lib_version
42
+ end
43
+
44
+ def test_set_and_get_point
45
+ klass = populate_ar_class(:mercator_point)
46
+ obj = klass.new
47
+ assert_nil obj.latlon
48
+ obj.latlon = @factory.point(1.0, 2.0)
49
+ assert_equal @factory.point(1.0, 2.0), obj.latlon
50
+ assert_equal 3785, obj.latlon.srid
51
+ end
52
+
53
+ def test_set_and_get_point_from_wkt
54
+ klass = populate_ar_class(:mercator_point)
55
+ obj = klass.new
56
+ assert_nil obj.latlon
57
+ obj.latlon = 'POINT(1 2)'
58
+ assert_equal @factory.point(1.0, 2.0), obj.latlon
59
+ assert_equal 3785, obj.latlon.srid
60
+ end
61
+
62
+ def test_save_and_load_point
63
+ klass = populate_ar_class(:mercator_point)
64
+ obj = klass.new
65
+ obj.latlon = @factory.point(1.0, 2.0)
66
+ obj.save!
67
+ id = obj.id
68
+ obj2 = klass.find(id)
69
+ assert_equal @factory.point(1.0, 2.0), obj2.latlon
70
+ assert_equal 3785, obj2.latlon.srid
71
+ assert_equal true, ::RGeo::Geos.is_geos?(obj2.latlon)
72
+ end
73
+
74
+ def test_save_and_load_geographic_point
75
+ klass = populate_ar_class(:latlon_point_geographic)
76
+ obj = klass.new
77
+ obj.latlon = @factory.point(1.0, 2.0)
78
+ obj.save!
79
+ id = obj.id
80
+ obj2 = klass.find(id)
81
+ assert_equal @geographic_factory.point(1.0, 2.0), obj2.latlon
82
+ assert_equal 4326, obj2.latlon.srid
83
+ assert_equal false, ::RGeo::Geos.is_geos?(obj2.latlon)
84
+ end
85
+
86
+ def test_save_and_load_point_from_wkt
87
+ klass = populate_ar_class(:mercator_point)
88
+ obj = klass.new
89
+ obj.latlon = 'POINT(1 2)'
90
+ obj.save!
91
+ id = obj.id
92
+ obj2 = klass.find(id)
93
+ assert_equal @factory.point(1.0, 2.0), obj2.latlon
94
+ assert_equal 3785, obj2.latlon.srid
95
+ end
96
+
97
+ def test_set_point_bad_wkt
98
+ klass = populate_ar_class(:mercator_point)
99
+ obj = klass.create(:latlon => 'POINT (x)')
100
+ assert_nil obj.latlon
101
+ end
102
+
103
+ def test_set_point_wkt_wrong_type
104
+ klass = populate_ar_class(:mercator_point)
105
+ assert_raises(::ActiveRecord::StatementInvalid) do
106
+ klass.create(:latlon => 'LINESTRING(1 2, 3 4, 5 6)')
107
+ end
108
+ end
109
+
110
+ def test_custom_factory
111
+ klass = create_ar_class
112
+ klass.connection.create_table(:spatial_test) do |t|
113
+ t.point(:latlon, :srid => 4326)
114
+ end
115
+ factory = ::RGeo::Geographic.simple_mercator_factory
116
+ klass.class_eval do
117
+ set_rgeo_factory_for_column(:latlon, factory)
118
+ end
119
+ rec_ = klass.new
120
+ rec_.latlon = 'POINT(-122 47)'
121
+ assert_equal factory, rec_.latlon.factory
122
+ rec_.save!
123
+ assert_equal factory, rec_.latlon.factory
124
+ rec2_ = klass.find(rec_.id)
125
+ assert_equal factory, rec2_.latlon.factory
126
+ end
127
+
128
+ def test_readme_example
129
+ klass = create_ar_class
130
+ klass.connection.create_table(:spatial_test) do |t_|
131
+ t_.column(:shape, :geometry)
132
+ t_.line_string(:path, :srid => 3785)
133
+ t_.point(:latlon, :geographic => true)
134
+ end
135
+ klass.connection.change_table(:spatial_test) do |t_|
136
+ t_.index(:latlon, :spatial => true)
137
+ end
138
+ klass.class_eval do
139
+ self.rgeo_factory_generator = ::RGeo::Geos.method(:factory)
140
+ set_rgeo_factory_for_column(:latlon, ::RGeo::Geographic.spherical_factory)
141
+ end
142
+ rec_ = klass.new
143
+ rec_.latlon = 'POINT(-122 47)'
144
+ loc_ = rec_.latlon
145
+ assert_equal 47, loc_.latitude
146
+ rec_.shape = loc_
147
+ assert_equal true, ::RGeo::Geos.is_geos?(rec_.shape)
148
+ end
149
+
150
+ # no_constraints no longer supported in PostGIS 2.0
151
+ def _test_save_and_load_no_constraints
152
+ klass = populate_ar_class(:no_constraints)
153
+ factory1_ = ::RGeo::Cartesian.preferred_factory(:srid => 3785)
154
+ factory2_ = ::RGeo::Cartesian.preferred_factory(:srid => 2000)
155
+ obj = klass.new
156
+ obj.geo = factory1_.point(1.0, 2.0)
157
+ obj.save!
158
+ id = obj.id
159
+ obj2 = klass.find(id)
160
+ assert_equal factory1_.point(1.0, 2.0), obj2.geo
161
+ assert_equal 3785, obj2.geo.srid
162
+ obj2.geo = factory2_.point(3.0, 4.0)
163
+ obj2.save!
164
+ obj3 = klass.find(id)
165
+ assert_equal factory2_.point(3.0, 4.0), obj3.geo
166
+ assert_equal 2000, obj3.geo.srid
167
+ end
168
+
169
+ def test_point_to_json
170
+ klass = populate_ar_class(:mercator_point)
171
+ obj = klass.new
172
+ assert_match(/"latlon":null/, obj.to_json)
173
+ obj.latlon = @factory.point(1.0, 2.0)
174
+ assert_match(/"latlon":"POINT\s\(1\.0\s2\.0\)"/, obj.to_json)
175
+ end
176
+
177
+ def test_custom_column
178
+ klass = populate_ar_class(:mercator_point)
179
+ rec = klass.new
180
+ rec.latlon = 'POINT(0 0)'
181
+ rec.save
182
+ refute_nil klass.select("CURRENT_TIMESTAMP as ts").first.ts
183
+ end
184
+
185
+ end
186
+ end
187
+ end
188
+ end
189
+ end
190
+ end
data/test/ddl_test.rb ADDED
@@ -0,0 +1,279 @@
1
+ require 'test_helper'
2
+
3
+ module RGeo
4
+ module ActiveRecord # :nodoc:
5
+ module PostGISAdapter # :nodoc:
6
+ module Tests # :nodoc:
7
+ class DDLTest < BASE_TEST_CLASS # :nodoc:
8
+ DATABASE_CONFIG_PATH = ::File.dirname(__FILE__) + '/database.yml'
9
+ OVERRIDE_DATABASE_CONFIG_PATH = ::File.dirname(__FILE__) + '/database_local.yml'
10
+
11
+ include AdapterTestHelper
12
+
13
+ define_test_methods do
14
+ def test_create_simple_geometry
15
+ klass = create_ar_class
16
+ klass.connection.create_table(:spatial_test) do |t|
17
+ t.column 'latlon', :geometry
18
+ end
19
+ assert_equal(1, klass.connection.select_value("SELECT COUNT(*) FROM geometry_columns WHERE f_table_name='spatial_test'").to_i)
20
+ col = klass.columns.last
21
+ assert_equal(::RGeo::Feature::Geometry, col.geometric_type)
22
+ assert_equal(true, col.has_spatial_constraints?)
23
+ assert_equal(false, col.geographic?)
24
+ assert_equal(0, col.srid)
25
+ assert(klass.cached_attributes.include?('latlon'))
26
+ klass.connection.drop_table(:spatial_test)
27
+ assert_equal(0, klass.connection.select_value("SELECT COUNT(*) FROM geometry_columns WHERE f_table_name='spatial_test'").to_i)
28
+ end
29
+
30
+ # no_constraints no longer supported in PostGIS 2.0
31
+ def _test_create_no_constraints_geometry
32
+ klass = create_ar_class
33
+ klass.connection.create_table(:spatial_test) do |t|
34
+ t.column 'geom', :geometry, :limit => {:no_constraints => true}
35
+ end
36
+ assert_equal(0, klass.connection.select_value("SELECT COUNT(*) FROM geometry_columns WHERE f_table_name='spatial_test'").to_i)
37
+ col = klass.columns.last
38
+ assert_equal(::RGeo::Feature::Geometry, col.geometric_type)
39
+ assert_equal(false, col.geographic?)
40
+ assert_equal(false, col.has_spatial_constraints?)
41
+ assert_nil(col.srid)
42
+ assert(klass.cached_attributes.include?('geom'))
43
+ klass.connection.drop_table(:spatial_test)
44
+ assert_equal(0, klass.connection.select_value("SELECT COUNT(*) FROM geometry_columns WHERE f_table_name='spatial_test'").to_i)
45
+ end
46
+
47
+ def test_create_simple_geography
48
+ klass = create_ar_class
49
+ klass.connection.create_table(:spatial_test) do |t|
50
+ t.column 'latlon', :geometry, :geographic => true
51
+ end
52
+ col = klass.columns.last
53
+ assert_equal(::RGeo::Feature::Geometry, col.geometric_type)
54
+ assert_equal(true, col.has_spatial_constraints?)
55
+ assert_equal(true, col.geographic?)
56
+ assert_equal(4326, col.srid)
57
+ assert(klass.cached_attributes.include?('latlon'))
58
+ assert_equal(0, klass.connection.select_value("SELECT COUNT(*) FROM geometry_columns WHERE f_table_name='spatial_test'").to_i)
59
+ end
60
+
61
+ def test_create_point_geometry
62
+ klass = create_ar_class
63
+ klass.connection.create_table(:spatial_test) do |t|
64
+ t.column 'latlon', :point
65
+ end
66
+ assert_equal(::RGeo::Feature::Point, klass.columns.last.geometric_type)
67
+ assert(klass.cached_attributes.include?('latlon'))
68
+ end
69
+
70
+ def test_create_geometry_with_index
71
+ klass = create_ar_class
72
+ klass.connection.create_table(:spatial_test) do |t|
73
+ t.column 'latlon', :geometry
74
+ end
75
+ klass.connection.change_table(:spatial_test) do |t|
76
+ t.index([:latlon], :spatial => true)
77
+ end
78
+ assert(klass.connection.indexes(:spatial_test).last.spatial)
79
+ end
80
+
81
+ def test_add_geometry_column
82
+ klass = create_ar_class
83
+ klass.connection.create_table(:spatial_test) do |t|
84
+ t.column('latlon', :geometry)
85
+ end
86
+ klass.connection.change_table(:spatial_test) do |t|
87
+ t.column('geom2', :point, :srid => 4326)
88
+ t.column('name', :string)
89
+ end
90
+ assert_equal(2, klass.connection.select_value("SELECT COUNT(*) FROM geometry_columns WHERE f_table_name='spatial_test'").to_i)
91
+ cols_ = klass.columns
92
+ assert_equal(::RGeo::Feature::Geometry, cols_[-3].geometric_type)
93
+ assert_equal(0, cols_[-3].srid)
94
+ assert_equal(true, cols_[-3].has_spatial_constraints?)
95
+ assert_equal(::RGeo::Feature::Point, cols_[-2].geometric_type)
96
+ assert_equal(4326, cols_[-2].srid)
97
+ assert_equal(false, cols_[-2].geographic?)
98
+ assert_equal(true, cols_[-2].has_spatial_constraints?)
99
+ assert_nil(cols_[-1].geometric_type)
100
+ assert_equal(false, cols_[-1].has_spatial_constraints?)
101
+ end
102
+
103
+ # no_constraints no longer supported in PostGIS 2.0
104
+ def _test_add_no_constraints_geometry_column
105
+ klass = create_ar_class
106
+ klass.connection.create_table(:spatial_test) do |t|
107
+ t.column('latlon', :geometry)
108
+ end
109
+ klass.connection.change_table(:spatial_test) do |t|
110
+ t.column('geom2', :geometry, :no_constraints => true)
111
+ t.column('name', :string)
112
+ end
113
+ assert_equal(1, klass.connection.select_value("SELECT COUNT(*) FROM geometry_columns WHERE f_table_name='spatial_test'").to_i)
114
+ cols_ = klass.columns
115
+ assert_equal(::RGeo::Feature::Geometry, cols_[-3].geometric_type)
116
+ assert_equal(0, cols_[-3].srid)
117
+ assert_equal(true, cols_[-3].has_spatial_constraints?)
118
+ assert_equal(::RGeo::Feature::Geometry, cols_[-2].geometric_type)
119
+ assert_nil(cols_[-2].srid)
120
+ assert_equal(false, cols_[-2].geographic?)
121
+ assert_equal(false, cols_[-2].has_spatial_constraints?)
122
+ assert_nil(cols_[-1].geometric_type)
123
+ assert_equal(false, cols_[-1].has_spatial_constraints?)
124
+ end
125
+
126
+ def test_add_geography_column
127
+ klass = create_ar_class
128
+ klass.connection.create_table(:spatial_test) do |t|
129
+ t.column('latlon', :geometry)
130
+ end
131
+ klass.connection.change_table(:spatial_test) do |t|
132
+ t.column('geom2', :point, :srid => 4326, :geographic => true)
133
+ t.column('name', :string)
134
+ end
135
+ assert_equal(1, klass.connection.select_value("SELECT COUNT(*) FROM geometry_columns WHERE f_table_name='spatial_test'").to_i)
136
+ cols_ = klass.columns
137
+ assert_equal(::RGeo::Feature::Geometry, cols_[-3].geometric_type)
138
+ assert_equal(0, cols_[-3].srid)
139
+ assert_equal(true, cols_[-3].has_spatial_constraints?)
140
+ assert_equal(::RGeo::Feature::Point, cols_[-2].geometric_type)
141
+ assert_equal(4326, cols_[-2].srid)
142
+ assert_equal(true, cols_[-2].geographic?)
143
+ assert_equal(true, cols_[-2].has_spatial_constraints?)
144
+ assert_nil(cols_[-1].geometric_type)
145
+ assert_equal(false, cols_[-1].has_spatial_constraints?)
146
+ end
147
+
148
+ def test_drop_geometry_column
149
+ klass = create_ar_class
150
+ klass.connection.create_table(:spatial_test) do |t|
151
+ t.column('latlon', :geometry)
152
+ t.column('geom2', :point, :srid => 4326)
153
+ end
154
+ klass.connection.change_table(:spatial_test) do |t|
155
+ t.remove('geom2')
156
+ end
157
+ assert_equal(1, klass.connection.select_value("SELECT COUNT(*) FROM geometry_columns WHERE f_table_name='spatial_test'").to_i)
158
+ cols_ = klass.columns
159
+ assert_equal(::RGeo::Feature::Geometry, cols_[-1].geometric_type)
160
+ assert_equal('latlon', cols_[-1].name)
161
+ assert_equal(0, cols_[-1].srid)
162
+ assert_equal(false, cols_[-1].geographic?)
163
+ end
164
+
165
+ def test_drop_geography_column
166
+ klass = create_ar_class
167
+ klass.connection.create_table(:spatial_test) do |t|
168
+ t.column('latlon', :geometry)
169
+ t.column('geom2', :point, :srid => 4326, :geographic => true)
170
+ t.column('geom3', :point, :srid => 4326)
171
+ end
172
+ klass.connection.change_table(:spatial_test) do |t|
173
+ t.remove('geom2')
174
+ end
175
+ assert_equal(2, klass.connection.select_value("SELECT COUNT(*) FROM geometry_columns WHERE f_table_name='spatial_test'").to_i)
176
+ cols_ = klass.columns
177
+ assert_equal(::RGeo::Feature::Point, cols_[-1].geometric_type)
178
+ assert_equal('geom3', cols_[-1].name)
179
+ assert_equal(false, cols_[-1].geographic?)
180
+ assert_equal(::RGeo::Feature::Geometry, cols_[-2].geometric_type)
181
+ assert_equal('latlon', cols_[-2].name)
182
+ assert_equal(false, cols_[-2].geographic?)
183
+ end
184
+
185
+ def test_create_simple_geometry_using_shortcut
186
+ klass = create_ar_class
187
+ klass.connection.create_table(:spatial_test) do |t|
188
+ t.geometry 'latlon'
189
+ end
190
+ assert_equal(1, klass.connection.select_value("SELECT COUNT(*) FROM geometry_columns WHERE f_table_name='spatial_test'").to_i)
191
+ col = klass.columns.last
192
+ assert_equal(::RGeo::Feature::Geometry, col.geometric_type)
193
+ assert_equal(false, col.geographic?)
194
+ assert_equal(0, col.srid)
195
+ assert(klass.cached_attributes.include?('latlon'))
196
+ klass.connection.drop_table(:spatial_test)
197
+ assert_equal(0, klass.connection.select_value("SELECT COUNT(*) FROM geometry_columns WHERE f_table_name='spatial_test'").to_i)
198
+ end
199
+
200
+ # no_constraints no longer supported in PostGIS 2.0
201
+ def _test_create_no_constraints_geometry_using_shortcut
202
+ klass = create_ar_class
203
+ klass.connection.create_table(:spatial_test) do |t|
204
+ t.spatial 'geom', :no_constraints => true
205
+ end
206
+ assert_equal(0, klass.connection.select_value("SELECT COUNT(*) FROM geometry_columns WHERE f_table_name='spatial_test'").to_i)
207
+ col = klass.columns.last
208
+ assert_equal(::RGeo::Feature::Geometry, col.geometric_type)
209
+ assert_equal(false, col.geographic?)
210
+ assert_nil(col.srid)
211
+ assert(klass.cached_attributes.include?('geom'))
212
+ klass.connection.drop_table(:spatial_test)
213
+ assert_equal(0, klass.connection.select_value("SELECT COUNT(*) FROM geometry_columns WHERE f_table_name='spatial_test'").to_i)
214
+ end
215
+
216
+ def test_create_simple_geography_using_shortcut
217
+ klass = create_ar_class
218
+ klass.connection.create_table(:spatial_test) do |t|
219
+ t.geometry 'latlon', :geographic => true
220
+ end
221
+ col = klass.columns.last
222
+ assert_equal(::RGeo::Feature::Geometry, col.geometric_type)
223
+ assert_equal(true, col.geographic?)
224
+ assert_equal(4326, col.srid)
225
+ assert(klass.cached_attributes.include?('latlon'))
226
+ assert_equal(0, klass.connection.select_value("SELECT COUNT(*) FROM geometry_columns WHERE f_table_name='spatial_test'").to_i)
227
+ end
228
+
229
+ def test_create_point_geometry_using_shortcut
230
+ klass = create_ar_class
231
+ klass.connection.create_table(:spatial_test) do |t|
232
+ t.point 'latlon'
233
+ end
234
+ assert_equal(::RGeo::Feature::Point, klass.columns.last.geometric_type)
235
+ assert(klass.cached_attributes.include?('latlon'))
236
+ end
237
+
238
+ def test_create_geometry_with_options
239
+ klass = create_ar_class
240
+ klass.connection.create_table(:spatial_test) do |t|
241
+ t.column 'region', :polygon, :has_m => true, :srid => 3785
242
+ end
243
+ assert_equal(1, klass.connection.select_value("SELECT COUNT(*) FROM geometry_columns WHERE f_table_name='spatial_test'").to_i)
244
+ col = klass.columns.last
245
+ assert_equal(::RGeo::Feature::Polygon, col.geometric_type)
246
+ assert_equal(false, col.geographic?)
247
+ assert_equal(false, col.has_z?)
248
+ assert_equal(true, col.has_m?)
249
+ assert_equal(3785, col.srid)
250
+ assert_equal({:has_m => true, :type => 'polygon', :srid => 3785}, col.limit)
251
+ assert(klass.cached_attributes.include?('region'))
252
+ klass.connection.drop_table(:spatial_test)
253
+ assert_equal(0, klass.connection.select_value("SELECT COUNT(*) FROM geometry_columns WHERE f_table_name='spatial_test'").to_i)
254
+ end
255
+
256
+ def test_create_geometry_using_limit
257
+ klass = create_ar_class
258
+ klass.connection.create_table(:spatial_test) do |t|
259
+ t.spatial 'region', :limit => {:has_m => true, :srid => 3785, :type => :polygon}
260
+ end
261
+ assert_equal(1, klass.connection.select_value("SELECT COUNT(*) FROM geometry_columns WHERE f_table_name='spatial_test'").to_i)
262
+ col = klass.columns.last
263
+ assert_equal(::RGeo::Feature::Polygon, col.geometric_type)
264
+ assert_equal(false, col.geographic?)
265
+ assert_equal(false, col.has_z)
266
+ assert_equal(true, col.has_m)
267
+ assert_equal(3785, col.srid)
268
+ assert_equal({:has_m => true, :type => 'polygon', :srid => 3785}, col.limit)
269
+ assert(klass.cached_attributes.include?('region'))
270
+ klass.connection.drop_table(:spatial_test)
271
+ assert_equal(0, klass.connection.select_value("SELECT COUNT(*) FROM geometry_columns WHERE f_table_name='spatial_test'").to_i)
272
+ end
273
+
274
+ end
275
+ end
276
+ end
277
+ end
278
+ end
279
+ end