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