quby-compiler 0.5.35 → 0.5.37

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a21391f3c8b8e87e569154611f701918f002f296dd989f6a2a3fb532c6e97b57
4
- data.tar.gz: bb2269eee7a3c44155416d5b55fae9363b501180c24140f8b46dccca7f5259d0
3
+ metadata.gz: f99d7e4e00d6ab08172da731229ed790720f8131ca55a9919a8d6f4823da1bbe
4
+ data.tar.gz: a7855f35d16daded7a21e60564322576b7ea8f967052e72d8d4f8eb194b53f04
5
5
  SHA512:
6
- metadata.gz: c0658acad6b54a986f2033d8807bf0d837a9c3725cdde0e5d41fbf9a8c208252a085bffa96229b6462bd76e0d1408f911d7d441ff039133716e534adbdc4eb9f
7
- data.tar.gz: 33bcd08d06a3afa16b2d9903b4c454f4c9a22e43da01212c6d2d601504446c5e2830fd521820eca2cb5a7c9502ba5bd0306599f87299de365bd1f1e032420008
6
+ metadata.gz: 4c0260b251395ef6fcf757ecc1ddaf120139716c6f0ae27a77450dea9719d76f103891b060b74146aee408d68febffd398436ce613d3c8031215e6f6b01035d6
7
+ data.tar.gz: e20c44b3fba04514aa601e52c9b7321e185bbea66d9e12e112efdd20023b91bfc52f30de3f4ebf0959426eb4aa351499abe2b7b4b5e5ac5ea2b6b04b5e4f5544
data/CHANGELOG.md CHANGED
@@ -1,3 +1,15 @@
1
+ # 0.5.37
2
+
3
+ * added support for indenting questions
4
+ * quby2: Added versionNumber.
5
+ * added validations for checkbox options to have a (context_free_)description
6
+ * removed bulkview logic
7
+
8
+ # 0.5.36
9
+
10
+ * Fix visibility_rules ordering.
11
+ * seeds.yml: use option#label when available.
12
+
1
13
  # 0.5.35
2
14
 
3
15
  * Fix sexp validations not always recursing right.
@@ -0,0 +1,16 @@
1
+ merge(values(:v_1, :v_2), values(v_4).recode(1 => 3)).sum
2
+
3
+
4
+
5
+ divide(value(:v_2), multiply(value(:v_1), value(:v_1)))
6
+
7
+ w / l * l
8
+
9
+
10
+ sexp_variable :key1 do
11
+ foo = values(:v_1, :v_2)
12
+ bar = recode(foo, 1 => 3)
13
+ bla = merge(foo, bar)
14
+ sum(bla)
15
+
16
+ end
@@ -151,8 +151,8 @@ module Quby
151
151
  @questionnaire.css_vars.merge!(value)
152
152
  end
153
153
 
154
+ # deprecated no-op
154
155
  def allow_switch_to_bulk(value=true)
155
- @questionnaire.allow_switch_to_bulk = value
156
156
  end
157
157
 
158
158
  def default_answer_value(value)
@@ -30,6 +30,9 @@ module Quby
30
30
 
31
31
  # extra styling options
32
32
  attr_accessor :css_vars
33
+ # indent the question, to make it belong to the previous one.
34
+ attr_accessor :indent
35
+ validates :indent, inclusion: {in: [nil, 0, 1], message: "must be 0 or 1"}
33
36
 
34
37
  # To hide old questions
35
38
  attr_accessor :hidden
@@ -169,6 +172,7 @@ module Quby
169
172
  @default_invisible = options[:default_invisible] || false
170
173
  @labels ||= []
171
174
  @css_vars = options[:css_vars]
175
+ @indent = options[:indent]
172
176
 
173
177
  @col_span = options[:col_span] || 1
174
178
  @row_span = options[:row_span] || 1
@@ -14,6 +14,8 @@ module Quby
14
14
  validates :value, numericality: {allow_nil: true} # nil for checkbox questions.
15
15
  attr_reader :label
16
16
  attr_reader :description, :context_free_description
17
+ validates :context_free_description, presence: {if: -> { question.type == :check_box && label.blank? && description.blank? && !inner_title }, message: "(context_free_)description must be present"}
18
+
17
19
  attr_reader :questions
18
20
  # for scale/radio/checbox questions, piece of of html that is rendered between the options
19
21
  attr_reader :inner_title
@@ -41,7 +41,6 @@ module Quby
41
41
  @layout_version = nil
42
42
  @extra_css = ""
43
43
  @css_vars = nil
44
- @allow_switch_to_bulk = false
45
44
  @panels = []
46
45
  @flags = {}.with_indifferent_access
47
46
  @textvars = {}.with_indifferent_access
@@ -82,7 +81,6 @@ module Quby
82
81
  attr_reader :fields
83
82
  attr_accessor :extra_css
84
83
  attr_accessor :css_vars
85
- attr_accessor :allow_switch_to_bulk
86
84
  attr_reader :license
87
85
  attr_accessor :licensor
88
86
  attr_accessor :language
@@ -136,6 +134,10 @@ module Quby
136
134
  @roqua_keys || [key]
137
135
  end
138
136
 
137
+ def version_number
138
+ versions.last&.number || 0
139
+ end
140
+
139
141
  def to_param
140
142
  key
141
143
  end
@@ -398,7 +400,7 @@ module Quby
398
400
  # This is important since a shown question can't be hidden, so each question is only ever changed once while looping over the rules.
399
401
  def visibility_rules
400
402
  return @visibility_rules if @visibility_rules
