activerecord-postgres-earthdistance 0.2.0 → 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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 7e87b2bf7fbe3af69b42a9a578f5f3adf8967acd
4
+ data.tar.gz: ab06b2bdaf4422c238ed5fd3d666c348c1569a4c
5
+ SHA512:
6
+ metadata.gz: a382568c1c7e968ae804c70da525e3e2185c6aa69dd338d5bd57a72e7512367e6f45a7f89d2821d83fbdc26edaba0e698c03961de25aac677a3e92aacdac57a8
7
+ data.tar.gz: e737a628e1f27075b92e7257cd9186274749f3e551845c3a5a42f7fca7bad0e1e50b25073e974a0177263bb2caaa959b3b7ac5ecdcfa36b48680c9dd3b592812
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- activerecord-postgres-earthdistance (0.2.0)
4
+ activerecord-postgres-earthdistance (0.3.0)
5
5
  pg
6
6
  rails (>= 3.1)
7
7
  rake
@@ -9,72 +9,63 @@ PATH
9
9
  GEM
10
10
  remote: http://rubygems.org/
11
11
  specs:
12
- actionmailer (3.2.11)
13
- actionpack (= 3.2.11)
14
- mail (~> 2.4.4)
15
- actionpack (3.2.11)
16
- activemodel (= 3.2.11)
17
- activesupport (= 3.2.11)
18
- builder (~> 3.0.0)
12
+ actionmailer (4.0.1)
13
+ actionpack (= 4.0.1)
14
+ mail (~> 2.5.4)
15
+ actionpack (4.0.1)
16
+ activesupport (= 4.0.1)
17
+ builder (~> 3.1.0)
19
18
  erubis (~> 2.7.0)
20
- journey (~> 1.0.4)
21
- rack (~> 1.4.0)
22
- rack-cache (~> 1.2)
23
- rack-test (~> 0.6.1)
24
- sprockets (~> 2.2.1)
25
- activemodel (3.2.11)
26
- activesupport (= 3.2.11)
27
- builder (~> 3.0.0)
28
- activerecord (3.2.11)
29
- activemodel (= 3.2.11)
30
- activesupport (= 3.2.11)
31
- arel (~> 3.0.2)
32
- tzinfo (~> 0.3.29)
33
- activeresource (3.2.11)
34
- activemodel (= 3.2.11)
35
- activesupport (= 3.2.11)
36
- activesupport (3.2.11)
37
- i18n (~> 0.6)
38
- multi_json (~> 1.0)
39
- arel (3.0.2)
40
- builder (3.0.4)
19
+ rack (~> 1.5.2)
20
+ rack-test (~> 0.6.2)
21
+ activemodel (4.0.1)
22
+ activesupport (= 4.0.1)
23
+ builder (~> 3.1.0)
24
+ activerecord (4.0.1)
25
+ activemodel (= 4.0.1)
26
+ activerecord-deprecated_finders (~> 1.0.2)
27
+ activesupport (= 4.0.1)
28
+ arel (~> 4.0.0)
29
+ activerecord-deprecated_finders (1.0.3)
30
+ activesupport (4.0.1)
31
+ i18n (~> 0.6, >= 0.6.4)
32
+ minitest (~> 4.2)
33
+ multi_json (~> 1.3)
34
+ thread_safe (~> 0.1)
35
+ tzinfo (~> 0.3.37)
36
+ arel (4.0.1)
37
+ atomic (1.1.14)
38
+ builder (3.1.4)
41
39
  diff-lcs (1.1.3)
42
40
  erubis (2.7.0)
43
- hike (1.2.1)
44
- i18n (0.6.1)
45
- journey (1.0.4)
41
+ hike (1.2.3)
42
+ i18n (0.6.5)
46
43
  json (1.7.6)
47
- mail (2.4.4)
48
- i18n (>= 0.4.0)
44
+ mail (2.5.4)
49
45
  mime-types (~> 1.16)
50
46
  treetop (~> 1.4.8)
