rp_clustering-rgeo-activerecord 0.0.1

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 ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ YjAzODU1ZmI0ZjZlMDdlODlmYjA0NTBiOGRmMjQyMDViZGNjZDAzMw==
5
+ data.tar.gz: !binary |-
6
+ ZTk2ZTk4NTc4YjU3M2MxZjc5ZDdlMjdhNzk1NjBhMGJjM2I4MTRjMg==
7
+ !binary "U0hBNTEy":
8
+ metadata.gz: !binary |-
9
+ YTQ0OGI2Y2I0NWEyMGVlN2FlZmQ0Mzc4ZDc0N2FhMjMwNGQwNjNjZDI5NzZl
10
+ ZjNhNWNmNjc5YjY4ODJjMmZkZmYwOTYwN2EzNTU5NTU3YjRlNmQ2NmUwYjkw
11
+ YTc3ZDc5NGVjNzAyMjM3MDEzNGRhNWM5ZGZjZDhiNDRmZTk5Mzc=
12
+ data.tar.gz: !binary |-
13
+ OTcxZjBjYTViYjU2ZTdjMjIwZjdkNGRjN2NiODFjOWM4ZjRiNjIzOWIyMTc5
14
+ YzE1ZWUwOTllZjUzNjcxYjg4YzA3MzU5ZDVkNWY0YjBlOGVhMmEzYzRiNWE3
15
+ NTJiYTVmZGMzNjVhMTkxNGZkY2U4NzljMzYyNzc3Nzc5MThiMTA=
data/.gitignore ADDED
@@ -0,0 +1,19 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/database_local.yml
17
+ test/version_tmp
18
+ tmp
19
+
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in rp_clustering-rgeo-activerecord.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 Robert Pyke
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,80 @@
1
+ # RPClustering::RGeo::ActiveRecord
2
+
3
+ A RGeo PostGIS extension to provide Active Record (Model) clustering functionality.
4
+
5
+ The intention is that this Gem will eventually provide abstracted methods for
6
+ both "on the fly" clustering, as well as cached clustering (including associated generators).
7
+
8
+ If you find a problem with this Gem, please don't hesitate to raise an [issue](https://github.com/robertpyke/rp_clustering-rgeo-activerecord/issues).
9
+
10
+ ## Installation
11
+
12
+ Note: This gem provides extensions for [activerecord-postgis-adapter](https://github.com/dazuma/activerecord-postgis-adapter).
13
+ Please see [activerecord-postgis-adapter](https://github.com/dazuma/activerecord-postgis-adapter)
14
+ for its install instructions. Once you've got
15
+ it working, then simply add this gem to your Gemfile to enable these extensions.
16
+
17
+ Add this line to your application's Gemfile:
18
+
19
+ gem 'rp_clustering-rgeo-activerecord'
20
+
21
+ And then execute:
22
+
23
+ $ bundle
24
+
25
+ Or install it yourself as:
26
+
27
+ $ gem install rp_clustering-rgeo-activerecord
28
+
29
+
30
+ ## Usage
31
+
32
+ ### Added in Version 0.0.1
33
+
34
+ This version allows for hand-coded low-level clustering via the Arel interface.
35
+
36
+ e.g.
37
+
38
+ ```ruby
39
+
40
+ # Get the Arel handle for the model
41
+
42
+ arel_table = MyModel.arel_table
43
+
44
+ # Our cluster grid size.
45
+ # Smaller grid_size means more clusters.
46
+ # Larger grid_size means less clusters (cluster covers a larger area).
47
+ # See http://www.postgis.org/docs/ST_SnapToGrid.html for more info.
48
+
49
+ grid_size = 0.1
50
+
51
+ # Cluster against our model's :latlon attribute with a grid size of '0.1'.
52
+ # Return the centroid of each cluster as "cluster_centroid".
53
+
54
+ query = MyModel.select(
55
+ arel_table.st_astext(
56
+ arel_table.st_centroid(arel_table.st_collect(attr))
57
+ ).as("cluster_centroid")
58
+ ).group(arel_table[:latlon].st_snaptogrid(0.1))
59
+
60
+ # Iterate over our clusters
61
+ query.all.each do |cluster|
62
+
63
+ # print the cluster_centroid (a point) as WKT
64
+ puts cluster["cluster_centroid"]
65
+
66
+ # convert the WKT into a RGeo Geometry (a point)
67
+ geographic_factory.parse_wkt(cluster["cluster_centroid")
68
+
69
+ # ...
70
+ end
71
+
72
+ ```
73
+
74
+ ## Contributing
75
+
76
+ 1. Fork it
77
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
78
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
79
+ 4. Push to the branch (`git push origin my-new-feature`)
80
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,12 @@
1
+ require "bundler/gem_tasks"
2
+
3
+ require 'rake/testtask'
4
+
5
+ Rake::TestTask.new do |t|
6
+ t.libs << "test"
7
+ t.test_files = FileList['test/test*.rb']
8
+ t.verbose = true
9
+ end
10
+
11
+ task :default => [:test]
12
+
@@ -0,0 +1,39 @@
1
+ require "rp_clustering-rgeo-activerecord/version"
2
+ require "rp_clustering-rgeo-activerecord/arel_attribute_spatial_expressions"
3
+ require "rp_clustering-rgeo-activerecord/arel_table_spatial_expressions"
4
+
5
+ module RPClustering
6
+
7
+ module RGeo
8
+
9
+ module ActiveRecord
10
+
11
+ # Spatial Expressions to be attached directly to Arel Attributes (DB columns)
12
+
13
+ module ArelAttributeSpatialExpressions
14
+ end
15
+
16
+ # Attach our Spatial Expression methods onto the Arel::Attribute class.
17
+ #
18
+ # i.e. As stated in the RGeo::ActiveRecord docs.. Allow chaining of spatial expressions from attributes
19
+
20
+ ::Arel::Attribute.class_eval do
21
+ include ::RPClustering::RGeo::ActiveRecord::ArelAttributeSpatialExpressions
22
+ end
23
+
24
+ # Spatial Expressions to be attached to Arel Table (DB tables)
25
+
26
+ module ArelTableSpatialExpressions
27
+ end
28
+
29
+ # Attach our Spatial Expression methods onto the Arel::Table class.
30
+
31
+ ::Arel::Table.class_eval do
32
+ include ::RPClustering::RGeo::ActiveRecord::ArelTableSpatialExpressions
33
+ end
34
+
35
+ end
36
+
37
+ end
38
+
39
+ end
@@ -0,0 +1,66 @@
1
+ # Author: Robert Pyke
2
+
3
+ module RPClustering
4
+
5
+ module RGeo
6
+
7
+ module ActiveRecord
8
+
9
+ module ArelAttributeSpatialExpressions
10
+
11
+ # ST_SnapToGrid: http://www.postgis.org/docs/ST_SnapToGrid.html
12
+ #
13
+ # Implements postgis function variant:
14
+ #
15
+ # geometry ST_SnapToGrid(geometry geomA, float size);
16
+ #
17
+ # Returns a geometry collection
18
+
19
+ def st_snaptogrid(grid_size)
20
+ args = [self, grid_size.to_s]
21
+
22
+ # SpatialNamedFunction takes the following args:
23
+ # * name
24
+ # * expr
25
+ # * spatial_flags
26
+ # * aliaz (defaults to nil)
27
+ #
28
+ #
29
+ # Understanding the spatial_flags argument
30
+ # -----------------------------------------
31
+ #
32
+ # A flag is true if the corresponding argument is spatial, else the
33
+ # flag is false.
34
+ # The first element is the spatial-ness result, the other args
35
+ # relate to our expression args
36
+
37
+ ::RGeo::ActiveRecord::SpatialNamedFunction.new(
38
+ 'ST_SnapToGrid', args, [true, true, false]
39
+ )
40
+
41
+ end
42
+
43
+ # ST_Collect: http://www.postgis.org/docs/ST_Collect.html
44
+ #
45
+ # Implements postgis function variant:
46
+ #
47
+ # geometry ST_Collect(geometry[] g1_array);
48
+ #
49
+ # Returns a geometry collection
50
+
51
+ def st_collect()
52
+ args = [self]
53
+
54
+ ::RGeo::ActiveRecord::SpatialNamedFunction.new(
55
+ 'ST_Collect', args, [true, true]
56
+ )
57
+
58
+ end
59
+
60
+ end
61
+
62
+ end
63
+
64
+ end
65
+
66
+ end
@@ -0,0 +1,82 @@
1
+ # Author: Robert Pyke
2
+
3
+ module RPClustering
4
+
5
+ module RGeo
6
+
7
+ module ActiveRecord
8
+
9
+ module ArelTableSpatialExpressions
10
+
11
+ # ST_SnapToGrid: http://www.postgis.org/docs/ST_SnapToGrid.html
12
+ #
13
+ # Implements postgis function variant:
14
+ #
15
+ # geometry ST_SnapToGrid(geometry geomA, float size);
16
+ #
17
+ # Returns a geometry collection
18
+
19
+ def st_snaptogrid(geom_a, grid_size)
20
+ args = [geom_a, grid_size.to_s]
21
+
22
+ ::RGeo::ActiveRecord::SpatialNamedFunction.new(
23
+ 'ST_SnapToGrid', args, [true, true, false]
24
+ )
25
+
26
+ end
27
+
28
+ # ST_Collect: http://www.postgis.org/docs/ST_Collect.html
29
+ #
30
+ # Implements postgis function variant:
31
+ #
32
+ # geometry ST_Collect(geometry[] g1_array);
33
+ #
34
+ # This variant is an aggregate, it operates on rows of data.
35
+ #
36
+ # Returns a geometry collection
37
+
38
+ def st_collect(g1_array)
39
+ args = [g1_array]
40
+
41
+ ::RGeo::ActiveRecord::SpatialNamedFunction.new(
42
+ 'ST_Collect', args, [true, true]
43
+ )
44
+
45
+ end
46
+
47
+ # ST_AsText: http://www.postgis.org/docs/ST_AsText.html
48
+ #
49
+ # Returns a string (WKT)
50
+
51
+ def st_astext(g)
52
+ args = [g]
53
+
54
+ ::RGeo::ActiveRecord::SpatialNamedFunction.new(
55
+ 'ST_AsText', args, [true, true]
56
+ )
57
+
58
+ end
59
+
60
+ # ST_Centroid: http://www.postgis.org/docs/ST_Centroid.html
61
+ #
62
+ # Implements postgis function variant:
63
+ #
64
+ # geometry ST_Centroid(geometry g1);
65
+ #
66
+ # Returns a geometry
67
+
68
+ def st_centroid(g)
69
+ args = [g]
70
+
71
+ ::RGeo::ActiveRecord::SpatialNamedFunction.new(
72
+ 'ST_Centroid', args, [true, true]
73
+ )
74
+ end
75
+
76
+ end
77
+
78
+ end
79
+
80
+ end
81
+
82
+ end
@@ -0,0 +1,7 @@
1
+ module RPClustering
2
+ module RGeo
3
+ module ActiveRecord
4
+ VERSION = "0.0.1"
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,36 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'rp_clustering-rgeo-activerecord/version'
5
+
6
+ Gem::Specification.new do |gem|
7
+ gem.name = "rp_clustering-rgeo-activerecord"
8
+ gem.version = RPClustering::RGeo::ActiveRecord::VERSION
9
+ gem.authors = ["Robert Pyke"]
10
+ gem.email = ["robert.j.pyke@gmail.com"]
11
+ gem.summary = %q{RGeo PostGIS extension to provide clustering functionality}
12
+ gem.description = %q{A RGeo PostGIS extension to provide Active Record (Model) clustering functionality}
13
+ gem.homepage = "https://github.com/robertpyke/rp_clustering-rgeo-activerecord"
14
+
15
+ gem.files = `git ls-files`.split($/)
16
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
17
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
+ gem.require_paths = ["lib"]
19
+
20
+ gem.license = 'MIT'
21
+
22
+ # Development Dependencies
23
+ gem.add_development_dependency('bundler', '>= 1.0.0')
24
+ gem.add_development_dependency('test-unit', '~> 2.5.4')
25
+ gem.add_development_dependency('rake')
26
+ gem.add_development_dependency('rdoc')
27
+ gem.add_development_dependency('pg')
28
+
29
+ # Deployed Gem Dependencies
30
+ gem.add_dependency('activerecord', '~> 3.0')
31
+ gem.add_dependency('arel', '~> 3.0.2')
32
+ gem.add_dependency('rgeo', '~> 0.3.20')
33
+ gem.add_dependency('rgeo-activerecord', '~> 0.4.6')
34
+ # This Gem is specific to postgis
35
+ gem.add_dependency('activerecord-postgis-adapter')
36
+ end
data/test/database.yml ADDED
@@ -0,0 +1,7 @@
1
+ adapter: postgis
2
+ host: 127.0.0.1
3
+ encoding: unicode
4
+ pool: 5
5
+ host: localhost
6
+ port: 5432
7
+ database: rp_clustering_test
data/test/test_unit.rb ADDED
@@ -0,0 +1,107 @@
1
+ require 'test/unit'
2
+ require 'rgeo/active_record/adapter_test_helper'
3
+ require 'rp_clustering-rgeo-activerecord'
4
+
5
+ module RPClustering
6
+ module RGeo
7
+ module ActiveRecord
8
+ module Tests
9
+ class MyUnitTest < Test::Unit::TestCase # :nodoc:
10
+
11
+ # Use the RGEO active record adapter test helper
12
+
13
+ DATABASE_CONFIG_PATH = ::File.dirname(__FILE__)+'/database.yml'
14
+ OVERRIDE_DATABASE_CONFIG_PATH = ::File.dirname(__FILE__)+'/database_local.yml'
15
+ include ::RGeo::ActiveRecord::AdapterTestHelper
16
+
17
+
18
+ define_test_methods do
19
+
20
+ def populate_ar_class(content_)
21
+ klass_ = create_ar_class
22
+ case content_
23
+ when :latlon_point
24
+ klass_.connection.create_table(:spatial_test) do |t_|
25
+ t_.column 'latlon', :point, :srid => 4326
26
+ end
27
+ end
28
+ klass_
29
+ end
30
+
31
+ # Confirm that everything is working as it should
32
+ def test_should_pass
33
+ assert(true)
34
+ end
35
+
36
+ def test_should_have_a_version
37
+ assert_not_nil(RPClustering::RGeo::ActiveRecord::VERSION)
38
+ end
39
+
40
+ # Test that the st_snaptogrid method exists on the Arel::Attribute
41
+ # and on the Arel::Table
42
+
43
+ def test_st_snaptogrid_method_should_exist
44
+ arel_klass = populate_ar_class(:latlon_point)
45
+ assert(
46
+ arel_klass.arel_table[:latlon_point].methods.include?(:st_snaptogrid),
47
+ "Active Record Arel::Attribute should now have a st_snaptogrid function. " +
48
+ "Found:\n#{arel_klass.arel_table[:latlon_point].methods.sort}"
49
+ )
50
+
51
+ assert(
52
+ arel_klass.arel_table.methods.include?(:st_snaptogrid),
53
+ "Active Record Arel::Table should now have a st_snaptogrid function. " +
54
+ "Found:\n#{arel_klass.arel_table.methods.sort}"
55
+ )
56
+ end
57
+
58
+ # Confirm that the st_snaptogrid function is producing the
59
+ # expected results
60
+
61
+ def test_st_snap_to_grid
62
+ arel_klass = populate_ar_class(:latlon_point)
63
+
64
+ points_generated = 0
65
+ (-5..5).each do |lng|
66
+ (-5..5).each do |lat|
67
+ obj = arel_klass.new
68
+ obj.latlon = @geographic_factory.point(lng, lat)
69
+ obj.save!
70
+ points_generated+=1
71
+ end
72
+ end
73
+
74
+ # Sanity check, confirm that we have all the points we created.
75
+ count_res = arel_klass.count()
76
+ assert_equal(
77
+ points_generated,
78
+ count_res,
79
+ "The number of points generated doesn't match the number in the DB"
80
+ )
81
+
82
+ attr = arel_klass.arel_table[:latlon]
83
+ t = arel_klass.arel_table
84
+
85
+ q1 = arel_klass.select(t.st_astext(t.st_centroid(t.st_collect(attr))).as("cluster_centroid"))
86
+ q1 = q1.group(attr.st_snaptogrid(180))
87
+
88
+ assert_equal(1, q1.all.count(), "With a sufficiently large grid size, we would expect the st_snaptogrid to produce only a single point")
89
+
90
+
91
+ value = q1.first["cluster_centroid"]
92
+ compare_point = @geographic_factory.point(0,0)
93
+ assert_equal(@geographic_factory.parse_wkt(value), compare_point, "cluster centroid should be a valid point in the center of the earth")
94
+
95
+ q2 = arel_klass.select(t.st_astext(t.st_centroid(t.st_collect(attr))).as("cluster_centroid"))
96
+ q2 = q2.group(attr.st_snaptogrid(1))
97
+
98
+ assert_equal(points_generated, q2.all.count(), "With a small grid size, we would expect the st_snaptogrid to produce every single point")
99
+
100
+ end
101
+
102
+ end
103
+ end
104
+ end
105
+ end
106
+ end
107
+ end
metadata ADDED
@@ -0,0 +1,199 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rp_clustering-rgeo-activerecord
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Robert Pyke
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-02-28 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ! '>='
18
+ - !ruby/object:Gem::Version
19
+ version: 1.0.0
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ! '>='
25
+ - !ruby/object:Gem::Version
26
+ version: 1.0.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: test-unit
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: 2.5.4
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: 2.5.4
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ! '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rdoc
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ! '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: pg
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ! '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ! '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: activerecord
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ~>
88
+ - !ruby/object:Gem::Version
89
+ version: '3.0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ~>
95
+ - !ruby/object:Gem::Version
96
+ version: '3.0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: arel
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ~>
102
+ - !ruby/object:Gem::Version
103
+ version: 3.0.2
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ~>
109
+ - !ruby/object:Gem::Version
110
+ version: 3.0.2
111
+ - !ruby/object:Gem::Dependency
112
+ name: rgeo
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ~>
116
+ - !ruby/object:Gem::Version
117
+ version: 0.3.20
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ~>
123
+ - !ruby/object:Gem::Version
124
+ version: 0.3.20
125
+ - !ruby/object:Gem::Dependency
126
+ name: rgeo-activerecord
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ~>
130
+ - !ruby/object:Gem::Version
131
+ version: 0.4.6
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ~>
137
+ - !ruby/object:Gem::Version
138
+ version: 0.4.6
139
+ - !ruby/object:Gem::Dependency
140
+ name: activerecord-postgis-adapter
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ! '>='
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :runtime
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ! '>='
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ description: A RGeo PostGIS extension to provide Active Record (Model) clustering
154
+ functionality
155
+ email:
156
+ - robert.j.pyke@gmail.com
157
+ executables: []
158
+ extensions: []
159
+ extra_rdoc_files: []
160
+ files:
161
+ - .gitignore
162
+ - Gemfile
163
+ - LICENSE.txt
164
+ - README.md
165
+ - Rakefile
166
+ - lib/rp_clustering-rgeo-activerecord.rb
167
+ - lib/rp_clustering-rgeo-activerecord/arel_attribute_spatial_expressions.rb
168
+ - lib/rp_clustering-rgeo-activerecord/arel_table_spatial_expressions.rb
169
+ - lib/rp_clustering-rgeo-activerecord/version.rb
170
+ - rp_clustering-rgeo-activerecord.gemspec
171
+ - test/database.yml
172
+ - test/test_unit.rb
173
+ homepage: https://github.com/robertpyke/rp_clustering-rgeo-activerecord
174
+ licenses:
175
+ - MIT
176
+ metadata: {}
177
+ post_install_message:
178
+ rdoc_options: []
179
+ require_paths:
180
+ - lib
181
+ required_ruby_version: !ruby/object:Gem::Requirement
182
+ requirements:
183
+ - - ! '>='
184
+ - !ruby/object:Gem::Version
185
+ version: '0'
186
+ required_rubygems_version: !ruby/object:Gem::Requirement
187
+ requirements:
188
+ - - ! '>='
189
+ - !ruby/object:Gem::Version
190
+ version: '0'
191
+ requirements: []
192
+ rubyforge_project:
193
+ rubygems_version: 2.0.0
194
+ signing_key:
195
+ specification_version: 4
196
+ summary: RGeo PostGIS extension to provide clustering functionality
197
+ test_files:
198
+ - test/database.yml
199
+ - test/test_unit.rb