wifi-wand 2.8.0 → 2.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 69ff4a48a042ef648c1cca4f2aca1722f5a56bfb8b4bd78ee6cc9f4ba732b9db
4
- data.tar.gz: 0e5c99698650885c01a08caa740dfc5a4c5d35a8a2b0ff5c0eda31ce9297cf80
3
+ metadata.gz: 3d5b1780753a271f9bc1d4da54530160de21c28760262fa959fd723589abbbdd
4
+ data.tar.gz: ee3094477cde57eed16ede10c2111b885986ee67340227284bb2882c45edd4c8
5
5
  SHA512:
6
- metadata.gz: a5c2067026a31c0e0b976d5d5c63f2680d7324838583060d70d50c9289d3f360ea4c11210ebb062803a680dffadb9996fad2a65c0027c7524318b6bc27942c45
7
- data.tar.gz: aeedfe2437d7f11cb8ad3dbde4cebc63ad518f72f5e4bd52106850e8c856364471ffc036a89f12755748fc95ed835a2965d4da832b470534f3e3ae3009349225
6
+ metadata.gz: d4d9cd6476fbc3bdb06c02d906c0bcf1cceb99b0cd39c3bc0b84287477bcbd45e945cdfaeee7fd195f88cde5e87ea8a9bfbb24e38b5c31f6cedf512eb55911f2
7
+ data.tar.gz: b7d7626c4370420f6b971d82189f8b70d17fdca4e3ed34aab762d555800605e690f5507bf1ee702c60b5ae87e5cd6754d4ce81af3c2880bcf6a1f55478009c2e
data/README.md CHANGED
@@ -28,7 +28,7 @@ output at the time of this writing:
28
28
  ```
29
29
  $ wifi-wand -h
30
30
 
31
- Command Line Switches: [wifi-wand version 2.8.0 at https://github.com/keithrbennett/wifiwand]
31
+ Command Line Switches: [wifi-wand version 2.9.0 at https://github.com/keithrbennett/wifiwand]
32
32
 
33
33
  -o {i,j,k,p,y} - outputs data in inspect, JSON, pretty JSON, puts, or YAML format when not in shell mode
34
34
  -p wifi_port_name - override automatic detection of port name with this name
@@ -52,12 +52,11 @@ of[f] - turns wifi off
52
52
  pa[ssword] network-name - password for preferred network-name
53
53
  pr[ef_nets] - preferred (not necessarily available) networks
54
54
  q[uit] - exits this program (interactive shell mode only) (see also 'x')
55
- r[m_pref_nets] network-name - removes network-name from the preferred networks list
56
- (can provide multiple names separated by spaces)
57
- ro[pen] - open resource ('ipc' (IP Chicken), 'ipw' (What is My IP), 'spe' (Speed Test), 'this' (wifi-wand Home Page))
55
+ r[m_pref_nets] network-name - removes network-name(s) from the preferred networks list
56
+ ro[pen] - open resource ('ipl' (IP Location), 'ipw' (What is My IP), 'spe' (Speed Test), 'this' (wifi-wand home page))
58
57
  t[ill] - returns when the desired Internet connection state is true. Options:
59
- 1) 'on'/:on, 'off'/:off, 'conn'/:conn, or 'disc'/:disc
60
- 2) wait interval, in seconds (optional, defaults to 0.5 seconds)
58
+ 1) 'on'/:on, 'off'/:off, 'conn'/:conn, or 'disc'/:disc
59
+ 2) wait interval, in seconds (optional, defaults to 0.5 seconds)
61
60
  w[ifion] - is the wifi on?
62
61
  x[it] - exits this program (interactive shell mode only) (see also 'q')
63
62
 
@@ -345,8 +344,8 @@ return this:
345
344
  `Rate limit exceeded. Subscribe to a paid plan to increase your usage limits`
346
345
 
347
346
  If this happens, the public IP information will be silently omitted from the
348
- information hash. In this case, the web site 'https://www.whatismyip.com' is
349
- recommended, and `ro ipw` on the command line or `ro 'ipw'` in the shell will
347
+ information hash. In this case, the web site 'https://www.iplocation.net/' is
348
+ recommended, and `ro ipl` on the command line or `ro 'ipl'` in the shell will
350
349
  open that page in your browser for you.
351
350
 
352
351
 
data/RELEASE_NOTES.md CHANGED
@@ -1,3 +1,12 @@
1
+ ## v2.9.0
2
+
3
+ * Add duration of command to verbose output.
4
+ * Add MAC address to info hash.
5
+ * Reduce ping timeout to 3 seconds for faster return for `info`, `ci` commands.
6
+ * Replace ipchicken.com link with iplocation.net link for 'ropen'; iplocation aggregates several info sources.
7
+ * Fix bug where if there were no duplicate network names, result was nil, because uniq! returns nil if no changes!!!
8
+ * Suppress error throw on ping error when not connected; it was printing useless output.
9
+
1
10
  ## v2.8.0
2
11
 
3
12
  * Substantial simplifications of model implementations of connected_to_internet?, available_network_names.
@@ -41,10 +41,10 @@ class CommandLineInterface
41
41
  end
42
42
 
43
43
  OPEN_RESOURCES = OpenResources.new([
44
- OpenResource.new('ipc', 'https://ipchicken.com/', 'IP Chicken'),
45
- OpenResource.new('ipw', 'https://www.whatismyip.com', 'What is My IP'),
46
- OpenResource.new('spe', 'http://speedtest.net/', 'Speed Test'),
47
- OpenResource.new('this', 'https://github.com/keithrbennett/wifiwand', 'wifi-wand Home Page'),
44
+ OpenResource.new('ipl', 'https://www.iplocation.net/', 'IP Location'),
45
+ OpenResource.new('ipw', 'https://www.whatismyip.com', 'What is My IP'),
46
+ OpenResource.new('spe', 'http://speedtest.net/', 'Speed Test'),
47
+ OpenResource.new('this', 'https://github.com/keithrbennett/wifiwand', 'wifi-wand home page'),
48
48
  ])
49
49
 
50
50
 
@@ -74,12 +74,11 @@ of[f] - turns wifi off
74
74
  pa[ssword] network-name - password for preferred network-name
75
75
  pr[ef_nets] - preferred (not necessarily available) networks
76
76
  q[uit] - exits this program (interactive shell mode only) (see also 'x')
77
- r[m_pref_nets] network-name - removes network-name from the preferred networks list
78
- (can provide multiple names separated by spaces)
77
+ r[m_pref_nets] network-name - removes network-name(s) from the preferred networks list
79
78
  ro[pen] - open resource (#{OPEN_RESOURCES.help_string})
80
79
  t[ill] - returns when the desired Internet connection state is true. Options:
81
- 1) 'on'/:on, 'off'/:off, 'conn'/:conn, or 'disc'/:disc
82
- 2) wait interval, in seconds (optional, defaults to 0.5 seconds)
80
+ 1) 'on'/:on, 'off'/:off, 'conn'/:conn, or 'disc'/:disc
81
+ 2) wait interval, in seconds (optional, defaults to 0.5 seconds)
83
82
  w[ifion] - is the wifi on?
84
83
  x[it] - exits this program (interactive shell mode only) (see also 'q')
85
84
 
@@ -59,9 +59,11 @@ class BaseModel
59
59
  puts command_attempt_as_string(command)
60
60
  end
61
61
 
62
+ start_time = Time.now
62
63
  output = `#{command} 2>&1` # join stderr with stdout
