class Pandata::ArgvParser
Parses command-line input.
Public Class Methods
parse(argv)
click to toggle source
Parses an ARGV array for options. @param argv [Array] an ARGV array @return [Hash]
- :opts [OptionParser] - :user_id [String] - :output_file [String] - :data_to_get [Array] - :get_all_data [Boolean] - :help [Boolean] - :version [Boolean] - :return_as_json [Boolean]
# File lib/pandata/argv_parser.rb, line 21 def self.parse(argv) options = { data_to_get: [] } get_all_data = false options[:opts] = OptionParser.new do |opts| opts.banner = 'Pandata: A tool for downloading Pandora.com data' opts.define_head 'Usage: pandata <email|webname> [options]' opts.separator <<-END Examples: pandata john@example.com --liked_tracks pandata my_webname --all -o my_pandora_data.txt pandata my_webname -lL --json Options: END opts.on('--all', 'Get all data') do get_all_data = true end opts.on('-F', '--followers', "Get all user's followers") do options[:data_to_get] << :followers end opts.on('-f', '--following', 'Get all users being followed by user') do options[:data_to_get] << :following end opts.on('-j', '--json', 'Return the results as JSON') do options[:return_as_json] = true end opts.on('-L', '--liked_artists', 'Get all liked artists') do options[:data_to_get] << :liked_artists end opts.on('-l', '--liked_tracks', 'Get all liked tracks') do options[:data_to_get] << :liked_tracks end opts.on('-m', '--liked_albums', 'Get all liked albums') do options[:data_to_get] << :liked_albums end opts.on('-n', '--liked_stations', 'Get all liked stations') do options[:data_to_get] << :liked_stations end opts.on('-o', '--output_file PATH', 'File to output the data into') do |path| options[:output_file] = path end opts.on_tail("-h", "--help", "Show this message") do options[:help] = true end opts.on_tail("--version", "Show version") do options[:version] = true end end options[:opts].parse(argv) # User ID is the first argument. options[:user_id] = argv[0] if get_all_data options[:data_to_get] = [ :liked_tracks, :liked_artists, :liked_albums, :liked_stations, :followers, :following ] else # Remove any duplicates caused by supplying flags multiple times. options[:data_to_get].uniq! end options end