active_record_survey 0.1.48 → 0.1.49
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.
- checksums.yaml +4 -4
 - data/lib/active_record_survey/node.rb +7 -24
 - data/lib/active_record_survey/node/answer.rb +1 -1
 - data/lib/active_record_survey/node/question.rb +7 -11
 - data/lib/active_record_survey/survey.rb +2 -5
 - data/lib/active_record_survey/version.rb +1 -1
 - data/spec/active_record_survey/node/answer_spec.rb +2 -0
 - data/spec/active_record_survey/node/question_spec.rb +2 -0
 - metadata +2 -2
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: f29de2a4c2c5e743506df020087a75c97525d67b
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 523efb43fccaca4c0dc966affc470d5ee15f5fc6
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: fb0fa79983055aaaa36330235135caab99885d56a47a15c01577044afb28b8b6c202b23c026248d9fbabe3398c5f3c6137f2bd82dd1fdc6e4c367138a42fed55
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 6438c72f632a066fddc5c492c169659fe00b39d4f20fc41cb446a46db2591bb424a2720ffb5165031c330083cfb3fc05791dc272ec3a10b6b992870c75a2b02e
         
     | 
| 
         @@ -2,7 +2,7 @@ module ActiveRecordSurvey 
     | 
|
| 
       2 
2 
     | 
    
         
             
            	class Node < ::ActiveRecord::Base
         
     | 
| 
       3 
3 
     | 
    
         
             
            		self.table_name = "active_record_survey_nodes"
         
     | 
| 
       4 
4 
     | 
    
         
             
            		belongs_to :survey, :class_name => "ActiveRecordSurvey::Survey", :foreign_key => :active_record_survey_id
         
     | 
| 
       5 
     | 
    
         
            -
            		has_many :node_maps, :class_name => "ActiveRecordSurvey::NodeMap", :foreign_key => :active_record_survey_node_id, autosave: true, dependent: :destroy
         
     | 
| 
      
 5 
     | 
    
         
            +
            		has_many :node_maps, -> { includes(:node, parent: [:node]) }, :class_name => "ActiveRecordSurvey::NodeMap", :foreign_key => :active_record_survey_node_id, autosave: true, dependent: :destroy
         
     | 
| 
       6 
6 
     | 
    
         
             
            		has_many :node_validations, :class_name => "ActiveRecordSurvey::NodeValidation", :foreign_key => :active_record_survey_node_id, autosave: true, dependent: :destroy
         
     | 
| 
       7 
7 
     | 
    
         
             
            		has_many :instance_nodes, :class_name => "ActiveRecordSurvey::InstanceNode", :foreign_key => :active_record_survey_node_id
         
     | 
| 
       8 
8 
     | 
    
         | 
| 
         @@ -10,9 +10,10 @@ module ActiveRecordSurvey 
     | 
|
| 
       10 
10 
     | 
    
         | 
| 
       11 
11 
     | 
    
         
             
            		# All the answer nodes that follow from this node
         
     | 
| 
       12 
12 
     | 
    
         
             
            		def answers
         
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
             
     | 
