Skip to content

Instantly share code, notes, and snippets.

@maddiesch
Created May 17, 2016 16:56
Show Gist options
  • Save maddiesch/43f3e7f5f1af220c477b44d772c0c755 to your computer and use it in GitHub Desktop.
Save maddiesch/43f3e7f5f1af220c477b44d772c0c755 to your computer and use it in GitHub Desktop.
Print valid query options from a URL
#!/usr/bin/env ruby
##
# $ clean-url "http://services.pco.dev/songs?arrangement_name=&author=&bpm_max=&bpm_min=&commit=Apply+Filter&filtered_ministry_path=%2F13%2F14%2F18%2F&key_name=&lyrics=&meter=&music_key=&music_key_end=&music_key_end_major=Major&music_key_major=Major&selection_arrangement_field_15=true&selection_song_option_72=true&song_name=&themes=&utf8=%E2%9C%93"
#
# ******************************************************
# * commit => Apply+Filter *
# * filtered_ministry_path => /13/14/18/ *
# * music_key_end_major => Major *
# * music_key_major => Major *
# * selection_arrangement_field_15 => true *
# * selection_song_option_72 => true *
# ******************************************************
#
##
require 'uri'
url = ARGV[0]
fail 'No URL' if url == nil
uri = URI.parse(url)
results = {}.tap do |hash|
uri.query.split('&').each do |q|
sub = q.split('=')
next unless sub.count == 2
next if sub.first == 'utf8'
hash[URI.unescape(sub.first)] = URI.unescape(sub.last)
end
end
max_key = results.keys.max_by(&:length).length
max_val = results.values.max_by(&:length).length
padding = 12
puts "*" * (max_key + max_val + padding)
results.sort.each do |k, v|
puts "* #{k.rjust(max_key)} => #{v.ljust(max_val)} *"
end
puts "*" * (max_key + max_val + padding)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment