Class: SurveyGizmo::API::Survey

Inherits:
Object
  • Object
show all
Includes:
Resource
Defined in:
lib/survey_gizmo/api/survey.rb

Instance Method Summary collapse

Methods included from Resource

descendants, #destroy, #inspect, #reload, #save

Instance Method Details

#actual_questionsObject



44
45
46
# File 'lib/survey_gizmo/api/survey.rb', line 44

def actual_questions
  questions.reject { |q| q.type =~ /^(instructions|urlredirect|logic|media|script|javascript)$/ }
end

#belongs_to?(team) ⇒ Boolean

Returns:

  • (Boolean)


83
84
85
# File 'lib/survey_gizmo/api/survey.rb', line 83

def belongs_to?(team)
  team_names.any? { |t| t == team }
end

#campaignsObject



87
88
89
# File 'lib/survey_gizmo/api/survey.rb', line 87

def campaigns
  @campaigns ||= Campaign.all(children_params.merge(all_pages: true)).to_a
end

#number_of_completed_responsesObject

Statistics array of arrays looks like:

[“Partial”, 2], [“Disqualified”, 28], [“Complete”, 15]


54
55
56
57
58
59
60
# File 'lib/survey_gizmo/api/survey.rb', line 54

def number_of_completed_responses
  if statistics && !statistics.empty? && (completed_data = statistics.find { |a| a[0] == 'Complete' })
    completed_data[1]
  else
    0
  end
end

#pagesObject



29
30
31
32
33
34
35
# File 'lib/survey_gizmo/api/survey.rb', line 29

def pages
  # SurveyGizmo sends down the page info to .first requests but NOT to .all requests, so we must load pages
  # manually.  We should be able to just .reload this Survey BUT we can't make :pages a Virtus attribute without
  # requiring a call to this method during Survey.save
  @pages ||= Page.all(children_params.merge(all_pages: true)).to_a
  @pages.each { |p| p.attributes = children_params }
end

#questionsObject

Sub question handling is in resource.rb and page.rb. It should probably be here instead but if it gets moved here and people try to request all the questions for a specific page directly from a ::API::Question request or from Page.questions, sub questions will not be included! So I left it there for least astonishment.



40
41
42
# File 'lib/survey_gizmo/api/survey.rb', line 40

def questions
  @questions ||= pages.flat_map { |p| p.questions }
end

#responses(conditions = {}) ⇒ Object



48
49
50
# File 'lib/survey_gizmo/api/survey.rb', line 48

def responses(conditions = {})
  Response.all(conditions.merge(children_params).merge(all_pages: !conditions[:page]))
end

#server_has_new_results_since?(time, filters = []) ⇒ Boolean

Returns:

  • (Boolean)


62
63
64
65
66
67
68
69
70
# File 'lib/survey_gizmo/api/survey.rb', line 62

def server_has_new_results_since?(time, filters = [])
  Response.all(
    children_params.merge(
      page: 1,
      resultsperpage: 1,
      filters: filters + [Response.(time)]
    )
  ).to_a.size > 0
end

#team_namesObject



79
80
81
# File 'lib/survey_gizmo/api/survey.rb', line 79

def team_names
  teams.map { |t| t['name'] }
end

#teamsObject

As of 2015-12-18, when you request data on multiple surveys from /survey, the team variable comes back as “0”. If you request one survey at a time from /survey/id, it is populated correctly.



74
75
76
77
# File 'lib/survey_gizmo/api/survey.rb', line 74

def teams
  @individual_survey ||= self.reload
  @individual_survey.team
end