| 
      
 13 
     | 
    
         
            +
            			nm = self.survey.node_maps
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
            			next_answer_nodes = lambda { |node, list|
         
     | 
| 
      
 16 
     | 
    
         
            +
            				nm.select { |node_map|
         
     | 
| 
       16 
17 
     | 
    
         
             
            					!node_map.parent.nil? && node_map.parent.node == node && node_map.node.class.ancestors.include?(::ActiveRecordSurvey::Node::Answer) && !node_map.marked_for_destruction?
         
     | 
| 
       17 
18 
     | 
    
         
             
            				}.select { |i|
         
     | 
| 
       18 
19 
     | 
    
         
             
            					!list.include?(i.node)
         
     | 
| 
         @@ -22,30 +23,12 @@ module ActiveRecordSurvey 
     | 
|
| 
       22 
23 
     | 
    
         | 
| 
       23 
24 
     | 
    
         
             
            					list << i.node
         
     | 
| 
       24 
25 
     | 
    
         | 
| 
       25 
     | 
    
         
            -
            					next_answer_nodes.call(i.node,  
     | 
| 
      
 26 
     | 
    
         
            +
            					next_answer_nodes.call(i.node, list)
         
     | 
| 
       26 
27 
     | 
    
         
             
            				}.flatten.uniq
         
     | 
| 
       27 
28 
     | 
    
         | 
| 
       28 
29 
     | 
    
         
             
            				list
         
     | 
| 
       29 
30 
     | 
    
         
             
            			}
         
     | 
| 
       30 
     | 
    
         
            -
            			next_answer_nodes.call(self,  
     | 
| 
       31 
     | 
    
         
            -
            #=end
         
     | 
| 
       32 
     | 
    
         
            -
            =begin
         
     | 
| 
       33 
     | 
    
         
            -
            			self.survey.node_maps.select { |i|
         
     | 
| 
       34 
     | 
    
         
            -
            				i.node == self
         
     | 
| 
       35 
     | 
    
         
            -
            			}.collect { |i|
         
     | 
| 
       36 
     | 
    
         
            -
            				# Get all the children from this node
         
     | 
| 
       37 
     | 
    
         
            -
            				i.children
         
     | 
| 
       38 
     | 
    
         
            -
            			}.flatten.collect { |i|
         
     | 
| 
       39 
     | 
    
         
            -
            				# Get the nodes
         
     | 
| 
       40 
     | 
    
         
            -
            				i.node
         
     | 
| 
       41 
     | 
    
         
            -
            			}.select { |i|
         
     | 
| 
       42 
     | 
    
         
            -
            				# Only the nodes that are answers
         
     | 
| 
       43 
     | 
    
         
            -
            				i.class.ancestors.include?(::ActiveRecordSurvey::Node::Answer)
         
     | 
| 
       44 
     | 
    
         
            -
            			}.uniq.collect { |i|
         
     | 
| 
       45 
     | 
    
         
            -
            				i.survey = self.survey # ensure that the survey being referenced by the answers is the original survey - needed for keeping consistent node_maps between build_link and remove_link
         
     | 
| 
       46 
     | 
    
         
            -
            				[i] + i.answers
         
     | 
| 
       47 
     | 
    
         
            -
            			}.flatten.uniq
         
     | 
| 
       48 
     | 
    
         
            -
            =end
         
     | 
| 
      
 31 
     | 
    
         
            +
            			next_answer_nodes.call(self, []).flatten.uniq
         
     | 
| 
       49 
32 
     | 
    
         
             
            		end
         
     | 
| 
       50 
33 
     | 
    
         | 
| 
       51 
34 
     | 
    
         
             
            		# The instance_node recorded for the passed instance for this node
         
     | 
| 
         @@ -91,7 +91,7 @@ module ActiveRecordSurvey 
     | 
|
| 
       91 
91 
     | 
    
         | 
| 
       92 
92 
     | 
    
         
             
            		# Gets index in sibling relationship
         
     | 
| 
       93 
93 
     | 
    
         
             
            		def sibling_index
         
     | 
| 
       94 
     | 
    
         
            -
            			node_maps = self.survey.node_maps 
     | 
| 
      
 94 
     | 
    
         
            +
            			node_maps = self.survey.node_maps
         
     | 
| 
       95 
95 
     | 
    
         | 
| 
       96 
96 
     | 
    
         
             
            			if node_map = node_maps.select { |i| i.node == self }.first
         
     | 
| 
       97 
97 
     | 
    
         
             
            				parent = node_map.parent
         
     | 
| 
         @@ -20,19 +20,15 @@ module ActiveRecordSurvey 
     | 
|
| 
       20 
20 
     | 
    
         
             
            					i.node == answer
         
     | 
| 
       21 
21 
     | 
    
         
             
            				}
         
     | 
| 
       22 
22 
     | 
    
         
             
            			}.flatten.uniq.collect { |answer_node_map|
         
     | 
| 
       23 
     | 
    
         
            -
            				answer_node_map. 
     | 
| 
       24 
     | 
    
         
            -
            				answer_node_map.survey = self.survey
         
     | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
       26 
     | 
    
         
            -
            				answer_node_map
         
     | 
| 
       27 
     | 
    
         
            -
            			}.collect { |answer_node_map|
         
     | 
| 
       28 
     | 
    
         
            -
            				answer_node_map.node.type = klass.to_s
         
     | 
| 
       29 
     | 
    
         
            -
            				answer_node_map.node = answer_node_map.node.becomes(klass)
         
     | 
| 
       30 
     | 
    
         
            -
            				answer_node_map.node.survey = self.survey
         
     | 
| 
       31 
     | 
    
         
            -
            				answer_node_map.node.save
         
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
      
 23 
     | 
    
         
            +
            				node = answer_node_map.node
         
     | 
| 
       33 
24 
     | 
    
         
             
            				answer_node_map.send((answer_node_map.new_record?)? :destroy : :mark_for_destruction)
         
     | 
| 
      
 25 
     | 
    
         
            +
            				node
         
     | 
| 
      
 26 
     | 
    
         
            +
            			}.collect { |answer|
         
     | 
| 
      
 27 
     | 
    
         
            +
            				answer.type = klass.to_s
         
     | 
| 
      
 28 
     | 
    
         
            +
            				answer = answer.becomes(klass)
         
     | 
| 
      
 29 
     | 
    
         
            +
            				answer.save if !answer.new_record?
         
     | 
| 
       34 
30 
     | 
    
         | 
| 
       35 
     | 
    
         
            -
            				 
     | 
| 
      
 31 
     | 
    
         
            +
            				answer
         
     | 
| 
       36 
32 
     | 
    
         
             
            			}.uniq
         
     | 
