quby-compiler 0.5.7 → 0.5.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9585291a3d8622c9a7d8af491999e99258f50f85ba7af81b2189418fb7ba581a
4
- data.tar.gz: 41c7638af19d0837ffce3a0c6d57f8d06cdf8401c2c9864f8a167c2cf0b02087
3
+ metadata.gz: 44068865d5a7d4dab6a76cf5d6b11bc8c6ce64be7f373e822e3e1ec30bbd1889
4
+ data.tar.gz: f0a6dc1e26bc3b212370054b1dbaad1af344b6833ea056b9c618b264b2a8e4f5
5
5
  SHA512:
6
- metadata.gz: 491d4aad787b486403d23dab908931da75d81afc02d13dcabef924e6ac108aab65e8822a1ae450c32cd8cbce7d6789a0ce18618fc0f0a3172312cc06ba288674
7
- data.tar.gz: 8f27a6cabf5bf5451348255f81bab64483d690797786860739f69d43637e87698df3cce4c1726f4a4c01c5473797b0b08832a05a6fd3408f9460001a2c8541d5
6
+ metadata.gz: 1d57ad082868f0f5e37dc1cf7094037d631dbc76232ec83400155ad07a05f6e4a37b569843750a973fa2543d134d5cbda63465775d0d64d912af1357c71ca56d
7
+ data.tar.gz: 3301d9eeca5a25a3186043c506b39beab4568d99f7945f0e646d29bdbd223e7813fd3479e6c3a215ef28e9ca36f0edb63a168b2abcdb5fe9600b15e21edd8e4f
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ # 0.5.8
2
+
3
+ * DefinitionValidator: Add uniqueness check over all question, flags, textvars and score keys.
4
+ * Moved flag description validation to definition_validator
5
+
1
6
  # 0.5.7
2
7
 
3
8
  * quby2.json
@@ -19,21 +19,12 @@ module Quby
19
19
  # does not have an effect outside of the interface
20
20
  super(key, description_true, description_false, description, internal, trigger_on, shows_questions,
21
21
  hides_questions, Array.wrap(depends_on).map(&:to_s), default_in_interface)
22
- ensure_valid_descriptions
23
22
  end
24
23
  # rubocop:enable ParameterLists
25
24
 
26
25
  def if_triggered_by(answer_flags)
27
26
  yield if answer_flags[key] == trigger_on
28
27
  end
29
-
30
- private
31
-
32
- def ensure_valid_descriptions
33
- unless (description_false.present? && description_true.present?) || description.present?
34
- raise "Flag '#{key}' Requires at least either both description_true and description_false or a description"
35
- end
36
- end
37
28
  end
38
29
  end
39
30
  end
@@ -21,6 +21,7 @@ module Quby
21
21
  validate_scores(questionnaire)
22
22
  validate_table_edgecases(questionnaire)
23
23
  validate_flags(questionnaire)
24
+ validate_key_uniqueness(questionnaire)
24
25
  validate_respondent_types(questionnaire)
25
26
  validate_outcome_tables(questionnaire)
26
27
  validate_markdown_fields(questionnaire) if questionnaire.validate_html
@@ -127,12 +128,19 @@ module Quby
127
128
 
128
129
  def validate_flags(questionnaire)
129
130
  questionnaire.flags.each_value do |flag|
131
+ ensure_valid_descriptions(questionnaire, flag)
130
132
  validate_flag_shows(questionnaire, flag)
131
133
  validate_flag_hides(questionnaire, flag)
132
134
  validate_flag_depends_on(questionnaire, flag)
133
135
  end
134
136
  end
135
137
 
138
+ def ensure_valid_descriptions(questionnaire, flag)
139
+ unless (flag.description_false.present? && flag.description_true.present?) || flag.description.present?
140
+ fail ArgumentError, "Flag '#{flag.key}' Requires at least either both description_true and description_false or a description"
141
+ end
142
+ end
143
+
136
144
  def validate_flag_shows(questionnaire, flag)
137
145
  unknown_questions = flag.shows_questions.select { |key| !questionnaire.key_in_use?(key) }
138
146
  return if unknown_questions.blank?
@@ -153,6 +161,18 @@ module Quby
153
161
  fail ArgumentError, "Flag #{flag.key} depends_on nonexistent flag '#{missing.to_sentence}'"
154
162
  end
155
163
 
164
+ def validate_key_uniqueness(questionnaire)
165
+ keys = questionnaire.fields.answer_keys.to_a \
166
+ + questionnaire.score_schemas.keys.map(&:to_sym) \
167
+ + questionnaire.flags.keys.map { delete_prefix(_1, questionnaire).to_sym } \
168
+ + questionnaire.textvars.keys.map { delete_prefix(_1, questionnaire).to_sym }
169
+
170
+ return if keys.size == keys.uniq.size
171
+
172
+ duplicates = keys.tally.filter_map { |k,v| k if v > 1 }
173
+ fail ArgumentError, "Duplicate keys: #{duplicates.to_sentence}"
174
+ end
175
+
156
176
  def validate_respondent_types(questionnaire)
157
177
  valid_respondent_types = Entities::Questionnaire::RESPONDENT_TYPES
158
178
 
@@ -339,6 +359,10 @@ scores_schema tables to the resulting seed."
339
359
 
340
360
  fail "#{key || html} contains invalid html: #{fragment.errors.map(&:to_s).join(', ')}."
341
361
  end
362
+
363
+ def delete_prefix(key, questionnaire)
364
+ key.delete_prefix("#{questionnaire.key}_")
365
+ end
342
366
  end
343
367
  end
344
368
  end
@@ -1,5 +1,5 @@
1
1
  module Quby
2
2
  module Compiler
3
- VERSION = "0.5.7"
3
+ VERSION = "0.5.8"
4
4
  end
5
5
  end
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.5.7
4
+ version: 0.5.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: 2023-11-03 00:00:00.000000000 Z
11
+ date: 2024-03-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
@@ -245,7 +245,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
245
245
  - !ruby/object:Gem::Version
246
246
  version: '0'
247
247
  requirements: []
248
- rubygems_version: 3.4.19
248
+ rubygems_version: 3.5.3
249
249
  signing_key:
250
250
  specification_version: 4
251
251
  summary: Quby::Compiler compiles a DSL for questionnaires to JSON