activerecord-spatial 1.0.0 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +1670 -0
- data/Gemfile +12 -13
- data/Guardfile +7 -10
- data/MIT-LICENSE +1 -1
- data/README.rdoc +8 -19
- data/Rakefile +2 -1
- data/activerecord-spatial.gemspec +12 -13
- data/lib/activerecord-spatial/active_record/connection_adapters/postgresql/adapter_extensions/active_record.rb +46 -0
- data/lib/activerecord-spatial/active_record/connection_adapters/postgresql/adapter_extensions.rb +7 -38
- data/lib/activerecord-spatial/active_record/connection_adapters/postgresql/postgis.rb +6 -7
- data/lib/activerecord-spatial/active_record/connection_adapters/postgresql/unknown_srid.rb +4 -5
- data/lib/activerecord-spatial/active_record/models/geography_column.rb +1 -2
- data/lib/activerecord-spatial/active_record/models/geometry_column.rb +1 -2
- data/lib/activerecord-spatial/active_record/models/spatial_column.rb +1 -2
- data/lib/activerecord-spatial/active_record/models/spatial_ref_sys.rb +5 -6
- data/lib/activerecord-spatial/active_record.rb +0 -1
- data/lib/activerecord-spatial/associations/active_record.rb +62 -120
- data/lib/activerecord-spatial/associations/base.rb +26 -75
- data/lib/activerecord-spatial/associations/preloader/spatial_association.rb +57 -0
- data/lib/activerecord-spatial/associations/reflection/spatial_reflection.rb +41 -0
- data/lib/activerecord-spatial/associations.rb +26 -4
- data/lib/activerecord-spatial/spatial_columns.rb +85 -94
- data/lib/activerecord-spatial/spatial_function.rb +62 -51
- data/lib/activerecord-spatial/spatial_scope_constants/postgis_2_0.rb +48 -0
- data/lib/activerecord-spatial/spatial_scope_constants/postgis_2_2.rb +46 -0
- data/lib/activerecord-spatial/spatial_scope_constants/postgis_legacy.rb +30 -0
- data/lib/activerecord-spatial/spatial_scope_constants.rb +10 -61
- data/lib/activerecord-spatial/spatial_scopes.rb +47 -49
- data/lib/activerecord-spatial/version.rb +1 -2
- data/lib/activerecord-spatial.rb +2 -6
- data/lib/tasks/test.rake +21 -19
- data/test/.rubocop.yml +35 -0
- data/test/accessors_geographies_tests.rb +19 -19
- data/test/accessors_geometries_tests.rb +19 -19
- data/test/adapter_tests.rb +1 -2
- data/test/associations_tests.rb +181 -203
- data/test/geography_column_tests.rb +2 -3
- data/test/geometry_column_tests.rb +1 -2
- data/test/models/bar.rb +2 -3
- data/test/models/blort.rb +1 -2
- data/test/models/foo.rb +2 -3
- data/test/models/foo3d.rb +2 -3
- data/test/models/foo_geography.rb +2 -3
- data/test/models/zortable.rb +2 -3
- data/test/spatial_function_tests.rb +12 -17
- data/test/spatial_scopes_geographies_tests.rb +17 -20
- data/test/spatial_scopes_tests.rb +84 -75
- data/test/test_helper.rb +66 -79
- metadata +16 -14
- data/lib/activerecord-spatial/associations/active_record_3.rb +0 -123
data/lib/activerecord-spatial.rb
CHANGED
@@ -1,8 +1,6 @@
|
|
1
1
|
|
2
2
|
require 'geos-extensions'
|
3
3
|
|
4
|
-
require 'activerecord-spatial/active_record/connection_adapters/postgresql/adapter_extensions'
|
5
|
-
|
6
4
|
module ActiveRecordSpatial
|
7
5
|
BASE_PATH = File.dirname(__FILE__)
|
8
6
|
|
@@ -22,11 +20,9 @@ module ActiveRecordSpatial
|
|
22
20
|
# Allows you to modify the default geometry column name for all of
|
23
21
|
# ActiveRecordSpatial. This is useful when you have a common column name
|
24
22
|
# for all of your geometry columns, such as +wkb+, +feature+, +geom+, etc.
|
25
|
-
|
26
|
-
@default_column_name = column_name
|
27
|
-
end
|
23
|
+
attr_writer :default_column_name
|
28
24
|
end
|
29
25
|
end
|
30
26
|
|
27
|
+
require 'activerecord-spatial/active_record/connection_adapters/postgresql/adapter_extensions'
|
31
28
|
require 'activerecord-spatial/active_record'
|
32
|
-
|
data/lib/tasks/test.rake
CHANGED
@@ -1,14 +1,17 @@
|
|
1
1
|
|
2
2
|
namespace :test do
|
3
|
-
desc
|
4
|
-
task :
|
3
|
+
desc 'Dumps data from the geometry_columns and spatial_ref_sys tables.'
|
4
|
+
task postgis_dump: :environment do
|
5
5
|
abcs = ActiveRecord::Base.configurations
|
6
|
-
ENV['PGHOST']
|
7
|
-
ENV['PGPORT']
|
8
|
-
ENV['PGPASSWORD'] = abcs[Rails.env][
|
9
|
-
search_path = abcs[Rails.env][
|
6
|
+
ENV['PGHOST'] = abcs[Rails.env]['host'] if abcs[Rails.env]['host']
|
7
|
+
ENV['PGPORT'] = abcs[Rails.env]['port'].to_s if abcs[Rails.env]['port']
|
8
|
+
ENV['PGPASSWORD'] = abcs[Rails.env]['password'].to_s if abcs[Rails.env]['password']
|
9
|
+
search_path = abcs[Rails.env]['schema_search_path']
|
10
|
+
|
10
11
|
unless search_path.blank?
|
11
|
-
search_path = search_path.split(
|
12
|
+
search_path = search_path.split(',').map { |schema|
|
13
|
+
"--schema=#{schema.strip}"
|
14
|
+
}.join(' ')
|
12
15
|
end
|
13
16
|
|
14
17
|
tables = %w{ geometry_columns spatial_ref_sys }.select do |table|
|
@@ -18,28 +21,27 @@ namespace :test do
|
|
18
21
|
|
19
22
|
pp tables
|
20
23
|
|
21
|
-
|
22
|
-
`pg_dump -i -U "#{abcs[Rails.env][
|
24
|
+
if !tables.empty?
|
25
|
+
`pg_dump -i -U "#{abcs[Rails.env]['username']}" --data-only -t #{tables.join(' -t ')} -x -O -f db/#{Rails.env}_postgis_tables.sql #{search_path} #{abcs[Rails.env]['database']}`
|
23
26
|
else
|
24
27
|
File.open("db/#{Rails.env}_postgis_tables.sql", 'w') do |fp|
|
25
|
-
fp.puts
|
28
|
+
fp.puts '-- empty, do geometry_columns and spatial_ref_sys tables exist?'
|
26
29
|
end
|
27
30
|
end
|
28
31
|
end
|
29
32
|
|
30
|
-
desc
|
31
|
-
task :
|
33
|
+
desc 'Loads the geometry_columns and spatial_ref_sys tables.'
|
34
|
+
task postgis_load: :environment do
|
32
35
|
abcs = ActiveRecord::Base.configurations
|
33
|
-
ENV['PGHOST']
|
34
|
-
ENV['PGPORT']
|
35
|
-
ENV['PGPASSWORD'] = abcs[
|
36
|
+
ENV['PGHOST'] = abcs['test']['host'] if abcs['test']['host']
|
37
|
+
ENV['PGPORT'] = abcs['test']['port'].to_s if abcs['test']['port']
|
38
|
+
ENV['PGPASSWORD'] = abcs['test']['password'].to_s if abcs['test']['password']
|
36
39
|
|
37
|
-
`psql -U "#{abcs[
|
40
|
+
`psql -U "#{abcs['test']['username']}" -f #{Rails.root}/db/#{Rails.env}_postgis_tables.sql #{abcs['test']['database']}`
|
38
41
|
end
|
39
42
|
|
40
|
-
desc
|
41
|
-
task :
|
43
|
+
desc 'Dumps and loads the geometry_columns and spatial_ref_sys tables.'
|
44
|
+
task postgis_clone: [:postgis_dump, :postgis_load]
|
42
45
|
end
|
43
46
|
|
44
47
|
Rake::Task['test:prepare'].enhance(['test:postgis_clone'])
|
45
|
-
|
data/test/.rubocop.yml
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
|
2
|
+
inherit_from:
|
3
|
+
- ../.rubocop.yml
|
4
|
+
|
5
|
+
Metrics/BlockLength:
|
6
|
+
Description: 'Avoid long blocks with many lines.'
|
7
|
+
Enabled: false
|
8
|
+
|
9
|
+
Metrics/ClassLength:
|
10
|
+
Description: 'Avoid classes longer than 300 lines of code.'
|
11
|
+
Enabled: false
|
12
|
+
Max: 300
|
13
|
+
|
14
|
+
Lint/EmptyInterpolation:
|
15
|
+
Description: 'Checks for empty string interpolation.'
|
16
|
+
Enabled: false
|
17
|
+
|
18
|
+
Style/StringLiterals:
|
19
|
+
Description: 'Checks if uses of quotes match the configured preference.'
|
20
|
+
StyleGuide: '#consistent-string-literals'
|
21
|
+
Enabled: false
|
22
|
+
|
23
|
+
Style/BlockComments:
|
24
|
+
Description: 'Do not use block comments.'
|
25
|
+
StyleGuide: '#no-block-comments'
|
26
|
+
Enabled: false
|
27
|
+
|
28
|
+
Style/BlockDelimiters:
|
29
|
+
Description: >-
|
30
|
+
Avoid using {...} for multi-line blocks (multiline chaining is
|
31
|
+
always ugly).
|
32
|
+
Prefer {...} over do...end for single-line blocks.
|
33
|
+
StyleGuide: '#single-line-blocks'
|
34
|
+
Enabled: false
|
35
|
+
EnforcedStyle: braces_for_chaining
|
@@ -1,5 +1,5 @@
|
|
1
1
|
|
2
|
-
|
2
|
+
$LOAD_PATH << File.dirname(__FILE__)
|
3
3
|
require 'test_helper'
|
4
4
|
|
5
5
|
class AccessorsGeographiesTests < ActiveRecordSpatialTestCase
|
@@ -62,8 +62,8 @@ class AccessorsGeographiesTests < ActiveRecordSpatialTestCase
|
|
62
62
|
|
63
63
|
def test_geos_create
|
64
64
|
foo = FooGeography.create!(
|
65
|
-
:
|
66
|
-
:
|
65
|
+
name: 'test_geos_create',
|
66
|
+
the_geom: Geos.read(POINT_WKT)
|
67
67
|
)
|
68
68
|
|
69
69
|
foo.reload
|
@@ -72,8 +72,8 @@ class AccessorsGeographiesTests < ActiveRecordSpatialTestCase
|
|
72
72
|
|
73
73
|
def test_wkt_create
|
74
74
|
foo = FooGeography.create!(
|
75
|
-
:
|
76
|
-
:
|
75
|
+
name: 'test_wkt_create',
|
76
|
+
the_geom: POINT_WKT
|
77
77
|
)
|
78
78
|
|
79
79
|
foo.reload
|
@@ -82,8 +82,8 @@ class AccessorsGeographiesTests < ActiveRecordSpatialTestCase
|
|
82
82
|
|
83
83
|
def test_wkb_create
|
84
84
|
foo = FooGeography.create!(
|
85
|
-
:
|
86
|
-
:
|
85
|
+
name: 'test_wkb_create',
|
86
|
+
the_geom: POINT_WKB
|
87
87
|
)
|
88
88
|
|
89
89
|
foo.reload
|
@@ -92,8 +92,8 @@ class AccessorsGeographiesTests < ActiveRecordSpatialTestCase
|
|
92
92
|
|
93
93
|
def test_ewkt_create_with_srid_4326
|
94
94
|
foo = FooGeography.create!(
|
95
|
-
:
|
96
|
-
:
|
95
|
+
name: 'test_ewkt_create_with_srid_4326',
|
96
|
+
the_other_geom: POINT_EWKT
|
97
97
|
)
|
98
98
|
|
99
99
|
foo.reload
|
@@ -102,8 +102,8 @@ class AccessorsGeographiesTests < ActiveRecordSpatialTestCase
|
|
102
102
|
|
103
103
|
def test_create_with_no_srid_converting_to_4326
|
104
104
|
foo = FooGeography.create!(
|
105
|
-
:
|
106
|
-
:
|
105
|
+
name: 'test_ewkt_create_with_no_srid_converting_to_4326',
|
106
|
+
the_other_geom: POINT_WKT
|
107
107
|
)
|
108
108
|
|
109
109
|
foo.reload
|
@@ -112,8 +112,8 @@ class AccessorsGeographiesTests < ActiveRecordSpatialTestCase
|
|
112
112
|
|
113
113
|
def test_create_with_no_srid_converting_to_minus_1
|
114
114
|
foo = FooGeography.create!(
|
115
|
-
:
|
116
|
-
:
|
115
|
+
name: 'test_ewkt_create_with_no_srid_converting_to_minus_1',
|
116
|
+
the_geom: POINT_EWKT
|
117
117
|
)
|
118
118
|
|
119
119
|
foo.reload
|
@@ -122,15 +122,15 @@ class AccessorsGeographiesTests < ActiveRecordSpatialTestCase
|
|
122
122
|
|
123
123
|
def test_create_with_converting_from_900913_to_4326
|
124
124
|
FooGeography.create!(
|
125
|
-
:
|
126
|
-
:
|
125
|
+
name: 'test_create_with_converting_from_900913_to_4326',
|
126
|
+
the_other_geom: "SRID=900913; #{POINT_WKT}"
|
127
127
|
)
|
128
128
|
end
|
129
129
|
|
130
130
|
def test_ewkt_create_with_srid_default
|
131
131
|
foo = FooGeography.create!(
|
132
|
-
:
|
133
|
-
:
|
132
|
+
name: 'test_ewkt_create_with_srid_default',
|
133
|
+
the_other_geom: POINT_EWKT_WITH_DEFAULT
|
134
134
|
)
|
135
135
|
|
136
136
|
foo.reload
|
@@ -139,8 +139,8 @@ class AccessorsGeographiesTests < ActiveRecordSpatialTestCase
|
|
139
139
|
|
140
140
|
def test_ewkb_create
|
141
141
|
foo = FooGeography.create!(
|
142
|
-
:
|
143
|
-
:
|
142
|
+
name: 'test_ewkb_create',
|
143
|
+
the_other_geom: POINT_EWKB
|
144
144
|
)
|
145
145
|
|
146
146
|
foo.reload
|
@@ -1,5 +1,5 @@
|
|
1
1
|
|
2
|
-
|
2
|
+
$LOAD_PATH << File.dirname(__FILE__)
|
3
3
|
require 'test_helper'
|
4
4
|
|
5
5
|
class AccessorsGeometriesTests < ActiveRecordSpatialTestCase
|
@@ -62,8 +62,8 @@ class AccessorsGeometriesTests < ActiveRecordSpatialTestCase
|
|
62
62
|
|
63
63
|
def test_geos_create
|
64
64
|
foo = Foo.create!(
|
65
|
-
:
|
66
|
-
:
|
65
|
+
name: 'test_geos_create',
|
66
|
+
the_geom: Geos.read(POINT_WKT)
|
67
67
|
)
|
68
68
|
|
69
69
|
foo.reload
|
@@ -72,8 +72,8 @@ class AccessorsGeometriesTests < ActiveRecordSpatialTestCase
|
|
72
72
|
|
73
73
|
def test_wkt_create
|
74
74
|
foo = Foo.create!(
|
75
|
-
:
|
76
|
-
:
|
75
|
+
name: 'test_wkt_create',
|
76
|
+
the_geom: POINT_WKT
|
77
77
|
)
|
78
78
|
|
79
79
|
foo.reload
|
@@ -82,8 +82,8 @@ class AccessorsGeometriesTests < ActiveRecordSpatialTestCase
|
|
82
82
|
|
83
83
|
def test_wkb_create
|
84
84
|
foo = Foo.create!(
|
85
|
-
:
|
86
|
-
:
|
85
|
+
name: 'test_wkb_create',
|
86
|
+
the_geom: POINT_WKB
|
87
87
|
)
|
88
88
|
|
89
89
|
foo.reload
|
@@ -92,8 +92,8 @@ class AccessorsGeometriesTests < ActiveRecordSpatialTestCase
|
|
92
92
|
|
93
93
|
def test_ewkt_create_with_srid_4326
|
94
94
|
foo = Foo.create!(
|
95
|
-
:
|
96
|
-
:
|
95
|
+
name: 'test_ewkt_create_with_srid_4326',
|
96
|
+
the_other_geom: POINT_EWKT
|
97
97
|
)
|
98
98
|
|
99
99
|
foo.reload
|
@@ -102,8 +102,8 @@ class AccessorsGeometriesTests < ActiveRecordSpatialTestCase
|
|
102
102
|
|
103
103
|
def test_create_with_no_srid_converting_to_4326
|
104
104
|
foo = Foo.create!(
|
105
|
-
:
|
106
|
-
:
|
105
|
+
name: 'test_ewkt_create_with_no_srid_converting_to_4326',
|
106
|
+
the_other_geom: POINT_WKT
|
107
107
|
)
|
108
108
|
|
109
109
|
foo.reload
|
@@ -112,8 +112,8 @@ class AccessorsGeometriesTests < ActiveRecordSpatialTestCase
|
|
112
112
|
|
113
113
|
def test_create_with_no_srid_converting_to_minus_1
|
114
114
|
foo = Foo.create!(
|
115
|
-
:
|
116
|
-
:
|
115
|
+
name: 'test_ewkt_create_with_no_srid_converting_to_minus_1',
|
116
|
+
the_geom: POINT_EWKT
|
117
117
|
)
|
118
118
|
|
119
119
|
foo.reload
|
@@ -123,16 +123,16 @@ class AccessorsGeometriesTests < ActiveRecordSpatialTestCase
|
|
123
123
|
def test_create_with_converting_from_900913_to_4326
|
124
124
|
assert_raise(ActiveRecordSpatial::GeometryColumns::CantConvertSRID) do
|
125
125
|
Foo.create!(
|
126
|
-
:
|
127
|
-
:
|
126
|
+
name: 'test_create_with_converting_from_900913_to_4326',
|
127
|
+
the_other_geom: "SRID=900913; #{POINT_WKT}"
|
128
128
|
)
|
129
129
|
end
|
130
130
|
end
|
131
131
|
|
132
132
|
def test_ewkt_create_with_srid_default
|
133
133
|
foo = Foo.create!(
|
134
|
-
:
|
135
|
-
:
|
134
|
+
name: 'test_ewkt_create_with_srid_default',
|
135
|
+
the_other_geom: POINT_EWKT_WITH_DEFAULT
|
136
136
|
)
|
137
137
|
|
138
138
|
foo.reload
|
@@ -141,8 +141,8 @@ class AccessorsGeometriesTests < ActiveRecordSpatialTestCase
|
|
141
141
|
|
142
142
|
def test_ewkb_create
|
143
143
|
foo = Foo.create!(
|
144
|
-
:
|
145
|
-
:
|
144
|
+
name: 'test_ewkb_create',
|
145
|
+
the_other_geom: POINT_EWKB
|
146
146
|
)
|
147
147
|
|
148
148
|
foo.reload
|
data/test/adapter_tests.rb
CHANGED