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.
Files changed (97) hide show
  1. data/Gemfile +5 -4
  2. data/Guardfile +24 -0
  3. data/README.md +9 -3
  4. data/lib/mongoid_geospatial/{contexts → contextual}/mongo.rb +11 -6
  5. data/lib/mongoid_geospatial/criterion/complex.rb +7 -0
  6. data/lib/mongoid_geospatial/criterion/inclusion.rb +12 -12
  7. data/lib/mongoid_geospatial/extensions/rgeo_spherical_point_impl.rb +13 -0
  8. data/lib/mongoid_geospatial/fields/line_string.rb +7 -6
  9. data/lib/mongoid_geospatial/fields/point.rb +24 -11
  10. data/lib/mongoid_geospatial/fields/polygon.rb +14 -10
  11. data/lib/mongoid_geospatial/geospatial/geo_near_results.rb +1 -1
  12. data/lib/mongoid_geospatial/geospatial.rb +1 -29
  13. data/lib/mongoid_geospatial/version.rb +1 -1
  14. data/lib/mongoid_geospatial.rb +9 -5
  15. data/mongoid_geospatial.gemspec +4 -5
  16. data/spec/models/address.rb +19 -14
  17. data/spec/models/bar.rb +3 -1
  18. data/spec/models/event.rb +2 -2
  19. data/spec/models/farm.rb +3 -4
  20. data/spec/models/person.rb +18 -60
  21. data/spec/models/phone.rb +3 -1
  22. data/spec/models/river.rb +2 -2
  23. data/spec/{functional/contexts → mongoid_geospatial/contextual}/mongo_spec.rb +16 -8
  24. data/spec/mongoid_geospatial/criterion/inclusion_spec.rb +375 -0
  25. data/spec/mongoid_geospatial/fields/point_spec.rb +34 -0
  26. data/spec/mongoid_geospatial/fields/polygon_spec.rb +6 -0
  27. data/spec/{functional → mongoid_geospatial}/geospatial/geo_near_results_spec.rb +0 -0
  28. data/spec/mongoid_geospatial/geospatial_spec.rb +2 -0
  29. data/spec/mongoid_geospatial/mongoid_geospatial_spec.rb +83 -0
  30. data/spec/spec_helper.rb +36 -20
  31. data/spec/support/authentication.rb +23 -23
  32. metadata +23 -161
  33. data/spec/functional/criterion/inclusion_spec.rb +0 -360
  34. data/spec/functional/mongoid_geospatial_spec.rb +0 -54
  35. data/spec/models/account.rb +0 -19
  36. data/spec/models/acolyte.rb +0 -9
  37. data/spec/models/address_component.rb +0 -5
  38. data/spec/models/agent.rb +0 -10
  39. data/spec/models/alert.rb +0 -5
  40. data/spec/models/animal.rb +0 -21
  41. data/spec/models/answer.rb +0 -4
  42. data/spec/models/birthday.rb +0 -13
  43. data/spec/models/book.rb +0 -5
  44. data/spec/models/business.rb +0 -7
  45. data/spec/models/callbacks.rb +0 -57
  46. data/spec/models/category.rb +0 -13
  47. data/spec/models/circus.rb +0 -7
  48. data/spec/models/comment.rb +0 -13
  49. data/spec/models/country_code.rb +0 -6
  50. data/spec/models/description.rb +0 -11
  51. data/spec/models/division.rb +0 -5
  52. data/spec/models/drug.rb +0 -5
  53. data/spec/models/employer.rb +0 -5
  54. data/spec/models/entry.rb +0 -6
  55. data/spec/models/favorite.rb +0 -6
  56. data/spec/models/fruits.rb +0 -11
  57. data/spec/models/game.rb +0 -18
  58. data/spec/models/ghost.rb +0 -7
  59. data/spec/models/house.rb +0 -4
  60. data/spec/models/inheritance.rb +0 -90
  61. data/spec/models/league.rb +0 -5
  62. data/spec/models/location.rb +0 -5
  63. data/spec/models/login.rb +0 -6
  64. data/spec/models/membership.rb +0 -4
  65. data/spec/models/mixed_drink.rb +0 -4
  66. data/spec/models/name.rb +0 -13
  67. data/spec/models/namespacing.rb +0 -11
  68. data/spec/models/observed.rb +0 -41
  69. data/spec/models/override.rb +0 -16
  70. data/spec/models/owner.rb +0 -6
  71. data/spec/models/page.rb +0 -5
  72. data/spec/models/page_question.rb +0 -4
  73. data/spec/models/paranoid_post.rb +0 -18
  74. data/spec/models/parents.rb +0 -32
  75. data/spec/models/patient.rb +0 -15
  76. data/spec/models/pet.rb +0 -7
  77. data/spec/models/pet_owner.rb +0 -6
  78. data/spec/models/player.rb +0 -23
  79. data/spec/models/post.rb +0 -26
  80. data/spec/models/preference.rb +0 -9
  81. data/spec/models/question.rb +0 -8
  82. data/spec/models/quiz.rb +0 -6
  83. data/spec/models/rating.rb +0 -8
  84. data/spec/models/role.rb +0 -5
  85. data/spec/models/service.rb +0 -6
  86. data/spec/models/shelf.rb +0 -5
  87. data/spec/models/slave_address_numbers.rb +0 -14
  88. data/spec/models/survey.rb +0 -5
  89. data/spec/models/tag.rb +0 -6
  90. data/spec/models/tracking_id_validation_history.rb +0 -25
  91. data/spec/models/translation.rb +0 -5
  92. data/spec/models/tree.rb +0 -9
  93. data/spec/models/user.rb +0 -9
  94. data/spec/models/user_account.rb +0 -10
  95. data/spec/models/vet_visit.rb +0 -5
  96. data/spec/models/video.rb +0 -9
  97. data/spec/models/wiki_page.rb +0 -6
