Class: Pandata::ArgvParser

Inherits:
Object
  • Object
show all
Defined in:
lib/pandata/argv_parser.rb

Overview

Parses command-line input.

Class Method Summary collapse

Class Method Details

.parse(argv) ⇒ Hash

Parses an ARGV array for options.

Parameters:

  • argv (Array)

    an ARGV array

Returns:

  • (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]



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# 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 "\nExamples:\n  pandata [email protected] --liked_tracks\n  pandata my_webname --all -o my_pandora_data.txt\n  pandata my_webname -lL --json\n\nOptions:\n    END\n\n    opts.on('--all', 'Get all data') do\n      get_all_data = true\n    end\n\n    opts.on('-F', '--followers', \"Get all user's followers\") do\n      options[:data_to_get] << :followers\n    end\n\n    opts.on('-f', '--following', 'Get all users being followed by user') do\n      options[:data_to_get] << :following\n    end\n\n    opts.on('-j', '--json', 'Return the results as JSON') do\n      options[:return_as_json] = true\n    end\n\n    opts.on('-L', '--liked_artists', 'Get all liked artists') do\n      options[:data_to_get] << :liked_artists\n    end\n\n    opts.on('-l', '--liked_tracks', 'Get all liked tracks') do\n      options[:data_to_get] << :liked_tracks\n    end\n\n    opts.on('-m', '--liked_albums', 'Get all liked albums') do\n      options[:data_to_get] << :liked_albums\n    end\n\n    opts.on('-n', '--liked_stations', 'Get all liked stations') do\n      options[:data_to_get] << :liked_stations\n    end\n\n    opts.on('-o', '--output_file PATH', 'File to output the data into') do |path|\n      options[:output_file] = path\n    end\n\n    opts.on_tail(\"-h\", \"--help\", \"Show this message\") do\n      options[:help] = true\n    end\n\n    opts.on_tail(\"--version\", \"Show version\") do\n      options[:version] = true\n    end\n  end\n\n  options[:opts].parse(argv)\n\n  # User ID is the first argument.\n  options[:user_id] = argv[0]\n\n  if get_all_data\n    options[:data_to_get] = [\n      :liked_tracks,\n      :liked_artists,\n      :liked_albums,\n      :liked_stations,\n      :followers,\n      :following\n    ]\n  else\n    # Remove any duplicates caused by supplying flags multiple times.\n    options[:data_to_get].uniq!\n  end\n\n  options\nend\n"