class Quby::Compiler::DSL::QuestionnaireBuilder

Public Class Methods

new(target_instance, lookup_tables:) click to toggle source
# File lib/quby/compiler/dsl/questionnaire_builder.rb, line 22
def initialize(target_instance, lookup_tables:)
  @questionnaire = target_instance
  @lookup_tables = lookup_tables
  @default_question_options = {}
  @custom_methods = {}
end

Public Instance Methods

abortable() click to toggle source
# File lib/quby/compiler/dsl/questionnaire_builder.rb, line 88
def abortable
  @questionnaire.abortable = true
end
add_lookup_tree(key, levels:, tree:) click to toggle source
# File lib/quby/compiler/dsl/questionnaire_builder.rb, line 166
def add_lookup_tree(key, levels:, tree:)
  @questionnaire.lookup_tables[key] = {levels: levels, tree: tree}
end
alarm(**options, &block) click to toggle source
# File lib/quby/compiler/dsl/questionnaire_builder.rb, line 229
def alarm(**options, &block)
  variable(:alarm, action: true, **options, &block)
end
allow_hotkeys(type = :all) click to toggle source
# File lib/quby/compiler/dsl/questionnaire_builder.rb, line 92
def allow_hotkeys(type = :all)
  @questionnaire.allow_hotkeys = type
end
allow_switch_to_bulk(value=true) click to toggle source
# File lib/quby/compiler/dsl/questionnaire_builder.rb, line 142
def allow_switch_to_bulk(value=true)
  @questionnaire.allow_switch_to_bulk = value
end
attention(**options, &block) click to toggle source
# File lib/quby/compiler/dsl/questionnaire_builder.rb, line 225
def attention(**options, &block)
  variable(:attention, action: true, **options, &block)
end
bar_chart(*args, &block) click to toggle source
# File lib/quby/compiler/dsl/questionnaire_builder.rb, line 248
def bar_chart(*args, &block)
  builder = BarChartBuilder.new(@questionnaire, *args)
  @questionnaire.add_chart(builder.build(&block))
end
completion(**options, &block) click to toggle source
# File lib/quby/compiler/dsl/questionnaire_builder.rb, line 233
def completion(**options, &block)
  variable(:completion, completion: true, **options, &block)
end
css(value) click to toggle source
# File lib/quby/compiler/dsl/questionnaire_builder.rb, line 138
def css(value)
  @questionnaire.extra_css += value
end
custom_method(key, &block) click to toggle source
# File lib/quby/compiler/dsl/questionnaire_builder.rb, line 155
def custom_method(key, &block)
  if PanelBuilder.new(nil, custom_methods: @custom_methods).respond_to? key
    fail 'Custom method trying to override existing method'
  end
  @custom_methods[key] = block
end
deactivate_answers_requested_at(timestamp) click to toggle source
# File lib/quby/compiler/dsl/questionnaire_builder.rb, line 126
def deactivate_answers_requested_at(timestamp)
  @questionnaire.deactivate_answers_requested_at = timestamp
end
default_answer_value(value) click to toggle source
# File lib/quby/compiler/dsl/questionnaire_builder.rb, line 146
def default_answer_value(value)
  @questionnaire.default_answer_value = value
end
default_question_options(**options) click to toggle source
# File lib/quby/compiler/dsl/questionnaire_builder.rb, line 170
def default_question_options(**options)
  @default_question_options.merge!(options)
end
description(description) click to toggle source
# File lib/quby/compiler/dsl/questionnaire_builder.rb, line 61
def description(description)
  @questionnaire.description = description
end
do_not_check_key_clashes() click to toggle source
# File lib/quby/compiler/dsl/questionnaire_builder.rb, line 45
def do_not_check_key_clashes
  @questionnaire.check_key_clashes = false
end
do_not_check_score_keys_consistency() click to toggle source
# File lib/quby/compiler/dsl/questionnaire_builder.rb, line 49
def do_not_check_score_keys_consistency
  @questionnaire.check_score_keys_consistency = false
end
do_not_validate_html() click to toggle source
# File lib/quby/compiler/dsl/questionnaire_builder.rb, line 53
def do_not_validate_html
  @questionnaire.validate_html = false
