activerecord-postgis-adapter 3.0.0.beta4 → 3.0.0.beta5
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.
- checksums.yaml +4 -4
- data/lib/active_record/connection_adapters/postgis_adapter/main_adapter.rb +0 -4
- data/lib/active_record/connection_adapters/postgis_adapter/oid/spatial.rb +16 -17
- data/lib/active_record/connection_adapters/postgis_adapter/schema_statements.rb +1 -2
- data/lib/active_record/connection_adapters/postgis_adapter/spatial_column.rb +1 -7
- data/lib/active_record/connection_adapters/postgis_adapter/version.rb +1 -1
- data/test/basic_test.rb +21 -13
- data/test/ddl_test.rb +8 -8
- data/test/test_helper.rb +5 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: da8f856d4cf24c6499865f61ffca7aa83dfde847
|
4
|
+
data.tar.gz: bb1f2d2716ef65650d7a438a62554e5f07cea2b0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0aae508c94cd5a4d07e72e451b024f69fefb955db49213700490d7a71007cf3f0c7306479b6292e1b98fc841a7b3868bb26b3f91eb6ec916f0d9a47246dea898
|
7
|
+
data.tar.gz: 68e42bce528929b082443e7afc6736e80a4d1c89084300e3a648f0574486bae913937a46650153fb357f4f90be69619bbecf9325479e6376821b6d9ccf147179
|
@@ -10,13 +10,8 @@ module ActiveRecord
|
|
10
10
|
# "geometry(Polygon,4326) NOT NULL"
|
11
11
|
# "geometry(Geography,4326)"
|
12
12
|
def initialize(oid, sql_type)
|
13
|
+
@sql_type = sql_type
|
13
14
|
@geo_type, @srid, @has_z, @has_m = self.class.parse_sql_type(sql_type)
|
14
|
-
if oid =~ /geography/
|
15
|
-
factory_opts = {srid: (@srid || 4326)}
|
16
|
-
factory_opts[:has_z_coordinate] = @has_z
|
17
|
-
factory_opts[:has_m_coordinate] = @has_m
|
18
|
-
@factory_generator = RGeo::Geographic.spherical_factory(factory_opts)
|
19
|
-
end
|
20
15
|
end
|
21
16
|
|
22
17
|
# sql_type: geometry, geometry(Point), geometry(Point,4326), ...
|
@@ -52,12 +47,19 @@ module ActiveRecord
|
|
52
47
|
[geo_type, srid, has_z, has_m]
|
53
48
|
end
|
54
49
|
|
55
|
-
def
|
56
|
-
@
|
50
|
+
def spatial_factory
|
51
|
+
@spatial_factory ||=
|
52
|
+
RGeo::ActiveRecord::SpatialFactoryStore.instance.factory(
|
53
|
+
geo_type: @geo_type,
|
54
|
+
has_m: @has_m,
|
55
|
+
has_z: @has_z,
|
56
|
+
sql_type: @sql_type,
|
57
|
+
srid: @srid,
|
58
|
+
)
|
57
59
|
end
|
58
60
|
|
59
61
|
def geographic?
|
60
|
-
|
62
|
+
@sql_type =~ /geography/
|
61
63
|
end
|
62
64
|
|
63
65
|
def spatial?
|
@@ -90,16 +92,14 @@ module ActiveRecord
|
|
90
92
|
|
91
93
|
def cast_value(value)
|
92
94
|
return if value.nil?
|
93
|
-
RGeo::WKRep::WKBParser.new(
|
95
|
+
RGeo::WKRep::WKBParser.new(spatial_factory, support_ewkb: true).parse(value)
|
94
96
|
rescue RGeo::Error::ParseError
|
95
97
|
nil
|
96
98
|
end
|
97
99
|
|
98
100
|
# convert WKT string into RGeo object
|
99
101
|
def parse_wkt(string)
|
100
|
-
|
101
|
-
factory = @factory_generator || RGeo::ActiveRecord::RGeoFactorySettings.new
|
102
|
-
wkt_parser(factory, string).parse(string)
|
102
|
+
wkt_parser(string).parse(string)
|
103
103
|
rescue RGeo::Error::ParseError
|
104
104
|
nil
|
105
105
|
end
|
@@ -108,14 +108,13 @@ module ActiveRecord
|
|
108
108
|
string[0] == "\x00" || string[0] == "\x01" || string[0, 4] =~ /[0-9a-fA-F]{4}/
|
109
109
|
end
|
110
110
|
|
111
|
-
def wkt_parser(
|
111
|
+
def wkt_parser(string)
|
112
112
|
if binary_string?(string)
|
113
|
-
RGeo::WKRep::WKBParser.new(
|
113
|
+
RGeo::WKRep::WKBParser.new(spatial_factory, support_ewkb: true, default_srid: @srid)
|
114
114
|
else
|
115
|
-
RGeo::WKRep::WKTParser.new(
|
115
|
+
RGeo::WKRep::WKTParser.new(spatial_factory, support_ewkt: true, default_srid: @srid)
|
116
116
|
end
|
117
117
|
end
|
118
|
-
|
119
118
|
end
|
120
119
|
end
|
121
120
|
end
|
@@ -9,8 +9,7 @@ module ActiveRecord # :nodoc:
|
|
9
9
|
# cast_type example classes:
|
10
10
|
# OID::Spatial
|
11
11
|
# OID::Integer
|
12
|
-
def initialize(
|
13
|
-
@factory_settings = factory_settings
|
12
|
+
def initialize(table_name, name, default, cast_type, sql_type = nil, null = true, default_function = nil, opts = nil)
|
14
13
|
@table_name = table_name
|
15
14
|
@geographic = !!(sql_type =~ /geography\(/i)
|
16
15
|
if opts
|
@@ -62,11 +61,6 @@ module ActiveRecord # :nodoc:
|
|
62
61
|
cast_type.respond_to?(:spatial?) && cast_type.spatial?
|
63
62
|
end
|
64
63
|
|
65
|
-
# TODO: delete - unused?
|
66
|
-
def has_spatial_constraints?
|
67
|
-
!!@srid
|
68
|
-
end
|
69
|
-
|
70
64
|
private
|
71
65
|
|
72
66
|
def set_geometric_type_from_name(name)
|
data/test/basic_test.rb
CHANGED
@@ -87,19 +87,25 @@ class BasicTest < ActiveSupport::TestCase # :nodoc:
|
|
87
87
|
|
88
88
|
def test_custom_factory
|
89
89
|
klass = SpatialModel
|
90
|
-
klass.connection.create_table(:
|
91
|
-
t.
|
92
|
-
end
|
93
|
-
factory = RGeo::Geographic.simple_mercator_factory
|
94
|
-
klass.class_eval do
|
95
|
-
set_rgeo_factory_for_column(:latlon, factory)
|
90
|
+
klass.connection.create_table(:spatial_models, force: true) do |t|
|
91
|
+
t.st_polygon(:area, srid: 4326)
|
96
92
|
end
|
97
|
-
|
93
|
+
klass.reset_column_information
|
94
|
+
custom_factory = RGeo::Geographic.spherical_factory(buffer_resolution: 8, srid: 4326)
|
95
|
+
spatial_factory_store.register(custom_factory, geo_type: "polygon", srid: 4326)
|
98
96
|
object = klass.new
|
99
|
-
|
97
|
+
area = custom_factory.point(1, 2).buffer(3)
|
98
|
+
object.area = area
|
99
|
+
object.save!
|
100
|
+
object.reload
|
101
|
+
assert_equal area.to_s, object.area.to_s
|
102
|
+
spatial_factory_store.clear
|
100
103
|
end
|
101
104
|
|
102
105
|
def test_readme_example
|
106
|
+
spatial_factory_store.register(
|
107
|
+
RGeo::Geographic.spherical_factory, geo_type: "point", sql_type: "geography")
|
108
|
+
|
103
109
|
klass = SpatialModel
|
104
110
|
klass.connection.create_table(:spatial_models, force: true) do |t|
|
105
111
|
t.column(:shape, :geometry)
|
@@ -111,16 +117,15 @@ class BasicTest < ActiveSupport::TestCase # :nodoc:
|
|
111
117
|
klass.connection.change_table(:spatial_models) do |t|
|
112
118
|
t.index(:latlon, using: :gist)
|
113
119
|
end
|
114
|
-
|
115
|
-
self.rgeo_factory_generator = RGeo::Geos.method(:factory)
|
116
|
-
set_rgeo_factory_for_column(:latlon, RGeo::Geographic.spherical_factory)
|
117
|
-
end
|
120
|
+
|
118
121
|
object = klass.new
|
119
122
|
object.latlon = 'POINT(-122 47)'
|
120
123
|
point = object.latlon
|
121
124
|
assert_equal 47, point.latitude
|
122
125
|
object.shape = point
|
123
126
|
# assert_equal true, RGeo::Geos.is_geos?(object.shape)
|
127
|
+
|
128
|
+
spatial_factory_store.clear
|
124
129
|
end
|
125
130
|
|
126
131
|
def test_point_to_json
|
@@ -148,5 +153,8 @@ class BasicTest < ActiveSupport::TestCase # :nodoc:
|
|
148
153
|
end
|
149
154
|
SpatialModel.reset_column_information
|
150
155
|
end
|
151
|
-
end
|
152
156
|
|
157
|
+
def spatial_factory_store
|
158
|
+
RGeo::ActiveRecord::SpatialFactoryStore.instance
|
159
|
+
end
|
160
|
+
end
|
data/test/ddl_test.rb
CHANGED
@@ -30,7 +30,7 @@ class DDLTest < ActiveSupport::TestCase # :nodoc:
|
|
30
30
|
assert_equal 1, count_geometry_columns
|
31
31
|
col = klass.columns.last
|
32
32
|
assert_equal RGeo::Feature::Geometry, col.geometric_type
|
33
|
-
assert_equal true, col.
|
33
|
+
assert_equal true, col.spatial?
|
34
34
|
assert_equal false, col.geographic?
|
35
35
|
assert_equal 0, col.srid
|
36
36
|
klass.connection.drop_table(:spatial_models)
|
@@ -44,7 +44,7 @@ class DDLTest < ActiveSupport::TestCase # :nodoc:
|
|
44
44
|
klass.reset_column_information
|
45
45
|
col = klass.columns.last
|
46
46
|
assert_equal RGeo::Feature::Geometry, col.geometric_type
|
47
|
-
assert_equal true, col.
|
47
|
+
assert_equal true, col.spatial?
|
48
48
|
assert_equal true, col.geographic?
|
49
49
|
assert_equal 4326, col.srid
|
50
50
|
assert_equal 0, count_geometry_columns
|
@@ -82,13 +82,13 @@ class DDLTest < ActiveSupport::TestCase # :nodoc:
|
|
82
82
|
columns = klass.columns
|
83
83
|
assert_equal RGeo::Feature::Geometry, columns[-3].geometric_type
|
84
84
|
assert_equal 0, columns[-3].srid
|
85
|
-
assert_equal true, columns[-3].
|
85
|
+
assert_equal true, columns[-3].spatial?
|
86
86
|
assert_equal RGeo::Feature::Point, columns[-2].geometric_type
|
87
87
|
assert_equal 4326, columns[-2].srid
|
88
88
|
assert_equal false, columns[-2].geographic?
|
89
|
-
assert_equal true, columns[-2].
|
89
|
+
assert_equal true, columns[-2].spatial?
|
90
90
|
assert_nil columns[-1].geometric_type
|
91
|
-
assert_equal false, columns[-1].
|
91
|
+
assert_equal false, columns[-1].spatial?
|
92
92
|
end
|
93
93
|
|
94
94
|
def test_add_geometry_column_null_false
|
@@ -117,13 +117,13 @@ class DDLTest < ActiveSupport::TestCase # :nodoc:
|
|
117
117
|
cols_ = klass.columns
|
118
118
|
assert_equal RGeo::Feature::Geometry, cols_[-3].geometric_type
|
119
119
|
assert_equal 0, cols_[-3].srid
|
120
|
-
assert_equal true, cols_[-3].
|
120
|
+
assert_equal true, cols_[-3].spatial?
|
121
121
|
assert_equal RGeo::Feature::Point, cols_[-2].geometric_type
|
122
122
|
assert_equal 4326, cols_[-2].srid
|
123
123
|
assert_equal true, cols_[-2].geographic?
|
124
|
-
assert_equal true, cols_[-2].
|
124
|
+
assert_equal true, cols_[-2].spatial?
|
125
125
|
assert_nil cols_[-1].geometric_type
|
126
|
-
assert_equal false, cols_[-1].
|
126
|
+
assert_equal false, cols_[-1].spatial?
|
127
127
|
end
|
128
128
|
|
129
129
|
def test_drop_geometry_column
|
data/test/test_helper.rb
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
require 'minitest/autorun'
|
2
2
|
require 'minitest/pride'
|
3
3
|
require 'mocha/mini_test'
|
4
|
-
require '
|
4
|
+
require 'active_record'
|
5
|
+
require 'activerecord-postgis-adapter'
|
5
6
|
|
6
7
|
begin
|
7
8
|
require 'byebug'
|
@@ -26,4 +27,7 @@ class ActiveSupport::TestCase
|
|
26
27
|
RGeo::Geographic.spherical_factory(srid: 4326)
|
27
28
|
end
|
28
29
|
|
30
|
+
def spatial_factory_store
|
31
|
+
RGeo::ActiveRecord::SpatialFactoryStore.instance
|
32
|
+
end
|
29
33
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activerecord-postgis-adapter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0.0.
|
4
|
+
version: 3.0.0.beta5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Azuma, Tee Parham
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-05-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '3.0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '3.0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rake
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|