wifi-wand 2.12.0 → 2.13.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3f241f14959069b1206de6183dc072605c5af1c65b1dbfc0f855366194bc3c68
4
- data.tar.gz: 8bd1250fe4fc050b5810d1c67bd279ce6022974fc9facb236088057966712ec6
3
+ metadata.gz: e0669f48a732c950d64056cfdc853ac83b6afb31e35c30c514d026d05f757f80
4
+ data.tar.gz: 6117a6a8693b9d9730a159d049a2c442eb53cac6c92f2107c4d257ec7685513c
5
5
  SHA512:
6
- metadata.gz: 3c3e3b3a1da083d30ba3289046d35506c43a6a0a56c443da10e5dc50566ada6e9c5aae829967eb5ac5c0d1a59d49063280397c1a05e5461440945c0415329c5a
7
- data.tar.gz: d4791602539759a83b8d88f5dd801279559537dc5401fd003bdf2b9cd96083a5ffce957487122ed704e69a13458ef0659b7f7c52b19a74f4a4c9d1ca386d8d42
6
+ metadata.gz: 38d4beb5c03960e90d6e0e0f557f95fe10d319506e7543c83ab2e057e3f06718eb7f0a5ffe2239b8ccdae477b273ba39870ffa94365ef7b3e31c0992c099895a
7
+ data.tar.gz: dc747b5765528debc3874cdd7ea07dd5d1f4b2173c000f37854ced5a35b5ba74d5611c31c0114b3080ec3849760fa1eafedb78b6daa5bf9ae388900abc65b071
data/README.md CHANGED
@@ -9,8 +9,8 @@ or, you may need to precede that command with `sudo`:
9
9
  `sudo gem install wifi-wand`
10
10
 
11
11
  The `wifi-wand` gem enables the query and management
12
- of wifi configuration and environment on a Mac.
13
- The code encapsulates the Mac OS specific logic in a minimal class
12
+ of WiFi configuration and environment on a Mac.
13
+ The code encapsulates the Mac OS specific logic in model classes
14
14
  to more easily add support for other operating systems,
15
15
  but as of now, only Mac OS is supported. (Feel free to add an OS!)
16
16
 
@@ -30,7 +30,7 @@ $ wifi-wand -h
30
30
 
31
31
  Syntax is: exe/wifi-wand [options] command [command_options]
32
32
 
