Class: Quby::Compiler::DSL::QuestionnaireBuilder
Instance Attribute Summary
#custom_methods
Instance Method Summary
collapse
-
#abortable ⇒ Object
-
#add_lookup_tree(key, levels:, tree:) ⇒ Object
-
#alarm(**options, &block) ⇒ Object
-
#allow_hotkeys(type = :all) ⇒ Object
-
#allow_switch_to_bulk(value = true) ⇒ Object
-
#attention(**options, &block) ⇒ Object
-
#bar_chart(*args, &block) ⇒ Object
-
#completion(**options, &block) ⇒ Object
-
#css(value) ⇒ Object
-
#css_vars(value) ⇒ Object
css_vars(“option-gap-y” => 1).
-
#custom_method(key, &block) ⇒ Object
-
#deactivate_answers_requested_at(timestamp) ⇒ Object
-
#default_answer_value(value) ⇒ Object
-
#default_question_options(**options) ⇒ Object
-
#description(description) ⇒ Object
-
#do_not_check_checkbox_options_start_with_question_key ⇒ Object
-
#do_not_check_key_clashes ⇒ Object
-
#do_not_check_score_keys_consistency ⇒ Object
-
#do_not_validate_html ⇒ Object
-
#editable_by_professionals ⇒ Object
-
#editable_from_version(number) ⇒ Object
-
#enable_previous_questionnaire_button ⇒ Object
-
#environments(*environments) ⇒ Object
-
#flag(**flag_options) ⇒ Object
-
#footer(footer) ⇒ Object
-
#hide_pii_from_researchers(value) ⇒ Object
-
#hide_values_from_professionals(value) ⇒ Object
-
#import_lookup_tree(key) ⇒ Object
-
#initialize(target_instance, lookup_tables:) ⇒ QuestionnaireBuilder
constructor
A new instance of QuestionnaireBuilder.
-
#key(key) ⇒ Object
-
#language(language) ⇒ Object
-
#layout_version(version) ⇒ Object
-
#leave_page_alert(text) ⇒ Object
-
#license(type, licensor: nil) ⇒ Object
-
#line_chart(*args, &block) ⇒ Object
-
#original(original_key) ⇒ Object
-
#outcome_description(description) ⇒ Object
-
#outcome_regeneration_requested_at(timestamp) ⇒ Object
-
#outcome_table(**table_options) ⇒ Object
-
#overview_chart(*args, &block) ⇒ Object
-
#panel(title = nil, key: nil, **options, &block) ⇒ Object
-
#question(key, **options, &block) ⇒ Object
Short-circuit the question command to perform an implicit panel.
-
#radar_chart(*args, &block) ⇒ Object
-
#respondent_types(*respondent_types) ⇒ Object
-
#roqua_keys(*keys) ⇒ Object
-
#sbg_domain(sbg_code, outcome:, from: nil, till: nil, sbg_key: nil, primary: false) ⇒ Object
-
#sbg_key(sbg_key) ⇒ Object
-
#score(key, **options, &block) ⇒ Object
-
#score_schema(key, label, subscore_schemas = nil, sbg_key: nil, &block) ⇒ Object
-
#seeds_patch(value) ⇒ Object
-
#sexp_variable(key, type: :number, &block) ⇒ Object
-
#sexp_visibility_rule(sexp_key:, show_questions: [], hide_questions: []) ⇒ Object
-
#short_description(description) ⇒ Object
-
#table(**options, &block) ⇒ Object
Short-circuit the table command to perform an implicit panel.
-
#tags(*tags) ⇒ Object
-
#text(value, **options) ⇒ Object
Short-circuit the text command to perform an implicit panel.
-
#textvar(**textvar_options) ⇒ Object
-
#title(title) ⇒ Object
-
#translatable_into(*languages) ⇒ Object
No args to generate locale file for original language.
-
#variable(key, **options, &block) ⇒ Object
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.
-
#version(number, release_notes:, regenerate_outcome: false, deactivate_answers: false) ⇒ Object
-
#visibility_rule(type:, field_key:, show_questions: [], hide_questions: [], **condition_options) ⇒ Object
condition: { type: ‘answered’, field_key: ‘v_1’ }.
Methods included from Helpers
#check_key_uniqueness, #check_question_keys_uniqueness, #image_alt, #image_tag, #video_tag
#end_panel, #informal_end_panel, #start_panel
#method_missing, #respond_to_missing?
Constructor Details
#initialize(target_instance, lookup_tables:) ⇒ QuestionnaireBuilder
Returns a new instance of QuestionnaireBuilder.
24
25
26
27
28
29
|
# File 'lib/quby/compiler/dsl/questionnaire_builder.rb', line 24
def initialize(target_instance, lookup_tables:)
@questionnaire = target_instance
@lookup_tables = lookup_tables
@default_question_options = {}
@custom_methods = {}
end
|
Instance Method Details
#abortable ⇒ Object
94
95
96
|
# File 'lib/quby/compiler/dsl/questionnaire_builder.rb', line 94
def abortable
@questionnaire.abortable = true
end
|
#add_lookup_tree(key, levels:, tree:) ⇒ Object
208
209
210
|
# File 'lib/quby/compiler/dsl/questionnaire_builder.rb', line 208
def add_lookup_tree(key, levels:, tree:)
@questionnaire.lookup_tables[key] = {levels: levels, tree: tree}
end
|
#alarm(**options, &block) ⇒ Object
276
277
278
|
# File 'lib/quby/compiler/dsl/questionnaire_builder.rb', line 276
def alarm(**options, &block)
variable(:alarm, action: true, **options, &block)
end
|
#allow_hotkeys(type = :all) ⇒ Object
103
104
105
|
# File 'lib/quby/compiler/dsl/questionnaire_builder.rb', line 103
def allow_hotkeys(type = :all)
@questionnaire.allow_hotkeys = type
end
|
#allow_switch_to_bulk(value = true) ⇒ Object
176
177
|
# File 'lib/quby/compiler/dsl/questionnaire_builder.rb', line 176
def allow_switch_to_bulk(value=true)
end
|
#attention(**options, &block) ⇒ Object
272
273
274
|
# File 'lib/quby/compiler/dsl/questionnaire_builder.rb', line 272
def attention(**options, &block)
variable(:attention, action: true, **options, &block)
end
|
#bar_chart(*args, &block) ⇒ Object
295
296
297
298
|
# File 'lib/quby/compiler/dsl/questionnaire_builder.rb', line 295
def bar_chart(*args, &block)
builder = BarChartBuilder.new(@questionnaire, *args)
@questionnaire.add_chart(builder.build(&block))
end
|
#completion(**options, &block) ⇒ Object
280
281
282
|
# File 'lib/quby/compiler/dsl/questionnaire_builder.rb', line 280
def completion(**options, &block)
variable(:completion, completion: true, **options, &block)
end
|
#css(value) ⇒ Object
165
166
167
|
# File 'lib/quby/compiler/dsl/questionnaire_builder.rb', line 165
def css(value)
@questionnaire. += value
end
|
#css_vars(value) ⇒ Object
css_vars(“option-gap-y” => 1)
170
171
172
173
|
# File 'lib/quby/compiler/dsl/questionnaire_builder.rb', line 170
def css_vars(value)
@questionnaire.css_vars ||= {}
@questionnaire.css_vars.merge!(value)
end
|
#custom_method(key, &block) ⇒ Object
197
198
199
200
201
202
|
# File 'lib/quby/compiler/dsl/questionnaire_builder.rb', line 197
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) ⇒ Object
153
154
155
|
# File 'lib/quby/compiler/dsl/questionnaire_builder.rb', line 153
def deactivate_answers_requested_at(timestamp)
@questionnaire.deactivate_answers_requested_at = timestamp
end
|
#default_answer_value(value) ⇒ Object
179
180
181
|
# File 'lib/quby/compiler/dsl/questionnaire_builder.rb', line 179
def default_answer_value(value)
@questionnaire.default_answer_value = value
end
|
#default_question_options(**options) ⇒ Object
212
213
214
|
# File 'lib/quby/compiler/dsl/questionnaire_builder.rb', line 212
def default_question_options(**options)
@default_question_options.merge!(options)
end
|
#description(description) ⇒ Object
63
64
65
|
# File 'lib/quby/compiler/dsl/questionnaire_builder.rb', line 63
def description(description)
@questionnaire.description = description
end
|
#do_not_check_checkbox_options_start_with_question_key ⇒ Object
317
318
319
|
# File 'lib/quby/compiler/dsl/questionnaire_builder.rb', line 317
def do_not_check_checkbox_options_start_with_question_key
@questionnaire.check_checkbox_options_start_with_question_key = false
end
|
#do_not_check_key_clashes ⇒ Object
47
48
49
|
# File 'lib/quby/compiler/dsl/questionnaire_builder.rb', line 47
def do_not_check_key_clashes
@questionnaire.check_key_clashes = false
end
|
#do_not_check_score_keys_consistency ⇒ Object
51
52
53
|
# File 'lib/quby/compiler/dsl/questionnaire_builder.rb', line 51
def do_not_check_score_keys_consistency
@questionnaire.check_score_keys_consistency = false
end
|
#do_not_validate_html ⇒ Object
55
56
57
|
# File 'lib/quby/compiler/dsl/questionnaire_builder.rb', line 55
def do_not_validate_html
@questionnaire.validate_html = false
end
|
#editable_by_professionals ⇒ Object
124
125
126
|
# File 'lib/quby/compiler/dsl/questionnaire_builder.rb', line 124
def editable_by_professionals
@questionnaire.editable_by_professionals = true
end
|
#editable_from_version(number) ⇒ Object
145
146
147
|
# File 'lib/quby/compiler/dsl/questionnaire_builder.rb', line 145
def editable_from_version(number)
@questionnaire.editable_from_version = number
end
|
157
158
159
|
# File 'lib/quby/compiler/dsl/questionnaire_builder.rb', line 157
def enable_previous_questionnaire_button
@questionnaire.enable_previous_questionnaire_button = true
end
|
#environments(*environments) ⇒ Object
128
129
130
|
# File 'lib/quby/compiler/dsl/questionnaire_builder.rb', line 128
def environments(*environments)
@questionnaire.environments = environments
end
|
#flag(**flag_options) ⇒ Object
305
306
307
|
# File 'lib/quby/compiler/dsl/questionnaire_builder.rb', line 305
def flag(**flag_options)
@questionnaire.add_flag flag_options
end
|
75
76
77
|
# File 'lib/quby/compiler/dsl/questionnaire_builder.rb', line 75
def ()
@questionnaire. =
end
|
#hide_pii_from_researchers(value) ⇒ Object
183
184
185
|
# File 'lib/quby/compiler/dsl/questionnaire_builder.rb', line 183
def hide_pii_from_researchers(value)
@questionnaire.anonymous_conditions = @questionnaire.anonymous_conditions.new(hide_pii_from_researchers: value)
end
|
#hide_values_from_professionals(value) ⇒ Object
187
188
189
|
# File 'lib/quby/compiler/dsl/questionnaire_builder.rb', line 187
def hide_values_from_professionals(value)
@questionnaire.anonymous_conditions = @questionnaire.anonymous_conditions.new(hide_values_from_professionals: value)
end
|
#import_lookup_tree(key) ⇒ Object
204
205
206
|
# File 'lib/quby/compiler/dsl/questionnaire_builder.rb', line 204
def import_lookup_tree(key)
@questionnaire.lookup_tables[key] = @lookup_tables.fetch(key)
end
|
#key(key) ⇒ Object
35
36
37
|
# File 'lib/quby/compiler/dsl/questionnaire_builder.rb', line 35
def key(key)
end
|
#language(language) ⇒ Object
112
113
114
|
# File 'lib/quby/compiler/dsl/questionnaire_builder.rb', line 112
def language(language)
@questionnaire.language = language.to_s
end
|
#layout_version(version) ⇒ Object
161
162
163
|
# File 'lib/quby/compiler/dsl/questionnaire_builder.rb', line 161
def layout_version(version)
@questionnaire.layout_version = version
end
|
#leave_page_alert(text) ⇒ Object
31
32
33
|
# File 'lib/quby/compiler/dsl/questionnaire_builder.rb', line 31
def leave_page_alert(text)
@questionnaire.leave_page_alert = text
end
|
#license(type, licensor: nil) ⇒ Object
107
108
109
110
|
# File 'lib/quby/compiler/dsl/questionnaire_builder.rb', line 107
def license(type, licensor: nil)
@questionnaire.license = type
@questionnaire.licensor = licensor
end
|
#line_chart(*args, &block) ⇒ Object
290
291
292
293
|
# File 'lib/quby/compiler/dsl/questionnaire_builder.rb', line 290
def line_chart(*args, &block)
builder = LineChartBuilder.new(@questionnaire, *args)
@questionnaire.add_chart(builder.build(&block))
end
|
#original(original_key) ⇒ Object
132
133
134
|
# File 'lib/quby/compiler/dsl/questionnaire_builder.rb', line 132
def original(original_key)
@questionnaire.original = original_key
end
|
#outcome_description(description) ⇒ Object
67
68
69
|
# File 'lib/quby/compiler/dsl/questionnaire_builder.rb', line 67
def outcome_description(description)
@questionnaire.outcome_description = description
end
|
#outcome_regeneration_requested_at(timestamp) ⇒ Object
149
150
151
|
# File 'lib/quby/compiler/dsl/questionnaire_builder.rb', line 149
def outcome_regeneration_requested_at(timestamp)
@questionnaire.outcome_regeneration_requested_at = timestamp
end
|
#outcome_table(**table_options) ⇒ Object
313
314
315
|
# File 'lib/quby/compiler/dsl/questionnaire_builder.rb', line 313
def outcome_table(**table_options)
@questionnaire.add_outcome_table(**table_options)
end
|
#overview_chart(*args, &block) ⇒ Object
284
285
286
287
288
|
# File 'lib/quby/compiler/dsl/questionnaire_builder.rb', line 284
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, key: nil, **options, &block) ⇒ Object
191
192
193
194
195
|
# File 'lib/quby/compiler/dsl/questionnaire_builder.rb', line 191
def panel(title = nil, key: nil, **options, &block)
key ||= "p_#{@questionnaire.panels.size}"
panel = PanelBuilder.build(title, key:, **options, **default_panel_options, &block)
@questionnaire.add_panel(panel)
end
|
#question(key, **options, &block) ⇒ Object
Short-circuit the question command to perform an implicit panel
217
218
219
220
221
|
# File 'lib/quby/compiler/dsl/questionnaire_builder.rb', line 217
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) ⇒ Object
300
301
302
303
|
# File 'lib/quby/compiler/dsl/questionnaire_builder.rb', line 300
def radar_chart(*args, &block)
builder = RadarChartBuilder.new(@questionnaire, *args)
@questionnaire.add_chart(builder.build(&block))
end
|
#respondent_types(*respondent_types) ⇒ Object
116
117
118
|
# File 'lib/quby/compiler/dsl/questionnaire_builder.rb', line 116
def respondent_types(*respondent_types)
@questionnaire.respondent_types = respondent_types
end
|
#roqua_keys(*keys) ⇒ Object
39
40
41
|
# File 'lib/quby/compiler/dsl/questionnaire_builder.rb', line 39
def roqua_keys(*keys)
@questionnaire.roqua_keys = keys
end
|
#sbg_domain(sbg_code, outcome:, from: nil, till: nil, sbg_key: nil, primary: false) ⇒ Object
83
84
85
86
87
88
89
90
91
92
|
# File 'lib/quby/compiler/dsl/questionnaire_builder.rb', line 83
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) ⇒ Object
79
80
81
|
# File 'lib/quby/compiler/dsl/questionnaire_builder.rb', line 79
def sbg_key(sbg_key)
@questionnaire.sbg_key = sbg_key
end
|
#score(key, **options, &block) ⇒ Object
250
251
252
253
254
255
|
# File 'lib/quby/compiler/dsl/questionnaire_builder.rb', line 250
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, sbg_key: options[:sbg_key]) if schema.present?
variable(key, score: true, **options, &block)
end
|
#score_schema(key, label, subscore_schemas = nil, sbg_key: nil, &block) ⇒ Object
257
258
259
260
261
262
263
264
265
266
267
268
269
270
|
# File 'lib/quby/compiler/dsl/questionnaire_builder.rb', line 257
def score_schema(key, label, subscore_schemas = nil, sbg_key: nil, &block)
if block
schema, calculations = ScoreSchemaBuilder.build(key:, label:, sbg_key:, &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:,
label:,
sbg_key:,
subscore_schemas:
end
end
|
#seeds_patch(value) ⇒ Object
43
44
45
|
# File 'lib/quby/compiler/dsl/questionnaire_builder.rb', line 43
def seeds_patch(value)
@questionnaire.seeds_patch = value
end
|
#sexp_variable(key, type: :number, &block) ⇒ Object
237
238
239
|
# File 'lib/quby/compiler/dsl/questionnaire_builder.rb', line 237
def sexp_variable(key, type: :number, &block)
@questionnaire.add_sexp_variable(key, SexpVariableBuilder.new(key, type:, &block).build)
end
|
#sexp_visibility_rule(sexp_key:, show_questions: [], hide_questions: []) ⇒ Object
321
322
323
324
325
326
327
328
329
|
# File 'lib/quby/compiler/dsl/questionnaire_builder.rb', line 321
def sexp_visibility_rule(sexp_key:, show_questions: [], hide_questions: [])
condition = {
type: 'sexp_variable_true',
sexp_key:
}
@questionnaire..concat(
Entities::VisibilityRule.for_condition(condition, show_questions:, hide_questions:)
)
end
|
#short_description(description) ⇒ Object
71
72
73
|
# File 'lib/quby/compiler/dsl/questionnaire_builder.rb', line 71
def short_description(description)
@questionnaire.short_description = description
end
|
#table(**options, &block) ⇒ Object
Short-circuit the table command to perform an implicit panel
231
232
233
234
235
|
# File 'lib/quby/compiler/dsl/questionnaire_builder.rb', line 231
def table(**options, &block)
panel(nil, **default_panel_options) do
table(**options, &block)
end
end
|
120
121
122
|
# File 'lib/quby/compiler/dsl/questionnaire_builder.rb', line 120
def tags(*tags)
@questionnaire.tags = tags
end
|
#text(value, **options) ⇒ Object
Short-circuit the text command to perform an implicit panel
224
225
226
227
228
|
# File 'lib/quby/compiler/dsl/questionnaire_builder.rb', line 224
def text(value, **options)
panel(nil, **default_panel_options) do
text(value, **options)
end
end
|
#textvar(**textvar_options) ⇒ Object
309
310
311
|
# File 'lib/quby/compiler/dsl/questionnaire_builder.rb', line 309
def textvar(**textvar_options)
@questionnaire.add_textvar textvar_options
end
|
#title(title) ⇒ Object
59
60
61
|
# File 'lib/quby/compiler/dsl/questionnaire_builder.rb', line 59
def title(title)
@questionnaire.title = title
end
|
#translatable_into(*languages) ⇒ Object
No args to generate locale file for original language.
99
100
101
|
# File 'lib/quby/compiler/dsl/questionnaire_builder.rb', line 99
def translatable_into(*languages)
@questionnaire.translatable_into = languages.map(&:to_s)
end
|
#variable(key, **options, &block) ⇒ Object
variable :totaal do
q01 + q02 + q03
end
246
247
248
|
# File 'lib/quby/compiler/dsl/questionnaire_builder.rb', line 246
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) ⇒ Object
136
137
138
139
140
141
142
143
|
# File 'lib/quby/compiler/dsl/questionnaire_builder.rb', line 136
def version(number, release_notes:, regenerate_outcome: false, deactivate_answers: false)
@questionnaire.versions << Entities::Version.new(
number:,
release_notes:,
regenerate_outcome:,
deactivate_answers:,
)
end
|
#visibility_rule(type:, field_key:, show_questions: [], hide_questions: [], **condition_options) ⇒ Object
condition: { type: ‘answered’, field_key: ‘v_1’ }
332
333
334
335
336
|
# File 'lib/quby/compiler/dsl/questionnaire_builder.rb', line 332
def visibility_rule(type:, field_key:, show_questions: [], hide_questions: [], **condition_options)
@questionnaire..concat(
Entities::VisibilityRule.for_condition({type:, field_key:, **condition_options}, show_questions:, hide_questions:)
)
end
|