code-mancers/rapidfire

View on GitHub
app/models/rapidfire/survey.rb

Summary

Maintainability
A
0 mins
Test Coverage
require 'csv'
module Rapidfire
  class Survey < ApplicationRecord
    has_many  :attempts
    has_many  :questions

    validates :name, :presence => true


    if Rails::VERSION::MAJOR == 3
      attr_accessible :name, :introduction, :after_survey_content
    end

    def self.csv_user_attributes=(attributes)
      @@csv_user_attributes = Array(attributes)
    end

    def self.csv_user_attributes
      @@csv_user_attributes || []
    end

    def results_to_csv(filter)
      CSV.generate do |csv|
        header = []
        header += Rapidfire::Survey.csv_user_attributes
        questions.each do |question|
          header << ActionView::Base.full_sanitizer.sanitize(question.question_text, :tags => [], :attributes => [])
        end
        header << "results updated at"
        csv << header
        attempts.where(SurveyResults.filter(filter, 'id')).each do |attempt|
          this_attempt = []

          Survey.csv_user_attributes.each do |attribute|
            this_attempt << attempt.user.try(attribute)
          end

          questions.each do |question|
            answer = attempt.answers.detect{|a| a.question_id == question.id }.try(:answer_text)
            this_attempt << answer
          end

          this_attempt << attempt.updated_at
          csv << this_attempt
        end
      end
    end
  end
end