33
- Command Line Switches: [wifi-wand version 2.10.0 at https://github.com/keithrbennett/wifiwand]
33
+ Command Line Switches: [wifi-wand version 2.13.0 at https://github.com/keithrbennett/wifiwand]
34
34
 
35
35
  -o {i,j,k,p,y} - outputs data in inspect, JSON, pretty JSON, puts, or YAML format when not in shell mode
36
36
  -p wifi_port_name - override automatic detection of port name with this name
@@ -44,7 +44,7 @@ ci - connected to Internet (not just wifi on)?
44
44
  co[nnect] network-name - turns wifi on, connects to network-name
45
45
  cy[cle] - turns wifi off, then on, preserving network selection
46
46
  d[isconnect] - disconnects from current network, does not turn off wifi
47
- f[orget] network-name - removes network-name(s) from the preferred networks list
47
+ f[orget] name1 [..name_n] - removes network-name(s) from the preferred networks list
48
48
  h[elp] - prints this help
49
49
  i[nfo] - a hash of wifi-related information
50
50
  l[s_avail_nets] - details about available networks
@@ -59,17 +59,21 @@ ro[pen] - open resource ('ipl' (IP Location), 'ipw' (What is M
59
59
  t[ill] - returns when the desired Internet connection state is true. Options:
60
60
  1) 'on'/:on, 'off'/:off, 'conn'/:conn, or 'disc'/:disc
61
61
  2) wait interval, in seconds (optional, defaults to 0.5 seconds)
62
- w[ifion] - is the wifi on?
62
+ w[ifi_on] - is the wifi on?
63
63
  x[it] - exits this program (interactive shell mode only) (see also 'q')
64
64
 
65
+ When in interactive shell mode:
66
+ * remember to quote string literals.
67
+ * for pry commands, use prefix `%`.
68
+
69
+
65
70
  When in interactive shell mode:
66
71
  * use quotes for string parameters such as method names.
67
72
  * for pry commands, use prefix `%`.
68
73
  ```
69
74
 
70
- Internally, it uses several Mac command line utilities. This is not ideal,
71
- I would have preferred OS system calls, but the current approach enabled me to develop
72
- this script quickly and simply.
75
+ Internally, it uses several Mac command line utilities to interact with the
76
+ underlying operating system.
73
77
 
74
78
 
75
79
  ### Pretty Output
@@ -117,21 +121,6 @@ sudo gem install pry-coolline
117
121
  ```
118
122
 
119
123
 
120
- ### Using It in Scripts
121
-
122
- Sometimes calling `wifi-wand` from a script is handy. I have this script that
123
- connects to a commonly used wifi network, and then speaks a message when it's done:
124
-
125
- ```
126
- wifi-wand connect my_network_name my_password && \
127
- wifi-wand till conn && \
128
- say -v Kyoko "Connected to my network."
129
- ```
130
-
131
- (The Mac OS `say` command supports all kinds of accents that are fun to play around with.
132
- You can get a list of all of them by running `say -v "?"`)
133
-
134
-
135
124
  ### Using the Shell
136
125
 
137
126
  _If the program immediately exits when you try to run the shell, try upgrading `pry` and `pry-byebug`.
@@ -190,7 +179,7 @@ or constants, which will _not_ hide the methods:
190
179
  ```
191
180
 
192
181
  2) If you accidentally refer to a nonexistent variable or method name,
193
- the result may be mysterious. For example, if I were write the wifi information
182
+ the result may be mysterious. For example, if I were write the WiFi information
194
183
  to a file, this would work:
195
184
 
196
185
  ```
@@ -284,7 +273,7 @@ puts model.available_network_names.to_yaml # etc...
284
273
  but these commands could also each be specified on a line of its own.)
285
274
 
286
275
  ```
287
- # Print out wifi info:
276
+ # Print out WiFi info:
288
277
  i
289
278
 
290
279
  # Cycle (off/on) the network then connect to the specified network not requiring a password
@@ -303,11 +292,12 @@ You are connected on port en0 to .@ AIS SUPER WiFi on IP address 172.27.145.225.
303
292
  There are 341 preferred networks.
304
293
 
305
294
  # Delete all preferred networks whose names begin with "TOTTGUEST", the hard way:
306
- > pr.grep(/^TOTTGUEST/).each { |n| rm(n) }
295
+ > pr.grep(/^TOTTGUEST/).each { |n| forget(n) }
307
296
 
308
297
  # Delete all preferred networks whose names begin with "TOTTGUEST", the easy way.
309
- # rm can take multiple network names, but they must be specified as separate parameters; thus the '*'.
310
- > rm(*pr.grep(/^TOTTGUEST/))
298
+ # 'forget' can take multiple network names,
299
+ # but they must be specified as separate parameters; thus the '*'.
300
+ > forget(*pr.grep(/^TOTTGUEST/))
311
301
 
312
302
  # Define a method to wait for the Internet connection to be active.
313
303
  # (This functionality is included in the `till` command.)
@@ -347,14 +337,14 @@ return this:
347
337
 
348
338
  If this happens, the public IP information will be silently omitted from the
349
339
  information hash. In this case, the web site 'https://www.iplocation.net/' is
350
- recommended, and `ro ipl` on the command line or `ro 'ipl'` in the shell will
340
+ recommended, and `wifi-wand ro ipl` on the command line or `ro 'ipl'` in the shell will
351
341
  open that page in your browser for you.
352
342
 
353
343
 
354
344
  ### Password Lookup Oddity
355
345
 
356
346
  You may find it odd (I did, anyway) that even if you issue the password command
357
- (`mac_wifi pa a-network-name`) using sudo, you will still be prompted
347
+ (`mac_wifi password a-network-name`) using sudo, you will still be prompted
358
348
  with a graphical dialog for both a user id and password. This is no doubt
359
349
  for better security, but it's unfortunate in that it makes it impossible to fully automate this task.
360
350
 
@@ -1,3 +1,8 @@
1
+ ## v2.13.0
2
+
3
+ * Fix: network names could not be displayed when one contained a nonstandard character (e.g. D5 for a special apostrophe in Mac Roman encoding).
4
+ * Fix: some operations that didn't make sense with WiFi off were attempted anyway; this was removed.
5
+
1
6
  ## v2.12.0
2
7
 
3
8
  * Change connected_to_internet?. Use 'dig' to test name resolution first, then HTTP get. Also, add baidu.com for China where google.com is blocked.
@@ -70,6 +70,7 @@ class BaseModel
70
70
  # Domains attempted are google.com and baidu.com. Success is either being successful.
71
71
  # Commands for the multiple sites are run in parallel, in threads, to save time.
72
72
  def connected_to_internet?
73
+ return nil unless wifi_on? # no need to try
73
74
 
74
75
  # We cannot use run_os_command for the running of external processes here,
75
76
  # because they are multithreaded, and the output will get mixed up.
@@ -73,7 +73,7 @@ class MacOsModel < BaseModel
73
73
  # "DIRECT-sq-BRAVIA 02:71:cc:87:4a:8c -76 6 Y -- WPA2(PSK/AES/AES) ", #
74
74
  def available_network_info
75
75
  return nil unless wifi_on? # no need to try
76
- command = "#{airport_command} -s"
76
+ command = "#{airport_command} -s | iconv -f macroman -t utf-8"
77
77
  max_attempts = 50
78
78
 
79
79
 
@@ -145,10 +145,12 @@ class MacOsModel < BaseModel
145
145
  #
146
146
  # REXML is used here to avoid the need for the user to install Nokogiri.
147
147
  def available_network_names
148
+ return nil unless wifi_on? # no need to try
149
+
148
150
  # For some reason, the airport command very often returns nothing, so we need to try until
149
151
  # we get data in the response:
150
152
 
151
- command = "#{airport_command} -s -x"
153
+ command = "#{airport_command} -s -x | iconv -f macroman -t utf-8"
152
154
  stop_condition = ->(response) { ! [nil, ''].include?(response) }
153
155
  output = try_os_command_until(command, stop_condition)
154
156
  doc = REXML::Document.new(output)
@@ -238,6 +240,7 @@ class MacOsModel < BaseModel
238
240
 
239
241
  # Returns the IP address assigned to the wifi port, or nil if none.
240
242
  def ip_address
243
+ return nil unless wifi_on? # no need to try
241
244
  begin
242
245
  run_os_command("ipconfig getifaddr #{wifi_port}").chomp
243
246
  rescue OsCommandError => error
@@ -259,6 +262,7 @@ class MacOsModel < BaseModel
259
262
 
260
263
  # Returns the network currently connected to, or nil if none.
261
264
  def connected_network_name
265
+ return nil unless wifi_on? # no need to try
262
266
  lines = run_os_command("#{airport_command} -I").split("\n")
263
267
  ssid_lines = lines.grep(/ SSID:/)
264
268
  ssid_lines.empty? ? nil : ssid_lines.first.split('SSID: ').last.lstrip
@@ -267,6 +271,7 @@ class MacOsModel < BaseModel
267
271
 
268
272
  # Disconnects from the currently connected network. Does not turn off wifi.
269
273
  def disconnect
274
+ return nil unless wifi_on? # no need to try
270
275
  run_os_command("sudo #{airport_command} -z")
271
276
  nil
272
277
  end
@@ -337,7 +342,8 @@ class MacOsModel < BaseModel
337
342
  raise Error.new("Bad IP addresses provided: #{bad_addresses.join(', ')}")
338
343
  end
339
344
  nameservers.join(' ')
340
- end
345
+ end # end assignment to arg variable
346
+
341
347
  run_os_command("networksetup -setdnsservers Wi-Fi #{arg}")
342
348
  nameservers
343
349
  end
@@ -1,5 +1,5 @@
1
1
  module WifiWand
2
2
 
3
- VERSION = '2.12.0'
3
+ VERSION = '2.13.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.12.0
4
+ version: 2.13.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-06-27 00:00:00.000000000 Z
11
+ date: 2018-07-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler