geos-extensions 0.0.5 → 0.0.6

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.
data/Rakefile CHANGED
@@ -12,7 +12,7 @@ begin
12
12
  require 'jeweler'
13
13
  Jeweler::Tasks.new do |gem|
14
14
  gem.name = "geos-extensions"
15
- gem.version = "0.0.5"
15
+ gem.version = "0.0.6"
16
16
  gem.summary = "Extensions for the GEOS library."
17
17
  gem.description = gem.summary
18
18
  gem.email = "code@zoocasa.com"
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{geos-extensions}
8
- s.version = "0.0.5"
8
+ s.version = "0.0.6"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["J Smith"]
12
- s.date = %q{2011-03-15}
12
+ s.date = %q{2011-03-17}
13
13
  s.description = %q{Extensions for the GEOS library.}
14
14
  s.email = %q{code@zoocasa.com}
15
15
  s.extra_rdoc_files = [
@@ -14,6 +14,8 @@ module ActiveRecord
14
14
  class PostgreSQLAdapter < AbstractAdapter
15
15
  # Returns the geometry columns for the table.
16
16
  def geometry_columns(table_name, name = nil)
17
+ return [] if !table_exists?(table_name)
18
+
17
19
  columns(table_name, name).select { |c| c.sql_type == 'geometry' }.collect do |c|
18
20
  res = execute(
19
21
  "SELECT * FROM geometry_columns WHERE f_table_name = #{quote(table_name)} AND f_geometry_column = #{quote(c.name)}",
@@ -41,6 +41,12 @@ module Geos
41
41
  end
42
42
  end
43
43
 
44
+ class CantConvertSRID < ::ActiveRecord::ActiveRecordError
45
+ def initialize(table_name, column, from_srid, to_srid)
46
+ super("Couldn't convert SRID for #{table_name}.#{column} from #{from_srid} to #{to_srid}")
47
+ end
48
+ end
49
+
44
50
  def self.included(base) #:nodoc:
45
51
  base.extend(ClassMethods)
46
52
  base.send(:include, Geos::ActiveRecord::GeospatialScopes)
@@ -122,26 +128,30 @@ module Geos
122
128
  create_these.each do |k|
123
129
  src, line = <<-EOF, __LINE__ + 1
124
130
  def #{k.name}=(geom)
125
- geos = case geom
126
- when /^SRID=default;/i
127
- if srid = self.class.srid_for(#{k.name.inspect})
128
- geom = geom.sub(/default/i, srid.to_s)
129
- Geos.from_wkt(geom)
130
- else
131
- raise SRIDNotFound.new(self.class.table_name, #{k.name.inspect})
132
- end
133
- else
134
- Geos.read(geom)
131
+ column_srid = self.class.srid_for(#{k.name.inspect})
132
+
133
+ if geom =~ /^SRID=default;/i
134
+ geom = geom.sub(/default/i, column_srid.to_s)
135
135
  end
136
136
 
137
- self['#{k.name}'] = if geos
138
- if geos.srid == 0
139
- geos.to_wkb
137
+ geos = Geos.read(geom)
138
+
139
+ geom_srid = if geos.srid == 0
140
+ -1
141
+ else
142
+ geos.srid
143
+ end
144
+
145
+ if column_srid != geom_srid
146
+ if column_srid == -1 || geom_srid == -1
147
+ geos.srid = column_srid
140
148
  else
141
- geos.to_ewkb
149
+ raise CantConvertSRID.new(self.class.table_name, #{k.name.inspect}, geom_srid, column_srid)
142
150
  end
143
151
  end
144
152
 
153
+ self['#{k.name}'] = geos.to_ewkb
154
+
145
155
  GEOMETRY_COLUMN_OUTPUT_FORMATS.each do |f|
146
156
  instance_variable_set("@#{k.name}_\#{f}", nil)
147
157
  end
@@ -87,7 +87,7 @@ module Geos
87
87
  column_srid = self.srid_for(options[:column])
88
88
 
89
89
  geom = if args.first.is_a?(String) && args.first =~ /^SRID=default;/
90
- args.first.sub(/default/, (column_srid || -1).to_s)
90
+ args.first.sub(/default/, column_srid.to_s)
91
91
  else
92
92
  args.first
93
93
  end
@@ -126,6 +126,35 @@ if ENV['TEST_ACTIVERECORD']
126
126
  assert_saneness_of_point(foo.the_other_geom_geos)
127
127
  end
128
128
 
129
+ def test_create_with_no_srid_converting_to_4326
130
+ foo = Foo.create!(
131
+ :name => 'test_ewkt_create_with_no_srid_converting_to_4326',
132
+ :the_other_geom => POINT_WKT
133
+ )
134
+
135
+ foo.reload
136
+ assert_saneness_of_point(foo.the_other_geom_geos)
137
+ end
138
+
139
+ def test_create_with_no_srid_converting_to_minus_1
140
+ foo = Foo.create!(
141
+ :name => 'test_ewkt_create_with_no_srid_converting_to_minus_1',
142
+ :the_geom => POINT_EWKT
143
+ )
144
+
145
+ foo.reload
146
+ assert_saneness_of_point(foo.the_geom_geos)
147
+ end
148
+
149
+ def test_create_with_converting_from_900913_to_4326
150
+ assert_raise(Geos::ActiveRecord::GeometryColumns::CantConvertSRID) do
151
+ foo = Foo.create!(
152
+ :name => 'test_create_with_converting_from_900913_to_4326',
153
+ :the_other_geom => "SRID=900913; #{POINT_WKT}"
154
+ )
155
+ end
156
+ end
157
+
129
158
  def test_ewkt_create_with_srid_default
130
159
  foo = Foo.create!(
131
160
  :name => 'test_ewkt_create_with_srid_default',
@@ -134,7 +163,6 @@ if ENV['TEST_ACTIVERECORD']
134
163
 
135
164
  foo.reload
136
165
  assert_saneness_of_point(foo.the_other_geom_geos)
137
- foo.the_other_geom_geos
138
166
  end
139
167
 
140
168
  def test_ewkb_create
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: geos-extensions
3
3
  version: !ruby/object:Gem::Version
4
- hash: 21
4
+ hash: 19
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 5
10
- version: 0.0.5
9
+ - 6
10
+ version: 0.0.6
11
11
  platform: ruby
12
12
  authors:
13
13
  - J Smith
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-03-15 00:00:00 -04:00
18
+ date: 2011-03-17 00:00:00 -04:00
19
19
  default_executable:
20
20
  dependencies: []
21
21