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.
@@ -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