class G2R::Util::CommandLineParser

Public Class Methods

new() click to toggle source
# File lib/graph2relational/util-commandline-parser.rb, line 6
def initialize()
  @valid = true
end

Public Instance Methods

parse() click to toggle source
# File lib/graph2relational/util-commandline-parser.rb, line 10
def parse()
  # default values
  options = {
    :input => nil, :output => nil,
    :additional_base_columns => [], :additional_relationship_columns => [],
    :exclude_labels => [], :exclude_relationships => []
  }

  # display help if no args
  ARGV << '-h' if ARGV.empty?

  # do parsing
  OptionParser.new do |opts|
      opts.banner = "Usage: graph2relational -i <neo4j_connection_url> -o <rdbms_connection_url> [optional_arguments]"

      # input file
      opts.on("-i CONNECTION", "--input CONNECTION", "Neo4J connection URI from where the schema and data will be geberated") do |input_connection|
          options[:input] = input_connection
      end

      # output dir
      opts.on("-o CONNECTION", "--output CONNECTION", "RDBMS connection URI to where the schema and data will be persisted") do |output_connection|
        options[:output] = output_connection
      end

      # base columns to always be created
      opts.on("--additional-base-columns COLUMNS", "Base table columns (separated by comma) that should always be created, even if they are not found in Neo4J schema") do |columns|
        options[:additional_base_columns] = columns.split(",").map{|column| column.strip}
      end

      opts.on("--additional-relationships-columns COLUMNS", "Relationship table columns (separated by comma) that should always be created, even if they are not found in Neo4J schema") do |columns|
        options[:additional_relationship_columns] = columns.split(",").map{|column| column.strip}
      end

      # exclusion
      opts.on("--exclude-labels EXCLUSION", "Neo4J labels (separated by comma) to exclude from the conversion") do |exclude|
        options[:exclude_labels] = exclude.split(",").map{|exclude| exclude.strip}
      end

      opts.on("--exclude-relationships EXCLUSION", "Neo4J relationships (separated by comma) to exclude from the conversion") do |exclude|
        options[:exclude_relationships] = exclude.split(",").map{|exclude| exclude.strip}
      end

      # help
      opts.on_tail("-h", "--help", "Help message") do
        puts opts
        exit
      end
  end.parse!

  # check mandatory args
  if options[:input].nil?
    puts "Missing parameter: specify Neo4J connection URI using -i <connection> parameter"
    exit
  end
  if options[:output].nil?
    puts "Missing parameter: specify RDBMS connection URI using -o <connection> parameter"
    exit
  end

  return options
end