end
enable_previous_questionnaire_button() click to toggle source
# File lib/quby/compiler/dsl/questionnaire_builder.rb, line 130
def enable_previous_questionnaire_button
  @questionnaire.enable_previous_questionnaire_button = true
end
flag(**flag_options) click to toggle source
# File lib/quby/compiler/dsl/questionnaire_builder.rb, line 258
def flag(**flag_options)
  @questionnaire.add_flag flag_options
end
import_lookup_tree(key) click to toggle source
# File lib/quby/compiler/dsl/questionnaire_builder.rb, line 162
def import_lookup_tree(key)
  @questionnaire.lookup_tables[key] = @lookup_tables.fetch(key)
end
key(key) click to toggle source
# File lib/quby/compiler/dsl/questionnaire_builder.rb, line 33
def key(key)
  # no-op, key is now passed in to Questionnaire constructor
end
language(language) click to toggle source
# File lib/quby/compiler/dsl/questionnaire_builder.rb, line 101
def language(language)
  @questionnaire.language = language
end
leave_page_alert(text) click to toggle source
# File lib/quby/compiler/dsl/questionnaire_builder.rb, line 29
def leave_page_alert(text)
  @questionnaire.leave_page_alert = text
end
license(type, licensor: nil) click to toggle source
# File lib/quby/compiler/dsl/questionnaire_builder.rb, line 96
def license(type, licensor: nil)
  @questionnaire.license  = type
  @questionnaire.licensor = licensor
end
line_chart(*args, &block) click to toggle source
# File lib/quby/compiler/dsl/questionnaire_builder.rb, line 243
def line_chart(*args, &block)
  builder = LineChartBuilder.new(@questionnaire, *args)
  @questionnaire.add_chart(builder.build(&block))
end
outcome_description(description) click to toggle source
# File lib/quby/compiler/dsl/questionnaire_builder.rb, line 65
def outcome_description(description)
  @questionnaire.outcome_description = description
end
outcome_regeneration_requested_at(timestamp) click to toggle source
# File lib/quby/compiler/dsl/questionnaire_builder.rb, line 122
def outcome_regeneration_requested_at(timestamp)
  @questionnaire.outcome_regeneration_requested_at = timestamp
end
outcome_table(**table_options) click to toggle source
# File lib/quby/compiler/dsl/questionnaire_builder.rb, line 266
def outcome_table(**table_options)
  @questionnaire.add_outcome_table table_options
end
overview_chart(*args, &block) click to toggle source
# File lib/quby/compiler/dsl/questionnaire_builder.rb, line 237
def overview_chart(*args, &block)
  raise "Cannot define more than one overview chart" if @questionnaire.charts.overview.present?
  builder = OverviewChartBuilder.new(@questionnaire, *args)
  @questionnaire.charts.overview = builder.build(&block)
end
panel(title = nil, options = {}, &block) click to toggle source
# File lib/quby/compiler/dsl/questionnaire_builder.rb, line 150
def panel(title = nil, options = {}, &block)
  panel = PanelBuilder.build(title, **options, **default_panel_options, &block)
  @questionnaire.add_panel(panel)
end
question(key, **options, &block) click to toggle source

Short-circuit the question command to perform an implicit panel

# File lib/quby/compiler/dsl/questionnaire_builder.rb, line 175
def question(key, **options, &block)
  panel(nil, default_panel_options) do
    question(key, questionnaire: @questionnaire, **@default_question_options, **options, &block)
  end
end
radar_chart(*args, &block) click to toggle source
# File lib/quby/compiler/dsl/questionnaire_builder.rb, line 253
def radar_chart(*args, &block)
  builder = RadarChartBuilder.new(@questionnaire, *args)
  @questionnaire.add_chart(builder.build(&block))
end
renderer_version(version) click to toggle source
# File lib/quby/compiler/dsl/questionnaire_builder.rb, line 134
def renderer_version(version)
  @questionnaire.renderer_version = version
end
respondent_types(*respondent_types) click to toggle source
# File lib/quby/compiler/dsl/questionnaire_builder.rb, line 105
def respondent_types(*respondent_types)
  @questionnaire.respondent_types = respondent_types
end
roqua_keys(*keys) click to toggle source
# File lib/quby/compiler/dsl/questionnaire_builder.rb, line 37
def roqua_keys(*keys)
  @questionnaire.roqua_keys = keys
