activerecord-postgres-earthdistance 0.5.1 → 0.5.2
Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 94eb40debf0a4955024e1c8c4213b88530b294b1
|
4
|
+
data.tar.gz: ec0ec0eb7d2472ebe8bad60197bbf0a7b45f1d36
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c9818e3e89ae5b0906c30fa097b26eb7445541541dbce5b31e633641f13d8a1ba797c500f4e420b0b6fad88315914e35c345971540043626ef1d1b589f5ecc35
|
7
|
+
data.tar.gz: b6dfb3232de9828d812589a01a4f199ee36af6dbdda53064373253e5000370982465eec956f122e9efcdb3fdb9029f1c24e3e5cc820653146d01f56208ae5384
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
activerecord-postgres-earthdistance (0.5.
|
4
|
+
activerecord-postgres-earthdistance (0.5.2)
|
5
5
|
activerecord (>= 3.1)
|
6
6
|
pg
|
7
7
|
rake
|
@@ -9,44 +9,47 @@ PATH
|
|
9
9
|
GEM
|
10
10
|
remote: http://rubygems.org/
|
11
11
|
specs:
|
12
|
-
activemodel (5.0.
|
13
|
-
activesupport (= 5.0.
|
14
|
-
activerecord (5.0.
|
15
|
-
activemodel (= 5.0.
|
16
|
-
activesupport (= 5.0.
|
12
|
+
activemodel (5.0.2)
|
13
|
+
activesupport (= 5.0.2)
|
14
|
+
activerecord (5.0.2)
|
15
|
+
activemodel (= 5.0.2)
|
16
|
+
activesupport (= 5.0.2)
|
17
17
|
arel (~> 7.0)
|
18
|
-
activesupport (5.0.
|
18
|
+
activesupport (5.0.2)
|
19
19
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
20
20
|
i18n (~> 0.7)
|
21
21
|
minitest (~> 5.1)
|
22
22
|
tzinfo (~> 1.1)
|
23
23
|
arel (7.1.4)
|
24
24
|
coderay (1.1.1)
|
25
|
-
concurrent-ruby (1.0.
|
26
|
-
diff-lcs (1.
|
27
|
-
i18n (0.
|
28
|
-
json (1.8.3)
|
25
|
+
concurrent-ruby (1.0.5)
|
26
|
+
diff-lcs (1.3)
|
27
|
+
i18n (0.8.1)
|
29
28
|
method_source (0.8.2)
|
30
|
-
minitest (5.
|
31
|
-
pg (0.
|
29
|
+
minitest (5.10.1)
|
30
|
+
pg (0.20.0)
|
32
31
|
pry (0.10.4)
|
33
32
|
coderay (~> 1.1.0)
|
34
33
|
method_source (~> 0.8.1)
|
35
34
|
slop (~> 3.4)
|
36
|
-
rake (
|
37
|
-
rdoc (
|
38
|
-
|
39
|
-
|
40
|
-
rspec-
|
41
|
-
rspec-
|
42
|
-
|
43
|
-
|
44
|
-
rspec-expectations (
|
45
|
-
diff-lcs (>= 1.
|
46
|
-
|
35
|
+
rake (12.0.0)
|
36
|
+
rdoc (5.1.0)
|
37
|
+
rspec (3.5.0)
|
38
|
+
rspec-core (~> 3.5.0)
|
39
|
+
rspec-expectations (~> 3.5.0)
|
40
|
+
rspec-mocks (~> 3.5.0)
|
41
|
+
rspec-core (3.5.4)
|
42
|
+
rspec-support (~> 3.5.0)
|
43
|
+
rspec-expectations (3.5.0)
|
44
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
45
|
+
rspec-support (~> 3.5.0)
|
46
|
+
rspec-mocks (3.5.0)
|
47
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
48
|
+
rspec-support (~> 3.5.0)
|
49
|
+
rspec-support (3.5.0)
|
47
50
|
slop (3.6.0)
|
48
|
-
thread_safe (0.3.
|
49
|
-
tzinfo (1.2.
|
51
|
+
thread_safe (0.3.6)
|
52
|
+
tzinfo (1.2.3)
|
50
53
|
thread_safe (~> 0.1)
|
51
54
|
|
52
55
|
PLATFORMS
|
@@ -57,7 +60,7 @@ DEPENDENCIES
|
|
57
60
|
bundler
|
58
61
|
pry
|
59
62
|
rdoc
|
60
|
-
rspec
|
63
|
+
rspec
|
61
64
|
|
62
65
|
BUNDLED WITH
|
63
|
-
1.
|
66
|
+
1.14.3
|
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift lib unless $LOAD_PATH.include?(lib)
|
|
4
4
|
|
5
5
|
Gem::Specification.new do |s|
|
6
6
|
s.name = "activerecord-postgres-earthdistance"
|
7
|
-
s.version = "0.5.
|
7
|
+
s.version = "0.5.2"
|
8
8
|
|
9
9
|
s.platform = Gem::Platform::RUBY
|
10
10
|
s.license = "MIT"
|
@@ -23,7 +23,7 @@ Gem::Specification.new do |s|
|
|
23
23
|
s.add_dependency "pg"
|
24
24
|
s.add_development_dependency "bundler"
|
25
25
|
s.add_development_dependency "rdoc"
|
26
|
-
s.add_development_dependency "rspec"
|
26
|
+
s.add_development_dependency "rspec"
|
27
27
|
s.add_development_dependency "pry"
|
28
28
|
|
29
29
|
git_files = begin
|
@@ -37,8 +37,6 @@ module ActiveRecordPostgresEarthdistance
|
|
37
37
|
joins(through_table).order("#{earth_distance.to_sql} #{order}")
|
38
38
|
end
|
39
39
|
|
40
|
-
private
|
41
|
-
|
42
40
|
def through_table_klass
|
43
41
|
if through_table.present?
|
44
42
|
reflections[through_table.to_s].klass
|
@@ -84,11 +82,12 @@ module ActiveRecordPostgresEarthdistance
|
|
84
82
|
module QueryMethods
|
85
83
|
def selecting_distance_from(lat, lng, name = "distance", include_default_columns = true)
|
86
84
|
clone.tap do |relation|
|
85
|
+
relation.joins!(through_table)
|
87
86
|
values = []
|
88
87
|
if relation.select_values.empty? && include_default_columns
|
89
88
|
values << relation.arel_table[Arel.star]
|
90
89
|
end
|
91
|
-
values << Utils.earth_distance(
|
90
|
+
values << Utils.earth_distance(through_table_klass, lat, lng, name)
|
92
91
|
|
93
92
|
relation.select_values = values
|
94
93
|
end
|
@@ -7,7 +7,7 @@ describe "ActiveRecord::Base.act_as_geolocated" do
|
|
7
7
|
subject { Place.where("id = ?", place).first }
|
8
8
|
after { place.destroy! }
|
9
9
|
|
10
|
-
it {
|
10
|
+
it { is_expected.to eq place }
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
@@ -20,34 +20,34 @@ describe "ActiveRecord::Base.act_as_geolocated" do
|
|
20
20
|
after(:all) { @place.destroy }
|
21
21
|
|
22
22
|
context "when query with null data" do
|
23
|
-
it {
|
23
|
+
it { is_expected.to be_empty }
|
24
24
|
end
|
25
25
|
|
26
26
|
context "when query for the exact same point with radius 0" do
|
27
27
|
let(:test_data) { { lat: -30.0277041, lng: -51.2287346, radius: 0 } }
|
28
28
|
|
29
|
-
it {
|
29
|
+
it { is_expected.to eq [@place] }
|
30
30
|
end
|
31
31
|
|
32
32
|
context "when query for place within the box" do
|
33
33
|
let(:test_data) { { radius: 4_000_000, lat: -27.5969039, lng: -48.5494544 } }
|
34
34
|
|
35
|
-
it {
|
35
|
+
it { is_expected.to eq [@place] }
|
36
36
|
end
|
37
37
|
|
38
38
|
context "when query for place within the box, but outside the radius" do
|
39
39
|
let(:test_data) { { radius: 300_000, lat: -27.5969039, lng: -48.5494544 } }
|
40
40
|
|
41
41
|
it "the place shouldn't be within the radius" do
|
42
|
-
Place.within_radius(test_data[:radius], test_data[:lat], test_data[:lng]).
|
42
|
+
expect(Place.within_radius(test_data[:radius], test_data[:lat], test_data[:lng])).to be_empty
|
43
43
|
end
|
44
44
|
|
45
|
-
it {
|
45
|
+
it { is_expected.to eq [@place] }
|
46
46
|
end
|
47
47
|
|
48
48
|
context "when query for place outside the box" do
|
49
49
|
let(:test_data) { { radius: 1000, lat: -27.5969039, lng: -48.5494544 } }
|
50
|
-
it {
|
50
|
+
it { is_expected.to be_empty }
|
51
51
|
end
|
52
52
|
|
53
53
|
context "when joining tables that are also geoloacted" do
|
@@ -85,22 +85,22 @@ describe "ActiveRecord::Base.act_as_geolocated" do
|
|
85
85
|
end
|
86
86
|
|
87
87
|
context "when query with null data" do
|
88
|
-
it {
|
88
|
+
it { is_expected.to eq [] }
|
89
89
|
end
|
90
90
|
|
91
91
|
context "when query for the exact same point with radius 0" do
|
92
92
|
let(:test_data) { { lat: -30.0277041, lng: -51.2287346, radius: 0 } }
|
93
|
-
it {
|
93
|
+
it { is_expected.to eq [@place] }
|
94
94
|
end
|
95
95
|
|
96
96
|
context "when query for place within radius" do
|
97
97
|
let(:test_data) { { radius: 4_000_000, lat: -27.5969039, lng: -48.5494544 } }
|
98
|
-
it {
|
98
|
+
it { is_expected.to eq [@place] }
|
99
99
|
end
|
100
100
|
|
101
101
|
context "when query for place outside the radius" do
|
102
102
|
let(:test_data) { { radius: 1000, lat: -27.5969039, lng: -48.5494544 } }
|
103
|
-
it {
|
103
|
+
it { is_expected.to eq [] }
|
104
104
|
end
|
105
105
|
|
106
106
|
context "uses lat and long of through table" do
|
@@ -119,22 +119,22 @@ describe "ActiveRecord::Base.act_as_geolocated" do
|
|
119
119
|
end
|
120
120
|
|
121
121
|
context "when query with null data" do
|
122
|
-
it {
|
122
|
+
it { is_expected.to eq [] }
|
123
123
|
end
|
124
124
|
|
125
125
|
context "when query for the exact same point with radius 0" do
|
126
126
|
let(:test_data) { { lat: -30.0277041, lng: -51.2287346, radius: 0 } }
|
127
|
-
it {
|
127
|
+
it { is_expected.to eq [@job] }
|
128
128
|
end
|
129
129
|
|
130
130
|
context "when query for place within radius" do
|
131
131
|
let(:test_data) { { radius: 4_000_000, lat: -27.5969039, lng: -48.5494544 } }
|
132
|
-
it {
|
132
|
+
it { is_expected.to eq [@job] }
|
133
133
|
end
|
134
134
|
|
135
135
|
context "when query for place outside the radius" do
|
136
136
|
let(:test_data) { { radius: 1000, lat: -27.5969039, lng: -48.5494544 } }
|
137
|
-
it {
|
137
|
+
it { is_expected.to eq [] }
|
138
138
|
end
|
139
139
|
end
|
140
140
|
end
|
@@ -168,17 +168,17 @@ describe "ActiveRecord::Base.act_as_geolocated" do
|
|
168
168
|
end
|
169
169
|
|
170
170
|
let(:current_location) { { lat: 51.511214, lng: 0.119824 } } # London
|
171
|
-
it {
|
171
|
+
it { is_expected.to eq [@amsterdam_job, @berlin_job] }
|
172
172
|
end
|
173
173
|
|
174
174
|
context "when sorting on distance" do
|
175
175
|
let(:current_location) { { lat: 51.511214, lng: 0.119824 } } # London
|
176
|
-
it {
|
176
|
+
it { is_expected.to eq [@amsterdam, @berlin] }
|
177
177
|
end
|
178
178
|
|
179
179
|
context "when sorting on distance from another location" do
|
180
180
|
let(:current_location) { { lat: 52.229676, lng: 21.012229 } } # Warsaw
|
181
|
-
it {
|
181
|
+
it { is_expected.to eq [@berlin, @amsterdam] }
|
182
182
|
end
|
183
183
|
end
|
184
184
|
|
@@ -199,7 +199,26 @@ describe "ActiveRecord::Base.act_as_geolocated" do
|
|
199
199
|
end
|
200
200
|
context "when selecting distance" do
|
201
201
|
let(:current_location) { { lat: 52.229676, lng: 21.012229 } } # Warsaw
|
202
|
-
it {
|
202
|
+
it { is_expected.to eq ["Amsterdam", 1_095_013.87438311] }
|
203
|
+
end
|
204
|
+
|
205
|
+
context "through table" do
|
206
|
+
|
207
|
+
subject { Job.all.selecting_distance_from(current_location[:lat], current_location[:lng]).first }
|
208
|
+
|
209
|
+
before(:all) do
|
210
|
+
@event = Event.create!(lat: -30.0277041, lng: -51.2287346)
|
211
|
+
@job = Job.create!(event: @event)
|
212
|
+
end
|
213
|
+
|
214
|
+
after(:all) do
|
215
|
+
@event.destroy
|
216
|
+
@job.destroy
|
217
|
+
end
|
218
|
+
|
219
|
+
context "when selecting distance" do
|
220
|
+
it { is_expected.to respond_to :distance }
|
221
|
+
end
|
203
222
|
end
|
204
223
|
end
|
205
224
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activerecord-postgres-earthdistance
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Diogo Biazus
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-04-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -84,16 +84,16 @@ dependencies:
|
|
84
84
|
name: rspec
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- - "
|
87
|
+
- - ">="
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
89
|
+
version: '0'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- - "
|
94
|
+
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: '
|
96
|
+
version: '0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: pry
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|