401
- question_order = sorted_questions.map.with_index{ [_1, _2] }.to_h
403
+ question_order = sorted_questions.map.with_index{ [_1.key, _2] }.to_h
402
404
  @visibility_rules ||= [
403
405
  *flags.values.flat_map { |flag| VisibilityRule.from_flag(flag) },
404
406
  *sorted_questions.flat_map { |question| VisibilityRule.from(question) },
@@ -9,24 +9,24 @@ module Quby
9
9
  # Transform "default invisible" into just being hidden by itself,
10
10
  # since any other question showing it will take precedence anyway.
11
11
  if question.default_invisible
12
- rules << new(condition: { type: :always, field_key: question.key },
13
- action: { type: :hide_question, field_key: question.key })
12
+ rules << new(condition: { type: 'always', field_key: question.key },
13
+ action: { type: 'hide_question', field_key: question.key })
14
14
  end
15
15
  if question.hidden # hide by default, show if data is already present.
16
- rules << new(condition: { type: :always, field_key: question.key },
17
- action: { type: :hide_question, field_key: question.key })
18
- rules << new(condition: { type: :answered, evenWhenHidden: true, field_key: question.key },
19
- action: { type: :show_question, field_key: question.key })
16
+ rules << new(condition: { type: 'always', field_key: question.key },
17
+ action: { type: 'hide_question', field_key: question.key })
18
+ rules << new(condition: { type: 'answered', evenWhenHidden: true, field_key: question.key },
19
+ action: { type: 'show_question', field_key: question.key })
20
20
  end
21
21
 
22
22
  case question.type
23
23
  when :radio, :scale, :select
24
24
  question.all_options.each do |option|
25
- rules.concat rules_for_option(question, option, type: :equal)
25
+ rules.concat rules_for_option(question, option, type: 'equal')
26
26
  end
27
27
  when :check_box
28
28
  question.options.each do |option|
29
- rules.concat rules_for_option(question, option, type: :contains)
29
+ rules.concat rules_for_option(question, option, type: 'contains')
30
30
  end
31
31
  end
32
32
  end
@@ -36,12 +36,12 @@ module Quby
36
36
  [].tap do |rules|
37
37
  option.shows_questions.each do |shows_question|
38
38
  rules << new(condition: { type: type, field_key: question.key, value: option.key },
39
- action: { type: :show_question, field_key: shows_question })
39
+ action: { type: 'show_question', field_key: shows_question })
40
40
  end
41
41
 
42
42
  option.hides_questions.each do |hides_question|
43
43
  rules << new(condition: { type: type, field_key: question.key, value: option.key },
44
- action: { type: :hide_question, field_key: hides_question })
44
+ action: { type: 'hide_question', field_key: hides_question })
45
45
  end
46
46
  end
47
47
  end
@@ -335,7 +335,6 @@ module Quby
335
335
  language: questionnaire.language,
336
336
  last_author: questionnaire.last_author,
337
337
  extra_css: questionnaire.extra_css,
338
- allow_switch_to_bulk: questionnaire.allow_switch_to_bulk,
339
338
 
340
339
  panels: panels,
341
340
  score_calculations: score_calculations,
@@ -27,6 +27,7 @@ module Quby
27
27
  visibilityRules: visibility_rules.as_json,
28
28
  sexpVariables: sexp_variables,
29
29
  cssVars: css_vars,
30
+ versionNumber: version_number,
30
31
  }.compact.tap do |json|
31
32
  validate_all_questions_in_a_panel_question_keys(json)
32
33
  end
@@ -202,6 +203,8 @@ module Quby
202
203
  contextDescription: handle_html(question.context_description, type: :prose, v1_markdown: false),
203
204
  type: question_type(question),
204
205
  cssVars: question.css_vars,
206
+ indent: question.indent,
207
+
205
208
  hidden: question.hidden?,
206
209
  displayModes: question.display_modes,
207
210
  viewSelector: question.view_selector,
@@ -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.all_options
43
- d_qtypes[question.key.to_s][option.value.to_s] = strip_p_tag(option.context_free_description || option.description || "") unless option.placeholder
43
+ d_qtypes[question.key.to_s][option.value.to_s] = strip_p_tag(option.context_free_description || option.label || option.description || "") unless option.placeholder
44
44
  end
45
45
  update_hidden_questions_for(question)
46
46
  when :check_box
@@ -53,7 +53,7 @@ module Quby
53
53
  end
54
54
  value = 1
55
55
  option_type = { type: :discrete }
56
- option_type[value.to_s] = (option.context_free_description || option.description || "")
56
+ option_type[value.to_s] = (option.context_free_description || option.label || 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
@@ -278,7 +278,7 @@ module Quby
278
278
  update_hidden_questions_for(question)
279
279
  for option in question.all_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 || option.description || "")
281
+ d_qtypes[question.key.to_s][option.value.to_s] = strip_p_tag(option.context_free_description || option.label || 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)
@@ -1,5 +1,5 @@
1
1
  module Quby
2
2
  module Compiler
3
- VERSION = "0.5.35"
3
+ VERSION = "0.5.37"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: quby-compiler
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.35
4
+ version: 0.5.37
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marten Veldthuis
8
8
  bindir: exe
9
9
  cert_chain: []
10
- date: 2025-09-23 00:00:00.000000000 Z
10
+ date: 2025-10-16 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: activemodel
@@ -151,6 +151,7 @@ files:
151
151
  - lib/quby/compiler/dsl/charting/radar_chart_builder.rb
152
152
  - lib/quby/compiler/dsl/helpers.rb
153
153
  - lib/quby/compiler/dsl/info_block_builder.rb
154
+ - lib/quby/compiler/dsl/merge(values(:v_1, :v_2), values(v_4).rb
154
155
  - lib/quby/compiler/dsl/panel_builder.rb
155
156
  - lib/quby/compiler/dsl/question_builder.rb
156
157
  - lib/quby/compiler/dsl/questionnaire_builder.rb