geos-extensions 0.2.2 → 0.3.0

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.
Files changed (55) hide show
  1. checksums.yaml +15 -0
  2. data/.gitignore +3 -0
  3. data/Gemfile +17 -0
  4. data/Guardfile +17 -0
  5. data/MIT-LICENSE +1 -1
  6. data/README.rdoc +19 -91
  7. data/Rakefile +1 -12
  8. data/geos-extensions.gemspec +1 -9
  9. data/lib/geos-extensions.rb +1 -9
  10. data/lib/geos/coordinate_sequence.rb +92 -0
  11. data/lib/geos/extensions/version.rb +1 -1
  12. data/lib/geos/geometry.rb +252 -0
  13. data/lib/geos/geometry_collection.rb +60 -0
  14. data/lib/geos/geos_helper.rb +86 -72
  15. data/lib/geos/google_maps.rb +1 -0
  16. data/lib/geos/google_maps/api_2.rb +9 -23
  17. data/lib/geos/google_maps/api_3.rb +10 -24
  18. data/lib/geos/google_maps/api_common.rb +41 -0
  19. data/lib/geos/line_string.rb +15 -0
  20. data/lib/geos/multi_line_string.rb +15 -0
  21. data/lib/geos/multi_point.rb +15 -0
  22. data/lib/geos/multi_polygon.rb +27 -0
  23. data/lib/geos/point.rb +120 -0
  24. data/lib/geos/polygon.rb +158 -0
  25. data/lib/geos/yaml.rb +30 -0
  26. data/lib/geos/yaml/psych.rb +18 -0
  27. data/lib/geos/yaml/syck.rb +41 -0
  28. data/lib/geos_extensions.rb +110 -711
  29. data/test/google_maps_api_2_tests.rb +54 -32
  30. data/test/google_maps_api_3_tests.rb +58 -36
  31. data/test/google_maps_polyline_encoder_tests.rb +1 -1
  32. data/test/helper_tests.rb +28 -0
  33. data/test/misc_tests.rb +130 -10
  34. data/test/reader_tests.rb +38 -1
  35. data/test/test_helper.rb +54 -146
  36. data/test/writer_tests.rb +329 -10
  37. data/test/yaml_tests.rb +203 -0
  38. metadata +26 -102
  39. data/app/models/geos/geometry_column.rb +0 -39
  40. data/app/models/geos/spatial_ref_sys.rb +0 -12
  41. data/lib/geos/active_record_extensions.rb +0 -12
  42. data/lib/geos/active_record_extensions/connection_adapters/postgresql_adapter.rb +0 -151
  43. data/lib/geos/active_record_extensions/spatial_columns.rb +0 -367
  44. data/lib/geos/active_record_extensions/spatial_scopes.rb +0 -493
  45. data/lib/geos/rails/engine.rb +0 -6
  46. data/lib/tasks/test.rake +0 -42
  47. data/test/adapter_tests.rb +0 -38
  48. data/test/database.yml +0 -17
  49. data/test/fixtures/foo3ds.yml +0 -16
  50. data/test/fixtures/foo_geographies.yml +0 -16
  51. data/test/fixtures/foos.yml +0 -16
  52. data/test/geography_columns_tests.rb +0 -176
  53. data/test/geometry_columns_tests.rb +0 -178
  54. data/test/spatial_scopes_geographies_tests.rb +0 -107
  55. data/test/spatial_scopes_tests.rb +0 -337
