diff options
Diffstat (limited to 'exts/importer_base.rb')
-rw-r--r-- | exts/importer_base.rb | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/exts/importer_base.rb b/exts/importer_base.rb new file mode 100644 index 0000000..98eb05c --- /dev/null +++ b/exts/importer_base.rb @@ -0,0 +1,86 @@ +#!/usr/bin/env ruby +# +# Base class for importers written in Ruby +# +# Copyright (C) 2014 Codethink Limited +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +require 'json' +require 'logger' +require 'optparse' +require 'yaml' + +module Importer + class Base + private + + def create_option_parser(banner, description) + opts = OptionParser.new + + opts.banner = banner + + opts.on('-?', '--help', 'print this help') do + puts opts + print "\n", description + exit 255 + end + end + + def log + @logger ||= create_logger + end + + def error(message) + log.error(message) + STDERR.puts(message) + end + + def local_data_path(file) + # Return the path to 'file' relative to the currently running program. + # Used as a simple mechanism of finding local data files. + script_dir = File.dirname(__FILE__) + File.join(script_dir, '..', 'data', file) + end + + def write_lorry(file, lorry) + format_options = { :indent => ' ' } + file.puts(JSON.pretty_generate(lorry, format_options)) + end + + def write_morph(file, morph) + file.write(YAML.dump(morph)) + end + + def write_dependencies(file, dependencies) + format_options = { :indent => ' ' } + file.puts(JSON.pretty_generate(dependencies, format_options)) + end + + def create_logger + # Use the logger that was passed in from the 'main' import process, if + # detected. + log_fd = ENV['MORPH_LOG_FD'] + if log_fd + log_stream = IO.new(Integer(log_fd), 'w') + logger = Logger.new(log_stream) + logger.level = Logger::DEBUG + logger.formatter = proc { |severity, datetime, progname, msg| "#{msg}\n" } + else + logger = Logger.new('/dev/null') + end + logger + end + end +end |