class CsvToFog::App

Public Class Methods

new(file_path, key, unparsed_mappings) click to toggle source
# File lib/csv-to-fog/app.rb, line 34
def initialize(file_path, key, unparsed_mappings)
  @file_path = file_path
  @key = key
  @mappings = parse_mappings(unparsed_mappings)
end
run(args) click to toggle source
# File lib/csv-to-fog/app.rb, line 6
def self.run(args)
  key = nil
  unparsed_mappings = []
  args = OptionParser.new do |opts|
    opts.banner = "csv-to-fog {options} path/to/file.csv"
    opts.separator ""
    opts.separator "Options are ..."

    opts.on_tail("-h", "--help", "-H", "Display this help message.") do
      puts opts
      exit
    end

    opts.on '--key="Student #"', '-k',
      'CSV Header Key to become the Fog key',
      lambda { |value| key = value }
    opts.on '--map="aws_access_key_id:Master Key"', '-m',
    'Map "Fog key:CSV Header Key"',
      lambda { |value| unparsed_mappings << value }
    opts.environment('RAKEOPT')
  end.parse(args)

  file_path = args.shift
  app = self.new(file_path, key, unparsed_mappings)
  app.load_file_and_validate!
  app.run
end

Public Instance Methods

load_file_and_validate!() click to toggle source
# File lib/csv-to-fog/app.rb, line 52
def load_file_and_validate!
  errors = false
  unless @key
    $stderr.puts "--key is required"
    errors = true
  end
  if @mappings.size == 0
    $stderr.puts "--map is required"
    errors = true
  end
  if !@file_path
    $stderr.puts "Must pass path to CSV file"
    errors = true
  elsif !File.exists?(@file_path)
    $stderr.puts "File #{@file_path} doesn't exist"
    errors = true
  end
  exit 1 if errors

  @rows = []
  CSV.foreach(@file_path, headers: true) do |row|
    @rows << row
  end
end
parse_mappings(unparsed_mappings) click to toggle source
# File lib/csv-to-fog/app.rb, line 40
def parse_mappings(unparsed_mappings)
  unparsed_mappings.inject([]) do |mappings, mapping|
    fog, csv = mapping.split(":")
    if !csv || csv == ""
      $stderr.puts "Skipping --map \"#{mapping}\""
    else
      mappings << [fog, csv]
    end
    mappings
  end
end
run() click to toggle source
# File lib/csv-to-fog/app.rb, line 77
def run
  @fog_file = {}
  @rows.each do |row|
    fog_key = row[@key].to_sym
    credentials = @fog_file[fog_key] = {}
    @mappings.each do |fog, csv|
      credentials[fog.to_sym] = row[csv]
    end
  end
  puts @fog_file.to_yaml
end