Skip to content
Snippets Groups Projects
Commit 225f6fed authored by Per 29 mei 2024 gedeeld account, daarvoor marten's avatar Per 29 mei 2024 gedeeld account, daarvoor marten
Browse files

Fix that lookup tables were not available to DefinitionValidator

parent 4f367b62
Branches
Tags
1 merge request!14Fix that lookup tables were not available to DefinitionValidator
Pipeline #80718 passed
......@@ -10,15 +10,15 @@ module Quby
module DSL
def self.build_from_definition(definition)
Entities::Questionnaire.new(definition.key, last_update: definition.timestamp).tap do |questionnaire|
builder = QuestionnaireBuilder.new(questionnaire)
builder = QuestionnaireBuilder.new(questionnaire, lookup_tables: definition.lookup_tables)
builder.instance_eval(definition.sourcecode, definition.path) if definition.sourcecode
questionnaire.callback_after_dsl_enhance_on_questions
end
end
def self.build(key, sourcecode = nil, path: nil, timestamp: nil, &block)
def self.build(key, sourcecode = nil, path: nil, timestamp: nil, lookup_tables: {}, &block)
Entities::Questionnaire.new(key, last_update: timestamp).tap do |questionnaire|
builder = QuestionnaireBuilder.new(questionnaire)
builder = QuestionnaireBuilder.new(questionnaire, lookup_tables: lookup_tables)
builder.instance_eval(sourcecode, path || key) if sourcecode
builder.instance_eval(&block) if block
questionnaire.callback_after_dsl_enhance_on_questions
......
......@@ -19,7 +19,7 @@ module Quby
include StandardizedPanelGenerators
include Helpers
def initialize(target_instance, lookup_tables: nil)
def initialize(target_instance, lookup_tables:)
@questionnaire = target_instance
@lookup_tables = lookup_tables
@default_question_options = {}
......
......@@ -10,13 +10,14 @@ module Quby
extend ActiveModel::Naming
include ActiveModel::Validations
attr_accessor :key, :sourcecode, :timestamp, :path
attr_accessor :key, :sourcecode, :timestamp, :path, :lookup_tables
def initialize(key:, path:, sourcecode: "", timestamp: nil)
def initialize(key:, path:, sourcecode: "", timestamp: nil, lookup_tables: {})
@path = path
@key = key
@sourcecode = sourcecode
@timestamp = timestamp
@lookup_tables = lookup_tables
end
validates_with Services::DefinitionValidator
......
......@@ -63,7 +63,7 @@ module Quby
end
def validate(key:, sourcecode:)
definition = Entities::Definition.new(key: key, sourcecode: sourcecode, path: "validating '#{key}'")
definition = Entities::Definition.new(key: key, sourcecode: sourcecode, path: "validating '#{key}'", lookup_tables: lookup_tables)
definition.valid?
definition
end
......
......@@ -30,7 +30,7 @@ module Quby
rescue Exception => exception # rubocop:disable Lint/RescueException
definition.errors.add(:sourcecode, {message: "Questionnaire error: #{definition.key}\n" \
"#{exception.message}",
backtrace: exception.backtrace[0..5].join("<br/>")})
backtrace: exception.backtrace[0..20]})
end
def validate_fields(questionnaire)
......
......@@ -5,7 +5,8 @@ require 'spec_helper'
module Quby::Compiler::DSL
describe Helpers do
let(:questionnaire) { Quby::Compiler::Entities::Questionnaire.new("example") }
let(:builder) { QuestionnaireBuilder.new(questionnaire) }
let(:lookup_tables) { {} }
let(:builder) { QuestionnaireBuilder.new(questionnaire, lookup_tables: lookup_tables) }
# this helper has some extra tests to check that helpers are included everywhere
describe '.image_tag' do
......
......@@ -5,7 +5,8 @@ require 'spec_helper'
module Quby::Compiler::DSL
describe QuestionnaireBuilder do
let(:questionnaire) { Quby::Compiler::Entities::Questionnaire.new("example") }
let(:builder) { QuestionnaireBuilder.new(questionnaire) }
let(:lookup_tables) { {} }
let(:builder) { QuestionnaireBuilder.new(questionnaire, lookup_tables: lookup_tables) }
it 'sets title' do
dsl { title 'Foo' }
......
......@@ -809,5 +809,17 @@ module Quby::Compiler::Services
expect(definition.errors.full_messages.first).to include('That tag isn\'t allowed here')
end
end
describe 'when using lookup tables' do
it 'can validate an externally referenced table' do
definition = Quby::Compiler::Entities::Definition.new(
key: 'test',
sourcecode: "title 'foo'; import_lookup_tree 'bar'",
path: 'fake definition test',
lookup_tables: {'bar' => ""}
)
expect(definition.valid?).to be true
end
end
end
end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment