activerecord-postgis-adapter 1.0.0 → 1.1.0

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