diff --git a/lib/quby/compiler/entities/flag.rb b/lib/quby/compiler/entities/flag.rb index fd05fb24c0c89ca48018f1f8e0424428dea3360d..479b0ebfc6ce5f366fc8cc5a08b3c22c477281f3 100644 --- a/lib/quby/compiler/entities/flag.rb +++ b/lib/quby/compiler/entities/flag.rb @@ -14,11 +14,11 @@ module Quby trigger_on: true, shows_questions: [], hides_questions: [], - depends_on: nil, # used in interface to hide this flag unless the depended on flag is set to true + depends_on: [], # used in interface to hide this flag unless the depended on flag is set to true default_in_interface: nil) # used in interface to set a default for the flag state, # does not have an effect outside of the interface super(key, description_true, description_false, description, internal, trigger_on, shows_questions, - hides_questions, depends_on, default_in_interface) + hides_questions, Array.wrap(depends_on).map(&:to_s), default_in_interface) ensure_valid_descriptions end # rubocop:enable ParameterLists diff --git a/lib/quby/compiler/services/definition_validator.rb b/lib/quby/compiler/services/definition_validator.rb index 16b295a5acef3ed1d91138967ffa3ec3fc50569d..d3a39e6dbdeaf5bffa1e0576a88cba1650475993 100644 --- a/lib/quby/compiler/services/definition_validator.rb +++ b/lib/quby/compiler/services/definition_validator.rb @@ -131,9 +131,9 @@ module Quby end def validate_flag_depends_on(questionnaire, flag) - return if flag.depends_on.blank? || questionnaire.flags.key?(flag.depends_on) + return if (missing = flag.depends_on - questionnaire.flags.keys).blank? - fail ArgumentError, "Flag #{flag.key} depends_on nonexistent flag '#{flag.depends_on}'" + fail ArgumentError, "Flag #{flag.key} depends_on nonexistent flag '#{missing.to_sentence}'" end def validate_respondent_types(questionnaire) diff --git a/spec/quby/compiler/entities/flag_spec.rb b/spec/quby/compiler/entities/flag_spec.rb index 99e3c285871c350aa00a26c04568cedec58fe6fc..90cdbe9d78960d891664cfb627cde23753b0aacc 100644 --- a/spec/quby/compiler/entities/flag_spec.rb +++ b/spec/quby/compiler/entities/flag_spec.rb @@ -47,5 +47,11 @@ module Quby::Compiler::Entities expect(flag.variable_description).to eq("test flag (true - 'flag is true', false - 'flag is false')") end end + + # we only set through the initializer. + it 'transforms depends_on into an array of string' do + flag = described_class.new key: :foo, description: 'foo', depends_on: :bar + expect(flag.depends_on).to eq ['bar'] + end end end