rgeo-activerecord-dschee 5.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/History.md +207 -0
- data/LICENSE.txt +29 -0
- data/README.md +121 -0
- data/lib/rgeo-activerecord.rb +1 -0
- data/lib/rgeo/active_record.rb +8 -0
- data/lib/rgeo/active_record/arel_spatial_queries.rb +120 -0
- data/lib/rgeo/active_record/common_adapter_elements.rb +39 -0
- data/lib/rgeo/active_record/geometry_mixin.rb +58 -0
- data/lib/rgeo/active_record/spatial_expressions.rb +254 -0
- data/lib/rgeo/active_record/spatial_factory_store.rb +61 -0
- data/lib/rgeo/active_record/version.rb +5 -0
- metadata +154 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 1878a64950dfeca28535eda8b6599aa717d685c9
|
4
|
+
data.tar.gz: 81267038dfbb7ecc3e19ecdf6df1c29a51e7b572
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 21023f0ae7931de711cca2e2d780a6ea686348c1a7e4e72cc6fbf667f3dbaabc1de5ebbc36783da102994c516daf8534e1e5baddaf2480d60e6f7befead97085
|
7
|
+
data.tar.gz: b144106f54dc3c7fd9c2ee56eb614f9cd030988187a803851a9e7ad7f3f91e5f12f1a0242208ba390472a7bd748ed763cc6ff71c6c1e630d1aac754029d85fa3
|
data/History.md
ADDED
@@ -0,0 +1,207 @@
|
|
1
|
+
### 4.0.5 / 2015-12-29
|
2
|
+
|
3
|
+
* Fix #geometric_type_from_name for :geometrycollection
|
4
|
+
|
5
|
+
### 4.0.4 / 2015-12-29
|
6
|
+
|
7
|
+
* Restore rgeo/active_record.rb
|
8
|
+
|
9
|
+
### 4.0.3 / 2015-12-28
|
10
|
+
|
11
|
+
* Fix json parser for rgeo-geojson 0.4.0+
|
12
|
+
|
13
|
+
### 4.0.2 / 2015-12-28
|
14
|
+
|
15
|
+
* Remove unnecessary root namespacing
|
16
|
+
* Remove unnecessary namespace qualifiers
|
17
|
+
* Remove rgeo/active_record.rb
|
18
|
+
|
19
|
+
### 4.0.1 / 2015-12-25
|
20
|
+
|
21
|
+
* Rubocop style cleanup #31
|
22
|
+
* Do not distribute test files with gem
|
23
|
+
|
24
|
+
### 4.0.0 / 2015-05-24
|
25
|
+
|
26
|
+
* Remove GeoTableDefinitions, GeoConnectionAdapter
|
27
|
+
|
28
|
+
### 3.0.0 / 2015-05-09
|
29
|
+
|
30
|
+
* Remove AdapterTestHelper module
|
31
|
+
* Remove RGeoFactorySettings
|
32
|
+
* Remove #set_rgeo_factory_for_column, #rgeo_factory_for_column, etc
|
33
|
+
* Add SpatialFactoryStore (see https://github.com/rgeo/rgeo-activerecord/commit/b1da5cb222)
|
34
|
+
|
35
|
+
### 2.1.1 / 2015-03-18
|
36
|
+
|
37
|
+
* Fix collector calls for arel 6.0 API
|
38
|
+
|
39
|
+
### 2.1.0 / 2015-02-07
|
40
|
+
|
41
|
+
* Update visit API for arel 6.0
|
42
|
+
* Remove attribute caching (removed in AR 4.2)
|
43
|
+
* Remove support for `spatial: true` index option (use standard `using: :gist`)
|
44
|
+
|
45
|
+
### 2.0.0 / 2014-12-02
|
46
|
+
|
47
|
+
* Dump schema using new style hash - https://github.com/rgeo/rgeo-activerecord/pull/18
|
48
|
+
* Require ActiveRecord 4.2
|
49
|
+
|
50
|
+
### 1.2.0 / 2014-08-21
|
51
|
+
|
52
|
+
* Support ActiveRecord 4.2
|
53
|
+
|
54
|
+
### 1.1.0 / 2014-06-17
|
55
|
+
|
56
|
+
* Relax rgeo gem dependency
|
57
|
+
|
58
|
+
### 1.0.0 / 2014-05-06
|
59
|
+
|
60
|
+
* Require ruby 1.9.3+
|
61
|
+
* Require ActiveRecord 4+
|
62
|
+
* General refactoring and cleanup
|
63
|
+
|
64
|
+
### 0.6.0 / 2014-05-06
|
65
|
+
|
66
|
+
* Support Rails 4, Arel 4
|
67
|
+
|
68
|
+
### 0.5.0 / 2013-02-27
|
69
|
+
|
70
|
+
* No changes. Rereleased as 0.5.0 final.
|
71
|
+
|
72
|
+
|
73
|
+
### 0.5.0.beta2 / 2013-02-04
|
74
|
+
|
75
|
+
* Revert change made to SpatialIndexDefinition in beta1.
|
76
|
+
* Fix some deprecations in the post-test cache cleanup.
|
77
|
+
|
78
|
+
|
79
|
+
### 0.5.0.beta1 / 2013-02-04
|
80
|
+
|
81
|
+
* Updates for compatibility with Rails 4 and support of Rails 4 oriented
|
82
|
+
adapters.
|
83
|
+
* Testing tool is better factored to allow customization of cleanup
|
84
|
+
|
85
|
+
|
86
|
+
### 0.4.6 / 2012-12-11
|
87
|
+
|
88
|
+
* You can now provide both a default and an override database config file in
|
89
|
+
the test helper.
|
90
|
+
* The gemspec no longer includes the timestamp in the version, so that
|
91
|
+
bundler can pull from github. (Reported by corneverbruggen)
|
92
|
+
|
93
|
+
|
94
|
+
### 0.4.5 / 2012-04-13
|
95
|
+
|
96
|
+
* Task hacker failed ungracefully when attempting to hack a nonexistent
|
97
|
+
task. Fixed.
|
98
|
+
|
99
|
+
|
100
|
+
### 0.4.4 / 2012-04-12
|
101
|
+
|
102
|
+
* Support cartesian bounding boxes in queries.
|
103
|
+
|
104
|
+
|
105
|
+
### 0.4.3 / 2012-02-22
|
106
|
+
|
107
|
+
* Some fixes for Rails 3.2 compatibility.
|
108
|
+
|
109
|
+
|
110
|
+
### 0.4.2 / 2012-01-09
|
111
|
+
|
112
|
+
* Added an "rgeo-activerecord.rb" wrapper so bundler's auto-require will
|
113
|
+
work without modification. (Reported by Mauricio Pasquier Juan.)
|
114
|
+
* Fixed unit tests so they actually pass...
|
115
|
+
|
116
|
+
|
117
|
+
### 0.4.1 / 2011-10-26
|
118
|
+
|
119
|
+
* Fixed wrong variable name crash in rgeo_factory_for_column (patch by Andy
|
120
|
+
Allan).
|
121
|
+
|
122
|
+
|
123
|
+
### 0.4.0 / 2011-08-15
|
124
|
+
|
125
|
+
* Several compatibility fixes for Rails 3.1.
|
126
|
+
* Revamped factory setter mechanism with a system that should be more
|
127
|
+
robust.
|
128
|
+
* Some general code cleanup.
|
129
|
+
|
130
|
+
|
131
|
+
### 0.3.4 / 2011-05-23
|
132
|
+
|
133
|
+
* Uses the mixin feature of RGeo 0.3 to add an as_json method to all
|
134
|
+
geometry objects. This should allow ActiveRecord's JSON serialization to
|
135
|
+
function for models with geometry fields. (Reported by thenetduck and
|
136
|
+
tonyc on github.)
|
137
|
+
|
138
|
+
|
139
|
+
### 0.3.3 / 2011-04-11
|
140
|
+
|
141
|
+
* A .gemspec file is now available for gem building and bundler git
|
142
|
+
integration.
|
143
|
+
|
144
|
+
|
145
|
+
### 0.3.2 / 2011-02-28
|
146
|
+
|
147
|
+
* Fixed a bug that sometimes caused spatial column detection to fail, which
|
148
|
+
could result in exceptions or incorrect spatial queries.
|
149
|
+
|
150
|
+
|
151
|
+
### 0.3.1 / 2011-02-28
|
152
|
+
|
153
|
+
* Fixed a bug that could cause some spatial ActiveRecord adapters to fail to
|
154
|
+
create multiple spatial columns in a migration.
|
155
|
+
|
156
|
+
|
157
|
+
### 0.3.0 / 2011-01-26
|
158
|
+
|
159
|
+
* Experimental support for complex spatial queries. (Requires Arel 2.1,
|
160
|
+
which is expected to be released with Rails 3.1.) Currently, only a
|
161
|
+
low-level Arel-based interface is supported.
|
162
|
+
* Better support for geography types in PostGIS.
|
163
|
+
* Adapters can now define additional column constructors.
|
164
|
+
* Support for spatial column constructors on change_table.
|
165
|
+
* Fixed column type inference for some cases where the column included Z
|
166
|
+
and/or M.
|
167
|
+
* IS NULL predicates now work properly with spatial types.
|
168
|
+
* Preferred attribute type is now :spatial rather than :geometry.
|
169
|
+
* The gem version is now accessible via an api.
|
170
|
+
* Some code reorganization.
|
171
|
+
|
172
|
+
|
173
|
+
### 0.2.4 / 2011-01-13
|
174
|
+
|
175
|
+
* Fixed a problem that caused a hang during rake db:rollback, as well as
|
176
|
+
probably certain other functions that use ActiveRecord::Base directly
|
177
|
+
rather than a subclass. (Reported by Alexander Graefe.)
|
178
|
+
|
179
|
+
|
180
|
+
### 0.2.3 / 2011-01-07
|
181
|
+
|
182
|
+
* Updated gem dependencies to include Arel 2.0.6, since some earlier Arel
|
183
|
+
versions weren't working. (Reported by Pirmin Kalberer.)
|
184
|
+
|
185
|
+
|
186
|
+
### 0.2.2 / 2011-01-06
|
187
|
+
|
188
|
+
* Some adjustments to the Arel integration for future Arel compatibility.
|
189
|
+
(Thanks to Aaron Patterson.)
|
190
|
+
* Support code for hacking ActiveRecord's rake tasks.
|
191
|
+
|
192
|
+
|
193
|
+
### 0.2.1 / 2010-12-27
|
194
|
+
|
195
|
+
* Support for RGeo features as nodes in the Arel AST.
|
196
|
+
* Basic utility Arel visitor methods for handling spatial equality nodes in
|
197
|
+
where-expressions.
|
198
|
+
|
199
|
+
|
200
|
+
### 0.2.0 / 2010-12-07
|
201
|
+
|
202
|
+
* Initial public alpha release. Spun rgeo-activerecord off from the core
|
203
|
+
rgeo gem.
|
204
|
+
* Support for setting factory by column.
|
205
|
+
|
206
|
+
|
207
|
+
For earlier history, see the History file for the rgeo gem.
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
# -----------------------------------------------------------------------------
|
2
|
+
# Copyright 2010-2012 Daniel Azuma
|
3
|
+
#
|
4
|
+
# All rights reserved.
|
5
|
+
#
|
6
|
+
# Redistribution and use in source and binary forms, with or without
|
7
|
+
# modification, are permitted provided that the following conditions are met:
|
8
|
+
#
|
9
|
+
# * Redistributions of source code must retain the above copyright notice,
|
10
|
+
# this list of conditions and the following disclaimer.
|
11
|
+
# * Redistributions in binary form must reproduce the above copyright notice,
|
12
|
+
# this list of conditions and the following disclaimer in the documentation
|
13
|
+
# and/or other materials provided with the distribution.
|
14
|
+
# * Neither the name of the copyright holder, nor the names of any other
|
15
|
+
# contributors to this software, may be used to endorse or promote products
|
16
|
+
# derived from this software without specific prior written permission.
|
17
|
+
#
|
18
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
19
|
+
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
20
|
+
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
21
|
+
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
22
|
+
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
23
|
+
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
24
|
+
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
25
|
+
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
26
|
+
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
27
|
+
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
28
|
+
# POSSIBILITY OF SUCH DAMAGE.
|
29
|
+
# -----------------------------------------------------------------------------
|
data/README.md
ADDED
@@ -0,0 +1,121 @@
|
|
1
|
+
## RGeo::ActiveRecord
|
2
|
+
|
3
|
+
[![Gem Version](https://badge.fury.io/rb/rgeo-activerecord.svg)](http://badge.fury.io/rb/rgeo-activerecord)
|
4
|
+
[![Build Status](https://travis-ci.org/rgeo/rgeo-activerecord.svg?branch=master)](https://travis-ci.org/rgeo/rgeo-activerecord)
|
5
|
+
[![Code Climate](https://codeclimate.com/github/rgeo/rgeo-activerecord.png)](https://codeclimate.com/github/rgeo/rgeo-activerecord)
|
6
|
+
|
7
|
+
RGeo::ActiveRecord is an optional [RGeo](http://github.com/dazuma/rgeo) module
|
8
|
+
providing spatial extensions for ActiveRecord, as well as a set of helpers for
|
9
|
+
writing spatial ActiveRecord adapters based on RGeo.
|
10
|
+
|
11
|
+
### Summary
|
12
|
+
|
13
|
+
RGeo is a key component for writing location-aware applications in the Ruby
|
14
|
+
programming language. At its core is an implementation of the industry
|
15
|
+
standard OGC Simple Features Specification, which provides data
|
16
|
+
representations of geometric objects such as points, lines, and polygons,
|
17
|
+
along with a set of geometric analysis operations. See the README for the
|
18
|
+
"rgeo" gem for more information.
|
19
|
+
|
20
|
+
RGeo::ActiveRecord is an optional RGeo add-on module providing spatial
|
21
|
+
extensions for ActiveRecord, as well as a set of helpers for writing spatial
|
22
|
+
ActiveRecord adapters based on RGeo.
|
23
|
+
|
24
|
+
### Installation
|
25
|
+
|
26
|
+
Gemfile:
|
27
|
+
|
28
|
+
```ruby
|
29
|
+
gem 'rgeo-activerecord'
|
30
|
+
```
|
31
|
+
|
32
|
+
`rgeo-activerecord` has the following requirements:
|
33
|
+
|
34
|
+
* Ruby 1.9.3 or later
|
35
|
+
* rgeo 0.3.20 or later.
|
36
|
+
|
37
|
+
The latest version supports ActiveRecord 4.2 and later.
|
38
|
+
|
39
|
+
Version `1.1.0` supports ActiveRecord 4.0 and 4.1
|
40
|
+
|
41
|
+
Version `0.6.0` supports earlier versions of ruby and ActiveRecord:
|
42
|
+
|
43
|
+
* Ruby 1.8.7 or later
|
44
|
+
* ActiveRecord 3.0.3 - 3.2.x
|
45
|
+
* rgeo 0.3.20 or later
|
46
|
+
* arel 2.0.6 or later
|
47
|
+
|
48
|
+
### Spatial Factories for Columns
|
49
|
+
|
50
|
+
`rgeo_factory_generator` and related methods were removed in version 4.0, since column types
|
51
|
+
are no longer tied to their database column in ActiveRecord 4.2.
|
52
|
+
|
53
|
+
Register spatial factories in the `SpatialFactoryStore` singleton class. Each spatial type
|
54
|
+
in your ActiveRecord models will use the `SpatialFactoryStore` to retrieve
|
55
|
+
a factory matching the properties of its type. For example, you can set a different
|
56
|
+
spatial factory for point types, or for types matching a specific SRID, or having
|
57
|
+
a Z coordinate, or any combination of attributes.
|
58
|
+
|
59
|
+
The supported keys when registering a spatial type are listed here with their default values
|
60
|
+
and other allowed values:
|
61
|
+
|
62
|
+
```
|
63
|
+
geo_type: "geometry", # point, polygon, line_string, geometry_collection,
|
64
|
+
# multi_line_string, multi_point, multi_polygon
|
65
|
+
has_m: false, # true
|
66
|
+
has_z: false, # true
|
67
|
+
sql_type: "geometry", # geography
|
68
|
+
srid: 0, # (any valid SRID)
|
69
|
+
```
|
70
|
+
|
71
|
+
The default factories are `RGeo::Geographic.spherical_factory` for
|
72
|
+
geographic types, and `RGeo::Cartesian.preferred_factory` for geometric types.
|
73
|
+
|
74
|
+
Here is an example setup:
|
75
|
+
|
76
|
+
```ruby
|
77
|
+
RGeo::ActiveRecord::SpatialFactoryStore.instance.tap do |config|
|
78
|
+
# By default, use the GEOS implementation for spatial columns.
|
79
|
+
config.default = RGeo::Geos.factory_generator
|
80
|
+
|
81
|
+
# But use a geographic implementation for point columns.
|
82
|
+
config.register(RGeo::Geographic.spherical_factory(srid: 4326), geo_type: "point")
|
83
|
+
end
|
84
|
+
```
|
85
|
+
|
86
|
+
### RGeo Dependency
|
87
|
+
|
88
|
+
See the README for the [rgeo](https://github.com/rgeo/rgeo) gem, a dependency, for further
|
89
|
+
installation information.
|
90
|
+
|
91
|
+
### Development and support
|
92
|
+
|
93
|
+
This README is the official documentation.
|
94
|
+
|
95
|
+
RDoc documentation is available at http://rdoc.info/gems/rgeo-activerecord
|
96
|
+
|
97
|
+
Source code is hosted on Github at http://github.com/rgeo/rgeo-activerecord
|
98
|
+
|
99
|
+
Contributions are welcome. Fork the project on Github.
|
100
|
+
|
101
|
+
Report bugs on Github issues at
|
102
|
+
http://github.com/rgeo/rgeo-activerecord/issues
|
103
|
+
|
104
|
+
Support available on the rgeo-users google group at
|
105
|
+
http://groups.google.com/group/rgeo-users
|
106
|
+
|
107
|
+
### Acknowledgments
|
108
|
+
|
109
|
+
[Daniel Azuma](http://www.daniel-azuma.com) created RGeo.
|
110
|
+
[Tee Parham](http://twitter.com/teeparham) is the current maintainer.
|
111
|
+
|
112
|
+
Development is supported by:
|
113
|
+
|
114
|
+
* [Pirq](http://pirq.com)
|
115
|
+
* [Neighborland](https://neighborland.com)
|
116
|
+
|
117
|
+
### License
|
118
|
+
|
119
|
+
Copyright 2015 Daniel Azuma, Tee Parham
|
120
|
+
|
121
|
+
https://github.com/rgeo/rgeo-activerecord/blob/master/LICENSE.txt
|
@@ -0,0 +1 @@
|
|
1
|
+
require "rgeo/active_record"
|
@@ -0,0 +1,8 @@
|
|
1
|
+
require "rgeo"
|
2
|
+
require "active_record"
|
3
|
+
require "rgeo/active_record/version"
|
4
|
+
require "rgeo/active_record/spatial_expressions"
|
5
|
+
require "rgeo/active_record/spatial_factory_store"
|
6
|
+
require "rgeo/active_record/arel_spatial_queries"
|
7
|
+
require "rgeo/active_record/common_adapter_elements"
|
8
|
+
require "rgeo/active_record/geometry_mixin"
|
@@ -0,0 +1,120 @@
|
|
1
|
+
module RGeo
|
2
|
+
module ActiveRecord
|
3
|
+
# A set of common Arel visitor hacks for spatial ToSql visitors.
|
4
|
+
# Generally, a spatial ActiveRecord adapter should provide a custom
|
5
|
+
# ToSql Arel visitor that includes and customizes this module.
|
6
|
+
# See the existing spatial adapters (i.e. postgis, spatialite,
|
7
|
+
# mysqlspatial, and mysql2spatial) for usage examples.
|
8
|
+
|
9
|
+
module SpatialToSql
|
10
|
+
# Map a standard OGC SQL function name to the actual name used by
|
11
|
+
# a particular database. This method should take a name and
|
12
|
+
# return either the changed name or the original name.
|
13
|
+
|
14
|
+
def st_func(standard_name)
|
15
|
+
standard_name
|
16
|
+
end
|
17
|
+
|
18
|
+
# Visit the SpatialNamedFunction node. This operates similarly to
|
19
|
+
# the standard NamedFunction node, but it performs function name
|
20
|
+
# mapping for the database, and it also uses the type information
|
21
|
+
# in the node to determine when to cast string arguments to WKT,
|
22
|
+
|
23
|
+
def visit_RGeo_ActiveRecord_SpatialNamedFunction(node, collector)
|
24
|
+
name = st_func(node.name)
|
25
|
+
exprs = []
|
26
|
+
node.expressions.each_with_index do |expr, index|
|
27
|
+
exprs << (node.spatial_argument?(index) ? visit_in_spatial_context(expr, collector) : visit(expr, collector))
|
28
|
+
end
|
29
|
+
collector << name
|
30
|
+
collector << "("
|
31
|
+
collector << "DISTINCT " if node.distinct
|
32
|
+
collector << exprs.join(", ")
|
33
|
+
collector << ")"
|
34
|
+
collector << " AS #{visit(node.alias, collector)}" if node.alias
|
35
|
+
collector
|
36
|
+
end
|
37
|
+
|
38
|
+
# Generates SQL for a spatial node.
|
39
|
+
# The node must be a string (in which case it is treated as WKT),
|
40
|
+
# an RGeo feature, or a spatial attribute.
|
41
|
+
def visit_in_spatial_context(node, collector)
|
42
|
+
case node
|
43
|
+
when String
|
44
|
+
collector << "#{st_func('ST_WKTToSQL')}(#{quote(node)})"
|
45
|
+
when RGeo::Feature::Instance
|
46
|
+
collector << visit_RGeo_Feature_Instance(node, collector)
|
47
|
+
when RGeo::Cartesian::BoundingBox
|
48
|
+
collector << visit_RGeo_Cartesian_BoundingBox(node, collector)
|
49
|
+
else
|
50
|
+
visit(node, collector)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
# This node wraps an RGeo feature and gives it spatial expression constructors.
|
56
|
+
class SpatialConstantNode
|
57
|
+
include SpatialExpressions
|
58
|
+
|
59
|
+
# The delegate should be the RGeo feature.
|
60
|
+
def initialize(delegate)
|
61
|
+
@delegate = delegate
|
62
|
+
end
|
63
|
+
|
64
|
+
# Return the RGeo feature
|
65
|
+
attr_reader :delegate
|
66
|
+
end
|
67
|
+
|
68
|
+
# :stopdoc:
|
69
|
+
|
70
|
+
# Make sure the standard Arel visitors can handle RGeo feature objects by default.
|
71
|
+
|
72
|
+
Arel::Visitors::Visitor.class_eval do
|
73
|
+
def visit_RGeo_ActiveRecord_SpatialConstantNode(node, collector)
|
74
|
+
if respond_to?(:visit_in_spatial_context)
|
75
|
+
visit_in_spatial_context(node.delegate, collector)
|
76
|
+
else
|
77
|
+
visit(node.delegate, collector)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
Arel::Visitors::Dot.class_eval do
|
83
|
+
alias :visit_RGeo_Feature_Instance :visit_String
|
84
|
+
alias :visit_RGeo_Cartesian_BoundingBox :visit_String
|
85
|
+
end
|
86
|
+
|
87
|
+
Arel::Visitors::DepthFirst.class_eval do
|
88
|
+
alias :visit_RGeo_Feature_Instance :terminal
|
89
|
+
alias :visit_RGeo_Cartesian_BoundingBox :terminal
|
90
|
+
end
|
91
|
+
|
92
|
+
Arel::Visitors::ToSql.class_eval do
|
93
|
+
alias :visit_RGeo_Feature_Instance :visit_String
|
94
|
+
alias :visit_RGeo_Cartesian_BoundingBox :visit_String
|
95
|
+
end
|
96
|
+
|
97
|
+
# A NamedFunction subclass that keeps track of the spatial-ness of
|
98
|
+
# the arguments and return values, so that it can provide context to
|
99
|
+
# visitors that want to interpret syntax differently when dealing with
|
100
|
+
# spatial elements.
|
101
|
+
class SpatialNamedFunction < Arel::Nodes::NamedFunction
|
102
|
+
include SpatialExpressions
|
103
|
+
|
104
|
+
def initialize(name, expr, spatial_flags = [], aliaz = nil)
|
105
|
+
super(name, expr, aliaz)
|
106
|
+
@spatial_flags = spatial_flags
|
107
|
+
end
|
108
|
+
|
109
|
+
def spatial_result?
|
110
|
+
@spatial_flags.first
|
111
|
+
end
|
112
|
+
|
113
|
+
def spatial_argument?(index)
|
114
|
+
@spatial_flags[index + 1]
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
# :startdoc:
|
119
|
+
end
|
120
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# autoload AbstractAdapter
|
2
|
+
ActiveRecord::ConnectionAdapters::AbstractAdapter
|
3
|
+
|
4
|
+
module RGeo
|
5
|
+
module ActiveRecord
|
6
|
+
# Some default column constructors specifications for most spatial
|
7
|
+
# databases. Individual adapters may add to or override this list.
|
8
|
+
DEFAULT_SPATIAL_COLUMN_CONSTRUCTORS = {
|
9
|
+
geometry_collection: {}.freeze,
|
10
|
+
geometry: {}.freeze,
|
11
|
+
line_string: {}.freeze,
|
12
|
+
multi_line_string: {}.freeze,
|
13
|
+
multi_point: {}.freeze,
|
14
|
+
multi_polygon: {}.freeze,
|
15
|
+
point: {}.freeze,
|
16
|
+
polygon: {}.freeze,
|
17
|
+
spatial: { type: "geometry" }.freeze,
|
18
|
+
}.freeze
|
19
|
+
|
20
|
+
# Index definition struct with a spatial flag field.
|
21
|
+
|
22
|
+
SpatialIndexDefinition = Struct.new(:table, :name, :unique, :columns, :lengths, :orders, :where, :spatial)
|
23
|
+
|
24
|
+
# Returns a feature type module given a string type.
|
25
|
+
|
26
|
+
def self.geometric_type_from_name(name)
|
27
|
+
case name.to_s
|
28
|
+
when /^geometrycollection/i then Feature::GeometryCollection
|
29
|
+
when /^geometry/i then Feature::Geometry
|
30
|
+
when /^linestring/i then Feature::LineString
|
31
|
+
when /^multilinestring/i then Feature::MultiLineString
|
32
|
+
when /^multipoint/i then Feature::MultiPoint
|
33
|
+
when /^multipolygon/i then Feature::MultiPolygon
|
34
|
+
when /^point/i then Feature::Point
|
35
|
+
when /^polygon/i then Feature::Polygon
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
module RGeo
|
2
|
+
module ActiveRecord
|
3
|
+
# This module is mixed into all geometry objects. It provides an
|
4
|
+
# as_json method so that ActiveRecord knows how to generate JSON
|
5
|
+
# for a geometry-valued field.
|
6
|
+
|
7
|
+
module GeometryMixin
|
8
|
+
# The default JSON generator Proc. Renders geometry fields as WKT.
|
9
|
+
DEFAULT_JSON_GENERATOR = Proc.new(&:to_s)
|
10
|
+
|
11
|
+
@json_generator = DEFAULT_JSON_GENERATOR
|
12
|
+
|
13
|
+
# Set the style of JSON generation used for geometry fields in an
|
14
|
+
# ActiveRecord model by default. You may pass nil to use
|
15
|
+
# DEFAULT_JSON_GENERATOR, a proc that takes a geometry as the
|
16
|
+
# argument and returns an object that can be converted to JSON
|
17
|
+
# (i.e. usually a hash or string), or one of the following symbolic
|
18
|
+
# values:
|
19
|
+
#
|
20
|
+
# <tt>:wkt</tt>::
|
21
|
+
# Well-known text format. (Same as DEFAULT_JSON_GENERATOR.)
|
22
|
+
# <tt>:geojson</tt>::
|
23
|
+
# GeoJSON format. Requires the rgeo-geojson gem.
|
24
|
+
|
25
|
+
def self.set_json_generator(value = nil, &block)
|
26
|
+
if block && !value
|
27
|
+
value = block
|
28
|
+
elsif value == :geojson
|
29
|
+
require "rgeo/geo_json"
|
30
|
+
value = proc { |geom| GeoJSON.encode(geom) }
|
31
|
+
end
|
32
|
+
if value.is_a?(Proc)
|
33
|
+
@json_generator = value
|
34
|
+
else
|
35
|
+
@json_generator = DEFAULT_JSON_GENERATOR
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
# Given a feature, returns an object that can be serialized as JSON
|
40
|
+
# (i.e. usually a hash or string), using the current json_generator.
|
41
|
+
# This is used to generate JSON for geometry-valued ActiveRecord
|
42
|
+
# fields by default.
|
43
|
+
|
44
|
+
def self.generate_json(geom)
|
45
|
+
@json_generator.call(geom)
|
46
|
+
end
|
47
|
+
|
48
|
+
# Serializes this object as JSON for ActiveRecord.
|
49
|
+
|
50
|
+
def as_json(opts = nil)
|
51
|
+
GeometryMixin.generate_json(self)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
RGeo::Feature::MixinCollection::GLOBAL.for_type(RGeo::Feature::Geometry)
|
58
|
+
.add(RGeo::ActiveRecord::GeometryMixin)
|
@@ -0,0 +1,254 @@
|
|
1
|
+
module RGeo
|
2
|
+
module ActiveRecord
|
3
|
+
# Returns true if spatial expressions (i.e. the methods in the
|
4
|
+
# SpatialExpressions module) are supported.
|
5
|
+
def self.spatial_expressions_supported?
|
6
|
+
defined?(Arel::Nodes::NamedFunction)
|
7
|
+
end
|
8
|
+
|
9
|
+
# A set of spatial expression builders.
|
10
|
+
# These methods can be chained off other spatial expressions to form
|
11
|
+
# complex expressions.
|
12
|
+
module SpatialExpressions
|
13
|
+
#--
|
14
|
+
# Generic functions
|
15
|
+
#++
|
16
|
+
|
17
|
+
def st_function(function, *args)
|
18
|
+
spatial_info = args.last.is_a?(::Array) ? args.pop : []
|
19
|
+
SpatialNamedFunction.new(function, [self] + args, spatial_info)
|
20
|
+
end
|
21
|
+
|
22
|
+
#--
|
23
|
+
# Geometry functions
|
24
|
+
#++
|
25
|
+
|
26
|
+
def st_dimension
|
27
|
+
SpatialNamedFunction.new("ST_Dimension", [self], [false, true])
|
28
|
+
end
|
29
|
+
|
30
|
+
def st_geometrytype
|
31
|
+
SpatialNamedFunction.new("ST_GeometryType", [self], [false, true])
|
32
|
+
end
|
33
|
+
|
34
|
+
def st_astext
|
35
|
+
SpatialNamedFunction.new("ST_AsText", [self], [false, true])
|
36
|
+
end
|
37
|
+
|
38
|
+
def st_asbinary
|
39
|
+
SpatialNamedFunction.new("ST_AsBinary", [self], [false, true])
|
40
|
+
end
|
41
|
+
|
42
|
+
def st_srid
|
43
|
+
SpatialNamedFunction.new("ST_SRID", [self], [false, true])
|
44
|
+
end
|
45
|
+
|
46
|
+
def st_isempty
|
47
|
+
SpatialNamedFunction.new("ST_IsEmpty", [self], [false, true])
|
48
|
+
end
|
49
|
+
|
50
|
+
def st_issimple
|
51
|
+
SpatialNamedFunction.new("ST_IsSimple", [self], [false, true])
|
52
|
+
end
|
53
|
+
|
54
|
+
def st_boundary
|
55
|
+
SpatialNamedFunction.new("ST_Boundary", [self], [true, true])
|
56
|
+
end
|
57
|
+
|
58
|
+
def st_envelope
|
59
|
+
SpatialNamedFunction.new("ST_Envelope", [self], [true, true])
|
60
|
+
end
|
61
|
+
|
62
|
+
def st_equals(rhs)
|
63
|
+
SpatialNamedFunction.new("ST_Equals", [self, rhs], [false, true, true])
|
64
|
+
end
|
65
|
+
|
66
|
+
def st_disjoint(rhs)
|
67
|
+
SpatialNamedFunction.new("ST_Disjoint", [self, rhs], [false, true, true])
|
68
|
+
end
|
69
|
+
|
70
|
+
def st_intersects(rhs)
|
71
|
+
SpatialNamedFunction.new("ST_Intersects", [self, rhs], [false, true, true])
|
72
|
+
end
|
73
|
+
|
74
|
+
def st_touches(rhs)
|
75
|
+
SpatialNamedFunction.new("ST_Touches", [self, rhs], [false, true, true])
|
76
|
+
end
|
77
|
+
|
78
|
+
def st_crosses(rhs)
|
79
|
+
SpatialNamedFunction.new("ST_Crosses", [self, rhs], [false, true, true])
|
80
|
+
end
|
81
|
+
|
82
|
+
def st_within(rhs)
|
83
|
+
SpatialNamedFunction.new("ST_Within", [self, rhs], [false, true, true])
|
84
|
+
end
|
85
|
+
|
86
|
+
def st_contains(rhs)
|
87
|
+
SpatialNamedFunction.new("ST_Contains", [self, rhs], [false, true, true])
|
88
|
+
end
|
89
|
+
|
90
|
+
def st_overlaps(rhs)
|
91
|
+
SpatialNamedFunction.new("ST_Overlaps", [self, rhs], [false, true, true])
|
92
|
+
end
|
93
|
+
|
94
|
+
def st_relate(rhs, matrix = nil)
|
95
|
+
args = [self, rhs]
|
96
|
+
args << matrix.to_s if matrix
|
97
|
+
SpatialNamedFunction.new("ST_Relate", args, [false, true, true, false])
|
98
|
+
end
|
99
|
+
|
100
|
+
def st_distance(rhs, units = nil)
|
101
|
+
args = [self, rhs]
|
102
|
+
args << units.to_s if units
|
103
|
+
SpatialNamedFunction.new("ST_Distance", args, [false, true, true, false])
|
104
|
+
end
|
105
|
+
|
106
|
+
def st_intersection(rhs)
|
107
|
+
SpatialNamedFunction.new("ST_Intersection", [self, rhs], [true, true, true])
|
108
|
+
end
|
109
|
+
|
110
|
+
def st_difference(rhs)
|
111
|
+
SpatialNamedFunction.new("ST_Difference", [self, rhs], [true, true, true])
|
112
|
+
end
|
113
|
+
|
114
|
+
def st_union(rhs)
|
115
|
+
SpatialNamedFunction.new("ST_Union", [self, rhs], [true, true, true])
|
116
|
+
end
|
117
|
+
|
118
|
+
def st_symdifference(rhs)
|
119
|
+
SpatialNamedFunction.new("ST_SymDifference", [self, rhs], [true, true, true])
|
120
|
+
end
|
121
|
+
|
122
|
+
def st_buffer(distance, units = nil)
|
123
|
+
args = [self, distance.to_f]
|
124
|
+
args << units.to_s if units
|
125
|
+
SpatialNamedFunction.new("ST_Buffer", args, [true, true, false])
|
126
|
+
end
|
127
|
+
|
128
|
+
def st_convexhull
|
129
|
+
SpatialNamedFunction.new("ST_ConvexHull", [self], [true, true])
|
130
|
+
end
|
131
|
+
|
132
|
+
#--
|
133
|
+
# Point functions
|
134
|
+
#++
|
135
|
+
|
136
|
+
def st_x
|
137
|
+
SpatialNamedFunction.new("ST_X", [self], [false, true])
|
138
|
+
end
|
139
|
+
|
140
|
+
def st_y
|
141
|
+
SpatialNamedFunction.new("ST_Y", [self], [false, true])
|
142
|
+
end
|
143
|
+
|
144
|
+
def st_z
|
145
|
+
SpatialNamedFunction.new("ST_Z", [self], [false, true])
|
146
|
+
end
|
147
|
+
|
148
|
+
def st_m
|
149
|
+
SpatialNamedFunction.new("ST_M", [self], [false, true])
|
150
|
+
end
|
151
|
+
|
152
|
+
#--
|
153
|
+
# Curve functions
|
154
|
+
#++
|
155
|
+
|
156
|
+
def st_startpoint
|
157
|
+
SpatialNamedFunction.new("ST_StartPoint", [self], [true, true])
|
158
|
+
end
|
159
|
+
|
160
|
+
def st_endpoint
|
161
|
+
SpatialNamedFunction.new("ST_EndPoint", [self], [true, true])
|
162
|
+
end
|
163
|
+
|
164
|
+
def st_isclosed
|
165
|
+
SpatialNamedFunction.new("ST_IsClosed", [self], [false, true])
|
166
|
+
end
|
167
|
+
|
168
|
+
def st_isring
|
169
|
+
SpatialNamedFunction.new("ST_IsRing", [self], [false, true])
|
170
|
+
end
|
171
|
+
|
172
|
+
def st_length(units = nil)
|
173
|
+
args = [self]
|
174
|
+
args << units.to_s if units
|
175
|
+
SpatialNamedFunction.new("ST_Length", args, [false, true, false])
|
176
|
+
end
|
177
|
+
|
178
|
+
#--
|
179
|
+
# LineString functions
|
180
|
+
#++
|
181
|
+
|
182
|
+
def st_numpoints
|
183
|
+
SpatialNamedFunction.new("ST_NumPoints", [self], [false, true])
|
184
|
+
end
|
185
|
+
|
186
|
+
def st_pointn(n)
|
187
|
+
SpatialNamedFunction.new("ST_PointN", [self, n.to_i], [true, true, false])
|
188
|
+
end
|
189
|
+
|
190
|
+
#--
|
191
|
+
# Surface functions
|
192
|
+
#++
|
193
|
+
|
194
|
+
def st_area(units = nil)
|
195
|
+
args = [self]
|
196
|
+
args << units.to_s if units
|
197
|
+
SpatialNamedFunction.new("ST_StartPoint", args, [false, true, false])
|
198
|
+
end
|
199
|
+
|
200
|
+
def st_centroid
|
201
|
+
SpatialNamedFunction.new("ST_Centroid", [self], [true, true])
|
202
|
+
end
|
203
|
+
|
204
|
+
def st_pointonsurface
|
205
|
+
SpatialNamedFunction.new("ST_PointOnSurface", [self], [true, true])
|
206
|
+
end
|
207
|
+
|
208
|
+
#--
|
209
|
+
# Polygon functions
|
210
|
+
#++
|
211
|
+
|
212
|
+
def st_exteriorring
|
213
|
+
SpatialNamedFunction.new("ST_ExteriorRing", [self], [true, true])
|
214
|
+
end
|
215
|
+
|
216
|
+
def st_numinteriorrings
|
217
|
+
# Note: the name difference is intentional. The standard
|
218
|
+
# names this function incorrectly.
|
219
|
+
SpatialNamedFunction.new("ST_NumInteriorRing", [self], [false, true])
|
220
|
+
end
|
221
|
+
|
222
|
+
def st_interiorringn(n)
|
223
|
+
SpatialNamedFunction.new("ST_InteriorRingN", [self, n.to_i], [true, true, false])
|
224
|
+
end
|
225
|
+
|
226
|
+
#--
|
227
|
+
# GeometryCollection functions
|
228
|
+
#++
|
229
|
+
|
230
|
+
def st_numgeometries
|
231
|
+
SpatialNamedFunction.new("ST_NumGeometries", [self], [false, true])
|
232
|
+
end
|
233
|
+
|
234
|
+
def st_geometryn(n)
|
235
|
+
SpatialNamedFunction.new("ST_GeometryN", [self, n.to_i], [true, true, false])
|
236
|
+
end
|
237
|
+
end
|
238
|
+
end
|
239
|
+
end
|
240
|
+
|
241
|
+
# Add tools to build spatial structures in the AST.
|
242
|
+
|
243
|
+
# Allow chaining of spatial expressions from attributes
|
244
|
+
Arel::Attribute.send :include, RGeo::ActiveRecord::SpatialExpressions
|
245
|
+
|
246
|
+
module Arel
|
247
|
+
# Create a spatial constant node.
|
248
|
+
# This node wraps a spatial value (such as an RGeo feature or a text
|
249
|
+
# string in WKT format). It supports chaining with the functions
|
250
|
+
# defined by RGeo::ActiveRecord::SpatialExpressions.
|
251
|
+
def self.spatial(arg)
|
252
|
+
RGeo::ActiveRecord::SpatialConstantNode.new(arg)
|
253
|
+
end
|
254
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
module RGeo
|
2
|
+
module ActiveRecord
|
3
|
+
class SpatialFactoryStore
|
4
|
+
include Singleton
|
5
|
+
|
6
|
+
attr_accessor :registry
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
@registry = {}
|
10
|
+
end
|
11
|
+
|
12
|
+
def register(factory, attrs = {})
|
13
|
+
registry[key(attrs)] = factory
|
14
|
+
end
|
15
|
+
|
16
|
+
def default(attrs = {})
|
17
|
+
@default || default_for_attrs(attrs)
|
18
|
+
end
|
19
|
+
|
20
|
+
def default=(factory)
|
21
|
+
@default = factory
|
22
|
+
end
|
23
|
+
|
24
|
+
def factory(attrs)
|
25
|
+
registry[key(attrs)] || default(attrs)
|
26
|
+
end
|
27
|
+
|
28
|
+
def clear
|
29
|
+
@registry = {}
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def default_for_attrs(attrs)
|
35
|
+
if attrs[:sql_type] =~ /geography/
|
36
|
+
Geographic.spherical_factory(to_factory_attrs(attrs))
|
37
|
+
else
|
38
|
+
Cartesian.preferred_factory(to_factory_attrs(attrs))
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def to_factory_attrs(attrs)
|
43
|
+
{
|
44
|
+
has_m_coordinate: attrs[:has_m],
|
45
|
+
has_z_coordinate: attrs[:has_z],
|
46
|
+
srid: (attrs[:srid] || 0),
|
47
|
+
}
|
48
|
+
end
|
49
|
+
|
50
|
+
def key(attrs)
|
51
|
+
{
|
52
|
+
geo_type: "geometry",
|
53
|
+
has_m: false,
|
54
|
+
has_z: false,
|
55
|
+
sql_type: "geometry",
|
56
|
+
srid: 0,
|
57
|
+
}.merge(attrs).hash
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
metadata
ADDED
@@ -0,0 +1,154 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rgeo-activerecord-dschee
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 5.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Daniel Azuma, Tee Parham
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-07-14 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rgeo-dschee
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0.3'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0.3'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: activerecord
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 5.0.0
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 5.0.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: minitest
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '5.8'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '5.8'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rake
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '10.4'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '10.4'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: mocha
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '1.1'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '1.1'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: appraisal
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '2.1'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '2.1'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rgeo-geojson
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: 0.4.1
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 0.4.1
|
111
|
+
description: RGeo is a geospatial data library for Ruby. RGeo::ActiveRecord is an
|
112
|
+
optional RGeo module providing some spatial extensions to ActiveRecord, as well
|
113
|
+
as common tools used by RGeo-based spatial adapters.
|
114
|
+
email: dazuma@gmail.com, parhameter@gmail.com
|
115
|
+
executables: []
|
116
|
+
extensions: []
|
117
|
+
extra_rdoc_files: []
|
118
|
+
files:
|
119
|
+
- History.md
|
120
|
+
- LICENSE.txt
|
121
|
+
- README.md
|
122
|
+
- lib/rgeo-activerecord.rb
|
123
|
+
- lib/rgeo/active_record.rb
|
124
|
+
- lib/rgeo/active_record/arel_spatial_queries.rb
|
125
|
+
- lib/rgeo/active_record/common_adapter_elements.rb
|
126
|
+
- lib/rgeo/active_record/geometry_mixin.rb
|
127
|
+
- lib/rgeo/active_record/spatial_expressions.rb
|
128
|
+
- lib/rgeo/active_record/spatial_factory_store.rb
|
129
|
+
- lib/rgeo/active_record/version.rb
|
130
|
+
homepage: https://github.com/rgeo/rgeo-activerecord
|
131
|
+
licenses: []
|
132
|
+
metadata: {}
|
133
|
+
post_install_message:
|
134
|
+
rdoc_options: []
|
135
|
+
require_paths:
|
136
|
+
- lib
|
137
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
138
|
+
requirements:
|
139
|
+
- - ">="
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: 2.2.2
|
142
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
143
|
+
requirements:
|
144
|
+
- - ">="
|
145
|
+
- !ruby/object:Gem::Version
|
146
|
+
version: '0'
|
147
|
+
requirements: []
|
148
|
+
rubyforge_project:
|
149
|
+
rubygems_version: 2.4.8
|
150
|
+
signing_key:
|
151
|
+
specification_version: 4
|
152
|
+
summary: An RGeo module providing spatial extensions to ActiveRecord.
|
153
|
+
test_files: []
|
154
|
+
has_rdoc:
|