63
64
 
64
65
  if @verbose_mode
66
+ puts "Duration: #{'%.4f' % [Time.now - start_time]} seconds"
65
67
  puts command_result_as_string(output)
66
68
  end
67
69
 
@@ -77,28 +79,44 @@ class BaseModel
77
79
  # which is defined as being able to get a successful response
78
80
  # from google.com within 3 seconds..
79
81
  def connected_to_internet?
80
- test_site = 'https://www.google.com'
81
- url = URI.parse(test_site)
82
- success = true
83
82
 
84
- if @verbose_mode
85
- puts command_attempt_as_string("[Calling Net:HTTP.start(#{url.host})]")
83
+ # We test using ping first because that will allow us to fail faster
84
+ # if there is no network connection.
85
+ test_using_ping = -> do
86
+ run_os_command('ping -c 1 -t 3 google.com', false)
87
+ $?.exitstatus == 0
86
88
  end
87
89
 
88
- begin
89
- Net::HTTP.start(url.host) do |http|
90
- http.read_timeout = 3 # seconds
91
- http.get('.')
90
+
91
+ test_using_http_get = -> do
92
+ test_site = 'https://www.google.com'
93
+ url = URI.parse(test_site)
94
+ success = true
95
+
96
+ if @verbose_mode
97
+ puts command_attempt_as_string("[Calling Net:HTTP.start(#{url.host})]")
92
98
  end
