hets.rb revision c34ca181e48d016718223de38106fdfbe8ffc65a
58721b9d3a8cd6a624269ddf507f80af4417c9bdhenning muellermodule Hets
58721b9d3a8cd6a624269ddf507f80af4417c9bdhenning mueller class HetsError < Exception; end
58721b9d3a8cd6a624269ddf507f80af4417c9bdhenning mueller
58721b9d3a8cd6a624269ddf507f80af4417c9bdhenning mueller class Config
2b056a2f5c950d0b5aec8f3f08d1050c408d73a2henning mueller attr_reader :path
58721b9d3a8cd6a624269ddf507f80af4417c9bdhenning mueller
58721b9d3a8cd6a624269ddf507f80af4417c9bdhenning mueller def initialize
58721b9d3a8cd6a624269ddf507f80af4417c9bdhenning mueller yaml = YAML.load_file(File.join(Rails.root, 'config', 'hets.yml'))
58721b9d3a8cd6a624269ddf507f80af4417c9bdhenning mueller
58721b9d3a8cd6a624269ddf507f80af4417c9bdhenning mueller @path = first_which_exists yaml['hets_path']
58721b9d3a8cd6a624269ddf507f80af4417c9bdhenning mueller
e062724b7bdbbe8c1ddfbc7f3bb5bdb6e129d82cDaniel Vale raise HetsError, 'Could not find hets' unless @path
e062724b7bdbbe8c1ddfbc7f3bb5bdb6e129d82cDaniel Vale
e062724b7bdbbe8c1ddfbc7f3bb5bdb6e129d82cDaniel Vale version = `#{@path} -V`
e062724b7bdbbe8c1ddfbc7f3bb5bdb6e129d82cDaniel Vale raise ArgumentError, "Your version of hets is too old" if version.include?("2011")
58721b9d3a8cd6a624269ddf507f80af4417c9bdhenning mueller
58721b9d3a8cd6a624269ddf507f80af4417c9bdhenning mueller yaml.each_pair do |key, value|
58721b9d3a8cd6a624269ddf507f80af4417c9bdhenning mueller ENV[key.upcase] = first_which_exists value if key != 'hets_path'
58721b9d3a8cd6a624269ddf507f80af4417c9bdhenning mueller end
58721b9d3a8cd6a624269ddf507f80af4417c9bdhenning mueller end
58721b9d3a8cd6a624269ddf507f80af4417c9bdhenning mueller
58721b9d3a8cd6a624269ddf507f80af4417c9bdhenning mueller private
58721b9d3a8cd6a624269ddf507f80af4417c9bdhenning mueller
58721b9d3a8cd6a624269ddf507f80af4417c9bdhenning mueller def first_which_exists(array)
58721b9d3a8cd6a624269ddf507f80af4417c9bdhenning mueller array.each do |path|
58721b9d3a8cd6a624269ddf507f80af4417c9bdhenning mueller path = File.expand_path path
58721b9d3a8cd6a624269ddf507f80af4417c9bdhenning mueller return path if File.exists? path
58721b9d3a8cd6a624269ddf507f80af4417c9bdhenning mueller end
58721b9d3a8cd6a624269ddf507f80af4417c9bdhenning mueller
58721b9d3a8cd6a624269ddf507f80af4417c9bdhenning mueller nil
58721b9d3a8cd6a624269ddf507f80af4417c9bdhenning mueller end
58721b9d3a8cd6a624269ddf507f80af4417c9bdhenning mueller end
58721b9d3a8cd6a624269ddf507f80af4417c9bdhenning mueller
58721b9d3a8cd6a624269ddf507f80af4417c9bdhenning mueller # Runs hets with input_file and returns XML output file path.
705933deb08bc4269e8c08d50143af3cb5c1c670henning mueller def self.parse(input_file)
58721b9d3a8cd6a624269ddf507f80af4417c9bdhenning mueller config = Config.new
705933deb08bc4269e8c08d50143af3cb5c1c670henning mueller Rails.logger.debug "#{config.path} -o sym.xml -v2 '#{input_file}'"
705933deb08bc4269e8c08d50143af3cb5c1c670henning mueller status = `#{config.path} -o xml -v2 '#{input_file}' 2>&1`
705933deb08bc4269e8c08d50143af3cb5c1c670henning mueller status = status.split("\n").last
705933deb08bc4269e8c08d50143af3cb5c1c670henning mueller Rails.logger.debug status
705933deb08bc4269e8c08d50143af3cb5c1c670henning mueller if $?.exitstatus != 0 or status.starts_with? '*** Error'
705933deb08bc4269e8c08d50143af3cb5c1c670henning mueller raise HetsError.new(status)
705933deb08bc4269e8c08d50143af3cb5c1c670henning mueller end
574a02d837d442144fe066284dfed20e43a42053Julian Kornberger
574a02d837d442144fe066284dfed20e43a42053Julian Kornberger status.split(': ').last
7ea9649883e1bbe8f2582db1a3c66af8b7206056henning mueller end
705933deb08bc4269e8c08d50143af3cb5c1c670henning muellerend
c34ca181e48d016718223de38106fdfbe8ffc65aDaniel Couto Vale