postgis_adapter 0.7.8 → 0.7.9
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +12 -0
- data/Gemfile.lock +27 -0
- data/README.rdoc +51 -18
- data/Rakefile +27 -27
- data/VERSION +1 -1
- data/lib/postgis_adapter.rb +31 -12
- data/lib/postgis_adapter/acts_as_geom.rb +5 -2
- data/lib/postgis_adapter/common_spatial_adapter.rb +1 -1
- data/lib/{postgis_functions.rb → postgis_adapter/functions.rb} +3 -2
- data/lib/{postgis_functions → postgis_adapter/functions}/bbox.rb +3 -1
- data/lib/{postgis_functions → postgis_adapter/functions}/class.rb +9 -5
- data/lib/{postgis_functions → postgis_adapter/functions}/common.rb +37 -4
- data/lib/postgis_adapter/railtie.rb +7 -0
- data/postgis_adapter.gemspec +14 -71
- data/rails/init.rb +23 -4
- data/spec/{postgis_functions → postgis_adapter/functions}/bbox_spec.rb +1 -1
- data/spec/{postgis_functions → postgis_adapter/functions}/class_spec.rb +17 -3
- data/spec/{postgis_functions → postgis_adapter/functions}/common_spec.rb +10 -4
- data/spec/{postgis_functions_spec.rb → postgis_adapter/functions_spec.rb} +11 -11
- data/spec/postgis_adapter_spec.rb +7 -6
- data/spec/spec_helper.rb +28 -12
- metadata +44 -32
- data/.gitignore +0 -7
- data/spec/spec.opts +0 -4
data/Gemfile
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
source "http://rubygems.org"
|
2
|
+
# Add dependencies required to use your gem here.
|
3
|
+
gem "pg"
|
4
|
+
gem "nofxx-georuby"
|
5
|
+
|
6
|
+
# Add dependencies to develop your gem here.
|
7
|
+
# Include everything needed to run rake, tests, features, etc.
|
8
|
+
group :development do
|
9
|
+
gem "rspec", "~> 2.3.0"
|
10
|
+
gem "bundler", "~> 1.0.0"
|
11
|
+
gem "rcov", ">= 0"
|
12
|
+
end
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
GEM
|
2
|
+
remote: http://rubygems.org/
|
3
|
+
specs:
|
4
|
+
diff-lcs (1.1.2)
|
5
|
+
json_pure (1.4.6)
|
6
|
+
nofxx-georuby (1.9.0)
|
7
|
+
json_pure (>= 1.4.6)
|
8
|
+
pg (0.10.1)
|
9
|
+
rcov (0.9.9)
|
10
|
+
rspec (2.3.0)
|
11
|
+
rspec-core (~> 2.3.0)
|
12
|
+
rspec-expectations (~> 2.3.0)
|
13
|
+
rspec-mocks (~> 2.3.0)
|
14
|
+
rspec-core (2.3.1)
|
15
|
+
rspec-expectations (2.3.0)
|
16
|
+
diff-lcs (~> 1.1.2)
|
17
|
+
rspec-mocks (2.3.0)
|
18
|
+
|
19
|
+
PLATFORMS
|
20
|
+
ruby
|
21
|
+
|
22
|
+
DEPENDENCIES
|
23
|
+
bundler (~> 1.0.0)
|
24
|
+
nofxx-georuby
|
25
|
+
pg
|
26
|
+
rcov
|
27
|
+
rspec (~> 2.3.0)
|
data/README.rdoc
CHANGED
@@ -8,45 +8,39 @@ This fork adds handy methods to make geometrical calculations on postgis.
|
|
8
8
|
Based on http://georuby.rubyforge.org Spatial Adapter
|
9
9
|
|
10
10
|
RDocs - http://docs.github.com/nofxx/postgis_adapter
|
11
|
+
Postgis Online reference - http://postgis.refractions.net
|
11
12
|
Postgis Manual - http://postgis.refractions.net/documentation/manual-svn
|
12
13
|
|
13
|
-
*PostGIS and Rails 2+ only*.
|
14
|
-
|
15
14
|
|
16
15
|
== Install
|
17
16
|
|
18
17
|
If you are using Spatial Adapter, *remove it first*.
|
19
18
|
|
19
|
+
gem install postgis_adapter
|
20
|
+
|
20
21
|
|
21
22
|
=== Dependencies
|
22
23
|
|
23
|
-
- georuby
|
24
|
+
- georuby gem
|
24
25
|
- postgres 8.3+
|
25
26
|
- postgis 1.3+
|
26
27
|
|
27
28
|
|
28
|
-
===
|
29
|
-
|
30
|
-
sudo gem install postgis-adapter
|
31
|
-
|
32
|
-
Rails:
|
33
|
-
|
34
|
-
config.gem "postgis_adapter"
|
35
|
-
|
29
|
+
=== Rails 3+
|
36
30
|
|
37
|
-
|
31
|
+
Add dependency to Gemfile:
|
38
32
|
|
33
|
+
gem "postgis_adapter"
|
39
34
|
|
40
|
-
sudo gem install nofxx-postgis_adapter --source http://gems.github.com
|
41
35
|
|
42
|
-
|
36
|
+
Or, to use latest from repository:
|
43
37
|
|
44
|
-
|
38
|
+
gem "postgis_adapter", :git => 'git://github.com/nofxx/postgis_adapter.git'
|
45
39
|
|
46
40
|
|
47
|
-
===
|
41
|
+
=== Rails 2
|
48
42
|
|
49
|
-
|
43
|
+
gem install postgis_adapter -v 0.7.8
|
50
44
|
|
51
45
|
|
52
46
|
== How to Use
|
@@ -267,6 +261,34 @@ Types:
|
|
267
261
|
geometry_collection
|
268
262
|
|
269
263
|
|
264
|
+
=== PostGIS Helper Scripts
|
265
|
+
|
266
|
+
Optional, this will create postgis enabled database automatically for you.
|
267
|
+
|
268
|
+
Helpers to create postgis template database. At time of writing,
|
269
|
+
postgis.sql and spatial_ref_sys.sql are used.
|
270
|
+
|
271
|
+
|
272
|
+
==== System wide
|
273
|
+
|
274
|
+
|
275
|
+
Find where your OS put those sql files and:
|
276
|
+
|
277
|
+
rake postgis:template path/to/sqls/folder
|
278
|
+
|
279
|
+
|
280
|
+
==== Vendorize
|
281
|
+
|
282
|
+
Place the following scripts in a folder named 'spatial' under the 'db' folder; For example:
|
283
|
+
|
284
|
+
RAILS_ROOT/db/spatial/lwpostgis.sql
|
285
|
+
RAILS_ROOT/db/spatial/spatial_ref_sys
|
286
|
+
|
287
|
+
These will be used when creating the Test database when running the Rake Test tasks.
|
288
|
+
These scripts should have been installed when the PostGIS libraries were installed.
|
289
|
+
Online reference: http://postgis.refractions.net/
|
290
|
+
|
291
|
+
|
270
292
|
=== Fixtures
|
271
293
|
|
272
294
|
If you use fixtures for your unit tests, at some point,
|
@@ -323,6 +345,17 @@ something like this :
|
|
323
345
|
place.the_geom = the_geom
|
324
346
|
|
325
347
|
|
348
|
+
== Postgis Adapter
|
349
|
+
|
350
|
+
Marcos Piccinini (nofxx)
|
351
|
+
Ying Tsen Hong (tsenying)
|
352
|
+
Simon Tokumine (tokumine)
|
353
|
+
Fernando Blat (ferblape)
|
354
|
+
Shoaib Burq (sabman)
|
355
|
+
|
356
|
+
(in order of appearance)
|
357
|
+
|
358
|
+
|
326
359
|
== License
|
327
360
|
|
328
361
|
Spatial Adapter for Rails is released under the MIT license.
|
@@ -331,7 +364,7 @@ Postgis Adapter is released under the MIT license.
|
|
331
364
|
|
332
365
|
== Support
|
333
366
|
|
334
|
-
Tested using
|
367
|
+
Tested using activerecord 3+ / postgresql 8.5+ / postgis 1.5+ / linux / osx
|
335
368
|
|
336
369
|
Any questions, enhancement proposals, bug notifications or corrections:
|
337
370
|
|
data/Rakefile
CHANGED
@@ -1,38 +1,36 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'rake'
|
3
|
+
require 'rake/clean'
|
4
|
+
require 'rake/rdoctask'
|
5
|
+
#require 'spec/rake/spectask'
|
3
6
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
gem.homepage = "http://github.com/nofxx/postgis_adapter"
|
12
|
-
gem.authors = ["Marcos Piccinini"]
|
13
|
-
gem.rubyforge_project = "postgis_adapter"
|
14
|
-
# TODO: better way for this.....
|
15
|
-
# gem.add_dependency 'geo_ruby'
|
16
|
-
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
7
|
+
CLEAN.include('**/*.gem')
|
8
|
+
|
9
|
+
namespace :gem do
|
10
|
+
desc "Create the postgis_adapter gem"
|
11
|
+
task :create => [:clean] do
|
12
|
+
spec = eval(IO.read('postgis_adapter.gemspec'))
|
13
|
+
Gem::Builder.new(spec).build
|
17
14
|
end
|
18
|
-
rescue LoadError
|
19
|
-
puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
|
20
|
-
end
|
21
15
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
16
|
+
desc "Install the postgis_adapter gem"
|
17
|
+
task :install => [:create] do
|
18
|
+
file = Dir['*.gem'].first
|
19
|
+
sh "gem install #{file}"
|
20
|
+
end
|
26
21
|
end
|
27
22
|
|
28
|
-
Spec::Rake::SpecTask.new(:
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
23
|
+
# Spec::Rake::SpecTask.new(:spec) do |spec|
|
24
|
+
# spec.libs << 'lib' << 'spec'
|
25
|
+
# spec.spec_files = FileList['spec/**/*_spec.rb']
|
26
|
+
# end
|
27
|
+
|
28
|
+
# Spec::Rake::SpecTask.new(:rcov) do |spec|
|
29
|
+
# spec.libs << 'lib' << 'spec'
|
30
|
+
# spec.pattern = 'spec/**/*_spec.rb'
|
31
|
+
# spec.rcov = true
|
32
|
+
# end
|
34
33
|
|
35
|
-
require 'rake/rdoctask'
|
36
34
|
Rake::RDocTask.new do |rdoc|
|
37
35
|
version = File.exist?('VERSION') ? File.read('VERSION').chomp : ""
|
38
36
|
rdoc.rdoc_dir = 'rdoc'
|
@@ -41,6 +39,8 @@ Rake::RDocTask.new do |rdoc|
|
|
41
39
|
rdoc.rdoc_files.include('lib/**/*.rb')
|
42
40
|
end
|
43
41
|
|
42
|
+
task :default => :spec
|
43
|
+
|
44
44
|
#
|
45
45
|
# Reek & Roodi
|
46
46
|
#
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.7.
|
1
|
+
0.7.9
|
data/lib/postgis_adapter.rb
CHANGED
@@ -5,21 +5,21 @@
|
|
5
5
|
# Code from
|
6
6
|
# http://georuby.rubyforge.org Spatial Adapter
|
7
7
|
#
|
8
|
-
require '
|
8
|
+
require 'active_record'
|
9
9
|
require 'active_record/connection_adapters/postgresql_adapter'
|
10
10
|
require 'geo_ruby'
|
11
11
|
require 'postgis_adapter/common_spatial_adapter'
|
12
|
-
require '
|
13
|
-
require '
|
14
|
-
require '
|
15
|
-
require '
|
12
|
+
require 'postgis_adapter/functions'
|
13
|
+
require 'postgis_adapter/functions/common'
|
14
|
+
require 'postgis_adapter/functions/class'
|
15
|
+
require 'postgis_adapter/functions/bbox'
|
16
16
|
require 'postgis_adapter/acts_as_geom'
|
17
17
|
|
18
18
|
include GeoRuby::SimpleFeatures
|
19
19
|
include SpatialAdapter
|
20
20
|
|
21
21
|
#tables to ignore in migration : relative to PostGIS management of geometric columns
|
22
|
-
ActiveRecord::SchemaDumper.ignore_tables
|
22
|
+
ActiveRecord::SchemaDumper.ignore_tables.concat %w{ spatial_ref_sys geometry_columns geography_columns }
|
23
23
|
|
24
24
|
#add a method to_yaml to the Geometry class which will transform a geometry in a form suitable to be used in a YAML file (such as in a fixture)
|
25
25
|
GeoRuby::SimpleFeatures::Geometry.class_eval do
|
@@ -102,6 +102,25 @@ ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.class_eval do
|
|
102
102
|
|
103
103
|
include SpatialAdapter
|
104
104
|
|
105
|
+
# SCHEMA STATEMENTS ========================================
|
106
|
+
|
107
|
+
alias :original_recreate_database :recreate_database
|
108
|
+
def recreate_database(configuration, enc_option)
|
109
|
+
`dropdb -U "#{configuration["test"]["username"]}" #{configuration["test"]["database"]}`
|
110
|
+
`createdb #{enc_option} -U "#{configuration["test"]["username"]}" #{configuration["test"]["database"]}`
|
111
|
+
`createlang -U "#{configuration["test"]["username"]}" plpgsql #{configuration["test"]["database"]}`
|
112
|
+
`psql -d #{configuration["test"]["database"]} -f db/spatial/postgis.sql`
|
113
|
+
`psql -d #{configuration["test"]["database"]} -f db/spatial/spatial_ref_sys.sql`
|
114
|
+
end
|
115
|
+
|
116
|
+
alias :original_create_database :create_database
|
117
|
+
def create_database(name, options = {})
|
118
|
+
original_create_database(name, options = {})
|
119
|
+
`createlang plpgsql #{name}`
|
120
|
+
`psql -d #{name} -f db/spatial/postgis.sql`
|
121
|
+
`psql -d #{name} -f db/spatial/spatial_ref_sys.sql`
|
122
|
+
end
|
123
|
+
|
105
124
|
alias :original_native_database_types :native_database_types
|
106
125
|
def native_database_types
|
107
126
|
original_native_database_types.update(geometry_data_types)
|
@@ -248,16 +267,16 @@ ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.class_eval do
|
|
248
267
|
end
|
249
268
|
end
|
250
269
|
|
251
|
-
#
|
270
|
+
# For version of Rails where exists disable_referential_integrity
|
252
271
|
if self.instance_methods.include? "disable_referential_integrity"
|
253
272
|
#Pete Deffendol's patch
|
254
273
|
alias :original_disable_referential_integrity :disable_referential_integrity
|
255
274
|
def disable_referential_integrity(&block) #:nodoc:
|
256
|
-
ignore_tables = %w{ geometry_columns spatial_ref_sys geography_columns
|
257
|
-
execute(tables.select { |name| !ignore_tables.include?(name) }.
|
275
|
+
ignore_tables = %w{ geometry_columns spatial_ref_sys } # geography_columns + views
|
276
|
+
execute(tables.select { |name| !ignore_tables.include?(name) }.map { |name| "ALTER TABLE #{quote_table_name(name)} DISABLE TRIGGER ALL" }.join(";"))
|
258
277
|
yield
|
259
278
|
ensure
|
260
|
-
execute(tables.select { |name| !ignore_tables.include?(name)}.
|
279
|
+
execute(tables.select { |name| !ignore_tables.include?(name)}.map { |name| "ALTER TABLE #{quote_table_name(name)} ENABLE TRIGGER ALL" }.join(";"))
|
261
280
|
end
|
262
281
|
end
|
263
282
|
|
@@ -289,8 +308,8 @@ SELECT * FROM geometry_columns WHERE f_table_name = '#{table_name}'
|
|
289
308
|
end
|
290
309
|
|
291
310
|
raw_geom_infos
|
292
|
-
|
293
|
-
|
311
|
+
rescue => e
|
312
|
+
nil
|
294
313
|
end
|
295
314
|
|
296
315
|
end
|
@@ -3,7 +3,8 @@
|
|
3
3
|
#
|
4
4
|
# http://github.com/nofxx/postgis_adapter
|
5
5
|
#
|
6
|
-
module
|
6
|
+
module PostgisAdapter
|
7
|
+
module Functions
|
7
8
|
def self.included(base)
|
8
9
|
base.send :extend, ClassMethods
|
9
10
|
end
|
@@ -24,6 +25,7 @@ module PostgisFunctions
|
|
24
25
|
when :point then PointFunctions
|
25
26
|
when :polygon then PolygonFunctions
|
26
27
|
when :line_string, :multi_line_string then LineStringFunctions
|
28
|
+
when :multi_polygon then MultiPolygonFunctions
|
27
29
|
end unless geom[0].kind_of? Symbol
|
28
30
|
end
|
29
31
|
alias :acts_as_geom :has_geom
|
@@ -36,5 +38,6 @@ module PostgisFunctions
|
|
36
38
|
end
|
37
39
|
end
|
38
40
|
end
|
41
|
+
end
|
39
42
|
|
40
|
-
ActiveRecord::Base.send :include,
|
43
|
+
ActiveRecord::Base.send :include, PostgisAdapter::Functions
|
@@ -49,7 +49,7 @@ ActiveRecord::SchemaDumper.class_eval do
|
|
49
49
|
|
50
50
|
columns.each do |column|
|
51
51
|
|
52
|
-
raise StandardError, "Unknown type '#{column.sql_type}' for column '#{column.name}'" if @types[column.type].nil?
|
52
|
+
raise StandardError, "Unknown type '#{column.sql_type}' for column '#{column.name}' in table '#{table}'" if @types[column.type].nil?
|
53
53
|
next if column.name == pk
|
54
54
|
#need to use less_simplified_type here or have each specific geometry type be simplified to a specific simplified type in Column and each one treated separately in the Column methods
|
55
55
|
if column.is_a?(SpatialColumn)
|
@@ -15,7 +15,8 @@
|
|
15
15
|
# Earth Spheroid - http://en.wikipedia.org/wiki/Figure_of_the_Earth
|
16
16
|
#
|
17
17
|
|
18
|
-
module
|
18
|
+
module PostgisAdapter
|
19
|
+
module Functions
|
19
20
|
# WGS84 Spheroid
|
20
21
|
EARTH_SPHEROID = "'SPHEROID[\"GRS-80\",6378137,298.257222101]'" # SRID => 4326
|
21
22
|
|
@@ -114,7 +115,7 @@ module PostgisFunctions
|
|
114
115
|
end
|
115
116
|
|
116
117
|
end
|
117
|
-
|
118
|
+
end
|
118
119
|
#
|
119
120
|
# POINT(0 0)
|
120
121
|
# LINESTRING(0 0,1 1,1 2)
|
@@ -4,7 +4,8 @@
|
|
4
4
|
# BBox
|
5
5
|
#
|
6
6
|
#
|
7
|
-
module
|
7
|
+
module PostgisAdapter
|
8
|
+
module Functions
|
8
9
|
|
9
10
|
#
|
10
11
|
# These operators utilize indexes. They compare geometries by bounding boxes.
|
@@ -126,3 +127,4 @@ module PostgisFunctions
|
|
126
127
|
bbox("=", other)
|
127
128
|
end
|
128
129
|
end
|
130
|
+
end
|
@@ -1,4 +1,5 @@
|
|
1
|
-
module
|
1
|
+
module PostgisAdapter
|
2
|
+
module Functions
|
2
3
|
|
3
4
|
#
|
4
5
|
# Class Methods
|
@@ -47,17 +48,20 @@ module PostgisFunctions
|
|
47
48
|
find(:all, :order => "ST_Perimeter(geom) #{sort}" )
|
48
49
|
end
|
49
50
|
|
50
|
-
def
|
51
|
-
|
51
|
+
def all_dwithin(other, margin=1)
|
52
|
+
# find(:all, :conditions => "ST_DWithin(geom, ST_GeomFromEWKB(E'#{other.as_ewkt}'), #{margin})")
|
52
53
|
find(:all, :conditions => "ST_DWithin(geom, ST_GeomFromEWKT(E'#{other.as_hex_ewkb}'), #{margin})")
|
53
54
|
end
|
54
55
|
|
56
|
+
def all_within(other)
|
57
|
+
find(:all, :conditions => "ST_Within(geom, ST_GeomFromEWKT(E'#{other.as_hex_ewkb}'))")
|
58
|
+
end
|
59
|
+
|
55
60
|
def by_boundaries sort='asc'
|
56
61
|
find(:all, :order => "ST_Boundary(geom) #{sort}" )
|
57
62
|
end
|
58
63
|
|
59
64
|
end
|
60
65
|
|
61
|
-
|
62
|
-
|
66
|
+
end
|
63
67
|
end
|
@@ -6,7 +6,15 @@
|
|
6
6
|
# The methods here can be used by all geoms.
|
7
7
|
#
|
8
8
|
|
9
|
-
module
|
9
|
+
module PostgisAdapter
|
10
|
+
module Functions
|
11
|
+
|
12
|
+
#
|
13
|
+
# Test if a geometry is well formed.
|
14
|
+
#
|
15
|
+
def valid_geom?
|
16
|
+
postgis_calculate(:isvalid, self)
|
17
|
+
end
|
10
18
|
|
11
19
|
#
|
12
20
|
# True if the given geometries represent the same geometry.
|
@@ -232,12 +240,17 @@ module PostgisFunctions
|
|
232
240
|
postgis_calculate(:simplify, self, tolerance)
|
233
241
|
end
|
234
242
|
|
235
|
-
|
236
243
|
def simplify!(tolerance=0.1)
|
237
244
|
#FIXME: not good..
|
238
245
|
self.update_attribute(geo_columns.first, simplify)
|
239
246
|
end
|
240
247
|
|
248
|
+
#
|
249
|
+
#
|
250
|
+
def buffer(width=0.1)
|
251
|
+
postgis_calculate(:buffer, self, width)
|
252
|
+
end
|
253
|
+
|
241
254
|
#
|
242
255
|
# Returns a "simplified" version of the given geometry using the Douglas-Peuker
|
243
256
|
# algorithm. Will avoid creating derived geometries (polygons in particular) that
|
@@ -509,10 +522,18 @@ module PostgisFunctions
|
|
509
522
|
#
|
510
523
|
# http://geojson.org/
|
511
524
|
#
|
512
|
-
def as_geo_json(precision=15, bbox=0)
|
525
|
+
def as_geo_json(precision=15, bbox = 0)
|
513
526
|
postgis_calculate(:AsGeoJSON, self, [precision, bbox])
|
514
527
|
end
|
515
528
|
|
529
|
+
#
|
530
|
+
# ST_PointOnSurface — Returns a POINT guaranteed to lie on the surface.
|
531
|
+
#
|
532
|
+
# geometry ST_PointOnSurface(geometry g1);eometry A, geometry B);
|
533
|
+
#
|
534
|
+
def point_on_surface
|
535
|
+
postgis_calculate(:pointonsurface, self)
|
536
|
+
end
|
516
537
|
|
517
538
|
#
|
518
539
|
#
|
@@ -875,8 +896,20 @@ module PostgisFunctions
|
|
875
896
|
|
876
897
|
end
|
877
898
|
|
878
|
-
|
899
|
+
#
|
900
|
+
#
|
901
|
+
#
|
902
|
+
#
|
903
|
+
# MultiPolygon
|
904
|
+
#
|
905
|
+
#
|
906
|
+
#
|
907
|
+
#
|
908
|
+
module MultiPolygonFunctions
|
909
|
+
end
|
879
910
|
|
911
|
+
end
|
912
|
+
end
|
880
913
|
# NEW
|
881
914
|
#ST_OrderingEquals — Returns true if the given geometries represent the same geometry and points are in the same directional order.
|
882
915
|
#boolean ST_OrderingEquals(g
|
data/postgis_adapter.gemspec
CHANGED
@@ -1,76 +1,19 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
Gem::Specification.new do |spec|
|
2
|
+
spec.name = 'postgis_adapter'
|
3
|
+
spec.version = '0.7.9'
|
4
|
+
spec.authors = ['Marcos Piccinini']
|
5
|
+
spec.summary = 'PostGIS Adapter for Active Record'
|
6
|
+
spec.email = 'x@nofxx.com'
|
7
|
+
spec.homepage = 'http://github.com/nofxx/postgis_adapter'
|
5
8
|
|
6
|
-
|
7
|
-
|
8
|
-
s.version = "0.7.8"
|
9
|
+
spec.rdoc_options = ['--charset=UTF-8']
|
10
|
+
spec.rubyforge_project = 'postgis_adapter'
|
9
11
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
s.description = %q{Execute PostGIS functions on Active Record}
|
14
|
-
s.email = %q{x@nofxx.com}
|
15
|
-
s.extra_rdoc_files = [
|
16
|
-
"README.rdoc"
|
17
|
-
]
|
18
|
-
s.files = [
|
19
|
-
".gitignore",
|
20
|
-
"History.txt",
|
21
|
-
"MIT-LICENSE",
|
22
|
-
"README.rdoc",
|
23
|
-
"Rakefile",
|
24
|
-
"VERSION",
|
25
|
-
"init.rb",
|
26
|
-
"lib/postgis_adapter.rb",
|
27
|
-
"lib/postgis_adapter/acts_as_geom.rb",
|
28
|
-
"lib/postgis_adapter/common_spatial_adapter.rb",
|
29
|
-
"lib/postgis_functions.rb",
|
30
|
-
"lib/postgis_functions/bbox.rb",
|
31
|
-
"lib/postgis_functions/class.rb",
|
32
|
-
"lib/postgis_functions/common.rb",
|
33
|
-
"postgis_adapter.gemspec",
|
34
|
-
"rails/init.rb",
|
35
|
-
"spec/db/models_postgis.rb",
|
36
|
-
"spec/db/schema_postgis.rb",
|
37
|
-
"spec/postgis_adapter/acts_as_geom_spec.rb",
|
38
|
-
"spec/postgis_adapter/common_spatial_adapter_spec.rb",
|
39
|
-
"spec/postgis_adapter_spec.rb",
|
40
|
-
"spec/postgis_functions/bbox_spec.rb",
|
41
|
-
"spec/postgis_functions/class_spec.rb",
|
42
|
-
"spec/postgis_functions/common_spec.rb",
|
43
|
-
"spec/postgis_functions_spec.rb",
|
44
|
-
"spec/spec.opts",
|
45
|
-
"spec/spec_helper.rb"
|
46
|
-
]
|
47
|
-
s.homepage = %q{http://github.com/nofxx/postgis_adapter}
|
48
|
-
s.rdoc_options = ["--charset=UTF-8"]
|
49
|
-
s.require_paths = ["lib"]
|
50
|
-
s.rubyforge_project = %q{postgis_adapter}
|
51
|
-
s.rubygems_version = %q{1.3.5}
|
52
|
-
s.summary = %q{PostGIS Adapter for Active Record}
|
53
|
-
s.test_files = [
|
54
|
-
"spec/db/models_postgis.rb",
|
55
|
-
"spec/db/schema_postgis.rb",
|
56
|
-
"spec/postgis_adapter/acts_as_geom_spec.rb",
|
57
|
-
"spec/postgis_adapter/common_spatial_adapter_spec.rb",
|
58
|
-
"spec/postgis_functions_spec.rb",
|
59
|
-
"spec/spec_helper.rb",
|
60
|
-
"spec/postgis_adapter_spec.rb",
|
61
|
-
"spec/postgis_functions/class_spec.rb",
|
62
|
-
"spec/postgis_functions/common_spec.rb",
|
63
|
-
"spec/postgis_functions/bbox_spec.rb"
|
64
|
-
]
|
12
|
+
spec.files = Dir['**/*'].reject{ |f| f.include?('git') }
|
13
|
+
spec.test_files = Dir['spec/**/*.rb']
|
14
|
+
spec.extra_rdoc_files = ['README.rdoc']
|
65
15
|
|
66
|
-
|
67
|
-
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
68
|
-
s.specification_version = 3
|
16
|
+
spec.add_dependency 'GeoRuby'
|
69
17
|
|
70
|
-
|
71
|
-
else
|
72
|
-
end
|
73
|
-
else
|
74
|
-
end
|
18
|
+
spec.description = 'Execute PostGIS functions on Active Record'
|
75
19
|
end
|
76
|
-
|
data/rails/init.rb
CHANGED
@@ -1,9 +1,28 @@
|
|
1
|
+
# Patch Arel to support geometry type.
|
2
|
+
module Arel
|
3
|
+
module Attributes
|
4
|
+
class << self
|
5
|
+
alias original_for for
|
6
|
+
|
7
|
+
def for(column)
|
8
|
+
case column.type
|
9
|
+
when :geometry then String
|
10
|
+
else
|
11
|
+
original_for(column)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
1
18
|
class SpatialAdapterNotCompatibleError < StandardError
|
2
19
|
end
|
3
20
|
|
4
|
-
unless ActiveRecord::Base.connection.adapter_name == '
|
5
|
-
|
6
|
-
|
7
|
-
|
21
|
+
unless ActiveRecord::Base.connection.adapter_name.downcase == 'postgresql'
|
22
|
+
error_message = "Database config file not set or it does not map to "
|
23
|
+
error_message << "PostgreSQL.\nOnly PostgreSQL with PostGIS is supported "
|
24
|
+
error_message << "by postgis_adapter.")
|
25
|
+
raise SpatialAdapterNotCompatibleError.new(error_message)
|
8
26
|
end
|
27
|
+
|
9
28
|
require 'postgis_adapter'
|
@@ -1,12 +1,18 @@
|
|
1
|
-
require File.dirname(__FILE__) + '
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper.rb'
|
2
2
|
|
3
3
|
describe "ClassMethods" do
|
4
4
|
before(:all) do
|
5
5
|
@c1 ||= City.create!(:data => "CityClass", :geom => Polygon.from_coordinates([[[12,45],[45,41],[4,1],[12,45]],[[2,5],[5,1],[14,1],[2,5]]],4326))
|
6
|
+
@c2 ||= City.create!(:data => "CityClass", :geom => Polygon.from_coordinates([[[10,10],[10,50],[50,50],[10,10]],[[2,5],[5,1],[14,1],[2,5]]],4326))
|
6
7
|
@s1 ||= Street.create!(:data => "StreetClass", :geom => LineString.from_coordinates([[1,1],[99,88]],4326))
|
7
8
|
@s2 ||= Street.create!(:data => "StreetClassTiny", :geom => LineString.from_coordinates([[1,1],[1.1,1.1]],4326))
|
8
9
|
@p1 ||= Position.create!(:data => "PointClass", :geom => Point.from_x_y(99,99,4326))
|
9
10
|
@p2 ||= Position.create!(:data => "PointClassClose", :geom => Point.from_x_y(99.9,99.9,4326))
|
11
|
+
@p3 ||= Position.create!(:data => "PointInsideCity", :geom => Point.from_x_y(15.0,15.0,4326))
|
12
|
+
end
|
13
|
+
|
14
|
+
after(:all) do
|
15
|
+
[City, Street, Position].each { |m| m.delete_all }
|
10
16
|
end
|
11
17
|
|
12
18
|
it "should find the closest other point" do
|
@@ -54,8 +60,16 @@ describe "ClassMethods" do
|
|
54
60
|
City.by_area.should be_instance_of(Array)
|
55
61
|
end
|
56
62
|
|
57
|
-
it "should sort by all
|
58
|
-
City.
|
63
|
+
it "should sort by all dwithin" do
|
64
|
+
City.all_dwithin(@s1.geom).should eql([@c1, @c2])
|
65
|
+
end
|
66
|
+
|
67
|
+
it "should find all within polygon" do
|
68
|
+
Position.all_within(@c1.geom).should eql([@p3])#Array)
|
69
|
+
end
|
70
|
+
|
71
|
+
it "should find all within polygon 2" do
|
72
|
+
Position.all_within(@c2.geom).should eql([])#Array)
|
59
73
|
end
|
60
74
|
|
61
75
|
it "should sort by all within" do
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require File.dirname(__FILE__) + '
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper.rb'
|
2
2
|
|
3
3
|
describe "Common Functions" do
|
4
4
|
|
@@ -77,7 +77,7 @@ describe "Common Functions" do
|
|
77
77
|
it "should transform non saved srid geoms" do
|
78
78
|
pt = Point.from_x_y(11121381.4586196,10161852.0494475, 29101)
|
79
79
|
pos = Position.new(:geom => pt)
|
80
|
-
pos.transform(4326)
|
80
|
+
pos.transform!(4326)
|
81
81
|
pos.geom.x.should be_close(1.00000000000005, 0.00001)
|
82
82
|
pos.geom.y.should be_close(1.00000000000005, 0.00001)
|
83
83
|
end
|
@@ -126,6 +126,8 @@ describe "Common Functions" do
|
|
126
126
|
|
127
127
|
describe "Polygon" do
|
128
128
|
|
129
|
+
it { City.first.data.should eql("City1") }
|
130
|
+
|
129
131
|
it "sort by area size" do
|
130
132
|
City.by_area.first.data.should == "City1" #[@c1, @c2, @c3]
|
131
133
|
end
|
@@ -156,7 +158,7 @@ describe "Common Functions" do
|
|
156
158
|
|
157
159
|
it { @c1.covers?(@p1).should be_false }
|
158
160
|
it { @c1.covers?(@p4).should be_true }
|
159
|
-
it { @c1.
|
161
|
+
it { @c1.within?(@c2).should be_false }
|
160
162
|
|
161
163
|
it "city overlaps point?" do
|
162
164
|
lambda { @c3.overlaps?(@c2) }.should raise_error # WHY??
|
@@ -268,6 +270,10 @@ describe "Common Functions" do
|
|
268
270
|
@s1.intersection(@p2).should be_instance_of(GeometryCollection)
|
269
271
|
end
|
270
272
|
|
273
|
+
it "have a point on surface" do
|
274
|
+
@s3.point_on_surface.should be_a GeoRuby::SimpleFeatures::Point
|
275
|
+
end
|
276
|
+
|
271
277
|
describe "Self" do
|
272
278
|
|
273
279
|
it do
|
@@ -380,7 +386,7 @@ describe "Common Functions" do
|
|
380
386
|
it "should transform non saved" do
|
381
387
|
ls = LineString.from_coordinates([[11435579.3992231,10669620.8116516],[11721337.4281638,11210714.9524106]],29101)
|
382
388
|
str = Street.new(:geom => ls)
|
383
|
-
str.transform(4326)
|
389
|
+
str.transform!(4326)
|
384
390
|
str.geom[0].x.should be_close(4,0.0000001)
|
385
391
|
str.geom[0].y.should be_close(4,0.0000001)
|
386
392
|
str.geom[1].x.should be_close(7,0.0000001)
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require File.dirname(__FILE__) + '
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper.rb'
|
2
2
|
|
3
3
|
describe "PostgisFunctions" do
|
4
4
|
before(:all) do
|
@@ -12,11 +12,11 @@ describe "PostgisFunctions" do
|
|
12
12
|
describe "Common Mix" do
|
13
13
|
|
14
14
|
it "should calculate distance point to line" do
|
15
|
-
@p1.distance_to(@s1).should
|
15
|
+
@p1.distance_to(@s1).should be_within(0.00000001).of(0.248069469178417)
|
16
16
|
end
|
17
17
|
|
18
18
|
it "should calculate distance point to line" do
|
19
|
-
@cg.distance_to(@s1).should
|
19
|
+
@cg.distance_to(@s1).should be_within(0.00000001).of(0.248069469178417)
|
20
20
|
end
|
21
21
|
|
22
22
|
it "should calculate distance point to line" do
|
@@ -28,33 +28,33 @@ describe "PostgisFunctions" do
|
|
28
28
|
end
|
29
29
|
|
30
30
|
it "should find the distance from a unsaved point" do
|
31
|
-
@p1.distance_to(Point.from_x_y(5,5,4326)).should
|
31
|
+
@p1.distance_to(Point.from_x_y(5,5,4326)).should be_within(0.00001).of(55.0726792520575)
|
32
32
|
end
|
33
33
|
|
34
34
|
it "should work with unsaved objects" do
|
35
35
|
ss = Street.new(:data => "Street1", :geom => LineString.from_coordinates([[-44,-21],[-43,-29]],4326))
|
36
|
-
ss.length_spheroid.should
|
36
|
+
ss.length_spheroid.should be_within(0.01).of(891908.39)
|
37
37
|
end
|
38
38
|
|
39
|
-
it { @c1.area(32640).should
|
39
|
+
it { @c1.area(32640).should be_within(0.01).of(9165235788987.37) }
|
40
40
|
|
41
|
-
it { @c1.area.should
|
41
|
+
it { @c1.area.should be_within(0.1).of(720.0) }
|
42
42
|
|
43
43
|
it "should be strictly left of city" do
|
44
44
|
@p1.should be_strictly_left_of(@c1)
|
45
45
|
end
|
46
46
|
|
47
|
-
it { @s1.length.should
|
47
|
+
it { @s1.length.should be_within(0.0001).of(8.06225774829855) }
|
48
48
|
|
49
|
-
it { @s1.length_spheroid.should
|
49
|
+
it { @s1.length_spheroid.should be_within(0.0001).of(891883.597963462) }
|
50
50
|
|
51
51
|
it "should work with a diff column name" do
|
52
52
|
px2 = DiffName.create!(:data => "Hey 2", :the_geom => Point.from_x_y(20,20, 4326))
|
53
|
-
@px.distance_to(px2).should
|
53
|
+
@px.distance_to(px2).should be_within(0.01).of(10.0)
|
54
54
|
end
|
55
55
|
|
56
56
|
it "should work with mixed column names" do
|
57
|
-
@px.distance_to(@s1).should
|
57
|
+
@px.distance_to(@s1).should be_within(0.1).of(66.4)
|
58
58
|
end
|
59
59
|
end
|
60
60
|
end
|
@@ -151,8 +151,8 @@ describe "PostgisAdapter" do
|
|
151
151
|
end
|
152
152
|
|
153
153
|
it "should find by geom" do
|
154
|
-
|
155
|
-
|
154
|
+
pending
|
155
|
+
pts = Area.find_all_by_geom(LineString.from_coordinates([[0,0],[2,2]],4326))
|
156
156
|
pts.should be_instance_of(Array)
|
157
157
|
pts.length.should eql(2)
|
158
158
|
pts[0].data.should match(/Point/)
|
@@ -160,12 +160,13 @@ describe "PostgisAdapter" do
|
|
160
160
|
end
|
161
161
|
|
162
162
|
it "should find by geom again" do
|
163
|
-
|
164
|
-
|
163
|
+
pending
|
164
|
+
pts = Area.find_all_by_geom(LineString.from_coordinates([[2.49,1.99],[2.51,2.01]],4326))
|
165
165
|
pts[0].data.should eql("Point3")
|
166
166
|
end
|
167
167
|
|
168
168
|
it "should find by geom column bbox condition" do
|
169
|
+
pending
|
169
170
|
pts = Area.find_all_by_geom([[0,0],[2,2],4326])
|
170
171
|
pts.should be_instance_of(Array)
|
171
172
|
pts.length.should eql(2)
|
@@ -220,8 +221,8 @@ describe "PostgisAdapter" do
|
|
220
221
|
bar.data.should eql("")
|
221
222
|
|
222
223
|
if BinaryDefault.connection.encoding == "UTF8"
|
223
|
-
foo.value.should eql("
|
224
|
-
bar.value.should eql("
|
224
|
+
foo.value.encode("UTF-8", "ISO-8859-1").should eql("fôo")
|
225
|
+
bar.value.encode("UTF-8", "ISO-8859-1").should eql("bår")
|
225
226
|
end
|
226
227
|
end
|
227
228
|
|
data/spec/spec_helper.rb
CHANGED
@@ -1,11 +1,20 @@
|
|
1
|
+
SPEC_DB = {
|
2
|
+
:adapter => "postgresql",
|
3
|
+
:database => "postgis_adapter",
|
4
|
+
:username => "postgres",
|
5
|
+
:password => ""
|
6
|
+
}
|
7
|
+
|
1
8
|
require 'rubygems'
|
2
|
-
require 'spec'
|
3
9
|
require 'pg'
|
4
|
-
require 'activerecord'
|
5
10
|
$:.unshift((File.join(File.dirname(__FILE__), '..', 'lib')))
|
6
|
-
|
11
|
+
|
12
|
+
require "rspec"
|
13
|
+
require "active_record"
|
14
|
+
|
7
15
|
gem 'nofxx-georuby'
|
8
16
|
require 'postgis_adapter'
|
17
|
+
require 'logger'
|
9
18
|
# GeoRuby::SimpleFeatures::DEFAULT_SRID = -1
|
10
19
|
|
11
20
|
# Monkey patch Schema.define logger
|
@@ -13,17 +22,24 @@ $logger = Logger.new(StringIO.new)
|
|
13
22
|
def $logger.write(d); self.info(d); end
|
14
23
|
# $stdout = $logger
|
15
24
|
|
16
|
-
|
17
25
|
ActiveRecord::Base.logger = $logger
|
18
|
-
ActiveRecord::Base.establish_connection({ :adapter => "postgresql",
|
19
|
-
:database => "postgis_adapter",
|
20
|
-
:username => "postgres",
|
21
|
-
:password => "" })
|
22
26
|
|
23
|
-
|
27
|
+
begin
|
28
|
+
ActiveRecord::Base.establish_connection(SPEC_DB)
|
29
|
+
ActiveRecord::Migration.verbose = false
|
30
|
+
PG_VERSION = ActiveRecord::Base.connection.select_value("SELECT version()").scan(/PostgreSQL ([\d\.]*)/)[0][0]
|
31
|
+
|
32
|
+
puts "Running against PostgreSQL #{PG_VERSION}"
|
33
|
+
|
34
|
+
require File.dirname(__FILE__) + '/db/schema_postgis.rb'
|
35
|
+
require File.dirname(__FILE__) + '/db/models_postgis.rb'
|
36
|
+
|
37
|
+
rescue PGError
|
38
|
+
puts "Test DB not found, creating one for you..."
|
39
|
+
`createdb -U #{SPEC_DB[:username]} #{SPEC_DB[:database]} -T template_postgis`
|
40
|
+
puts "Done. Please run spec again."
|
41
|
+
exit
|
42
|
+
end
|
24
43
|
|
25
|
-
puts "Running against PostgreSQL #{PG_VERSION}"
|
26
44
|
|
27
|
-
require File.dirname(__FILE__) + '/db/schema_postgis.rb'
|
28
|
-
require File.dirname(__FILE__) + '/db/models_postgis.rb'
|
29
45
|
|
metadata
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: postgis_adapter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
prerelease:
|
5
|
+
version: 0.7.9
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- Marcos Piccinini
|
@@ -9,10 +10,20 @@ autorequire:
|
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
12
|
|
12
|
-
date:
|
13
|
+
date: 2011-03-05 00:00:00 -03:00
|
13
14
|
default_executable:
|
14
|
-
dependencies:
|
15
|
-
|
15
|
+
dependencies:
|
16
|
+
- !ruby/object:Gem::Dependency
|
17
|
+
name: GeoRuby
|
18
|
+
prerelease: false
|
19
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
20
|
+
none: false
|
21
|
+
requirements:
|
22
|
+
- - ">="
|
23
|
+
- !ruby/object:Gem::Version
|
24
|
+
version: "0"
|
25
|
+
type: :runtime
|
26
|
+
version_requirements: *id001
|
16
27
|
description: Execute PostGIS functions on Active Record
|
17
28
|
email: x@nofxx.com
|
18
29
|
executables: []
|
@@ -22,33 +33,34 @@ extensions: []
|
|
22
33
|
extra_rdoc_files:
|
23
34
|
- README.rdoc
|
24
35
|
files:
|
25
|
-
- .gitignore
|
26
|
-
- History.txt
|
27
|
-
- MIT-LICENSE
|
28
|
-
- README.rdoc
|
29
|
-
- Rakefile
|
30
|
-
- VERSION
|
31
|
-
- init.rb
|
32
|
-
- lib/postgis_adapter.rb
|
33
|
-
- lib/postgis_adapter/acts_as_geom.rb
|
34
36
|
- lib/postgis_adapter/common_spatial_adapter.rb
|
35
|
-
- lib/
|
36
|
-
- lib/
|
37
|
-
- lib/
|
38
|
-
- lib/
|
39
|
-
- postgis_adapter.
|
40
|
-
-
|
37
|
+
- lib/postgis_adapter/functions.rb
|
38
|
+
- lib/postgis_adapter/acts_as_geom.rb
|
39
|
+
- lib/postgis_adapter/railtie.rb
|
40
|
+
- lib/postgis_adapter/functions/common.rb
|
41
|
+
- lib/postgis_adapter/functions/bbox.rb
|
42
|
+
- lib/postgis_adapter/functions/class.rb
|
43
|
+
- lib/postgis_adapter.rb
|
41
44
|
- spec/db/models_postgis.rb
|
42
45
|
- spec/db/schema_postgis.rb
|
43
46
|
- spec/postgis_adapter/acts_as_geom_spec.rb
|
47
|
+
- spec/postgis_adapter/functions/class_spec.rb
|
48
|
+
- spec/postgis_adapter/functions/common_spec.rb
|
49
|
+
- spec/postgis_adapter/functions/bbox_spec.rb
|
44
50
|
- spec/postgis_adapter/common_spatial_adapter_spec.rb
|
45
|
-
- spec/
|
46
|
-
- spec/postgis_functions/bbox_spec.rb
|
47
|
-
- spec/postgis_functions/class_spec.rb
|
48
|
-
- spec/postgis_functions/common_spec.rb
|
49
|
-
- spec/postgis_functions_spec.rb
|
50
|
-
- spec/spec.opts
|
51
|
+
- spec/postgis_adapter/functions_spec.rb
|
51
52
|
- spec/spec_helper.rb
|
53
|
+
- spec/postgis_adapter_spec.rb
|
54
|
+
- Gemfile.lock
|
55
|
+
- postgis_adapter.gemspec
|
56
|
+
- MIT-LICENSE
|
57
|
+
- rails/init.rb
|
58
|
+
- Rakefile
|
59
|
+
- VERSION
|
60
|
+
- README.rdoc
|
61
|
+
- Gemfile
|
62
|
+
- init.rb
|
63
|
+
- History.txt
|
52
64
|
has_rdoc: true
|
53
65
|
homepage: http://github.com/nofxx/postgis_adapter
|
54
66
|
licenses: []
|
@@ -59,21 +71,21 @@ rdoc_options:
|
|
59
71
|
require_paths:
|
60
72
|
- lib
|
61
73
|
required_ruby_version: !ruby/object:Gem::Requirement
|
74
|
+
none: false
|
62
75
|
requirements:
|
63
76
|
- - ">="
|
64
77
|
- !ruby/object:Gem::Version
|
65
78
|
version: "0"
|
66
|
-
version:
|
67
79
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
80
|
+
none: false
|
68
81
|
requirements:
|
69
82
|
- - ">="
|
70
83
|
- !ruby/object:Gem::Version
|
71
84
|
version: "0"
|
72
|
-
version:
|
73
85
|
requirements: []
|
74
86
|
|
75
87
|
rubyforge_project: postgis_adapter
|
76
|
-
rubygems_version: 1.
|
88
|
+
rubygems_version: 1.5.2
|
77
89
|
signing_key:
|
78
90
|
specification_version: 3
|
79
91
|
summary: PostGIS Adapter for Active Record
|
@@ -81,10 +93,10 @@ test_files:
|
|
81
93
|
- spec/db/models_postgis.rb
|
82
94
|
- spec/db/schema_postgis.rb
|
83
95
|
- spec/postgis_adapter/acts_as_geom_spec.rb
|
96
|
+
- spec/postgis_adapter/functions/class_spec.rb
|
97
|
+
- spec/postgis_adapter/functions/common_spec.rb
|
98
|
+
- spec/postgis_adapter/functions/bbox_spec.rb
|
84
99
|
- spec/postgis_adapter/common_spatial_adapter_spec.rb
|
85
|
-
- spec/
|
100
|
+
- spec/postgis_adapter/functions_spec.rb
|
86
101
|
- spec/spec_helper.rb
|
87
102
|
- spec/postgis_adapter_spec.rb
|
88
|
-
- spec/postgis_functions/class_spec.rb
|
89
|
-
- spec/postgis_functions/common_spec.rb
|
90
|
-
- spec/postgis_functions/bbox_spec.rb
|
data/.gitignore
DELETED
data/spec/spec.opts
DELETED