93
- rescue
94
- success = false
95
- end
96
99
 
97
- if @verbose_mode
98
- puts command_result_as_string("#{success}\n")
100
+ start_time = Time.now
101
+
102
+ begin
103
+ Net::HTTP.start(url.host) do |http|
104
+ http.read_timeout = 3 # seconds
105
+ http.get('.')
106
+ end
107
+ rescue
108
+ success = false
109
+ end
110
+
111
+ if @verbose_mode
112
+ puts "Duration: #{'%.4f' % [Time.now - start_time]} seconds"
113
+ puts command_result_as_string("#{success}\n")
114
+ end
115
+
116
+ success
99
117
  end
100
118
 
101
- success
119
+ test_using_ping.() && test_using_http_get.()
102
120
  end
103
121
 
104
122
 
@@ -225,6 +243,13 @@ class BaseModel
225
243
  end
226
244
 
227
245
 
246
+ def random_mac_address
247
+ bytes = Array.new(6) { rand(256) }
248
+ chars = bytes.map { |b| "%02x" % b }
249
+ chars.join(':')
250
+ end
251
+
252
+
228
253
  def wifi_port
229
254
  @wifi_port ||= detect_wifi_port
230
255
  end
@@ -107,6 +107,7 @@ class MacOsModel < BaseModel
107
107
  output.map! { |s| s.gsub(/<\/?string>/, '') }
108
108
  output.sort! { |s1, s2| s1.casecmp(s2) } # sort alphabetically, case insensitively
109
109
  output.uniq!
110
+ output
110
111
  end
111
112
 
112
113
 
@@ -222,6 +223,17 @@ class MacOsModel < BaseModel
222
223
  end
223
224
 
224
225
 
226
+ # TODO: Add capability to change the MAC address using a command in the form of:
227
+ # sudo ifconfig en0 ether aa:bb:cc:dd:ee:ff
228
+ # However, the MAC address will be set to the real hardware address on restart.
229
+ # One way to implement this is to have an optional address argument,
230
+ # then this method returns the current address if none is provided,
231
+ # but sets to the specified address if it is.
232
+ def mac_address
233
+ run_os_command("ifconfig #{wifi_port} | awk '/ether/{print $2}'")
234
+ end
235
+
236
+
225
237
  # Returns some useful wifi-related information.
226
238
  def wifi_info
227
239
 
@@ -237,6 +249,7 @@ class MacOsModel < BaseModel
237
249
  'port' => wifi_port,
238
250
  'network' => connected_network_name,
239
251
  'ip_address' => ip_address,
252
+ 'mac_address' => mac_address,
240
253
  'nameservers' => nameservers_using_scutil,
241
254
  'timestamp' => Time.now,
242
255
  }
@@ -1,5 +1,5 @@
1
1
  module WifiWand
2
2
 
3
- VERSION = '2.8.0'
3
+ VERSION = '2.9.0'
4
4
 
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wifi-wand
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.8.0
4
+ version: 2.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Keith Bennett
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-03-26 00:00:00.000000000 Z
11
+ date: 2018-04-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler