Class: ActiveRecordSurvey::Node::Answer
- Inherits:
-
ActiveRecordSurvey::Node
- Object
- ActiveRecord::Base
- ActiveRecordSurvey::Node
- ActiveRecordSurvey::Node::Answer
- Defined in:
- lib/active_record_survey/node/answer.rb
Defined Under Namespace
Classes: Boolean, Rank, Scale, Text
Instance Method Summary collapse
- #build_link(to_node) ⇒ Object
-
#move_down ⇒ Object
Moves answer down relative to other answers.
-
#move_up ⇒ Object
Moves answer up relative to other answers.
-
#next_question ⇒ Object
Returns the question that follows this answer.
-
#question ⇒ Object
Returns the question that preceeds this answer.
-
#sibling_index ⇒ Object
Gets index in sibling relationship.
- #sibling_index=(index) ⇒ Object
-
#validate_node(instance) ⇒ Object
Answer nodes are valid if their questions are valid! Validate this node against an instance.
Methods inherited from ActiveRecordSurvey::Node
#answers, #has_instance_node_for_instance?, #instance_node_for_instance, #instance_node_path_to_root?, #is_answered_for_instance?, #remove_link, #validate_instance_node, #validate_parent_instance_node
Instance Method Details
#build_link(to_node) ⇒ Object
53 54 55 56 57 58 59 |
# File 'lib/active_record_survey/node/answer.rb', line 53 def build_link(to_node) if self.question.nil? raise ArgumentError.new "A question is required before calling #build_link" end super(to_node) end |
#move_down ⇒ Object
Moves answer down relative to other answers
100 101 102 103 104 105 106 107 108 109 |
# File 'lib/active_record_survey/node/answer.rb', line 100 def move_down self.survey.node_maps.select { |i| i.node == self }.collect { |node_map| begin node_map.move_right rescue end } end |
#move_up ⇒ Object
Moves answer up relative to other answers
88 89 90 91 92 93 94 95 96 97 |
# File 'lib/active_record_survey/node/answer.rb', line 88 def move_up self.survey.node_maps.select { |i| i.node == self }.collect { |node_map| begin node_map.move_left rescue end } end |
#next_question ⇒ Object
Returns the question that follows this answer
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/active_record_survey/node/answer.rb', line 34 def next_question self.survey.node_maps.select { |i| i.node == self && !i.marked_for_destruction? }.each { |answer_node_map| answer_node_map.children.each { |child| if !child.node.nil? && !child.marked_for_destruction? if child.node.class.ancestors.include?(::ActiveRecordSurvey::Node::Question) return child.node elsif child.node.class.ancestors.include?(::ActiveRecordSurvey::Node::Answer) return child.node.next_question end else return nil end } } return nil end |
#question ⇒ Object
Returns the question that preceeds this answer
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/active_record_survey/node/answer.rb', line 15 def question self.survey.node_maps.select { |i| i.node == self }.collect { |node_map| if node_map.parent && node_map.parent.node # Question is not the next parent - recurse! if node_map.parent.node.class.ancestors.include?(::ActiveRecordSurvey::Node::Answer) node_map.parent.node.question else node_map.parent.node end # Root already else nil end }.first end |
#sibling_index ⇒ Object
Gets index in sibling relationship
62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/active_record_survey/node/answer.rb', line 62 def sibling_index if node_map = self.survey.node_maps.select { |i| i.node == self }.first node_map.parent.children.each_with_index { |nm, i| if nm == node_map return i end } end return 0 end |
#sibling_index=(index) ⇒ Object
77 78 79 80 81 82 83 84 85 |
# File 'lib/active_record_survey/node/answer.rb', line 77 def sibling_index=index current_index = self.sibling_index offset = index - current_index (1..offset.abs).each { |i| self.send(((offset > 0)? "move_down" : "move_up")) } end |
#validate_node(instance) ⇒ Object
Answer nodes are valid if their questions are valid! Validate this node against an instance
5 6 7 8 9 10 11 12 |
# File 'lib/active_record_survey/node/answer.rb', line 5 def validate_node(instance) # Ensure each parent node to this node (the goal here is to hit a question node) is valid !self.survey.node_maps.select { |i| i.node == self }.collect { |node_map| node_map.parent.node.validate_node(instance) }.include?(false) end |