| 
       37 
33 
     | 
    
         | 
| 
       38 
34 
     | 
    
         
             
            			answers.each { |answer|
         
     | 
| 
         @@ -1,12 +1,10 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            module ActiveRecordSurvey
         
     | 
| 
       2 
2 
     | 
    
         
             
            	class Survey < ::ActiveRecord::Base
         
     | 
| 
       3 
3 
     | 
    
         
             
            		self.table_name = "active_record_surveys"
         
     | 
| 
       4 
     | 
    
         
            -
            		has_many :node_maps, :class_name => "ActiveRecordSurvey::NodeMap", :foreign_key => :active_record_survey_id, autosave: true
         
     | 
| 
      
 4 
     | 
    
         
            +
            		has_many :node_maps, -> { includes(:node, parent: [:node]) }, :class_name => "ActiveRecordSurvey::NodeMap", :foreign_key => :active_record_survey_id, autosave: true
         
     | 
| 
       5 
5 
     | 
    
         
             
            		has_many :nodes, :class_name => "ActiveRecordSurvey::Node", :foreign_key => :active_record_survey_id
         
     | 
| 
       6 
6 
     | 
    
         
             
            		has_many :questions, :class_name => "ActiveRecordSurvey::Node::Question", :foreign_key => :active_record_survey_id
         
     | 
| 
       7 
7 
     | 
    
         | 
| 
       8 
     | 
    
         
            -
            		default_scope { includes(node_maps:[:node,parent:[:node]]) }
         
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
       10 
8 
     | 
    
         
             
            		def root_node
         
     | 
| 
       11 
9 
     | 
    
         
             
            			self.node_maps.includes(:node).select { |i| i.depth === 0 }.first
         
     | 
| 
       12 
10 
     | 
    
         
             
            		end
         
     | 
| 
         @@ -28,8 +26,7 @@ module ActiveRecordSurvey 
     | 
|
| 
       28 
26 
     | 
    
         | 
| 
       29 
27 
     | 
    
         
             
            		# All the connective edges
         
     | 
| 
       30 
28 
     | 
    
         
             
            		def edges
         
     | 
| 
       31 
     | 
    
         
            -
            			self.node_maps. 
     | 
| 
       32 
     | 
    
         
            -
            			.select { |i| !i.marked_for_destruction? }.select { |i|
         
     | 
| 
      
 29 
     | 
    
         
            +
            			self.node_maps.select { |i| !i.marked_for_destruction? }.select { |i|
         
     | 
| 
       33 
30 
     | 
    
         
             
            				i.node && i.parent
         
     | 
| 
       34 
31 
     | 
    
         
             
            			}.collect { |i|
         
     | 
| 
       35 
32 
     | 
    
         
             
            				{
         
     | 
| 
         @@ -1,5 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            require 'spec_helper'
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
      
 3 
     | 
    
         
            +
            #ActiveRecord::Base.logger = Logger.new(STDOUT) if defined?(ActiveRecord::Base)
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
       3 
5 
     | 
    
         
             
            describe ActiveRecordSurvey::Node::Question, :question_spec => true do
         
     | 
| 
       4 
6 
     | 
    
         
             
            	describe "#before_destroy_rebuild_node_map" do
         
     | 
| 
       5 
7 
     | 
    
         
             
            		it 'should not relink any following questions' do
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: active_record_survey
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.1. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.1.49
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Butch Marshall
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2016-11- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2016-11-29 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: activerecord
         
     |