hets.rb revision 0772cf7b22adf46dbab68e829d6a2cd8e8d1bc2a
bcb4e51a409d94ae670de96afb8483a4f7855294Stephan Boschmodule Hets
548f87789cf9865572b7b86f7be5a9bbfa132f3fTimo Sirainen class HetsError < Exception; end
08d6658a4e2ec8104cd1307f6baa75fdb07a24f8Mark Washenberger
548f87789cf9865572b7b86f7be5a9bbfa132f3fTimo Sirainen class Config
1b04762685272a53643ac2179939537a44c7c044Timo Sirainen attr_reader :path, :allowed_extensions
cf0ad1a0bddb0787f3d7b408a96d721a8b2a98a3Timo Sirainen
cf0ad1a0bddb0787f3d7b408a96d721a8b2a98a3Timo Sirainen def initialize
dfa2201c6ac8ddb2d2798dee15662cfe774e644eMartti Rannanjärvi yaml = YAML.load_file(File.join(Rails.root, 'config', 'hets.yml'))
1b04762685272a53643ac2179939537a44c7c044Timo Sirainen
8846e6eed6177a39b662f4f1ebf9b84ad1f0b7ecTimo Sirainen @path = first_which_exists yaml['hets_path']
8846e6eed6177a39b662f4f1ebf9b84ad1f0b7ecTimo Sirainen @allowed_extensions = yaml.delete 'allowed_extensions'
548f87789cf9865572b7b86f7be5a9bbfa132f3fTimo Sirainen
c13ec2148cc43cb36f61e781f2514705f563cf47Timo Sirainen raise ArgumentError.new('Wrong hets path.') unless @path
1b04762685272a53643ac2179939537a44c7c044Timo Sirainen
cf0ad1a0bddb0787f3d7b408a96d721a8b2a98a3Timo Sirainen yaml.each_pair do |key, value|
a9ba65037107e370c126d2b7e8c6e3f2a4aafd23Timo Sirainen ENV[key.upcase] = first_which_exists value if key != 'hets_path'
00f5efa3156ab6a0b4f21e8c703d0eb816cf3091Timo Sirainen end
01758d8aaa05940397c8210af52d7f45a5b676aeTimo Sirainen end
8846e6eed6177a39b662f4f1ebf9b84ad1f0b7ecTimo Sirainen
bd5cf4556e8a5ffd0b40dbbf404f25a2e840b2d2Josef 'Jeff' Sipek private
1b04762685272a53643ac2179939537a44c7c044Timo Sirainen
548f87789cf9865572b7b86f7be5a9bbfa132f3fTimo Sirainen def first_which_exists(array)
4dbe08e1f7f1271299ada9338ff5015367efd0b7Timo Sirainen array.each do |path|
4dbe08e1f7f1271299ada9338ff5015367efd0b7Timo Sirainen path = File.expand_path path
548f87789cf9865572b7b86f7be5a9bbfa132f3fTimo Sirainen return path if File.exists? path
548f87789cf9865572b7b86f7be5a9bbfa132f3fTimo Sirainen end
d482079eb385cd071bbc9637cacee225e4aff968Timo Sirainen
cf0ad1a0bddb0787f3d7b408a96d721a8b2a98a3Timo Sirainen nil
8846e6eed6177a39b662f4f1ebf9b84ad1f0b7ecTimo Sirainen end
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen end
cf0ad1a0bddb0787f3d7b408a96d721a8b2a98a3Timo Sirainen
548f87789cf9865572b7b86f7be5a9bbfa132f3fTimo Sirainen # Runs hets with input_file and returns XML output file path.
6f2e601fa36133320aa88258106be46a175a0e53Timo Sirainen def self.parse(input_file)
6f2e601fa36133320aa88258106be46a175a0e53Timo Sirainen config = Config.new
6f2e601fa36133320aa88258106be46a175a0e53Timo Sirainen
6f2e601fa36133320aa88258106be46a175a0e53Timo Sirainen status = `#{config.path} -o sym.xml -v2 #{input_file} 2>&1`
6f2e601fa36133320aa88258106be46a175a0e53Timo Sirainen status = status.split("\n").last
6f2e601fa36133320aa88258106be46a175a0e53Timo Sirainen
6f2e601fa36133320aa88258106be46a175a0e53Timo Sirainen if $?.exitstatus != 0 or status.starts_with? '*** Error'
6f2e601fa36133320aa88258106be46a175a0e53Timo Sirainen raise HetsError.new(status)
6f2e601fa36133320aa88258106be46a175a0e53Timo Sirainen end
6f2e601fa36133320aa88258106be46a175a0e53Timo Sirainen
8f1d14e3ada93a6d6ee64f73c6e6ae2364d8eba1Timo Sirainen status.split(': ').last
8846e6eed6177a39b662f4f1ebf9b84ad1f0b7ecTimo Sirainen end
8846e6eed6177a39b662f4f1ebf9b84ad1f0b7ecTimo Sirainenend
8846e6eed6177a39b662f4f1ebf9b84ad1f0b7ecTimo Sirainen