lib/polytrix/core/implementor.rb in polytrix-0.0.1 vs lib/polytrix/core/implementor.rb in polytrix-0.1.0.pre

- old
+ new

@@ -1,17 +1,45 @@ require 'hashie/dash' require 'hashie/extensions/coercion' module Polytrix + class FeatureNotImplementedError < StandardError + def initialize(feature) + super "Feature #{feature} is not implemented" + end + end class Implementor < Hashie::Dash + include Polytrix::Logger + include Polytrix::Core::FileSystemHelper include Hashie::Extensions::Coercion + include Polytrix::Executor property :name - property :basedir + property :basedir, required: true property :language coerce_key :basedir, Pathname def initialize(data) - data[:basedir] ||= "sdks/#{data[:name]}" + data = Hashie::Mash.new data + data[:name] ||= File.basename data[:basedir] + data[:basedir] = File.absolute_path(data[:basedir]) super(data) end + + def bootstrap + execute('./scripts/bootstrap', cwd: basedir, prefix: name) + rescue Errno::ENOENT + logger.warn "Skipping bootstrapping for #{name}, no script/bootstrap exists" + end + + def build_challenge(challenge_data) + challenge_data[:source_file] ||= find_file basedir, challenge_data[:name] + challenge_data[:basedir] ||= basedir + challenge_data[:source_file] = relativize(challenge_data[:source_file], challenge_data[:basedir]) + challenge_data[:implementor] ||= self + challenge_data[:suite] ||= '' + fail FeatureNotImplementedError, "#{name} is not setup" unless File.directory? challenge_data[:basedir] + Challenge.new challenge_data + rescue Polytrix::Core::FileSystemHelper::FileNotFound + raise FeatureNotImplementedError, challenge_data[:name] + end end -end \ No newline at end of file +end