@@ -0,0 +1,203 @@
1
+ # encoding: UTF-8
2
+
3
+ $: << File.dirname(__FILE__)
4
+ require 'test_helper'
5
+
6
+ class YamlTests < MiniTest::Unit::TestCase
7
+ include TestHelper
8
+
9
+ # This is for 1.8 support, makes tests easier
10
+ unless YAML.const_defined?('ENGINE')
11
+ YAML::ENGINE = 'syck'
12
+ end
13
+
14
+ def munge_expected(expected)
15
+ # Sych expects a space after the tag, psych does not
16
+ if YAML::ENGINE == 'syck'
17
+ expected.sub!(/\n/, " \n")
18
+ else
19
+ expected
20
+ end
21
+ end
22
+
23
+ def test_point_wkt
24
+ geom = Geos.read('POINT(5 7)')
25
+ yaml = YAML.dump(geom)
26
+
27
+ expected = munge_expected <<-EOS
28
+ --- !ruby/object:Geos::Point
29
+ geom: POINT (5.0000000000000000 7.0000000000000000)
30
+ EOS
31
+
32
+ assert_equal(expected, yaml)
33
+
34
+ new_geom = YAML.load(yaml)
35
+ assert_kind_of(Geos::Point, new_geom)
36
+ assert_in_delta(5, new_geom.x, DELTA_TOLERANCE)
37
+ assert_in_delta(7, new_geom.y, DELTA_TOLERANCE)
38
+ end
39
+
40
+ def test_line_string
41
+ geom = Geos.read('LINESTRING (0 0, 10 10)')
42
+ yaml = YAML.dump(geom)
43
+
44
+ expected = munge_expected <<-EOS
45
+ --- !ruby/object:Geos::LineString
46
+ geom: LINESTRING (0.0000000000000000 0.0000000000000000, 10.0000000000000000 10.0000000000000000)
47
+ EOS
48
+ assert_equal(expected, yaml)
49
+
50
+ new_geom = YAML.load(yaml)
51
+ assert_kind_of(Geos::LineString, new_geom)
52
+
53
+ assert_equal(2, new_geom.num_points)
54
+
55
+ point = geom.point_n(0)
56
+ assert_equal(0, point.x)
57
+ assert_equal(0, point.y)
58
+
59
+ point = geom.point_n(1)
60
+ assert_equal(10, point.x)
61
+ assert_equal(10, point.y)
62
+ end
63
+
64
+ def test_polygon
65
+ geom = Geos.read('POLYGON ((0 0, 5 0, 5 5, 0 5, 0 0))')
66
+ yaml = YAML.dump(geom)
67
+
68
+ expected = if YAML::ENGINE == 'syck' || RUBY_ENGINE == 'jruby'
69
+ munge_expected(<<-EOS)
70
+ --- !ruby/object:Geos::Polygon
71
+ geom: POLYGON ((0.0000000000000000 0.0000000000000000, 5.0000000000000000 0.0000000000000000, 5.0000000000000000 5.0000000000000000, 0.0000000000000000 5.0000000000000000, 0.0000000000000000 0.0000000000000000))
72
+ EOS
73
+ else
74
+ <<-EOS
75
+ --- !ruby/object:Geos::Polygon
76
+ geom: POLYGON ((0.0000000000000000 0.0000000000000000, 5.0000000000000000 0.0000000000000000,
77
+ 5.0000000000000000 5.0000000000000000, 0.0000000000000000 5.0000000000000000, 0.0000000000000000
78
+ 0.0000000000000000))
79
+ EOS
80
+ end
81
+
82
+ assert_equal(expected, yaml)
83
+
84
+ new_geom = YAML.load(yaml)
85
+ assert_kind_of(Geos::Polygon, new_geom)
86
+
87
+ assert_equal(0, new_geom.num_interior_rings)
88
+ assert_equal(5, new_geom.exterior_ring.num_points)
89
+ end
90
+
91
+ def test_geometry_collection
92
+ geom = Geos.read('GEOMETRYCOLLECTION (POINT(5 7))')
93
+ yaml = YAML.dump(geom)
94
+
95
+ expected = munge_expected <<-EOS
96
+ --- !ruby/object:Geos::GeometryCollection
97
+ geom: GEOMETRYCOLLECTION (POINT (5.0000000000000000 7.0000000000000000))
98
+ EOS
99
+ assert_equal(expected, yaml)
100
+
101
+ new_geom = YAML.load(yaml)
102
+ assert_kind_of(Geos::GeometryCollection, new_geom)
103
+ assert_equal(1, new_geom.to_a.count)
104
+ end
105
+
106
+ def test_load_point_with_srid
107
+ yaml = <<-EOS
108
+ --- !ruby/object:Geos::Point
109
+ geom: SRID=4326;POINT (5.0000000000000000 7.0000000000000000)
110
+ EOS
111
+
112
+ new_geom = YAML.load(yaml)
113
+ assert_kind_of(Geos::Point, new_geom)
114
+ assert_equal(4326, new_geom.srid)
115
+ assert_equal(5, new_geom.x)
116
+ assert_equal(7, new_geom.y)
117
+ end
118
+
119
+ def test_load_wkb_hex
120
+ yaml = <<-EOS
121
+ --- !ruby/object:Geos::Point
122
+ geom: 010100000000000000000014400000000000001C40
123
+ EOS
124
+
125
+ new_geom = YAML.load(yaml)
126
+ assert_kind_of(Geos::Point, new_geom)
127
+ assert_equal(5, new_geom.x)
128
+ assert_equal(7, new_geom.y)
129
+ end
130
+
131
+ def test_load_ewkb_hex
132
+ yaml = <<-EOS
133
+ --- !ruby/object:Geos::Point
134
+ geom: 0101000020E610000000000000000014400000000000001C40
135
+ EOS
136
+
137
+ new_geom = YAML.load(yaml)
138
+ assert_kind_of(Geos::Point, new_geom)
139
+ assert_equal(4326, new_geom.srid)
140
+ assert_equal(5, new_geom.x)
141
+ assert_equal(7, new_geom.y)
142
+ end
143
+
144
+ def test_load_g_lat_lng_bounds_string
145
+ yaml = <<-EOS
146
+ --- !ruby/object:Geos::Polygon
147
+ geom: ((0.1, 0.1), (5.2, 5.2))
148
+ EOS
149
+
150
+ new_geom = YAML.load(yaml)
151
+ assert_kind_of(Geos::Polygon, new_geom)
152
+ assert_equal(0.1, new_geom.sw.x)
153
+ assert_equal(0.1, new_geom.sw.y)
154
+ end
155
+
156
+ def test_load_g_lat_lng_bounds_url_value
157
+ yaml = <<-EOS
158
+ --- !ruby/object:Geos::Polygon
159
+ geom: 0.1,0.1,5.2,5.2
160
+ EOS
161
+
162
+ new_geom = YAML.load(yaml)
163
+ assert_kind_of(Geos::Polygon, new_geom)
164
+ assert_equal(0.1, new_geom.sw.x)
165
+ assert_equal(0.1, new_geom.sw.y)
166
+ end
167
+
168
+ def test_load_g_lat_lng_string
169
+ yaml = <<-EOS
170
+ --- !ruby/object:Geos::Point
171
+ geom: (5, 7)
172
+ EOS
173
+
174
+ new_geom = YAML.load(yaml)
175
+ assert_kind_of(Geos::Point, new_geom)
176
+ assert_equal(7, new_geom.x)
177
+ assert_equal(5, new_geom.y)
178
+ end
179
+
180
+ def test_load_g_lat_lng_url_value
181
+ yaml = <<-EOS
182
+ --- !ruby/object:Geos::Point
183
+ geom: "5,7"
184
+ EOS
185
+
186
+ new_geom = YAML.load(yaml)
187
+ assert_kind_of(Geos::Point, new_geom)
188
+ assert_equal(7, new_geom.x)
189
+ assert_equal(5, new_geom.y)
190
+ end
191
+
192
+ def test_load_box2d
193
+ yaml = <<-EOS
194
+ --- !ruby/object:Geos::Polygon
195
+ geom: BOX(0.1 0.1, 5.2 5.2)
196
+ EOS
197
+
198
+ new_geom = YAML.load(yaml)
199
+ assert_kind_of(Geos::Polygon, new_geom)
200
+ assert_equal(0.1, new_geom.sw.x)
201
+ assert_equal(0.1, new_geom.sw.y)
202
+ end
203
+ end
metadata CHANGED
@@ -1,96 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: geos-extensions
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
5
- prerelease:
4
+ version: 0.3.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - J Smith
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2012-08-31 00:00:00.000000000 Z
11
+ date: 2013-05-21 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
- name: activerecord
16
14
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
- requirements:
19
- - - ! '>='
20
- - !ruby/object:Gem::Version
21
- version: '2.3'
22
- type: :runtime
23
- prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
27
- - - ! '>='
28
- - !ruby/object:Gem::Version
29
- version: '2.3'
30
- - !ruby/object:Gem::Dependency
31
- name: ffi-geos
32
- requirement: !ruby/object:Gem::Requirement
33
- none: false
34
15
  requirements:
35
16
  - - ~>
36
17
  - !ruby/object:Gem::Version
37
- version: 0.0.4
38
- type: :runtime
39
- prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
43
- - - ~>
44
- - !ruby/object:Gem::Version
45
- version: 0.0.4
46
- - !ruby/object:Gem::Dependency
47
- name: pg
48
- requirement: !ruby/object:Gem::Requirement
49
- none: false
50
- requirements:
51
- - - ! '>='
52
- - !ruby/object:Gem::Version
53
- version: '0'
54
- type: :runtime
55
- prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
- requirements:
59
- - - ! '>='
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- - !ruby/object:Gem::Dependency
63
- name: rdoc
64
- requirement: !ruby/object:Gem::Requirement
65
- none: false
66
- requirements:
67
- - - ! '>='
68
- - !ruby/object:Gem::Version
69
- version: '0'
70
- type: :runtime
71
- prerelease: false
18
+ version: '0.1'
72
19
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
- requirements:
75
- - - ! '>='
76
- - !ruby/object:Gem::Version
77
- version: '0'
78
- - !ruby/object:Gem::Dependency
79
- name: rake
80
- requirement: !ruby/object:Gem::Requirement
81
- none: false
82
20
  requirements:
83
21
  - - ~>
84
22
  - !ruby/object:Gem::Version
85
- version: '0.9'
23
+ version: '0.1'
86
24
  type: :runtime
87
25
  prerelease: false
88
- version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
- requirements:
91
- - - ~>
92
- - !ruby/object:Gem::Version
93
- version: '0.9'
26
+ name: ffi-geos
94
27
  description: Extensions for the GEOS library.
95
28
  email: code@zoocasa.com
96
29
  executables: []
@@ -100,80 +33,71 @@ extra_rdoc_files:
100
33
  files:
101
34
  - .gitignore
102
35
  - Gemfile
36
+ - Guardfile
103
37
  - MIT-LICENSE
104
38
  - README.rdoc
105
39
  - Rakefile
106
- - app/models/geos/geometry_column.rb
107
- - app/models/geos/spatial_ref_sys.rb
108
40
  - geos-extensions.gemspec
109
41
  - lib/geos-extensions.rb
110
- - lib/geos/active_record_extensions.rb
111
- - lib/geos/active_record_extensions/connection_adapters/postgresql_adapter.rb
112
- - lib/geos/active_record_extensions/spatial_columns.rb
113
- - lib/geos/active_record_extensions/spatial_scopes.rb
42
+ - lib/geos/coordinate_sequence.rb
114
43
  - lib/geos/extensions/version.rb
44
+ - lib/geos/geometry.rb
45
+ - lib/geos/geometry_collection.rb
115
46
  - lib/geos/geos_helper.rb
116
47
  - lib/geos/google_maps.rb
117
48
  - lib/geos/google_maps/api_2.rb
118
49
  - lib/geos/google_maps/api_3.rb
50
+ - lib/geos/google_maps/api_common.rb
119
51
  - lib/geos/google_maps/polyline_encoder.rb
120
- - lib/geos/rails/engine.rb
52
+ - lib/geos/line_string.rb
53
+ - lib/geos/multi_line_string.rb
54
+ - lib/geos/multi_point.rb
55
+ - lib/geos/multi_polygon.rb
56
+ - lib/geos/point.rb
57
+ - lib/geos/polygon.rb
58
+ - lib/geos/yaml.rb
59
+ - lib/geos/yaml/psych.rb
60
+ - lib/geos/yaml/syck.rb
121
61
  - lib/geos_extensions.rb
