whereisthis 1.2.0 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/whereisthis.rb +37 -14
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 06b23ce989679b47017d3bd80a1e5ce0b76ec038
4
- data.tar.gz: f7a8b9ac2780d7f2459e97b964bf0bb1eb7d2a1c
3
+ metadata.gz: c82ef687409c12636a29e52813bafd64d0d02da8
4
+ data.tar.gz: 4cb44b41ad65db1f057e2451c104e6ce0ed053a4
5
5
  SHA512:
6
- metadata.gz: f58141b4fb3a07101c55d8c7ccc7e1217107259191db3a6f37556f0c27364781908bea564089f6f793ef257e30f1ce8d85de23bc82cbe8c53e96f6d119206241
7
- data.tar.gz: 2317120bb28439c19f833956515f65463e1541d4d2a0ca101e205ec6e1e0e64b3e605e23871f6ecdc2020c70a798d95b516d6445fe590f92ad936303a4e5374b
6
+ metadata.gz: bdb6617c56369e350613c11d5ab73b57a8b3258b0725c5a65503006021fe6ea602a492945e0ca435faea0cb1105bce7b8e1ea09572f597dad8692b8511a82454
7
+ data.tar.gz: b64303c8cb62f00a3131324ebea04bed9d07e024ae9219e52c9a66ed25f17e5ab5f731bc0e110e201235bc269d3694e32bc6cd71a23e6a0d010da65700decc75
@@ -1,4 +1,14 @@
1
- require 'pry'
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # Whereisthis
4
+ #
5
+ # This is a simple command-line application to help determine
6
+ # the location information from a given ip address or url.
7
+ #
8
+ # Author:: Kent 'picat' Gruber
9
+ # Copyright:: Copyright (c) 2016 Kent Gruber
10
+ # License:: MIT
11
+
2
12
  require 'socket'
3
13
  require 'colorize'
4
14
  require 'ipaddress'
@@ -6,12 +16,26 @@ require 'trollop'
6
16
  require 'unirest'
7
17
 
8
18
  module Whereisthis
9
- VERSION = "1.2.0"
19
+
20
+ # Specify version number.
21
+ VERSION = "1.3.0"
10
22
 
23
+ # .findout! is the main workhorse of this application. It starts
24
+ # the option parsing; and performs the main logic for basically
25
+ # everything.
26
+ #
27
+ # == Example
28
+ #
29
+ # # Typical use:
30
+ # require 'whereisthis'
31
+ # ARGV[0] = "8.8.8.8"
32
+ # Whereisthis.findout!
33
+ #
11
34
  def self.findout!
12
- # Default to a help menu
35
+ # Default to a help menu if no argument is given.
13
36
  foo = ARGV[0] || ARGV[0] = '-h'
14
-
37
+
38
+ # Parse options into a hash.
15
39
  opts = Trollop::options do
16
40
  banner "whereisthis?".bold.red + " Find out where that ip or website is.".bold
17
41
  version "#{Whereisthis::VERSION}"
@@ -25,12 +49,14 @@ module Whereisthis
25
49
  opt :ip, "Specify the ip address to lookup", :type => :string
26
50
  opt :website, "Specify the website url to lookup", :type => :string
27
51
  end
28
-
52
+
53
+ # If an ip is specified with -i or --ip at the command-line.
29
54
  if opts.ip
30
55
  unless IPAddress.valid? opts.ip
31
56
  puts "Unable to verify '#{opts.ip}' is a valid ip address."
32
57
  exit 1
33
58
  end
59
+ # If an website is specified with -w or --website at the command-line.
34
60
  elsif opts.website
35
61
  begin
36
62
  opts[:ip] = IPSocket::getaddress(opts.website)
@@ -38,6 +64,7 @@ module Whereisthis
38
64
  puts "Unable to resolve #{opts.website} to an ip address. Is it legit?"
39
65
  exit 1
40
66
  end
67
+ # If the first argument is simply an IP address or website.
41
68
  elsif ARGV[0]
42
69
  if IPAddress.valid? ARGV[0]
43
70
  opts[:ip] = ARGV[0]
@@ -51,17 +78,13 @@ module Whereisthis
51
78
  end
52
79
  end
53
80
 
54
- unless opts.ip or opts.website
55
- puts "Need to specify an ip address or website to figure out what it is!"
56
- exit 1
57
- end
58
-
81
+ # A container of data for our information.
59
82
  Struct.new("WhereIsInfo", :ip, :hostname, :city, :region, :country, :gps, :org, :postal )
60
83
 
61
84
  # Get response from web service.
62
85
  data = Unirest.get('http://ipinfo.io/' + opts.ip).body
63
86
  # Change empty values to false.
64
- data.each { |k,v| v.empty? ? data[k] = false : data[k] = v }
87
+ data.each { |k,v| v.nil? || v.empty? ? data[k] = false : data[k] = v }
65
88
 
66
89
  whereisinfo = Struct::WhereIsInfo.new
67
90
 
@@ -75,12 +98,13 @@ module Whereisthis
75
98
  whereisinfo.org = data["org"] || "Not found."
76
99
  whereisinfo.postal = data["postal"] || "Not found."
77
100
 
78
- # keep track of the filters & delete the given givens
101
+ # Keep track of the filters & delete the given givens,
102
+ # because we don't need to keep track of them.
79
103
  filter = Hash[opts.keys.keep_if { |k| k.to_s =~ /_given\b/ } .collect { |i| [i, true] } ]
80
104
  filter.delete_if { |k,v| k.to_s == "ip_given" }
81
105
  filter.delete_if { |k,v| k.to_s == "website_given" }
82
106
 
83
- # manage output
107
+ # Manage output with or without filters/ fancy spaces.
84
108
  if filter.count > 0
85
109
  puts "ip: " + whereisinfo.ip if filter[:ip_given]
86
110
  puts "hostname: " + whereisinfo.hostname if filter[:hostname_given]
@@ -101,7 +125,6 @@ module Whereisthis
101
125
  puts " org: " + whereisinfo.org
102
126
  puts " postal: " + whereisinfo.postal
103
127
  end
104
-
105
128
  end
106
129
 
107
130
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: whereisthis
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kent Gruber
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-11-20 00:00:00.000000000 Z
11
+ date: 2016-11-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ipaddress