end
sbg_domain(sbg_code, outcome:, from: nil, till: nil, sbg_key: nil, primary: false) click to toggle source
# File lib/quby/compiler/dsl/questionnaire_builder.rb, line 77
def sbg_domain(sbg_code, outcome:, from: nil, till: nil, sbg_key: nil, primary: false)
  @questionnaire.sbg_domains << {
    sbg_code: sbg_code,
    from: from,
    till: till,
    outcome: outcome,
    sbg_key: sbg_key || @questionnaire.sbg_key,
    primary: primary
  }
end
sbg_key(sbg_key) click to toggle source
# File lib/quby/compiler/dsl/questionnaire_builder.rb, line 73
def sbg_key(sbg_key)
  @questionnaire.sbg_key = sbg_key
end
score(key, **options, &block) click to toggle source
# File lib/quby/compiler/dsl/questionnaire_builder.rb, line 204
def score(key, **options, &block)
  @questionnaire.errors.add "Score #{key}", 'misses label in score call' if options[:label].blank?
  schema = options.delete(:schema)
  score_schema(key, options[:label], schema) if schema.present?
  variable(key, score: true, **options, &block)
end
score_schema(key, label, options = nil, &block) click to toggle source
# File lib/quby/compiler/dsl/questionnaire_builder.rb, line 211
def score_schema(key, label, options = nil, &block)
  if block
    schema, calculations = ScoreSchemaBuilder.build(key: key, label: label, &block)
    @questionnaire.add_score_schema schema
    calculations.each do |calculation|
      @questionnaire.add_score_calculation calculation
    end
  else
    @questionnaire.add_score_schema Entities::ScoreSchema.new key: key,
                                                              label: label,
                                                              subscore_schemas: options
  end
end
seeds_patch(value) click to toggle source
# File lib/quby/compiler/dsl/questionnaire_builder.rb, line 41
def seeds_patch(value)
  @questionnaire.seeds_patch = value
end
short_description(description) click to toggle source
# File lib/quby/compiler/dsl/questionnaire_builder.rb, line 69
def short_description(description)
  @questionnaire.short_description = description
end
table(**options, &block) click to toggle source

Short-circuit the table command to perform an implicit panel

# File lib/quby/compiler/dsl/questionnaire_builder.rb, line 189
def table(**options, &block)
  panel(nil, **default_panel_options) do
    table(**options, &block)
  end
end
tags(*tags) click to toggle source
# File lib/quby/compiler/dsl/questionnaire_builder.rb, line 109
def tags(*tags)
  @questionnaire.tags = tags
end
text(value, **options) click to toggle source

Short-circuit the text command to perform an implicit panel

# File lib/quby/compiler/dsl/questionnaire_builder.rb, line 182
def text(value, **options)
  panel(nil, **default_panel_options) do
    text(value, **options)
  end
end
textvar(**textvar_options) click to toggle source
# File lib/quby/compiler/dsl/questionnaire_builder.rb, line 262
def textvar(**textvar_options)
  @questionnaire.add_textvar textvar_options
end
title(title) click to toggle source
# File lib/quby/compiler/dsl/questionnaire_builder.rb, line 57
def title(title)
  @questionnaire.title = title
end
variable(key, **options, &block) click to toggle source

variable :totaal do

# Plain old Ruby code here, executed in the scope of the answer
# variables are private to the score calculation
q01 + q02 + q03

end

# File lib/quby/compiler/dsl/questionnaire_builder.rb, line 200
def variable(key, **options, &block)
  @questionnaire.add_score_calculation ScoreBuilder.new(key, **options, &block).build
end
version(number, release_notes:, regenerate_outcome: false, deactivate_answers: false) click to toggle source
# File lib/quby/compiler/dsl/questionnaire_builder.rb, line 113
def version(number, release_notes:, regenerate_outcome: false, deactivate_answers: false)
  @questionnaire.versions << Entities::Version.new(
    number: number,
    release_notes: release_notes,
    regenerate_outcome: regenerate_outcome,
    deactivate_answers: deactivate_answers
  )
end

Private Instance Methods

default_panel_options() click to toggle source
# File lib/quby/compiler/dsl/questionnaire_builder.rb, line 272
def default_panel_options
  {questionnaire: @questionnaire, default_question_options: @default_question_options,
   custom_methods: @custom_methods}
end