Class: FReCon::Model

Inherits:
Object show all
Defined in:
lib/frecon/model.rb

Direct Known Subclasses

Competition, Match, Participation, Record, Robot, Team

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.controllerObject



40
41
42
# File 'lib/frecon/model.rb', line 40

def self.controller
	(self.name.pluralize + "Controller").constantize
end

.descendantsObject



35
36
37
38
# File 'lib/frecon/model.rb', line 35

def self.descendants
	# Basically lists all of the models in this database.
	ObjectSpace.each_object(Class).select { |possibleChild| possibleChild < self }
end

.inherited(child) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/frecon/model.rb', line 15

def self.inherited(child)
	child.class_eval do
		include Mongoid::Document
		include Mongoid::Timestamps
		include Mongoid::Attributes::Dynamic

		validate :no_invalid_relations

		self.class_variable_set(:@@attributes, [])

		def self.register_routable_relation(method, attribute)
			self.class_variable_get(:@@attributes) << {method: method, type: :relation, attribute: attribute}
		end

		def self.register_routable_attribute(method, attribute)
			self.class_variable_get(:@@attributes) << {method: method, type: :attribute, attribute: attribute}
		end
	end
end

Instance Method Details

#no_invalid_relationsObject



44
45
46
47
48
49
50
51
# File 'lib/frecon/model.rb', line 44

def no_invalid_relations
	# Get all of the belongs_to fields (ends with "_id" and not "_id" because that is the id).
	attributes.keys.select { |attribute| attribute.end_with?("_id") && attribute != "_id" }.each do |relation|
		# Get the model for the belongs_to association.
		model = "FReCon::".concat(relation.gsub(/_id\Z/, "").capitalize).constantize
		errors.add(relation.to_sym, "is invalid") if relation_invalid(model, send(relation))
	end
end

#relation_invalid(class_constant, id) ⇒ Object



53
54
55
# File 'lib/frecon/model.rb', line 53

def relation_invalid(class_constant, id)
	class_constant.find_by(id: id).nil?
end