mongoid_geospatial 1.0.0rc0
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/.document +5 -0
- data/.gitignore +49 -0
- data/.rspec +1 -0
- data/Gemfile +11 -0
- data/README.md +330 -0
- data/Rakefile +18 -0
- data/lib/mongoid_geospatial/contexts/mongo.rb +115 -0
- data/lib/mongoid_geospatial/criteria.rb +5 -0
- data/lib/mongoid_geospatial/criterion/complex.rb +19 -0
- data/lib/mongoid_geospatial/criterion/inclusion.rb +14 -0
- data/lib/mongoid_geospatial/criterion/near_spatial.rb +50 -0
- data/lib/mongoid_geospatial/criterion/within_spatial.rb +60 -0
- data/lib/mongoid_geospatial/criterion.rb +3 -0
- data/lib/mongoid_geospatial/extensions/hash.rb +22 -0
- data/lib/mongoid_geospatial/extensions/symbol.rb +46 -0
- data/lib/mongoid_geospatial/field_option.rb +16 -0
- data/lib/mongoid_geospatial/fields/line_string.rb +18 -0
- data/lib/mongoid_geospatial/fields/point.rb +51 -0
- data/lib/mongoid_geospatial/fields/polygon.rb +22 -0
- data/lib/mongoid_geospatial/finders.rb +5 -0
- data/lib/mongoid_geospatial/geospatial/core_ext.rb +27 -0
- data/lib/mongoid_geospatial/geospatial/geo_near_results.rb +140 -0
- data/lib/mongoid_geospatial/geospatial.rb +86 -0
- data/lib/mongoid_geospatial/version.rb +5 -0
- data/lib/mongoid_geospatial.rb +16 -0
- data/mongoid_geospatial.gemspec +28 -0
- data/spec/config/mongod.conf +3 -0
- data/spec/config/mongoid.yml +18 -0
- data/spec/functional/contexts/mongo_spec.rb +127 -0
- data/spec/functional/criterion/inclusion_spec.rb +356 -0
- data/spec/functional/mongoid_geospatial_spec.rb +54 -0
- data/spec/functional/spatial/geo_near_results_spec.rb +78 -0
- data/spec/models/account.rb +19 -0
- data/spec/models/acolyte.rb +9 -0
- data/spec/models/address.rb +62 -0
- data/spec/models/address_component.rb +5 -0
- data/spec/models/agent.rb +10 -0
- data/spec/models/alert.rb +5 -0
- data/spec/models/animal.rb +21 -0
- data/spec/models/answer.rb +4 -0
- data/spec/models/bar.rb +9 -0
- data/spec/models/birthday.rb +13 -0
- data/spec/models/book.rb +5 -0
- data/spec/models/business.rb +7 -0
- data/spec/models/callbacks.rb +57 -0
- data/spec/models/category.rb +13 -0
- data/spec/models/circus.rb +7 -0
- data/spec/models/comment.rb +13 -0
- data/spec/models/country_code.rb +6 -0
- data/spec/models/description.rb +11 -0
- data/spec/models/division.rb +5 -0
- data/spec/models/drug.rb +5 -0
- data/spec/models/employer.rb +5 -0
- data/spec/models/entry.rb +6 -0
- data/spec/models/event.rb +20 -0
- data/spec/models/farm.rb +10 -0
- data/spec/models/favorite.rb +6 -0
- data/spec/models/fruits.rb +11 -0
- data/spec/models/game.rb +18 -0
- data/spec/models/ghost.rb +7 -0
- data/spec/models/house.rb +4 -0
- data/spec/models/inheritance.rb +90 -0
- data/spec/models/league.rb +5 -0
- data/spec/models/location.rb +5 -0
- data/spec/models/login.rb +6 -0
- data/spec/models/membership.rb +4 -0
- data/spec/models/mixed_drink.rb +4 -0
- data/spec/models/name.rb +13 -0
- data/spec/models/namespacing.rb +11 -0
- data/spec/models/observed.rb +41 -0
- data/spec/models/override.rb +16 -0
- data/spec/models/owner.rb +6 -0
- data/spec/models/page.rb +5 -0
- data/spec/models/page_question.rb +4 -0
- data/spec/models/paranoid_post.rb +18 -0
- data/spec/models/parents.rb +32 -0
- data/spec/models/patient.rb +15 -0
- data/spec/models/person.rb +146 -0
- data/spec/models/pet.rb +7 -0
- data/spec/models/pet_owner.rb +6 -0
- data/spec/models/phone.rb +7 -0
- data/spec/models/player.rb +23 -0
- data/spec/models/post.rb +26 -0
- data/spec/models/preference.rb +9 -0
- data/spec/models/question.rb +8 -0
- data/spec/models/quiz.rb +6 -0
- data/spec/models/rating.rb +8 -0
- data/spec/models/river.rb +20 -0
- data/spec/models/role.rb +5 -0
- data/spec/models/service.rb +6 -0
- data/spec/models/shelf.rb +5 -0
- data/spec/models/slave_address_numbers.rb +14 -0
- data/spec/models/survey.rb +5 -0
- data/spec/models/tag.rb +6 -0
- data/spec/models/tracking_id_validation_history.rb +25 -0
- data/spec/models/translation.rb +5 -0
- data/spec/models/tree.rb +9 -0
- data/spec/models/user.rb +9 -0
- data/spec/models/user_account.rb +10 -0
- data/spec/models/vet_visit.rb +5 -0
- data/spec/models/video.rb +9 -0
- data/spec/models/wiki_page.rb +6 -0
- data/spec/spec_helper.rb +51 -0
- data/spec/support/authentication.rb +29 -0
- data/spec/unit/criterion/complex_spec.rb +15 -0
- data/spec/unit/criterion/inclusion_spec.rb +0 -0
- data/spec/unit/criterion/near_spatial_spec.rb +39 -0
- data/spec/unit/criterion/within_spatial_spec.rb +52 -0
- metadata +339 -0
|
@@ -0,0 +1,57 @@
|
|
|
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
|
|
@@ -0,0 +1,13 @@
|
|
|
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
|
data/spec/models/drug.rb
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
class Event
|
|
2
|
+
include Mongoid::Document
|
|
3
|
+
|
|
4
|
+
field :title
|
|
5
|
+
field :date, :type => Date
|
|
6
|
+
references_and_referenced_in_many \
|
|
7
|
+
:administrators,
|
|
8
|
+
:class_name => 'Person',
|
|
9
|
+
:inverse_of => :administrated_events,
|
|
10
|
+
:dependent => :nullify
|
|
11
|
+
referenced_in :owner
|
|
12
|
+
|
|
13
|
+
def self.each_day(start_date, end_date)
|
|
14
|
+
groups = only(:date).asc(:date).where(:date.gte => start_date, :date.lte => end_date).group
|
|
15
|
+
groups.each do |hash|
|
|
16
|
+
yield(hash["date"], hash["group"])
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
end
|
data/spec/models/farm.rb
ADDED
data/spec/models/game.rb
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
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
|
|
@@ -0,0 +1,90 @@
|
|
|
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
|
+
|
data/spec/models/name.rb
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
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
|
|
@@ -0,0 +1,41 @@
|
|
|
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
|
data/spec/models/page.rb
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
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
|
|
@@ -0,0 +1,32 @@
|
|
|
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
|
|
@@ -0,0 +1,15 @@
|
|
|
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
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
class Person
|
|
2
|
+
include Mongoid::Document
|
|
3
|
+
include Mongoid::MultiParameterAttributes
|
|
4
|
+
include Mongoid::Timestamps
|
|
5
|
+
include Mongoid::Versioning
|
|
6
|
+
|
|
7
|
+
attr_accessor :mode
|
|
8
|
+
|
|
9
|
+
class_attribute :somebody_elses_important_class_options
|
|
10
|
+
self.somebody_elses_important_class_options = { :keep_me_around => true }
|
|
11
|
+
|
|
12
|
+
field :title
|
|
13
|
+
field :terms, :type => Boolean
|
|
14
|
+
field :pets, :type => Boolean, :default => false
|
|
15
|
+
field :age, :type => Integer, :default => 100
|
|
16
|
+
field :dob, :type => Date
|
|
17
|
+
field :employer_id
|
|
18
|
+
field :lunch_time, :type => Time
|
|
19
|
+
field :aliases, :type => Array
|
|
20
|
+
field :map, :type => Hash
|
|
21
|
+
field :score, :type => Integer
|
|
22
|
+
field :blood_alcohol_content, :type => Float, :default => lambda{ 0.0 }
|
|
23
|
+
field :last_drink_taken_at, :type => Date, :default => lambda { 1.day.ago.in_time_zone("Alaska") }
|
|
24
|
+
field :ssn
|
|
25
|
+
field :owner_id, :type => Integer
|
|
26
|
+
field :security_code
|
|
27
|
+
field :reading, :type => Object
|
|
28
|
+
field :bson_id, :type => BSON::ObjectId
|
|
29
|
+
|
|
30
|
+
index :age
|
|
31
|
+
index :addresses
|
|
32
|
+
index :dob
|
|
33
|
+
index :name
|
|
34
|
+
index :title
|
|
35
|
+
index :ssn, :unique => true
|
|
36
|
+
|
|
37
|
+
validates_format_of :ssn, :without => /\$\$\$/
|
|
38
|
+
|
|
39
|
+
attr_reader :rescored
|
|
40
|
+
|
|
41
|
+
attr_protected :security_code, :owner_id
|
|
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
|
+
embeds_many :addresses, :as => :addressable do
|
|
47
|
+
def extension
|
|
48
|
+
"Testing"
|
|
49
|
+
end
|
|
50
|
+
def find_by_street(street)
|
|
51
|
+
@target.select { |doc| doc.street == street }
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
embeds_many :address_components
|
|
55
|
+
embeds_many :services
|
|
56
|
+
|
|
57
|
+
embeds_one :pet, :class_name => "Animal"
|
|
58
|
+
embeds_one :name, :as => :namable do
|
|
59
|
+
def extension
|
|
60
|
+
"Testing"
|
|
61
|
+
end
|
|
62
|
+
def dawkins?
|
|
63
|
+
first_name == "Richard" && last_name == "Dawkins"
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
embeds_one :quiz
|
|
67
|
+
|
|
68
|
+
accepts_nested_attributes_for :addresses
|
|
69
|
+
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
|
+
|
|
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
|
+
|
|
110
|
+
scope :minor, where(:age.lt => 18)
|
|
111
|
+
scope :without_ssn, without(:ssn)
|
|
112
|
+
|
|
113
|
+
def score_with_rescoring=(score)
|
|
114
|
+
@rescored = score.to_i + 20
|
|
115
|
+
self.score_without_rescoring = score
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
alias_method_chain :score=, :rescoring
|
|
119
|
+
|
|
120
|
+
def update_addresses
|
|
121
|
+
addresses.each do |address|
|
|
122
|
+
address.street = "Updated Address"
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
def employer=(emp)
|
|
127
|
+
self.employer_id = emp.id
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
class << self
|
|
131
|
+
def accepted
|
|
132
|
+
criteria.where(:terms => true)
|
|
133
|
+
end
|
|
134
|
+
def knight
|
|
135
|
+
criteria.where(:title => "Sir")
|
|
136
|
+
end
|
|
137
|
+
def old
|
|
138
|
+
criteria.where(:age => { "$gt" => 50 })
|
|
139
|
+
end
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
class Doctor < Person
|
|
145
|
+
field :specialty
|
|
146
|
+
end
|