mongoid_geo 0.3.2 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
- define_method(meth) { read_attribute(name) }
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"
@@ -19,7 +19,7 @@ module Mongoid
19
19
 
20
20
  module Model
21
21
  def to_model
22
- m = clazz.where(:_id => _id).first.extend(Mongoid::Geo::Distance)
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.inject({}) do |result, item|
31
- result[item._id] = item.distance
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
- ret.sort! {|a,b| a.distance <=> b.distance}
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.clazz.where(:_id.in => ids)
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 clazz, center, options = {}
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"] = clazz.to_s.tableize
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 clazz, query, center, location_attribute, options = {}
79
+ def query_result klass, query, center, location_attribute, options = {}
81
80
  distanceMultiplier = options[:distanceMultiplier]
82
81
  lon,lat = center
83
- query_result = clazz.collection.db.command(query)['results'].sort_by do |r|
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['clazz'] = clazz
87
+ r['klass'] = klass
89
88
  end
90
89
  end
91
90
 
92
91
  def create_result query_result
93
- query_result.inject([]) do |result, qr|
92
+ query_result.map do |qr|
94
93
  res = Hashie::Mash.new(qr['obj'].to_hash).extend(Mongoid::Geo::Model)
95
- res.clazz = qr['clazz']
94
+ res.klass = qr['klass']
96
95
  res.distance = qr['distance']
97
96
  res._id = qr['obj']['_id'].to_s
98
- result.push(res)
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.3.2
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-03-28 00:00:00.000000000 +02:00
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: &2153347880 !ruby/object:Gem::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: *2153347880
25
+ version_requirements: *2153871480
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: mongoid
28
- requirement: &2153347420 !ruby/object:Gem::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.0.rc.6
33
+ version: 2.0.1
34
34
  type: :runtime
35
35
  prerelease: false
36
- version_requirements: *2153347420
36
+ version_requirements: *2153871020
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: bson
39
- requirement: &2153346960 !ruby/object:Gem::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.1.6
44
+ version: '1.3'
45
45
  type: :runtime
46
46
  prerelease: false
47
- version_requirements: *2153346960
47
+ version_requirements: *2153870560
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: activesupport
50
- requirement: &2153346500 !ruby/object:Gem::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: *2153346500
58
+ version_requirements: *2153870100
59
59
  - !ruby/object:Gem::Dependency
60
60
  name: hashie
61
- requirement: &2153346040 !ruby/object:Gem::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: *2153346040
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