class Quby::Compiler::Instance
Attributes
lookup_tables[R]
Public Class Methods
new(lookup_tables:)
click to toggle source
# File lib/quby/compiler/instance.rb, line 6 def initialize(lookup_tables:) @lookup_tables = lookup_tables end
Public Instance Methods
compile(key:, sourcecode:, seeds:, path: nil, last_update: nil, &block)
click to toggle source
# File lib/quby/compiler/instance.rb, line 10 def compile(key:, sourcecode:, seeds:, path: nil, last_update: nil, &block) if block # defined in block for tests questionnaire = DSL.build(key, path: path, &block) else # sourcecode given as string tempfile = Tempfile.new([key, '.rb']) questionnaire = Entities::Questionnaire.new(key, last_update: last_update) Thread.current["quby-questionnaire-loading"] = Quby::Compiler::DSL::QuestionnaireBuilder.new(questionnaire, lookup_tables: lookup_tables) tempfile.puts "Thread.current['quby-questionnaire-loading'].instance_eval do" tempfile.puts sourcecode tempfile.puts "end" tempfile.flush load tempfile.path Thread.current['quby-questionnaire-loading'] = nil questionnaire.callback_after_dsl_enhance_on_questions end { outputs: { definition: Output.new( key: :definition, filename: "definition.rb", content: sourcecode, ), roqua: Output.new( key: :roqua, filename: "roqua.json", content: Outputs::RoquaSerializer.new(questionnaire).to_json, ), seeds: Output.new( key: :seeds, filename: "seeds.yml", content: YAML.dump(Outputs::SeedSerializer.new(questionnaire, seeds).generate), ), quby_frontend_v1: Output.new( key: :quby_frontend_v1, filename: "quby-frontend-v1.json", content: Outputs::QubyFrontendV1Serializer.new(questionnaire).to_json, ), quby_frontend_v2: Output.new( key: :quby_frontend_v2, filename: "quby-frontend-v2.json", content: Outputs::QubyFrontendV2Serializer.new(questionnaire).to_json, ), }, } ensure # We can only close and remove the file once serializers have finished. # The serializers need the file in order to grab the source for score blocks tempfile&.close tempfile&.unlink end
validate(key:, sourcecode:)
click to toggle source
# File lib/quby/compiler/instance.rb, line 65 def validate(key:, sourcecode:) definition = Entities::Definition.new(key: key, sourcecode: sourcecode, path: "validating '#{key}'", lookup_tables: lookup_tables) definition.valid? definition end