mongoid_geo 0.3.2 → 0.4.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.
- data/lib/mongoid/geo/fields.rb +5 -1
- data/lib/mongoid/geo/geo_near.rb +14 -15
- metadata +14 -14
data/lib/mongoid/geo/fields.rb
CHANGED
@@ -4,7 +4,11 @@ module Mongoid #:nodoc
|
|
4
4
|
module ClassMethods #:nodoc
|
5
5
|
def create_accessors(name, meth, options = {})
|
6
6
|
generated_field_methods.module_eval do
|
7
|
-
|
7
|
+
if [ Time, DateTime ].include?(options[:type])
|
8
|
+
define_method(meth) { Time.get(read_attribute(name)) }
|
9
|
+
else
|
10
|
+
define_method(meth) { read_attribute(name) }
|
11
|
+
end
|
8
12
|
|
9
13
|
if options[:type] == Array && options[:geo]
|
10
14
|
lat_meth = options[:lat] || "lat"
|
data/lib/mongoid/geo/geo_near.rb
CHANGED
@@ -19,7 +19,7 @@ module Mongoid
|
|
19
19
|
|
20
20
|
module Model
|
21
21
|
def to_model
|
22
|
-
m =
|
22
|
+
m = klass.where(:_id => _id).first.extend(Mongoid::Geo::Distance)
|
23
23
|
m.set_distance distance
|
24
24
|
m
|
25
25
|
end
|
@@ -27,21 +27,20 @@ module Mongoid
|
|
27
27
|
|
28
28
|
module Models
|
29
29
|
def to_models
|
30
|
-
distance_hash = self.
|
31
|
-
|
32
|
-
result
|
33
|
-
end
|
30
|
+
distance_hash = Hash[ self.map {|item| [item._id, item.distance] } ]
|
31
|
+
|
34
32
|
ret = to_criteria.to_a.map do |m|
|
35
33
|
m.extend(Mongoid::Geo::Distance)
|
36
34
|
m.set_distance distance_hash[m._id.to_s]
|
37
35
|
m
|
38
36
|
end
|
39
|
-
|
37
|
+
|
38
|
+
ret.sort {|a,b| a.distance <=> b.distance}
|
40
39
|
end
|
41
40
|
|
42
41
|
def to_criteria
|
43
42
|
ids = map(&:_id)
|
44
|
-
first.
|
43
|
+
first.klass.where(:_id.in => ids)
|
45
44
|
end
|
46
45
|
end
|
47
46
|
|
@@ -54,7 +53,7 @@ module Mongoid
|
|
54
53
|
|
55
54
|
protected
|
56
55
|
|
57
|
-
def create_query
|
56
|
+
def create_query klass, center, options = {}
|
58
57
|
num = options[:num]
|
59
58
|
maxDistance = options[:maxDistance]
|
60
59
|
query = options[:query]
|
@@ -62,7 +61,7 @@ module Mongoid
|
|
62
61
|
mode = options[:mode] || :plane
|
63
62
|
|
64
63
|
nq = BSON::OrderedHash.new.tap do |near_query|
|
65
|
-
near_query["geoNear"] =
|
64
|
+
near_query["geoNear"] = klass.to_s.tableize
|
66
65
|
near_query["near"] = center
|
67
66
|
near_query["num"] = num if num
|
68
67
|
near_query["maxDistance"] = maxDistance if maxDistance
|
@@ -77,25 +76,25 @@ module Mongoid
|
|
77
76
|
nq
|
78
77
|
end
|
79
78
|
|
80
|
-
def query_result
|
79
|
+
def query_result klass, query, center, location_attribute, options = {}
|
81
80
|
distanceMultiplier = options[:distanceMultiplier]
|
82
81
|
lon,lat = center
|
83
|
-
query_result =
|
82
|
+
query_result = klass.collection.db.command(query)['results'].sort_by do |r|
|
84
83
|
loc = r['obj'][location_attribute.to_s]
|
85
84
|
r['distance'] = Mongoid::Geo::Haversine.distance(lat, lon, loc[1], loc[0]) if Mongoid::Geo.mongo_db_version < 1.7
|
86
85
|
# Calculate distance in KM or Miles if mongodb < 1.7
|
87
86
|
r['distance'] = r['distance'] * distanceMultiplier if distanceMultiplier && Mongoid::Geo.mongo_db_version < 1.7
|
88
|
-
r['
|
87
|
+
r['klass'] = klass
|
89
88
|
end
|
90
89
|
end
|
91
90
|
|
92
91
|
def create_result query_result
|
93
|
-
query_result.
|
92
|
+
query_result.map do |qr|
|
94
93
|
res = Hashie::Mash.new(qr['obj'].to_hash).extend(Mongoid::Geo::Model)
|
95
|
-
res.
|
94
|
+
res.klass = qr['klass']
|
96
95
|
res.distance = qr['distance']
|
97
96
|
res._id = qr['obj']['_id'].to_s
|
98
|
-
|
97
|
+
res
|
99
98
|
end
|
100
99
|
end
|
101
100
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongoid_geo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,12 +9,12 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-
|
12
|
+
date: 2011-04-07 00:00:00.000000000 +02:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rspec
|
17
|
-
requirement: &
|
17
|
+
requirement: &2153871480 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ! '>='
|
@@ -22,32 +22,32 @@ dependencies:
|
|
22
22
|
version: '2.4'
|
23
23
|
type: :development
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
25
|
+
version_requirements: *2153871480
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: mongoid
|
28
|
-
requirement: &
|
28
|
+
requirement: &2153871020 !ruby/object:Gem::Requirement
|
29
29
|
none: false
|
30
30
|
requirements:
|
31
31
|
- - ! '>='
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 2.0.
|
33
|
+
version: 2.0.1
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
|
-
version_requirements: *
|
36
|
+
version_requirements: *2153871020
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: bson
|
39
|
-
requirement: &
|
39
|
+
requirement: &2153870560 !ruby/object:Gem::Requirement
|
40
40
|
none: false
|
41
41
|
requirements:
|
42
42
|
- - ! '>='
|
43
43
|
- !ruby/object:Gem::Version
|
44
|
-
version: 1.
|
44
|
+
version: '1.3'
|
45
45
|
type: :runtime
|
46
46
|
prerelease: false
|
47
|
-
version_requirements: *
|
47
|
+
version_requirements: *2153870560
|
48
48
|
- !ruby/object:Gem::Dependency
|
49
49
|
name: activesupport
|
50
|
-
requirement: &
|
50
|
+
requirement: &2153870100 !ruby/object:Gem::Requirement
|
51
51
|
none: false
|
52
52
|
requirements:
|
53
53
|
- - ! '>='
|
@@ -55,10 +55,10 @@ dependencies:
|
|
55
55
|
version: 3.0.4
|
56
56
|
type: :runtime
|
57
57
|
prerelease: false
|
58
|
-
version_requirements: *
|
58
|
+
version_requirements: *2153870100
|
59
59
|
- !ruby/object:Gem::Dependency
|
60
60
|
name: hashie
|
61
|
-
requirement: &
|
61
|
+
requirement: &2153869640 !ruby/object:Gem::Requirement
|
62
62
|
none: false
|
63
63
|
requirements:
|
64
64
|
- - ! '>='
|
@@ -66,7 +66,7 @@ dependencies:
|
|
66
66
|
version: 0.4.0
|
67
67
|
type: :runtime
|
68
68
|
prerelease: false
|
69
|
-
version_requirements: *
|
69
|
+
version_requirements: *2153869640
|
70
70
|
description: Geo spatial extension on Mongoid 2, to add more geo-spatial capabilities
|
71
71
|
email:
|
72
72
|
- kmandrup@gmail.com
|