51
- mime-types (1.20.1)
52
- multi_json (1.5.0)
53
- pg (0.14.1)
47
+ mime-types (1.25.1)
48
+ minitest (4.7.5)
49
+ multi_json (1.8.2)
50
+ pg (0.17.0)
54
51
  polyglot (0.3.3)
55
- rack (1.4.4)
56
- rack-cache (1.2)
57
- rack (>= 0.4)
58
- rack-ssl (1.3.3)
59
- rack
52
+ rack (1.5.2)
60
53
  rack-test (0.6.2)
61
54
  rack (>= 1.0)
62
- rails (3.2.11)
63
- actionmailer (= 3.2.11)
64
- actionpack (= 3.2.11)
65
- activerecord (= 3.2.11)
66
- activeresource (= 3.2.11)
67
- activesupport (= 3.2.11)
68
- bundler (~> 1.0)
69
- railties (= 3.2.11)
70
- railties (3.2.11)
71
- actionpack (= 3.2.11)
72
- activesupport (= 3.2.11)
73
- rack-ssl (~> 1.3.2)
55
+ rails (4.0.1)
56
+ actionmailer (= 4.0.1)
57
+ actionpack (= 4.0.1)
58
+ activerecord (= 4.0.1)
59
+ activesupport (= 4.0.1)
60
+ bundler (>= 1.3.0, < 2.0)
61
+ railties (= 4.0.1)
62
+ sprockets-rails (~> 2.0.0)
63
+ railties (4.0.1)
64
+ actionpack (= 4.0.1)
65
+ activesupport (= 4.0.1)
74
66
  rake (>= 0.8.7)
75
- rdoc (~> 3.4)
76
- thor (>= 0.14.6, < 2.0)
77
- rake (10.0.3)
67
+ thor (>= 0.18.1, < 2.0)
68
+ rake (10.1.0)
78
69
  rdoc (3.12)
79
70
  json (~> 1.4)
80
71
  rspec (2.12.0)
@@ -85,17 +76,23 @@ GEM
85
76
  rspec-expectations (2.12.1)
86
77
  diff-lcs (~> 1.1.3)
87
78
  rspec-mocks (2.12.2)
88
- sprockets (2.2.2)
79
+ sprockets (2.10.1)
89
80
  hike (~> 1.2)
90
81
  multi_json (~> 1.0)
91
82
  rack (~> 1.0)
92
83
  tilt (~> 1.1, != 1.3.0)
93
- thor (0.17.0)
94
- tilt (1.3.3)
95
- treetop (1.4.12)
84
+ sprockets-rails (2.0.1)
85
+ actionpack (>= 3.0)
86
+ activesupport (>= 3.0)
87
+ sprockets (~> 2.8)
88
+ thor (0.18.1)
89
+ thread_safe (0.1.3)
90
+ atomic
91
+ tilt (1.4.1)
92
+ treetop (1.4.15)
96
93
  polyglot
97
94
  polyglot (>= 0.3.1)
98
- tzinfo (0.3.35)
95
+ tzinfo (0.3.38)
99
96
 
100
97
  PLATFORMS
101
98
  ruby
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- #ActiveRecord + PostgreSQL Earthdistance [![Build Status](https://secure.travis-ci.org/softa/activerecord-postgres-earthdistance.png?branch=master)](http://travis-ci.org/softa/activerecord-postgres-earthdistance)
1
+ #ActiveRecord + PostgreSQL Earthdistance [![Build Status](https://travis-ci.org/diogob/activerecord-postgres-earthdistance.png?branch=master)](https://travis-ci.org/diogob/activerecord-postgres-earthdistance)
2
2
 
3
3
  Check distances with latitude and longitude using PostgreSQL special indexes.
4
4
  This gem enables your model to query the database using the earthdistance extension. This should be much faster than using trigonometry functions over standart indexs.
@@ -47,7 +47,7 @@ Edit the created migration:
47
47
  class AddIndexToPlaces < ActiveRecord::Migration
48
48
  def change
49
49
  add_earthdistance_index :places