@@ -1,54 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Mongoid::Geospatial do
4
-
5
- it "should instantiate with no problems" do
6
- Bar.create!(name: "Moe's")
7
- Bar.count.should eql(1)
8
- end
9
-
10
- it "should have a field mapped as point" do
11
- bar = Bar.create!(location: [5,5])
12
- bar.location.should be_a RGeo::Geographic::SphericalPointImpl
13
- end
14
-
15
- it "should accept an RGeo object" do
16
- point = RGeo::Geographic.spherical_factory.point 1, 2
17
- bar = Bar.create!(location: point)
18
- bar.location.x.should be_within(0.1).of(1)
19
- bar.location.y.should be_within(0.1).of(2)
20
- end
21
-
22
- it "should calculate distance between points" do
23
- bar = Bar.create!(location: [5,5])
24
- bar2 = Bar.create!(location: [15,15])
25
- bar.location.distance(bar2.location).should be_within(1).of(1561283.8)
26
- end
27
-
28
- it "should calculate distance between points miles" do
29
- pending
30
- bar = Bar.create!(location: [5,5])
31
- bar2 = Bar.create!(location: [15,15])
32
- bar.location.distance(bar2.location).should be_within(1).of(1561283.8)
33
- end
34
-
35
- it "should calculate 3d distances by default" do
36
- bar = Bar.create! location: [-73.77694444, 40.63861111 ]
37
- bar2 = Bar.create! location: [-118.40, 33.94] #,:unit=>:mi, :spherical => true)
38
- bar.location.distance(bar2.location).to_i.should be_within(1).of(2469)
39
- end
40
-
41
- it "should have a nice simple way to ovewrite geo factory" do
42
- pending
43
- bar = Bar.create!(location: [5,5])
44
- bar2 = Bar.create!(location: [15,15])
45
- bar.location.distance(bar2.location).should be_within(1).of(1561283.8)
46
- end
47
-
48
- it "should have a field mapped as polygon" do
49
- farm = Farm.create!(area: [[5,5],[6,5],[6,6],[5,6]])
50
- farm.area.should be_a RGeo::Geographic::SphericalPolygonImpl
51
- end
52
-
53
-
54
- end
@@ -1,19 +0,0 @@
1
- class Account
2
- include Mongoid::Document
3
- field :number, :type => String
4
- field :balance, :type => String
5
- field :nickname, :type => String
6
- field :name, :type => String
7
- key :name
8
-
9
- embeds_many :memberships
10
- referenced_in :creator, :class_name => "User", :foreign_key => :creator_id
11
- referenced_in :person
12
- references_many :alerts
13
- references_and_referenced_in_many :agents
14
-
15
- attr_accessible :nickname, :name
16
-
17
- validates_presence_of :name
18
- validates_length_of :name, :maximum => 10, :on => :create
19
- end
@@ -1,9 +0,0 @@
1
- class Acolyte
2
- include Mongoid::Document
3
- field :status
4
- field :name
5
-
6
- scope :active, where(:status => "active")
7
-
8
- default_scope asc(:name)
9
- end
@@ -1,5 +0,0 @@
1
- class AddressComponent
2
- include Mongoid::Document
3
- field :street, :type => String
4
- embedded_in :person
5
- end
data/spec/models/agent.rb DELETED
@@ -1,10 +0,0 @@
1
- class Agent
2
- include Mongoid::Document
3
- include Mongoid::Timestamps::Updated
4
- field :title
5
- field :number
6
- embeds_many :names, :as => :namable
7
- referenced_in :game
8
-
9
- references_and_referenced_in_many :accounts
10
- end
data/spec/models/alert.rb DELETED
@@ -1,5 +0,0 @@
1
- class Alert
2
- include Mongoid::Document
3
- field :message, :type => String
4
- referenced_in :account
5
- end
@@ -1,21 +0,0 @@
1
- class Animal
2
- include Mongoid::Document
3
- field :name
4
- field :tags, :type => Array
5
- key :name
6
-
7
- embedded_in :person
8
- embedded_in :circus
9
-
10
- validates_format_of :name, :without => /\$\$\$/
11
-
12
- accepts_nested_attributes_for :person
13
-
14
- def tag_list
15
- tags.join(", ")
16
- end
17
-
18
- def tag_list=(_tag_list)
19
- self.tags = _tag_list.split(",").map(&:strip)
20
- end
21
- end
@@ -1,4 +0,0 @@
1
- class Answer
2
- include Mongoid::Document
3
- embedded_in :question
4
- end
@@ -1,13 +0,0 @@
1
- class Birthday
2
- include Mongoid::Document
3
- field :title
4
- field :date, :type => Date
5
- embedded_in :owner, :inverse_of => :birthdays
6
-
7
- def self.each_day(start_date, end_date)
8
- groups = only(:date).asc(:date).where(:date.gte => start_date, :date.lte => end_date).group
9
- groups.each do |date, group|
10
- yield(date, group)
11
- end
12
- end
13
- end
data/spec/models/book.rb DELETED
@@ -1,5 +0,0 @@
1
- class Book
2
- include Mongoid::Document
3
- field :title, :type => String
4
- references_one :rating, :as => :ratable, :dependent => :nullify
5
- end
@@ -1,7 +0,0 @@
1
- class Business
2
- include Mongoid::Document
3
-
4
- set_database :secondary
5
-
6
- field :name
7
- end
@@ -1,57 +0,0 @@
1
- class Artist
2
- include Mongoid::Document
3
- field :name
4
- embeds_many :songs
5
- embeds_many :labels
6
-
7
- before_create :before_create_stub
8
- after_create :create_songs
9
- before_save :before_save_stub
10
- before_destroy :before_destroy_stub
11
-
12
- protected
13
- def before_create_stub
14
- true
15
- end
16
-
17
- def before_save_stub
18
- true
19
- end
20
-
21
- def before_destroy_stub
22
- true
23
- end
24
-
25
- def create_songs
26
- 2.times { |n| songs.create!(:title => "#{n}") }
27
- end
28
- end
29
-
30
- class Song
31
- include Mongoid::Document
32
- field :title
33
- embedded_in :artist
34
- end
35
-
36
- class Label
37
- include Mongoid::Document
38
- field :name
39
- embedded_in :artist
40
- before_validation :cleanup
41
-
42
- private
43
- def cleanup
44
- self.name = self.name.downcase.capitalize
45
- end
46
- end
47
-
48
- class ValidationCallback
49
- include Mongoid::Document
50
- field :history, :type => Array, :default => []
51
- validate do
52
- self.history << :validate
53
- end
54
-
55
- before_validation { self.history << :before_validation }
56
- after_validation { self.history << :after_validation }
57
- end
@@ -1,13 +0,0 @@
1
- class RootCategory
2
- include Mongoid::Document
3
- embeds_many :categories
4
- end
5
-
6
- class Category
7
- include Mongoid::Document
8
- embedded_in :root_category
9
- embedded_in :category
10
- embeds_many :categories
11
-
12
- field :name
13
- end
@@ -1,7 +0,0 @@
1
- class Circus
2
- include Mongoid::Document
3
-
4
- field :name
5
-
6
- embeds_many :animals
7
- end
@@ -1,13 +0,0 @@
1
- class Comment
2
- include Mongoid::Document
3
- include Mongoid::Versioning
4
- include Mongoid::Timestamps
5
- field :title, :type => String
6
- field :text, :type => String
7
- key :text, :type => String
8
-
9
- referenced_in :movie
10
- referenced_in :rating
11
- validates :title, :presence => true
12
- validates :movie, :rating, :associated => true
13
- end
@@ -1,6 +0,0 @@
1
- class CountryCode
2
- include Mongoid::Document
3
- field :code, :type => Integer
4
- key :code
5
- embedded_in :phone_number, :class_name => "Phone"
6
- end
@@ -1,11 +0,0 @@
1
- class Description
2
- include Mongoid::Document
3
-
4
- field :details
5
-
6
- referenced_in :user
7
- referenced_in :updater, :class_name => 'User'
8
-
9
- validates :user, :associated => true
10
- validates :details, :presence => true
11
- end
@@ -1,5 +0,0 @@
1
- class Division
2
- include Mongoid::Document
3
- field :name, :type => String
4
- embedded_in :league
5
- end
data/spec/models/drug.rb DELETED
@@ -1,5 +0,0 @@
1
- class Drug
2
- include Mongoid::Document
3
- field :name, :type => String
4
- referenced_in :person
5
- end
@@ -1,5 +0,0 @@
1
- class Employer
2
- def id
3
- "1"
4
- end
5
- end
data/spec/models/entry.rb DELETED
@@ -1,6 +0,0 @@
1
- class Entry
2
- include Mongoid::Document
3
- field :title, :type => String
4
- field :body, :type => String
5
- recursively_embeds_many
6
- end
@@ -1,6 +0,0 @@
1
- class Favorite
2
- include Mongoid::Document
3
- field :title
4
- validates_uniqueness_of :title, :case_sensitive => false
5
- embedded_in :perp, :inverse_of => :favorites
6
- end
@@ -1,11 +0,0 @@
1
- module Fruits
2
- class Apple
3
- include Mongoid::Document
4
- references_many :bananas, :class_name => "Fruits::Banana"
5
- end
6
-
7
- class Banana
8
- include Mongoid::Document
9
- referenced_in :apple, :class_name => "Fruits::Apple"
10
- end
11
- end
data/spec/models/game.rb DELETED
@@ -1,18 +0,0 @@
1
- class Game
2
- include Mongoid::Document
3
- field :high_score, :type => Integer, :default => 500
4
- field :score, :type => Integer, :default => 0
5
- field :name
6
- referenced_in :person, :index => true
7
- references_one :video, :validate => false
8
- accepts_nested_attributes_for :person
9
- cache
10
-
11
- validates_format_of :name, :without => /\$\$\$/
12
-
13
- attr_protected :_id
14
-
15
- set_callback(:initialize, :after) do |document|
16
- write_attribute("name", "Testing") unless name
17
- end
18
- end
data/spec/models/ghost.rb DELETED
@@ -1,7 +0,0 @@
1
- class Ghost
2
- include Mongoid::Document
3
-
4
- field :name, :type => String
5
-
6
- referenced_in :movie, :autosave => true
7
- end
data/spec/models/house.rb DELETED
@@ -1,4 +0,0 @@
1
- class House
2
- include Mongoid::Document
3
- field :name, :type => String
4
- end
@@ -1,90 +0,0 @@
1
- class Canvas
2
- include Mongoid::Document
3
- field :name
4
- embeds_many :shapes
5
- embeds_one :writer
6
- embeds_one :palette
7
-
8
- def render
9
- shapes.each { |shape| render }
10
- end
11
- end
12
-
13
- class Browser < Canvas
14
- field :version, :type => Integer
15
- def render; end
16
- end
17
-
18
- class Firefox < Browser
19
- field :user_agent
20
- def render; end
21
- end
22
-
23
- class Shape
24
- include Mongoid::Document
25
- field :x, :type => Integer, :default => 0
26
- field :y, :type => Integer, :default => 0
27
-
28
- embedded_in :canvas
29
-
30
- def render; end
31
- end
32
-
33
- class Square < Shape
34
- field :width, :type => Integer, :default => 0
35
- field :height, :type => Integer, :default => 0
36
- end
37
-
38
- class Circle < Shape
39
- field :radius, :type => Integer, :default => 0
40
- end
41
-
42
- class Writer
43
- include Mongoid::Document
44
- field :speed, :type => Integer, :default => 0
45
-
46
- embedded_in :canvas
47
-
48
- def write; end
49
- end
50
-
51
- class HtmlWriter < Writer
52
- def write; end
53
- end
54
-
55
- class PdfWriter < Writer
56
- def write; end
57
- end
58
-
59
- class Palette
60
- include Mongoid::Document
61
- embedded_in :canvas
62
- embeds_many :tools
63
- end
64
-
65
- class Tool
66
- include Mongoid::Document
67
- embedded_in :palette
68
- end
69
-
70
- class Pencil < Tool; end
71
-
72
- class Eraser < Tool; end
73
-
74
- ########################################
75
- # These are for references relationships
76
- ########################################
77
- class ShippingContainer
78
- include Mongoid::Document
79
- references_many :vehicles
80
- end
81
- class Vehicle
82
- include Mongoid::Document
83
- referenced_in :shipping_container
84
- end
85
- class Bed; end
86
- class Car < Vehicle; end
87
- class Truck < Vehicle
88
- embeds_one :bed
89
- end
90
-
@@ -1,5 +0,0 @@
1
- class League
2
- include Mongoid::Document
3
- embeds_many :divisions
4
- accepts_nested_attributes_for :divisions, :allow_destroy => true
5
- end
@@ -1,5 +0,0 @@
1
- class Location
2
- include Mongoid::Document
3
- field :name
4
- embedded_in :address
5
- end
data/spec/models/login.rb DELETED
@@ -1,6 +0,0 @@
1
- class Login
2
- include Mongoid::Document
3
- field :username
4
- key :username
5
- validates_uniqueness_of :username
6
- end
@@ -1,4 +0,0 @@
1
- class Membership
2
- include Mongoid::Document
3
- embedded_in :account
4
- end
@@ -1,4 +0,0 @@
1
- class MixedDrink
2
- include Mongoid::Document
3
- field :name
4
- end
data/spec/models/name.rb DELETED
@@ -1,13 +0,0 @@
1
- class Name
2
- include Mongoid::Document
3
- field :first_name
4
- field :last_name
5
- field :parent_title
6
- key :first_name, :last_name
7
- embeds_many :translations
8
- embedded_in :namable, :polymorphic => true
9
-
10
- def set_parent=(set = false)
11
- self.parent_title = namable.title if set
12
- end
13
- end
@@ -1,11 +0,0 @@
1
- module Medical
2
- class Patient
3
- include Mongoid::Document
4
- field :name
5
- embeds_many :prescriptions, :class_name => "Medical::Prescription"
6
- end
7
- class Prescription
8
- include Mongoid::Document
9
- field :name
10
- end
11
- end
@@ -1,41 +0,0 @@
1
- class Actor
2
- include Mongoid::Document
3
- field :name
4
- end
5
-
6
- class Actress < Actor
7
- end
8
-
9
- class ActorObserver < Mongoid::Observer
10
- attr_reader :last_after_create_record
11
-
12
- def after_create(record)
13
- @last_after_create_record = record
14
- end
15
- end
16
-
17
- class CallbackRecorder < Mongoid::Observer
18
- observe :actor
19
-
20
- attr_reader :last_callback, :call_count, :last_record
21
-
22
- def initialize
23
- reset
24
- super
25
- end
26
-
27
- def reset
28
- @last_callback = nil
29
- @call_count = Hash.new(0)
30
- @last_record = {}
31
- end
32
-
33
- Mongoid::Callbacks::CALLBACKS.each do |callback|
34
- define_method(callback) do |record, &block|
35
- @last_callback = callback
36
- @call_count[callback] += 1
37
- @last_record[callback] = record
38
- block ? block.call : true
39
- end
40
- end
41
- end
@@ -1,16 +0,0 @@
1
- class Override
2
- include Mongoid::Document
3
-
4
- def self.public_method
5
- end
6
-
7
- protected
8
-
9
- def self.protected_method
10
- end
11
-
12
- private
13
-
14
- def self.private_method
15
- end
16
- end
data/spec/models/owner.rb DELETED
@@ -1,6 +0,0 @@
1
- class Owner
2
- include Mongoid::Document
3
- field :name
4
- references_many :events
5
- embeds_many :birthdays
6
- end
data/spec/models/page.rb DELETED
@@ -1,5 +0,0 @@
1
- class Page
2
- include Mongoid::Document
3
- embedded_in :quiz
4
- embeds_many :page_questions
5
- end
@@ -1,4 +0,0 @@
1
- class PageQuestion
2
- include Mongoid::Document
3
- embedded_in :page
4
- end
@@ -1,18 +0,0 @@
1
- class ParanoidPost
2
- include Mongoid::Document
3
- include Mongoid::Versioning
4
- include Mongoid::Timestamps
5
- include Mongoid::Paranoia
6
- field :title
7
- referenced_in :person
8
-
9
- references_and_referenced_in_many :tags
10
-
11
- named_scope :recent, where(:created_at => { "$lt" => Time.now, "$gt" => 30.days.ago })
12
-
13
- class << self
14
- def old
15
- where(:created_at => { "$lt" => 30.days.ago })
16
- end
17
- end
18
- end
@@ -1,32 +0,0 @@
1
- class ParentDoc
2
- include Mongoid::Document
3
-
4
- embeds_many :child_docs
5
-
6
- field :statistic
7
- field :children_order, :type => Array, :default => [] # hold all the children's id
8
- end
9
-
10
-
11
- class ChildDoc
12
- include Mongoid::Document
13
-
14
- embedded_in :parent_doc
15
-
16
- attr_writer :position
17
-
18
- after_save :update_position
19
-
20
- def position
21
- exsited_position = parent_doc.children_order.index(id)
22
- exsited_position ? exsited_position + 1 : parent_doc.aspects.size
23
- end
24
-
25
- def update_position
26
- if @position && (@position.to_i > 0)
27
- parent_doc.children_order.delete(id)
28
- parent_doc.children_order.insert(@position.to_i - 1, id)
29
- parent_doc.save
30
- end
31
- end
32
- end
@@ -1,15 +0,0 @@
1
- class Email
2
- include Mongoid::Document
3
- field :address
4
- validates_uniqueness_of :address
5
- embedded_in :patient
6
- end
7
-
8
- class Patient
9
- include Mongoid::Document
10
- field :title
11
- store_in :inpatient
12
- embeds_many :addresses, :as => :addressable
13
- embeds_one :email
14
- validates_presence_of :title, :on => :create
15
- end
data/spec/models/pet.rb DELETED
@@ -1,7 +0,0 @@
1
- class Pet
2
- include Mongoid::Document
3
- field :name
4
- field :weight, :type => Float, :default => 0.0
5
- embeds_many :vet_visits
6
- embedded_in :pet_owner
7
- end