122
- - lib/tasks/test.rake
123
- - test/adapter_tests.rb
124
- - test/database.yml
125
- - test/fixtures/foo3ds.yml
126
- - test/fixtures/foo_geographies.yml
127
- - test/fixtures/foos.yml
128
- - test/geography_columns_tests.rb
129
- - test/geometry_columns_tests.rb
130
62
  - test/google_maps_api_2_tests.rb
131
63
  - test/google_maps_api_3_tests.rb
132
64
  - test/google_maps_polyline_encoder_tests.rb
65
+ - test/helper_tests.rb
133
66
  - test/misc_tests.rb
134
67
  - test/reader_tests.rb
135
- - test/spatial_scopes_geographies_tests.rb
136
- - test/spatial_scopes_tests.rb
137
68
  - test/test_helper.rb
138
69
  - test/writer_tests.rb
70
+ - test/yaml_tests.rb
139
71
  homepage: http://github.com/zoocasa/geos-extensions
140
72
  licenses: []
73
+ metadata: {}
141
74
  post_install_message:
142
75
  rdoc_options: []
143
76
  require_paths:
144
77
  - lib
145
78
  required_ruby_version: !ruby/object:Gem::Requirement
146
- none: false
147
79
  requirements:
148
80
  - - ! '>='
149
81
  - !ruby/object:Gem::Version
150
82
  version: '0'
151
83
  required_rubygems_version: !ruby/object:Gem::Requirement
152
- none: false
153
84
  requirements:
154
85
  - - ! '>='
155
86
  - !ruby/object:Gem::Version
156
87
  version: '0'
157
88
  requirements: []
158
89
  rubyforge_project:
159
- rubygems_version: 1.8.23
90
+ rubygems_version: 2.0.3
160
91
  signing_key:
161
- specification_version: 3
92
+ specification_version: 4
162
93
  summary: Extensions for the GEOS library.
163
94
  test_files:
164
- - test/adapter_tests.rb
165
- - test/database.yml
166
- - test/fixtures/foo3ds.yml
167
- - test/fixtures/foo_geographies.yml
168
- - test/fixtures/foos.yml
169
- - test/geography_columns_tests.rb
170
- - test/geometry_columns_tests.rb
171
95
  - test/google_maps_api_2_tests.rb
172
96
  - test/google_maps_api_3_tests.rb
173
97
  - test/google_maps_polyline_encoder_tests.rb
98
+ - test/helper_tests.rb
174
99
  - test/misc_tests.rb
175
100
  - test/reader_tests.rb
176
- - test/spatial_scopes_geographies_tests.rb
177
- - test/spatial_scopes_tests.rb
178
101
  - test/test_helper.rb
179
102
  - test/writer_tests.rb
103
+ - test/yaml_tests.rb
@@ -1,39 +0,0 @@
1
-
2
- module Geos
3
- class GeometryColumn < ::ActiveRecord::Base
4
- set_table_name 'geometry_columns'
5
- set_inheritance_column 'nonexistent_column_name_type'
6
-
7
- belongs_to :spatial_ref_sys,
8
- :foreign_key => :srid,
9
- :inverse_of => :geometry_columns
10
-
11
- after_initialize proc { |row|
12
- row.f_table_catalog ||= ''
13
- }
14
-
15
- validates :f_table_catalog,
16
- :length => {
17
- :minimum => 0
18
- }
19
-
20
- validates :f_table_schema,
21
- :presence => true
22
-
23
- validates :f_table_name,
24
- :presence => true
25
-
26
- validates :f_geometry_column,
27
- :presence => true
28
-
29
- validates :coord_dimension,
30
- :presence => true
31
-
32
- validates :srid,
33
- :presence => true
34
-
35
- validates :type,
36
- :presence => true
37
- end
38
- end
39
-
@@ -1,12 +0,0 @@
1
-
2
- module Geos
3
- class SpatialRefSys < ::ActiveRecord::Base
4
- set_table_name 'spatial_ref_sys'
5
- set_primary_key 'srid'
6
-
7
- has_many :geometry_columns,
8
- :foreign_key => :srid,
9
- :inverse_of => :spatial_ref_sys
10
- end
11
- end
12
-