50
- end
50
+ end
51
51
  end
52
52
  ```
53
53
 
@@ -89,6 +89,11 @@ To query for all places within a given radius of 100 meters from the origin 30,5
89
89
  Place.within_radius(500, 30, 50).all
90
90
  ```
91
91
 
92
+ You can also order the records based on the distance from a point
93
+ ```ruby
94
+ Place.within_radius(500, 30, 50).order_by_distance(20,30)
95
+ ```
96
+
92
97
  ##Test Database
93
98
 
94
99
  To have earthdistance enabled when you load your database schema (as happens in rake db:test:prepare), you
@@ -108,7 +113,7 @@ unsure about the implications of this change, we suggest reading this
108
113
  ##Help
109
114
 
110
115
  You can use issues in github for that. Or else you can reach us at
111
- twitter: [@dbiazus](https://twitter.com/#!/dbiazus)
116
+ twitter: [@dbiazus](https://twitter.com/#!/dbiazus)
112
117
 
113
118
  ##Note on Patches/Pull Requests
114
119
 
@@ -4,7 +4,7 @@ $:.unshift lib unless $:.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |s|
6
6
  s.name = "activerecord-postgres-earthdistance"
7
- s.version = "0.2.0"
7
+ s.version = "0.3.0"
8
8
 
9
9
  s.platform = Gem::Platform::RUBY
10
10
  s.license = "MIT"
@@ -14,9 +14,14 @@ module ActiveRecordPostgresEarthdistance
14
14
 
15
15
  def within_radius radius, lat, lng
16
16
  where(["ll_to_earth(#{self.latitude_column}, #{self.longitude_column}) <@ earth_box(ll_to_earth(?, ?), ?)" +
17
- "AND earth_distance(ll_to_earth(#{self.latitude_column}, #{self.longitude_column}), ll_to_earth(?, ?)) <= ?",
17
+ "AND earth_distance(ll_to_earth(#{self.latitude_column}, #{self.longitude_column}), ll_to_earth(?, ?)) <= ?",
18
18
  lat, lng, radius, lat, lng, radius])
19
19
  end
20
+
21
+ def order_by_distance lat, lng, order: "ASC"
22
+ order("earth_distance(ll_to_earth(#{self.latitude_column}, #{self.longitude_column}), ll_to_earth(#{lat}, #{lng})) #{order}")
23
+ end
24
+
20
25
  end
21
26
  end
22
27
  end
@@ -20,7 +20,7 @@ class EarthDistance < Rails::Railtie
20
20
  include Rails::Generators::Migration
21
21
 
22
22
  def self.source_root
23
- @source_root ||= File.join(File.dirname(__FILE__), 'templates')
23
+ @source_root ||= File.join(File.dirname(__FILE__), '..', 'templates')
24
24
  end
25
25
 
26
26
  def self.next_migration_number(dirname)
@@ -8,6 +8,10 @@ describe "ActiveRecord::Base.act_as_geolocated" do
8
8
  @place = Place.create!(:lat => -30.0277041, :lng => -51.2287346)
9
9
  end
10
10
 
11
+ after(:all) do
12
+ @place.destroy
13
+ end
14
+
11
15
  context "when query with null data" do
12
16
  it{ should == [] }
13
17
  end
@@ -26,4 +30,27 @@ describe "ActiveRecord::Base.act_as_geolocated" do
26
30
  let(:test_data){ {radius: 1000, lat: -27.5969039, lng: -48.5494544} }
27
31
  end
28
32
  end
33
+
34
+ describe "#order_by_distance" do
35
+ let(:current_location){ {lat: nil, lng: nil, radius: nil} }
36
+ subject{ Place.order_by_distance(current_location[:lat], current_location[:lng]) }
37
+ before(:all) do
38
+ @place_1 = Place.create!(:lat => 52.370216, :lng => 4.895168) #Amsterdam
39
+ @place_2 = Place.create!(:lat => 52.520007, :lng => 13.404954) #Berlin
40
+ end
41
+ after(:all) do
42
+ @place_1.destroy
43
+ @place_2.destroy
44
+ end
45
+
46
+ context "when sorting on distance" do
47
+ let(:current_location){{lat: 51.511214, lng: 0.119824}} #London
48
+ it{ should == [@place_1, @place_2] }
49
+ end
50
+
51
+ context "when sorting on distance from another location" do
52
+ let(:current_location){{lat: 52.229676, lng: 21.012229}} #Warsaw
53
+ it{ should == [@place_2, @place_1] }
54
+ end
55
+ end
29
56
  end
metadata CHANGED
@@ -1,100 +1,88 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activerecord-postgres-earthdistance
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
5
- prerelease:
4
+ version: 0.3.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Diogo Biazus
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-02-07 00:00:00.000000000 Z
11
+ date: 2013-11-28 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: rails
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - '>='
20
18
  - !ruby/object:Gem::Version
21
19
  version: '3.1'
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - '>='
28
25
  - !ruby/object:Gem::Version
29
26
  version: '3.1'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: rake
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - '>='
36
32
  - !ruby/object:Gem::Version
37
33
  version: '0'
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - '>='
44
39
  - !ruby/object:Gem::Version
45
40
  version: '0'
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: pg
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - '>='
52
46
  - !ruby/object:Gem::Version
53
47
  version: '0'
54
48
  type: :runtime
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ! '>='
52
+ - - '>='
60
53
  - !ruby/object:Gem::Version
61
54
  version: '0'
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: bundler
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
- - - ! '>='
59
+ - - '>='
68
60
  - !ruby/object:Gem::Version
69
61
  version: '0'
70
62
  type: :development
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
- - - ! '>='
66
+ - - '>='
76
67
  - !ruby/object:Gem::Version
77
68
  version: '0'
78
69
  - !ruby/object:Gem::Dependency
79
70
  name: rdoc
80
71
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
72
  requirements:
83
- - - ! '>='
73
+ - - '>='
84
74
  - !ruby/object:Gem::Version
85
75
  version: '0'
86
76
  type: :development
87
77
  prerelease: false
88
78
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
79
  requirements:
91
- - - ! '>='
80
+ - - '>='
92
81
  - !ruby/object:Gem::Version
93
82
  version: '0'
94
83
  - !ruby/object:Gem::Dependency
95
84
  name: rspec
96
85
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
86
  requirements:
99
87
  - - ~>
100
88
  - !ruby/object:Gem::Version
@@ -102,7 +90,6 @@ dependencies:
102
90
  type: :development
103
91
  prerelease: false
104
92
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
93
  requirements:
107
94
  - - ~>
108
95
  - !ruby/object:Gem::Version
@@ -138,26 +125,28 @@ files:
138
125
  homepage: http://github.com/diogob/activerecord-postgres-earthdistance
139
126
  licenses:
140
127
  - MIT
128
+ metadata: {}
141
129
  post_install_message:
142
130
  rdoc_options: []
143
131
  require_paths:
144
132
  - lib
145
133
  required_ruby_version: !ruby/object:Gem::Requirement
146
- none: false
147
134
  requirements:
148
- - - ! '>='
135
+ - - '>='
149
136
  - !ruby/object:Gem::Version
150
137
  version: 1.8.7
151
138
  required_rubygems_version: !ruby/object:Gem::Requirement
152
- none: false
153
139
  requirements:
154
- - - ! '>='
140
+ - - '>='
155
141
  - !ruby/object:Gem::Version
156
142
  version: 1.3.6
157
143
  requirements: []
158
144
  rubyforge_project:
159
- rubygems_version: 1.8.24
145
+ rubygems_version: 2.0.7
160
146
  signing_key:
161
- specification_version: 3
147
+ specification_version: 4
162
148
  summary: Check distances with latitude and longitude using PostgreSQL special indexes
163
- test_files: []
149
+ test_files:
150
+ - spec/act_as_geolocated_spec.rb
151
+ - spec/fixtures/place.rb
152
+ - spec/spec_helper.rb