quby-compiler 0.4.7 → 0.4.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +9 -0
- data/lib/quby/compiler/entities/flag.rb +0 -11
- data/lib/quby/compiler/entities/item.rb +0 -4
- data/lib/quby/compiler/entities/question.rb +5 -36
- data/lib/quby/compiler/entities/question_option.rb +1 -27
- data/lib/quby/compiler/entities/questionnaire.rb +20 -39
- data/lib/quby/compiler/entities/questions/checkbox_question.rb +2 -8
- data/lib/quby/compiler/entities/questions/date_question.rb +2 -14
- data/lib/quby/compiler/entities/questions/radio_question.rb +0 -4
- data/lib/quby/compiler/entities/questions/select_question.rb +0 -4
- data/lib/quby/compiler/entities/textvar.rb +0 -7
- data/lib/quby/compiler/outputs/roqua_serializer.rb +16 -7
- data/lib/quby/compiler/services/quby_proxy.rb +15 -15
- data/lib/quby/compiler/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 886ce60c1b1c37de0dfdbb8d0b14b4c2ed2574f873a2230ff50e80413e50c031
|
4
|
+
data.tar.gz: ee12f0733d624ffea8061b4f9f7bcbcdea9c904eb05d9b1e426b9f646bae91da
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d24325dcee35fafd2d99d65bc6761eb7fa764efe2c5b549208e5130b3b0218bdc2dbf9e932886f1f05a8ac9461236dd398e9d8d733a4a715c2a62fddeb768da0
|
7
|
+
data.tar.gz: 0d45e85ea11b5c03710011aff584bf6df363f140184519e6a5c374651e516599a7667921560b41d3870b4c3ef98a55cfc097550aba39199f4be233001453e0fc
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
# 0.4.8
|
2
|
+
|
3
|
+
* roqua.json:
|
4
|
+
* sort parent questions before it's children, to make the order more logical to just dumbly show
|
5
|
+
* parse markdown before stripping tags (questiom.title, option.description)
|
6
|
+
* context-free-titles no longer contain the title as fallback
|
7
|
+
* quby2.json
|
8
|
+
* sort visibility rules: flags first, then in question order, so we can apply them in order without issue
|
9
|
+
|
1
10
|
# 0.4.7
|
2
11
|
|
3
12
|
* seeds.yml: Fix missing title questions (broken by 0.4.6)
|
@@ -31,17 +31,6 @@ module Quby
|
|
31
31
|
"#{description} (true - '#{description_true}', false - '#{description_false}')"
|
32
32
|
end
|
33
33
|
|
34
|
-
def to_codebook(_options = {})
|
35
|
-
output = []
|
36
|
-
output << "#{key} flag"
|
37
|
-
output << "'#{description}'" if description.present?
|
38
|
-
output << " 'true' - #{description_true}"
|
39
|
-
output << " 'false' - #{description_false}"
|
40
|
-
output << " '' (leeg) - Vlag niet ingesteld, informatie onbekend"
|
41
|
-
output << ""
|
42
|
-
output.join("\n")
|
43
|
-
end
|
44
|
-
|
45
34
|
private
|
46
35
|
|
47
36
|
def ensure_valid_descriptions
|
@@ -209,6 +209,10 @@ module Quby
|
|
209
209
|
end
|
210
210
|
# rubocop:enable CyclomaticComplexity, Metrics/MethodLength
|
211
211
|
|
212
|
+
def context_free_title_or_title
|
213
|
+
context_free_title || title
|
214
|
+
end
|
215
|
+
|
212
216
|
# rubocop:disable AccessorMethodName
|
213
217
|
def set_depends_on(keys)
|
214
218
|
return if keys.blank?
|
@@ -217,10 +221,6 @@ module Quby
|
|
217
221
|
end
|
218
222
|
# rubocop:enable AccessorMethodName
|
219
223
|
|
220
|
-
def context_free_title
|
221
|
-
@context_free_title || @title
|
222
|
-
end
|
223
|
-
|
224
224
|
def expand_depends_on_input_keys
|
225
225
|
return unless @depends_on
|
226
226
|
@depends_on = questionnaire.expand_input_keys(@depends_on)
|
@@ -329,39 +329,8 @@ module Quby
|
|
329
329
|
!parent_option_key.nil?
|
330
330
|
end
|
331
331
|
|
332
|
-
def to_codebook(questionnaire, opts = {})
|
333
|
-
output = []
|
334
|
-
question_key = codebook_key(key, questionnaire, opts)
|
335
|
-
output << "#{question_key} #{codebook_output_type} #{codebook_output_range}#{' deprecated' if hidden}"
|
336
|
-
output << "\"#{context_free_title}\"" unless context_free_title.blank?
|
337
|
-
options_string = options.map do |option|
|
338
|
-
option.to_codebook(questionnaire, opts)
|
339
|
-
end.compact.join("\n")
|
340
|
-
output << options_string unless options.blank?
|
341
|
-
output.join("\n")
|
342
|
-
end
|
343
|
-
|
344
|
-
def codebook_key(key, questionnaire, opts = {})
|
345
|
-
key.to_s.gsub(/^v_/, "#{opts[:roqua_key] || questionnaire.key.to_s}_")
|
346
|
-
end
|
347
|
-
|
348
|
-
def codebook_output_type
|
349
|
-
type
|
350
|
-
end
|
351
|
-
|
352
|
-
def codebook_output_range
|
353
|
-
range_min = validations.find { |i| i[:type] == :minimum }&.fetch(:value, nil)
|
354
|
-
range_max = validations.find { |i| i[:type] == :maximum }&.fetch(:value, nil)
|
355
|
-
|
356
|
-
if range_min || range_max
|
357
|
-
"(#{[range_min, "value", range_max].compact.join(" <= ")})"
|
358
|
-
else
|
359
|
-
""
|
360
|
-
end
|
361
|
-
end
|
362
|
-
|
363
332
|
def variable_descriptions
|
364
|
-
{key =>
|
333
|
+
{key => context_free_title_or_title}.with_indifferent_access
|
365
334
|
end
|
366
335
|
end
|
367
336
|
end
|
@@ -10,7 +10,7 @@ module Quby
|
|
10
10
|
|
11
11
|
attr_reader :key
|
12
12
|
attr_reader :value
|
13
|
-
attr_reader :description
|
13
|
+
attr_reader :description, :context_free_description
|
14
14
|
attr_reader :questions
|
15
15
|
attr_reader :inner_title
|
16
16
|
validates :inner_title, inclusion: {in: [true, false, nil], message: "must be boolean"}
|
@@ -52,10 +52,6 @@ module Quby
|
|
52
52
|
false
|
53
53
|
end
|
54
54
|
|
55
|
-
def context_free_description
|
56
|
-
@context_free_description || @description
|
57
|
-
end
|
58
|
-
|
59
55
|
def as_json(options = {})
|
60
56
|
{
|
61
57
|
key: key,
|
@@ -75,28 +71,6 @@ module Quby
|
|
75
71
|
viewId: view_id
|
76
72
|
}
|
77
73
|
end
|
78
|
-
|
79
|
-
def to_codebook(questionnaire, opts)
|
80
|
-
return nil if inner_title
|
81
|
-
output = []
|
82
|
-
|
83
|
-
if question.type == :check_box
|
84
|
-
option_key = question.codebook_key(key, questionnaire, opts)
|
85
|
-
output << "#{option_key} #{question.codebook_output_type}#{' deprecated' if hidden || question.hidden }"
|
86
|
-
output << "\"#{question.title} -- #{description}\"" unless question.title.blank? and description.blank?
|
87
|
-
output << "1\tChecked"
|
88
|
-
output << "0\tUnchecked"
|
89
|
-
output << "empty\tUnchecked"
|
90
|
-
else
|
91
|
-
output << "#{value || key}\t\"#{description}\"#{' deprecated' if hidden}"
|
92
|
-
end
|
93
|
-
|
94
|
-
questions.each do |subquestion|
|
95
|
-
output << "\t#{subquestion.to_codebook(questionnaire, opts).gsub("\n", "\n\t")}"
|
96
|
-
end
|
97
|
-
|
98
|
-
output.join("\n")
|
99
|
-
end
|
100
74
|
end
|
101
75
|
end
|
102
76
|
end
|
@@ -172,6 +172,19 @@ module Quby
|
|
172
172
|
end)
|
173
173
|
end
|
174
174
|
|
175
|
+
# sorts parents before children, so showing makes more sense and visiblity rules are ordered correctly
|
176
|
+
def sorted_questions
|
177
|
+
return @sorted_questions if @sorted_questions
|
178
|
+
|
179
|
+
key_to_order_by = questions.map.with_index.to_h { [_1.key, [_2]] }
|
180
|
+
questions.each do |question|
|
181
|
+
if question.parent
|
182
|
+
key_to_order_by[question.key].unshift(key_to_order_by[question.parent.key].first)
|
183
|
+
end
|
184
|
+
end
|
185
|
+
@sorted_questions = questions.sort_by { key_to_order_by[_1.key] }
|
186
|
+
end
|
187
|
+
|
175
188
|
def questions
|
176
189
|
question_hash.values
|
177
190
|
end
|
@@ -201,43 +214,6 @@ module Quby
|
|
201
214
|
}
|
202
215
|
end
|
203
216
|
|
204
|
-
# rubocop:disable Metrics/MethodLength
|
205
|
-
def to_codebook(options = {})
|
206
|
-
output = []
|
207
|
-
output << title
|
208
|
-
output << "Date unknown"
|
209
|
-
output << ""
|
210
|
-
|
211
|
-
options[:extra_vars]&.each do |var|
|
212
|
-
output << "#{var[:key]} #{var[:type]}"
|
213
|
-
output << "\"#{var[:description]}\""
|
214
|
-
output << ""
|
215
|
-
end
|
216
|
-
|
217
|
-
top_questions = panels.map do |panel|
|
218
|
-
panel.items.select { |item| item.is_a? Question }
|
219
|
-
end.flatten.compact
|
220
|
-
|
221
|
-
top_questions.each do |question|
|
222
|
-
output << question.to_codebook(self, options)
|
223
|
-
output << ""
|
224
|
-
end
|
225
|
-
|
226
|
-
flags.each_value do |flag|
|
227
|
-
output << flag.to_codebook(options)
|
228
|
-
output << ""
|
229
|
-
end
|
230
|
-
|
231
|
-
textvars.each_value do |textvar|
|
232
|
-
output << textvar.to_codebook(options)
|
233
|
-
output << ""
|
234
|
-
end
|
235
|
-
|
236
|
-
output = output.join("\n")
|
237
|
-
strip_tags(output.gsub(/\<([ 1-9])/, '<\1')).gsub("<", "<")
|
238
|
-
end
|
239
|
-
# rubocop:enable Metrics/MethodLength
|
240
|
-
|
241
217
|
def key_in_use?(key)
|
242
218
|
fields.key_in_use?(key) || score_calculations.key?(key)
|
243
219
|
end
|
@@ -415,9 +391,14 @@ module Quby
|
|
415
391
|
end.uniq(&:config)
|
416
392
|
end
|
417
393
|
|
394
|
+
# Order is important
|
395
|
+
# quby2 follows them one by one and ignores rules by hidden question, so needs to be in order of interface.
|
396
|
+
# Flags don't have this issue, so as long as they are first, their order doesn't matter.
|
418
397
|
def visibility_rules
|
419
|
-
@visibility_rules ||=
|
420
|
-
|
398
|
+
@visibility_rules ||= [
|
399
|
+
*flags.values.flat_map { |flag| VisibilityRule.from_flag(flag) },
|
400
|
+
*sorted_questions.flat_map { |question| VisibilityRule.from(question) }
|
401
|
+
]
|
421
402
|
end
|
422
403
|
|
423
404
|
private
|
@@ -51,9 +51,9 @@ module Quby
|
|
51
51
|
end
|
52
52
|
|
53
53
|
def variable_descriptions
|
54
|
-
options.each_with_object(key =>
|
54
|
+
options.each_with_object(key => context_free_title_or_title) do |option, hash|
|
55
55
|
next if option.input_key.blank?
|
56
|
-
hash[option.input_key] = "#{
|
56
|
+
hash[option.input_key] = "#{context_free_title_or_title} - #{option.description}"
|
57
57
|
end.with_indifferent_access
|
58
58
|
end
|
59
59
|
|
@@ -69,12 +69,6 @@ module Quby
|
|
69
69
|
def as_json(options = {})
|
70
70
|
super.merge(options: @options.as_json)
|
71
71
|
end
|
72
|
-
|
73
|
-
def to_codebook(questionnaire, opts = {})
|
74
|
-
options.map do |option|
|
75
|
-
option.to_codebook(questionnaire, opts)
|
76
|
-
end.compact.join("\n\n")
|
77
|
-
end
|
78
72
|
end
|
79
73
|
end
|
80
74
|
end
|
@@ -53,9 +53,9 @@ module Quby
|
|
53
53
|
end
|
54
54
|
|
55
55
|
def variable_descriptions
|
56
|
-
components.each_with_object(key =>
|
56
|
+
components.each_with_object(key => context_free_title_or_title) do |component, hash|
|
57
57
|
key = send("#{component}_key")
|
58
|
-
hash[key] = "#{
|
58
|
+
hash[key] = "#{context_free_title_or_title} (#{I18n.t component})"
|
59
59
|
end.with_indifferent_access
|
60
60
|
end
|
61
61
|
|
@@ -65,18 +65,6 @@ module Quby
|
|
65
65
|
end
|
66
66
|
super.merge(components: components).merge(component_keys)
|
67
67
|
end
|
68
|
-
|
69
|
-
def to_codebook(questionnaire, opts = {})
|
70
|
-
output = []
|
71
|
-
components.each do |component|
|
72
|
-
output << "#{codebook_key(send("#{component}_key"), questionnaire, opts)} " \
|
73
|
-
"#{type}_#{component} #{codebook_output_range}"
|
74
|
-
output << "\"#{title}\"" unless title.blank?
|
75
|
-
output << options.map(&:to_codebook).join("\n") unless options.blank?
|
76
|
-
output << ""
|
77
|
-
end
|
78
|
-
output.join("\n")
|
79
|
-
end
|
80
68
|
end
|
81
69
|
end
|
82
70
|
end
|
@@ -10,13 +10,6 @@ module Quby
|
|
10
10
|
super(key, description, default, depends_on_flag)
|
11
11
|
end
|
12
12
|
# rubocop:enable ParameterLists
|
13
|
-
|
14
|
-
def to_codebook(_options = {})
|
15
|
-
output = []
|
16
|
-
output << "#{key} Textvariabele"
|
17
|
-
output << description
|
18
|
-
output.join("\n")
|
19
|
-
end
|
20
13
|
end
|
21
14
|
end
|
22
15
|
end
|
@@ -160,7 +160,7 @@ module Quby
|
|
160
160
|
# sbg_key [nil/string] _not_ defaulted to key
|
161
161
|
# type [string]
|
162
162
|
# title [nil/string] no html
|
163
|
-
# context_free_title [nil/string] no html, defaulted to title
|
163
|
+
# context_free_title [nil/string] no html, not defaulted to title!
|
164
164
|
# unit [nil/string] no html (not in quby either)
|
165
165
|
# deprecated [nil/true] only show if filled for old answers
|
166
166
|
# default_invisible [nil/true] only show if filled or when all questions are shown
|
@@ -170,15 +170,15 @@ module Quby
|
|
170
170
|
# date_parts [nil/{..}]
|
171
171
|
# options: [nil/{..}]
|
172
172
|
def questions
|
173
|
-
questionnaire.
|
173
|
+
questionnaire.sorted_questions.reject{_1.type == :hidden}.to_h { |question|
|
174
174
|
[
|
175
175
|
question.key,
|
176
176
|
{
|
177
177
|
key: question.key,
|
178
178
|
sbg_key: question.sbg_key,
|
179
179
|
type: QUBY_TYPE_TO_ROQUA_TYPE.fetch(question.type),
|
180
|
-
title:
|
181
|
-
context_free_title:
|
180
|
+
title: parse_markdown_and_strip_tags(question.title),
|
181
|
+
context_free_title: question.context_free_title,
|
182
182
|
unit: question.unit,
|
183
183
|
deprecated: question.hidden.presence,
|
184
184
|
default_invisible: question.default_invisible.presence,
|
@@ -210,7 +210,7 @@ module Quby
|
|
210
210
|
# {a1: {..}}
|
211
211
|
# key [string]
|
212
212
|
# value [nil/string] nil for check_box, string otherwise
|
213
|
-
# description [nil/string] context_free_description, no html
|
213
|
+
# description [nil/string] context_free_description or parsed/stripped description, no html
|
214
214
|
# child_question_keys [nil/[string]]
|
215
215
|
def options_for(question)
|
216
216
|
return nil if question.options.empty?
|
@@ -222,7 +222,7 @@ module Quby
|
|
222
222
|
{
|
223
223
|
key: option.key,
|
224
224
|
value: (option.value.to_s unless question.type == :check_box),
|
225
|
-
description:
|
225
|
+
description: option.context_free_description || parse_markdown_and_strip_tags(option.description),
|
226
226
|
child_question_keys: option.questions.map(&:key).presence
|
227
227
|
}.compact
|
228
228
|
]
|
@@ -255,8 +255,17 @@ module Quby
|
|
255
255
|
}
|
256
256
|
end
|
257
257
|
|
258
|
+
def parse_markdown_and_strip_tags(markdown)
|
259
|
+
strip_tags_without_html_encode(Quby::MarkdownParser.new(markdown).to_html)
|
260
|
+
end
|
261
|
+
|
258
262
|
def strip_tags_without_html_encode(html)
|
259
|
-
Nokogiri::HTML(html).
|
263
|
+
Nokogiri::HTML(html).tap do |doc|
|
264
|
+
doc.css('br, hr, img').each { |node| node.replace(' ') }
|
265
|
+
end \
|
266
|
+
.text
|
267
|
+
.gsub!(/\s+/, ' ')
|
268
|
+
.presence
|
260
269
|
end
|
261
270
|
end
|
262
271
|
end
|
@@ -40,7 +40,7 @@ module Quby
|
|
40
40
|
when :select
|
41
41
|
d_qtypes[question.key.to_s] = { type: :discrete }
|
42
42
|
for option in question.options
|
43
|
-
d_qtypes[question.key.to_s][option.value.to_s] = strip_p_tag(option.context_free_description || "") unless option.placeholder
|
43
|
+
d_qtypes[question.key.to_s][option.value.to_s] = strip_p_tag(option.context_free_description || option.description || "") unless option.placeholder
|
44
44
|
end
|
45
45
|
update_hidden_questions_for(question)
|
46
46
|
when :check_box
|
@@ -49,11 +49,11 @@ module Quby
|
|
49
49
|
next if option.inner_title
|
50
50
|
vars << option.key.to_s
|
51
51
|
if question.hidden
|
52
|
-
question_titles[option.key.to_s] = strip_tags
|
52
|
+
question_titles[option.key.to_s] = strip_tags(question.context_free_title_or_title)
|
53
53
|
end
|
54
54
|
value = 1
|
55
55
|
option_type = { type: :discrete }
|
56
|
-
option_type[value.to_s] = (option.context_free_description || "")
|
56
|
+
option_type[value.to_s] = (option.context_free_description || option.description || "")
|
57
57
|
option_type[:depends] = { values: [value, value.to_s].uniq, variable: option.key.to_s } unless options[:without_depends]
|
58
58
|
d_qtypes[option.key.to_s] = option_type
|
59
59
|
values = [value, value.to_s].uniq
|
@@ -75,7 +75,7 @@ module Quby
|
|
75
75
|
end
|
76
76
|
when :hidden
|
77
77
|
if question.options.blank? # string
|
78
|
-
question_titles[question.key.to_s] = strip_tags
|
78
|
+
question_titles[question.key.to_s] = strip_tags(question.context_free_title_or_title)
|
79
79
|
vars << question.key.to_s unless vars.include? question.key.to_s
|
80
80
|
d_qtypes[question.key.to_s] = { type: :text }
|
81
81
|
d_qtypes[question.key.to_s][:depends] = :present unless options[:without_depends]
|
@@ -88,16 +88,16 @@ module Quby
|
|
88
88
|
next if option.inner_title
|
89
89
|
d_qtypes[question.key.to_s] ||= { type: :scale }
|
90
90
|
values << option.value.to_s
|
91
|
-
d_qtypes[question.key.to_s][option.value.to_s] = strip_p_tag(option.context_free_description || "")
|
91
|
+
d_qtypes[question.key.to_s][option.value.to_s] = strip_p_tag(option.context_free_description || option.description || "")
|
92
92
|
# TODO: missing sub-questions
|
93
93
|
else # check_box
|
94
94
|
d_qtypes[question.key.to_s] ||= { type: :check_box }
|
95
95
|
no_keys = false
|
96
|
-
question_titles[option.key.to_s] = strip_tags
|
96
|
+
question_titles[option.key.to_s] = strip_tags(question.context_free_title_or_title)
|
97
97
|
vars << option.key.to_s
|
98
98
|
value = option.value || 1
|
99
99
|
option_type = { type: :discrete }
|
100
|
-
option_type[value.to_s] = (option.context_free_description || "")
|
100
|
+
option_type[value.to_s] = (option.context_free_description || option.description || "")
|
101
101
|
option_type[:depends] = { values: [value, value.to_s].uniq, variable: option.key.to_s } unless options[:without_depends]
|
102
102
|
d_qtypes[option.key.to_s] = option_type
|
103
103
|
# TODO: missing sub-questions
|
@@ -105,7 +105,7 @@ module Quby
|
|
105
105
|
end
|
106
106
|
if no_keys # scale or radio
|
107
107
|
d_qtypes[question.key.to_s][:depends] = { values: values, variable: question.key.to_s } unless options[:without_depends]
|
108
|
-
question_titles[question.key.to_s] = strip_tags
|
108
|
+
question_titles[question.key.to_s] = strip_tags(question.context_free_title_or_title)
|
109
109
|
end
|
110
110
|
end
|
111
111
|
else
|
@@ -194,7 +194,7 @@ module Quby
|
|
194
194
|
|
195
195
|
for question in questions_flat
|
196
196
|
unless question.hidden && (question.type == :check_box || question.type == :hidden)
|
197
|
-
title = question.
|
197
|
+
title = question.context_free_title_or_title || question.description || ""
|
198
198
|
question_titles[question.key.to_s] = strip_tags(title)
|
199
199
|
end
|
200
200
|
end
|
@@ -240,24 +240,24 @@ module Quby
|
|
240
240
|
end
|
241
241
|
end
|
242
242
|
d_qtypes[quest.key.to_s][:label] = quest.unit unless quest.unit.blank?
|
243
|
-
quests[quest.key.to_s] = strip_tags(quest.context_free_title || "")
|
243
|
+
quests[quest.key.to_s] = strip_tags(quest.context_free_title || quest.title || "")
|
244
244
|
vars << quest.key.to_s
|
245
245
|
end
|
246
246
|
|
247
247
|
def sub_textfield(question, quests, d_qtypes, vars, quest, values, key)
|
248
248
|
d_qtypes[quest.key.to_s] = { type: :text_field }
|
249
249
|
d_qtypes[quest.key.to_s][:depends] = { values: values, variable: key } unless options[:without_depends]
|
250
|
-
quests[quest.key.to_s] = strip_tags(quest.context_free_title || "")
|
250
|
+
quests[quest.key.to_s] = strip_tags(quest.context_free_title || quest.title || "")
|
251
251
|
vars << quest.key.to_s
|
252
252
|
end
|
253
253
|
|
254
254
|
def sub_radio(question, quests, d_qtypes, vars, quest, values, key)
|
255
255
|
d_qtypes[quest.key.to_s] = { type: :scale }
|
256
256
|
d_qtypes[quest.key.to_s][:depends] = { values: values, variable: key } unless options[:without_depends]
|
257
|
-
quests[quest.key.to_s] = strip_tags(quest.context_free_title || "")
|
257
|
+
quests[quest.key.to_s] = strip_tags(quest.context_free_title || quest.title || "")
|
258
258
|
for option in quest.options
|
259
259
|
next if option.inner_title
|
260
|
-
d_qtypes[quest.key.to_s][option.value.to_s] = strip_p_tag(option.context_free_description || "")
|
260
|
+
d_qtypes[quest.key.to_s][option.value.to_s] = strip_p_tag(option.context_free_description || option.description || "")
|
261
261
|
end
|
262
262
|
vars << quest.key.to_s
|
263
263
|
update_hidden_questions_for(quest)
|
@@ -269,7 +269,7 @@ module Quby
|
|
269
269
|
vars << key
|
270
270
|
hash[component] = key.to_s
|
271
271
|
end
|
272
|
-
quests[quest.key.to_s] = strip_tags(quest.context_free_title || "")
|
272
|
+
quests[quest.key.to_s] = strip_tags(quest.context_free_title || quest.title || "")
|
273
273
|
end
|
274
274
|
|
275
275
|
def handle_scale(question, quests, d_qtypes, vars)
|
@@ -278,7 +278,7 @@ module Quby
|
|
278
278
|
update_hidden_questions_for(question)
|
279
279
|
for option in question.options
|
280
280
|
next if option.inner_title
|
281
|
-
d_qtypes[question.key.to_s][option.value.to_s] = strip_p_tag(option.context_free_description || "")
|
281
|
+
d_qtypes[question.key.to_s][option.value.to_s] = strip_p_tag(option.context_free_description || option.description || "")
|
282
282
|
values << option.value.to_s
|
283
283
|
key = question.key.to_s
|
284
284
|
handle_subquestions(question, quests, d_qtypes, vars, option, [option.value.to_s], key)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: quby-compiler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Marten Veldthuis
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-02-
|
11
|
+
date: 2022-02-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activemodel
|