mongoid_geospatial 1.0.0 → 2.0.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/Gemfile +5 -4
- data/Guardfile +24 -0
- data/README.md +9 -3
- data/lib/mongoid_geospatial/{contexts → contextual}/mongo.rb +11 -6
- data/lib/mongoid_geospatial/criterion/complex.rb +7 -0
- data/lib/mongoid_geospatial/criterion/inclusion.rb +12 -12
- data/lib/mongoid_geospatial/extensions/rgeo_spherical_point_impl.rb +13 -0
- data/lib/mongoid_geospatial/fields/line_string.rb +7 -6
- data/lib/mongoid_geospatial/fields/point.rb +24 -11
- data/lib/mongoid_geospatial/fields/polygon.rb +14 -10
- data/lib/mongoid_geospatial/geospatial/geo_near_results.rb +1 -1
- data/lib/mongoid_geospatial/geospatial.rb +1 -29
- data/lib/mongoid_geospatial/version.rb +1 -1
- data/lib/mongoid_geospatial.rb +9 -5
- data/mongoid_geospatial.gemspec +4 -5
- data/spec/models/address.rb +19 -14
- data/spec/models/bar.rb +3 -1
- data/spec/models/event.rb +2 -2
- data/spec/models/farm.rb +3 -4
- data/spec/models/person.rb +18 -60
- data/spec/models/phone.rb +3 -1
- data/spec/models/river.rb +2 -2
- data/spec/{functional/contexts → mongoid_geospatial/contextual}/mongo_spec.rb +16 -8
- data/spec/mongoid_geospatial/criterion/inclusion_spec.rb +375 -0
- data/spec/mongoid_geospatial/fields/point_spec.rb +34 -0
- data/spec/mongoid_geospatial/fields/polygon_spec.rb +6 -0
- data/spec/{functional → mongoid_geospatial}/geospatial/geo_near_results_spec.rb +0 -0
- data/spec/mongoid_geospatial/geospatial_spec.rb +2 -0
- data/spec/mongoid_geospatial/mongoid_geospatial_spec.rb +83 -0
- data/spec/spec_helper.rb +36 -20
- data/spec/support/authentication.rb +23 -23
- metadata +23 -161
- data/spec/functional/criterion/inclusion_spec.rb +0 -360
- data/spec/functional/mongoid_geospatial_spec.rb +0 -54
- data/spec/models/account.rb +0 -19
- data/spec/models/acolyte.rb +0 -9
- data/spec/models/address_component.rb +0 -5
- data/spec/models/agent.rb +0 -10
- data/spec/models/alert.rb +0 -5
- data/spec/models/animal.rb +0 -21
- data/spec/models/answer.rb +0 -4
- data/spec/models/birthday.rb +0 -13
- data/spec/models/book.rb +0 -5
- data/spec/models/business.rb +0 -7
- data/spec/models/callbacks.rb +0 -57
- data/spec/models/category.rb +0 -13
- data/spec/models/circus.rb +0 -7
- data/spec/models/comment.rb +0 -13
- data/spec/models/country_code.rb +0 -6
- data/spec/models/description.rb +0 -11
- data/spec/models/division.rb +0 -5
- data/spec/models/drug.rb +0 -5
- data/spec/models/employer.rb +0 -5
- data/spec/models/entry.rb +0 -6
- data/spec/models/favorite.rb +0 -6
- data/spec/models/fruits.rb +0 -11
- data/spec/models/game.rb +0 -18
- data/spec/models/ghost.rb +0 -7
- data/spec/models/house.rb +0 -4
- data/spec/models/inheritance.rb +0 -90
- data/spec/models/league.rb +0 -5
- data/spec/models/location.rb +0 -5
- data/spec/models/login.rb +0 -6
- data/spec/models/membership.rb +0 -4
- data/spec/models/mixed_drink.rb +0 -4
- data/spec/models/name.rb +0 -13
- data/spec/models/namespacing.rb +0 -11
- data/spec/models/observed.rb +0 -41
- data/spec/models/override.rb +0 -16
- data/spec/models/owner.rb +0 -6
- data/spec/models/page.rb +0 -5
- data/spec/models/page_question.rb +0 -4
- data/spec/models/paranoid_post.rb +0 -18
- data/spec/models/parents.rb +0 -32
- data/spec/models/patient.rb +0 -15
- data/spec/models/pet.rb +0 -7
- data/spec/models/pet_owner.rb +0 -6
- data/spec/models/player.rb +0 -23
- data/spec/models/post.rb +0 -26
- data/spec/models/preference.rb +0 -9
- data/spec/models/question.rb +0 -8
- data/spec/models/quiz.rb +0 -6
- data/spec/models/rating.rb +0 -8
- data/spec/models/role.rb +0 -5
- data/spec/models/service.rb +0 -6
- data/spec/models/shelf.rb +0 -5
- data/spec/models/slave_address_numbers.rb +0 -14
- data/spec/models/survey.rb +0 -5
- data/spec/models/tag.rb +0 -6
- data/spec/models/tracking_id_validation_history.rb +0 -25
- data/spec/models/translation.rb +0 -5
- data/spec/models/tree.rb +0 -9
- data/spec/models/user.rb +0 -9
- data/spec/models/user_account.rb +0 -10
- data/spec/models/vet_visit.rb +0 -5
- data/spec/models/video.rb +0 -9
- data/spec/models/wiki_page.rb +0 -6
data/Gemfile
CHANGED
@@ -1,11 +1,12 @@
|
|
1
1
|
source 'http://rubygems.org'
|
2
|
-
|
3
|
-
# Specify gem's dependencies in mongoid_geospatial.gemspec
|
4
|
-
gemspec
|
2
|
+
gemspec # Specify gem's dependencies in mongoid_geospatial.gemspec
|
5
3
|
|
6
4
|
gem 'rgeo'
|
5
|
+
gem 'mongoid', '~> 3.0'
|
7
6
|
|
8
7
|
group :development do
|
9
8
|
gem 'rspec'
|
10
|
-
gem '
|
9
|
+
gem 'guard-rspec'
|
10
|
+
gem 'pry'
|
11
|
+
# gem 'fuubar'
|
11
12
|
end
|
data/Guardfile
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# A sample Guardfile
|
2
|
+
# More info at https://github.com/guard/guard#readme
|
3
|
+
require 'guard'
|
4
|
+
|
5
|
+
guard 'rspec', :version => 2 do
|
6
|
+
watch(%r{^spec/.+_spec\.rb$})
|
7
|
+
watch(%r{^lib/(.+)\.rb$}) { "spec" } # { |m| "spec spec/lib/#{m[1]}_spec.rb" }
|
8
|
+
watch('spec/spec_helper.rb') { "spec" }
|
9
|
+
|
10
|
+
# Rails example
|
11
|
+
# watch(%r{^app/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
|
12
|
+
# watch(%r{^app/(.*)(\.erb|\.haml)$}) { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
|
13
|
+
# watch(%r{^app/controllers/(.+)_(controller)\.rb$}) { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/acceptance/#{m[1]}_spec.rb"] }
|
14
|
+
# watch(%r{^spec/support/(.+)\.rb$}) { "spec" }
|
15
|
+
# watch('config/routes.rb') { "spec/routing" }
|
16
|
+
# watch('app/controllers/application_controller.rb') { "spec/controllers" }
|
17
|
+
|
18
|
+
# Capybara request specs
|
19
|
+
# watch(%r{^app/views/(.+)/.*\.(erb|haml)$}) { |m| "spec/requests/#{m[1]}_spec.rb" }
|
20
|
+
|
21
|
+
# Turnip features and steps
|
22
|
+
# watch(%r{^spec/acceptance/(.+)\.feature$})
|
23
|
+
# watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$}) { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'spec/acceptance' }
|
24
|
+
end
|
data/README.md
CHANGED
@@ -4,9 +4,16 @@ Mongoid Geospatial
|
|
4
4
|
A Mongoid Extension that simplifies and adds support for MongoDB and
|
5
5
|
RGeo Spatial Calculations.
|
6
6
|
|
7
|
-
|
7
|
+
** On beta again **
|
8
|
+
|
9
|
+
Removing some trash, improving and adding support for RGeo and GeoRuby.
|
10
|
+
Version 2+ is going to be beta testing, when it's ready I'll release v3,
|
11
|
+
So the major version stays the same as mongoid.
|
12
|
+
|
13
|
+
|
14
|
+
There are no plans to support MongoDB < 2.0
|
15
|
+
There are no plans to support Mongoid <= 2.0
|
8
16
|
|
9
|
-
*WARNING* Experimental Mongoid 3.0 support.
|
10
17
|
|
11
18
|
|
12
19
|
Quick Start
|
@@ -335,4 +342,3 @@ Copyright
|
|
335
342
|
-----------
|
336
343
|
Copyright (c) 2011 Ryan Ong. See LICENSE.txt for
|
337
344
|
further details.
|
338
|
-
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
module Mongoid #:nodoc:
|
3
|
-
module
|
3
|
+
module Contextual #:nodoc:
|
4
4
|
class Mongo #:nodoc:
|
5
5
|
|
6
6
|
# Fetches rows from the data base sorted by distance.
|
@@ -31,7 +31,7 @@ module Mongoid #:nodoc:
|
|
31
31
|
#
|
32
32
|
# @return [ Array ] Sorted Rows
|
33
33
|
def geo_near(center, opts = {})
|
34
|
-
opts = self.options.merge(opts)
|
34
|
+
opts = self.criteria.options.merge(opts)
|
35
35
|
# convert point
|
36
36
|
center = center.to_xy if center.respond_to?(:to_xy)
|
37
37
|
center = [center.x, center.y] if center.respond_to?(:x)
|
@@ -68,7 +68,8 @@ module Mongoid #:nodoc:
|
|
68
68
|
|
69
69
|
end
|
70
70
|
opts[:query] = create_geo_near_query(center,opts)
|
71
|
-
results = klass.
|
71
|
+
results = klass.mongo_session.command(opts[:query])
|
72
|
+
|
72
73
|
Mongoid::Geospatial::GeoNearResults.new(klass,results,opts)
|
73
74
|
end
|
74
75
|
|
@@ -76,7 +77,7 @@ module Mongoid #:nodoc:
|
|
76
77
|
|
77
78
|
def create_geo_near_query(center,opts)
|
78
79
|
# minimum query
|
79
|
-
query =
|
80
|
+
query = {}
|
80
81
|
query[:geoNear] = klass.collection_name
|
81
82
|
query[:near] = center
|
82
83
|
|
@@ -92,8 +93,8 @@ module Mongoid #:nodoc:
|
|
92
93
|
# allow the use of complex werieis
|
93
94
|
if opts[:query]
|
94
95
|
query['query'] = self.criteria.where(opts[:query]).selector
|
95
|
-
elsif self.selector != {}
|
96
|
-
query['query'] = self.selector
|
96
|
+
elsif self.criteria.selector != {}
|
97
|
+
query['query'] = self.criteria.selector
|
97
98
|
end
|
98
99
|
|
99
100
|
if opts[:max_distance]
|
@@ -101,6 +102,10 @@ module Mongoid #:nodoc:
|
|
101
102
|
query['maxDistance'] = query['maxDistance']/opts[:unit].to_f if opts[:unit]
|
102
103
|
end
|
103
104
|
|
105
|
+
if opts[:unique_docs]
|
106
|
+
query['uniqueDocs'] = true
|
107
|
+
end
|
108
|
+
|
104
109
|
query['spherical'] = true if opts[:spherical]
|
105
110
|
|
106
111
|
# mongodb < 1.7 returns degrees but with earth flat. in Mongodb 1.7 you can set sphere and let mongodb calculate the distance in Miles or KM
|
@@ -10,6 +10,13 @@ module Mongoid #:nodoc:
|
|
10
10
|
# becomes:
|
11
11
|
# <tt> { :field.lt => "value }</tt>
|
12
12
|
class Complex
|
13
|
+
|
14
|
+
attr_accessor :key, :operator
|
15
|
+
|
16
|
+
def initialize(opts = {})
|
17
|
+
@key, @operator = opts[:key], opts[:operator]
|
18
|
+
end
|
19
|
+
|
13
20
|
|
14
21
|
def to_mongo_query v
|
15
22
|
{"$#{operator}" => v}
|
@@ -1,14 +1,14 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
module Mongoid #:nodoc:
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
2
|
+
# module Mongoid #:nodoc:
|
3
|
+
# module Criterion #:nodoc:
|
4
|
+
# module Inclusion
|
5
|
+
# def near(attributes = {})
|
6
|
+
# update_selector(attributes, "$near")
|
7
|
+
# end
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
end
|
9
|
+
# def near_sphere(attributes = {})
|
10
|
+
# update_selector(attributes, "$near")
|
11
|
+
# end
|
12
|
+
# end
|
13
|
+
# end
|
14
|
+
# end
|
@@ -2,15 +2,16 @@ module Mongoid
|
|
2
2
|
module Geospatial
|
3
3
|
class LineString
|
4
4
|
|
5
|
-
def mongoize
|
6
|
-
|
7
|
-
end
|
8
|
-
|
9
|
-
def demongoize(object)
|
10
|
-
object.to_a
|
5
|
+
def mongoize
|
6
|
+
to_a
|
11
7
|
end
|
12
8
|
|
9
|
+
class << self
|
10
|
+
def demongoize(object)
|
11
|
+
RGeo::Geographic.spherical_factory.line_string object
|
12
|
+
end
|
13
13
|
|
14
|
+
end
|
14
15
|
end
|
15
16
|
end
|
16
17
|
end
|
@@ -2,19 +2,32 @@ module Mongoid
|
|
2
2
|
module Geospatial
|
3
3
|
class Point
|
4
4
|
|
5
|
-
def mongoize
|
6
|
-
|
7
|
-
RGeo::Geographic.spherical_factory.point *object
|
8
|
-
#["x"], object["y"]
|
5
|
+
def mongoize
|
6
|
+
[x, y]
|
9
7
|
end
|
10
8
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
9
|
+
class << self
|
10
|
+
|
11
|
+
def demongoize(object)
|
12
|
+
return unless object && !object.empty?
|
13
|
+
RGeo::Geographic.spherical_factory.point *object
|
14
|
+
#["x"], object["y"]
|
15
|
+
end
|
16
|
+
|
17
|
+
def mongoize(object)
|
18
|
+
#return new.mongoize if object.respond_to?(:x)
|
19
|
+
case object
|
20
|
+
when Point then object.mongoize
|
21
|
+
when Hash then [object[:x], object[:y]]
|
22
|
+
else object
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
# Converts the object that was supplied to a criteria and converts it
|
27
|
+
# into a database friendly form.
|
28
|
+
def evolve(object)
|
29
|
+
object.respond_to?(:x) ? object.mongoize : object
|
30
|
+
end
|
18
31
|
end
|
19
32
|
|
20
33
|
# - self.spacial_fields ||= []
|
@@ -2,19 +2,23 @@ module Mongoid
|
|
2
2
|
module Geospatial
|
3
3
|
class Polygon
|
4
4
|
|
5
|
-
def mongoize
|
6
|
-
|
7
|
-
RGeo::Geographic.spherical_factory.point *pair
|
8
|
-
end
|
9
|
-
ring = RGeo::Geographic.spherical_factory.linear_ring points
|
10
|
-
RGeo::Geographic.spherical_factory.polygon ring
|
11
|
-
end
|
12
|
-
|
13
|
-
def demongoize(object)
|
14
|
-
object #.flatten
|
5
|
+
def mongoize
|
6
|
+
self #.flatten
|
15
7
|
end
|
16
8
|
|
9
|
+
class << self
|
10
|
+
def demongoize(object)
|
11
|
+
points = object.map do |pair|
|
12
|
+
RGeo::Geographic.spherical_factory.point *pair
|
13
|
+
end
|
14
|
+
ring = RGeo::Geographic.spherical_factory.linear_ring points
|
15
|
+
RGeo::Geographic.spherical_factory.polygon ring
|
16
|
+
end
|
17
17
|
|
18
|
+
# def evolve(object)
|
19
|
+
# { "$gte" => object.first, "$lte" => object.last }
|
20
|
+
# end
|
21
|
+
end
|
18
22
|
end
|
19
23
|
end
|
20
24
|
end
|
@@ -113,7 +113,7 @@ module Mongoid
|
|
113
113
|
alias_method :per_page, :limit_value
|
114
114
|
|
115
115
|
def num_pages
|
116
|
-
(
|
116
|
+
(total_entries && @opts[:per_page]) ? (total_entries.to_f / @opts[:per_page]).ceil : nil
|
117
117
|
end
|
118
118
|
alias_method :total_pages, :num_pages
|
119
119
|
|
@@ -54,37 +54,9 @@ module Mongoid
|
|
54
54
|
|
55
55
|
def spatial_index name, options = {}
|
56
56
|
self.spatial_fields_indexed << name
|
57
|
-
|
58
|
-
index name => '2d', :options => options
|
59
|
-
else
|
60
|
-
index [[name, '2d']], options
|
61
|
-
end
|
57
|
+
index({name => '2d'}, options)
|
62
58
|
end
|
63
59
|
end
|
64
60
|
|
65
|
-
# def distance(p2, opts = {})
|
66
|
-
# p1 = self.send(key)
|
67
|
-
# Mongoid::Geospatial.distance(p1, p2, opts)
|
68
|
-
# end
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
# def self.distance(p1,p2,opts = {})
|
73
|
-
# opts[:formula] ||= (opts[:spherical]) ? @@spherical_distance_formula : :pythagorean_theorem
|
74
|
-
# p1 = p1.to_lng_lat if p1.respond_to?(:to_lng_lat)
|
75
|
-
# p2 = p2.to_lng_lat if p2.respond_to?(:to_lng_lat)
|
76
|
-
|
77
|
-
# rads = Formulas.send(opts[:formula], p1, p2)
|
78
|
-
|
79
|
-
# if unit = earth_radius[opts[:unit]]
|
80
|
-
# opts[:unit] = (rads.instance_variable_get("@radian")) ? unit : unit * RAD_PER_DEG
|
81
|
-
# end
|
82
|
-
|
83
|
-
# rads *= opts[:unit].to_f if opts[:unit]
|
84
|
-
# rads
|
85
|
-
|
86
|
-
# end
|
87
|
-
|
88
|
-
|
89
61
|
end
|
90
62
|
end
|
data/lib/mongoid_geospatial.rb
CHANGED
@@ -2,13 +2,17 @@ require 'rgeo'
|
|
2
2
|
require 'mongoid'
|
3
3
|
require 'active_support/core_ext/string/inflections'
|
4
4
|
require 'active_support/concern'
|
5
|
-
require 'mongoid_geospatial/
|
5
|
+
require 'mongoid_geospatial/contextual/mongo'
|
6
6
|
require 'mongoid_geospatial/criteria'
|
7
7
|
require 'mongoid_geospatial/extensions/symbol'
|
8
|
+
require 'mongoid_geospatial/extensions/rgeo_spherical_point_impl'
|
8
9
|
require 'mongoid_geospatial/field_option'
|
9
|
-
|
10
|
-
|
11
|
-
|
10
|
+
|
11
|
+
fields_path = 'mongoid_geospatial/fields'
|
12
|
+
|
13
|
+
%w{point polygon line_string}.each do |type|
|
14
|
+
require "#{fields_path}/#{type}"
|
15
|
+
end
|
16
|
+
|
12
17
|
require 'mongoid_geospatial/finders'
|
13
18
|
require 'mongoid_geospatial/geospatial'
|
14
|
-
|
data/mongoid_geospatial.gemspec
CHANGED
@@ -16,12 +16,11 @@ Gem::Specification.new do |gem|
|
|
16
16
|
gem.version = Mongoid::Geospatial::VERSION
|
17
17
|
|
18
18
|
|
19
|
-
gem.add_dependency('rgeo', ['>= 0.3.
|
20
|
-
gem.add_dependency('mongoid', ['>=
|
21
|
-
gem.add_dependency('activesupport', ["~> 3.
|
19
|
+
gem.add_dependency('rgeo', ['>= 0.3.15'])
|
20
|
+
gem.add_dependency('mongoid', ['>= 3.0.0'])
|
21
|
+
gem.add_dependency('activesupport', ["~> 3.2"])
|
22
22
|
gem.add_development_dependency('yard', ["~>0.6.0"])
|
23
|
-
gem.add_development_dependency('rspec', ['~>2.
|
24
|
-
gem.add_development_dependency('rcov', ['>= 0'])
|
23
|
+
gem.add_development_dependency('rspec', ['~>2.11'])
|
25
24
|
gem.add_development_dependency('mocha', ['>= 0'])
|
26
25
|
gem.add_development_dependency('will_paginate', ['>= 0'])
|
27
26
|
gem.add_development_dependency('kaminari', ['>= 0'])
|
data/spec/models/address.rb
CHANGED
@@ -1,21 +1,26 @@
|
|
1
1
|
class Address
|
2
2
|
include Mongoid::Document
|
3
3
|
|
4
|
+
field :_id, type: String, default: ->{ street.try(:parameterize) }
|
5
|
+
|
4
6
|
attr_accessor :mode
|
5
7
|
|
6
8
|
field :address_type
|
7
|
-
field :number, :
|
9
|
+
field :number, type: Integer
|
8
10
|
field :street
|
9
11
|
field :city
|
10
12
|
field :state
|
11
13
|
field :post_code
|
12
14
|
field :parent_title
|
13
|
-
field :services, :
|
14
|
-
field :latlng, :
|
15
|
-
|
16
|
-
|
15
|
+
field :services, type: Array
|
16
|
+
field :latlng, type: Array
|
17
|
+
field :map, type: Hash
|
18
|
+
|
19
|
+
embeds_many :locations, validate: false
|
20
|
+
embeds_one :code, validate: false
|
21
|
+
embeds_one :target, as: :targetable, validate: false
|
17
22
|
|
18
|
-
embedded_in :addressable, :
|
23
|
+
embedded_in :addressable, polymorphic: true do
|
19
24
|
def extension
|
20
25
|
"Testing"
|
21
26
|
end
|
@@ -24,19 +29,19 @@ class Address
|
|
24
29
|
end
|
25
30
|
end
|
26
31
|
|
27
|
-
accepts_nested_attributes_for :locations
|
32
|
+
accepts_nested_attributes_for :locations, :code, :target
|
28
33
|
|
29
|
-
|
34
|
+
belongs_to :account
|
30
35
|
|
31
|
-
scope :without_postcode, where(:
|
32
|
-
|
36
|
+
scope :without_postcode, where(postcode: nil)
|
37
|
+
scope :rodeo, where(street: "Rodeo Dr") do
|
33
38
|
def mansion?
|
34
39
|
all? { |address| address.street == "Rodeo Dr" }
|
35
40
|
end
|
36
41
|
end
|
37
42
|
|
38
|
-
validates_presence_of :street, :
|
39
|
-
validates_format_of :street, :
|
43
|
+
validates_presence_of :street, on: :update
|
44
|
+
validates_format_of :street, with: /\D/, allow_nil: true
|
40
45
|
|
41
46
|
def set_parent=(set = false)
|
42
47
|
self.parent_title = addressable.title if set
|
@@ -48,11 +53,11 @@ class Address
|
|
48
53
|
|
49
54
|
class << self
|
50
55
|
def california
|
51
|
-
where(:
|
56
|
+
where(state: "CA")
|
52
57
|
end
|
53
58
|
|
54
59
|
def homes
|
55
|
-
where(:
|
60
|
+
where(address_type: "Home")
|
56
61
|
end
|
57
62
|
|
58
63
|
def streets
|
data/spec/models/bar.rb
CHANGED
data/spec/models/event.rb
CHANGED
@@ -3,12 +3,12 @@ class Event
|
|
3
3
|
|
4
4
|
field :title
|
5
5
|
field :date, :type => Date
|
6
|
-
|
6
|
+
has_and_belongs_to_many \
|
7
7
|
:administrators,
|
8
8
|
:class_name => 'Person',
|
9
9
|
:inverse_of => :administrated_events,
|
10
10
|
:dependent => :nullify
|
11
|
-
|
11
|
+
belongs_to :owner
|
12
12
|
|
13
13
|
def self.each_day(start_date, end_date)
|
14
14
|
groups = only(:date).asc(:date).where(:date.gte => start_date, :date.lte => end_date).group
|
data/spec/models/farm.rb
CHANGED
@@ -2,9 +2,8 @@ class Farm
|
|
2
2
|
include Mongoid::Document
|
3
3
|
include Mongoid::Geospatial
|
4
4
|
|
5
|
-
field :name,
|
6
|
-
|
7
|
-
field :area, :type => Polygon
|
5
|
+
field :name, type: String
|
6
|
+
field :area, type: Polygon, spatial: true
|
8
7
|
|
9
|
-
|
8
|
+
spatial_index :area
|
10
9
|
end
|
data/spec/models/person.rb
CHANGED
@@ -25,14 +25,14 @@ class Person
|
|
25
25
|
field :owner_id, :type => Integer
|
26
26
|
field :security_code
|
27
27
|
field :reading, :type => Object
|
28
|
-
field :bson_id, :type =>
|
28
|
+
field :bson_id, :type => bson_object_id_class
|
29
29
|
|
30
|
-
index :
|
31
|
-
index :
|
32
|
-
index :
|
33
|
-
index :
|
34
|
-
index :
|
35
|
-
index
|
30
|
+
index age: 1
|
31
|
+
index addresses: 1
|
32
|
+
index dob: 1
|
33
|
+
index name: 1
|
34
|
+
index title: 1
|
35
|
+
index({ssn: 1}, :unique => true)
|
36
36
|
|
37
37
|
validates_format_of :ssn, :without => /\$\$\$/
|
38
38
|
|
@@ -40,9 +40,6 @@ class Person
|
|
40
40
|
|
41
41
|
attr_protected :security_code, :owner_id
|
42
42
|
|
43
|
-
embeds_many :favorites, :order => :title.desc, :inverse_of => :perp
|
44
|
-
embeds_many :videos, :order => [[ :title, :asc ]]
|
45
|
-
embeds_many :phone_numbers, :class_name => "Phone"
|
46
43
|
embeds_many :addresses, :as => :addressable do
|
47
44
|
def extension
|
48
45
|
"Testing"
|
@@ -51,61 +48,22 @@ class Person
|
|
51
48
|
@target.select { |doc| doc.street == street }
|
52
49
|
end
|
53
50
|
end
|
54
|
-
embeds_many :address_components
|
55
|
-
embeds_many :services
|
56
51
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
52
|
+
# embeds_many :services
|
53
|
+
|
54
|
+
|
55
|
+
# has_many \
|
56
|
+
# :posts,
|
57
|
+
# :dependent => :delete,
|
58
|
+
# :order => :rating.desc do
|
59
|
+
# def extension
|
60
|
+
# "Testing"
|
61
|
+
# end
|
62
|
+
# end
|
67
63
|
|
68
64
|
accepts_nested_attributes_for :addresses
|
69
65
|
accepts_nested_attributes_for :name, :update_only => true
|
70
|
-
accepts_nested_attributes_for :pet, :allow_destroy => true
|
71
|
-
accepts_nested_attributes_for :game, :allow_destroy => true
|
72
|
-
accepts_nested_attributes_for :favorites, :allow_destroy => true, :limit => 5
|
73
|
-
accepts_nested_attributes_for :posts
|
74
|
-
accepts_nested_attributes_for :preferences
|
75
|
-
accepts_nested_attributes_for :quiz
|
76
|
-
|
77
|
-
references_one :game, :dependent => :destroy do
|
78
|
-
def extension
|
79
|
-
"Testing"
|
80
|
-
end
|
81
|
-
end
|
82
66
|
|
83
|
-
references_many \
|
84
|
-
:posts,
|
85
|
-
:dependent => :delete,
|
86
|
-
:order => :rating.desc do
|
87
|
-
def extension
|
88
|
-
"Testing"
|
89
|
-
end
|
90
|
-
end
|
91
|
-
references_many :paranoid_posts
|
92
|
-
references_and_referenced_in_many \
|
93
|
-
:preferences,
|
94
|
-
:index => true,
|
95
|
-
:dependent => :nullify,
|
96
|
-
:autosave => true,
|
97
|
-
:order => :value.desc
|
98
|
-
references_and_referenced_in_many :user_accounts
|
99
|
-
references_and_referenced_in_many :houses
|
100
|
-
|
101
|
-
references_many :drugs, :autosave => true
|
102
|
-
references_one :account, :autosave => true
|
103
|
-
|
104
|
-
references_and_referenced_in_many \
|
105
|
-
:administrated_events,
|
106
|
-
:class_name => 'Event',
|
107
|
-
:inverse_of => :administrators,
|
108
|
-
:dependent => :nullify
|
109
67
|
|
110
68
|
scope :minor, where(:age.lt => 18)
|
111
69
|
scope :without_ssn, without(:ssn)
|
data/spec/models/phone.rb
CHANGED
data/spec/models/river.rb
CHANGED
@@ -5,9 +5,9 @@ class River
|
|
5
5
|
field :name, type: String
|
6
6
|
field :length, type: Integer
|
7
7
|
field :average_discharge, type: Integer
|
8
|
-
field :source, type:
|
8
|
+
field :source, type: LineString, spatial: true
|
9
9
|
# set return_array to true if you do not want a hash returned all the time
|
10
|
-
field :mouth, type:
|
10
|
+
field :mouth, type: Point, spatial: {lat: 'latitude', lng: 'longitude'}
|
11
11
|
field :mouth_array, type: Array, spatial: {return_array: true}
|
12
12
|
|
13
13
|
# simplified spatial indexing
|