mac-wifi 1.0.0 → 1.1.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
  SHA1:
3
- metadata.gz: 0ad551f63f23b9370fc52e8206e4b7314efd99e3
4
- data.tar.gz: b2d4b85d37dc5e964f2dd7fe054233fcd54f66c6
3
+ metadata.gz: 6a58d1685f69fd21d35c2e06e323a7d932e5c82f
4
+ data.tar.gz: 9b129f36832db299389950a7fb9d8561dedb1a07
5
5
  SHA512:
6
- metadata.gz: ef70403c2cbd5731e2835a79ea6334278c34746c06970cf074e3a6006e520d343d90d91db070007b7cfd7c96b065ee9e942b3f495c308cb3f56dbeee24bb7a47
7
- data.tar.gz: 5a8ccde48e2cf1e28b9f4cdaaaa02f97ef39b4657988fd318e3f9fbc75a67e0e0f824e189eaba72de2c608c53aa65d5733c3f2d00f3bc178433608d8768fc7b4
6
+ metadata.gz: 0a34b48bf98052309743cd068ebe3b32612ace5577fd6b00449e0c55a0bf9f5037c6a8c16483a667887b89692160e021a22cdaa5f2ef229b1a84faeee2d51204
7
+ data.tar.gz: 82ad9b39c6c17632bcea897b4b9f7592dbe0e063ef5c0294ba4b043122ea1c788609248de690495e1ffc914ce7940e3ce33439eb8135049d70338e904e4393a3
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # mac-wifi
2
2
 
3
- The script installed by this gem (or otherwise copied) enables the query and management of wifi configuration and environment on a Mac.
3
+ The `mac-wifi` script installed by this gem (or otherwise copied) enables the query and management of wifi configuration and environment on a Mac.
4
4
  The code encapsulates the Mac OS specific logic in a minimal class to more easily add support for other operating systems,
5
5
  but as of now, only Mac OS is supported. (Feel free to add an OS!)
6
6
 
data/RELEASE_NOTES.md ADDED
@@ -0,0 +1,12 @@
1
+ ## v1.1.0
2
+
3
+ * Sort available networks alphabetically, left justify ssid's.
4
+ * to_s is called on parameters so that symbols can be specified in interactive shell for easier typing
5
+
6
+
7
+ ## v1.0.0
8
+
9
+ * First versioned release.
10
+
11
+
12
+
data/bin/mac-wifi CHANGED
@@ -26,7 +26,7 @@ require 'tempfile'
26
26
  module MacWifi
27
27
 
28
28
  # This version must be kept in sync with the version in the gemspec file.
29
- VERSION = '1.0.0'
29
+ VERSION = '1.1.0'
30
30
 
31
31
 
32
32
  class BaseModel
@@ -127,6 +127,10 @@ class BaseModel
127
127
  # Turns wifi on first, in case it was turned off.
128
128
  # Relies on subclass implementation of simple_connect().
129
129
  def connect(network_name, password = nil)
130
+ # Allow symbols and anything responding to to_s for user convenience
131
+ network_name = network_name.to_s if network_name
132
+ password = password.to_s if password
133
+
130
134
  if network_name.nil? || network_name.empty?
131
135
  raise "A network name is required but was not provided."
132
136
  end
@@ -163,6 +167,7 @@ class BaseModel
163
167
 
164
168
 
165
169
  def preferred_network_password(preferred_network_name)
170
+ preferred_network_name = preferred_network_name.to_s
166
171
  if preferred_networks.include?(preferred_network_name)
167
172
  simple_preferred_network_password(preferred_network_name)
168
173
  else
@@ -179,17 +184,17 @@ class BaseModel
179
184
 
180
185
  wait_interval_in_secs ||= 0.5
181
186
 
182
- exit_when = case status
183
- when :conn
184
- -> { connected_to_internet? }
185
- when :disc
186
- -> { ! connected_to_internet? }
187
- when :on
188
- -> { wifi_on? }
189
- when :off
190
- -> { ! wifi_on? }
191
- else
192
- raise ArgumentError.new("Option must be one of [:conn, :disc, :off, :on]. Was: #{status.inspect}")
187
+ actions = {
188
+ conn: -> { connected_to_internet? },
189
+ disc: -> { ! connected_to_internet? },
190
+ on: -> { wifi_on? },
191
+ off: -> { ! wifi_on? }
192
+ }
193
+
194
+ exit_when = actions[status]
195
+
196
+ if exit_when.nil?
197
+ raise ArgumentError.new("Option must be one of [#{actions.keys.map(&:inspect).join(', ')}]. Was: #{status.inspect}")
193
198
  end
194
199
 
195
200
  loop do
@@ -197,7 +202,6 @@ class BaseModel
197
202
  sleep(wait_interval_in_secs)
198
203
  end
199
204
  end
200
-
201
205
  end
202
206
 
203
207
 
@@ -243,14 +247,30 @@ class MacOsModel < BaseModel
243
247
 
244
248
  # Returns data pertaining to available wireless networks.
245
249
  # For some reason, this often returns no results, so I've put the operation in a loop.
250
+ # I was unable to detect a sort strategy in the airport utility's output, so I sort
251
+ # the lines alphabetically, to show duplicates and for easier lookup.
246
252
  def available_network_info
247
253
  return nil unless wifi_on? # no need to try
248
254
  command = "#{AIRPORT_CMD} -s"
249
255
  max_attempts = 50
256
+
257
+ reformat_line = ->(line) do
258
+ ssid = line[0..31].strip
259
+ "%-32.32s%s" % [ssid, line[32..-1]]
260
+ end
261
+
250
262
  max_attempts.times do
251
263
  output = run_os_command(command)
252
264
  if output.size > 0
253
- return output.split("\n")
265
+ lines = output.split("\n")
266
+ header_line = lines[0]
267
+ data_lines = lines[1..-1]
268
+ data_lines.map! do |line|
269
+ # Reformat the line so that the name is left instead of right justified
270
+ reformat_line.(line)
271
+ end
272
+ data_lines.sort!
273
+ return [reformat_line.(header_line)] + data_lines
254
274
  end
255
275
  end
256
276
  raise "Unable to get available network information after #{max_attempts} attempts."
@@ -345,6 +365,7 @@ class MacOsModel < BaseModel
345
365
 
346
366
 
347
367
  def remove_preferred_network(network_name)
368
+ network_name = network_name.to_s
348
369
  run_os_command("sudo networksetup -removepreferredwirelessnetwork " +
349
370
  "#{wifi_hardware_port} #{Shellwords.shellescape(network_name)}")
350
371
  end
@@ -767,13 +788,30 @@ end
767
788
  #
768
789
  # 1) by loading this file directly, or
769
790
  # 2) by running as a gem executable's binstub, in (relatively) '../../../bin'
791
+ #
792
+ # For example, I get this when running this file as a gem:
793
+ # __FILE__ = /Users/kbennett/.rvm/gems/ruby-2.4.0/gems/mac-wifi-1.0.0/bin/mac-wifi
794
+ # $0 = /Users/kbennett/.rvm/gems/ruby-2.4.0/bin/mac-wifi
795
+ # GEM_PATH = /Users/kbennett/.rvm/gems/ruby-2.4.0:/Users/kbennett/.rvm/gems/ruby-2.4.0@global
770
796
 
771
797
  def running_as_script?
798
+
799
+ # Please enable this code and report its output if you report any issues with this method:
800
+ # puts "__FILE__ = #{__FILE__}"
801
+ # puts "$0 = #{$0}"
802
+ # puts "GEM_PATH = #{ENV['GEM_PATH']}"
803
+
772
804
  return true if __FILE__ == $0
773
805
  return false if File.basename(__FILE__) != File.basename($0)
774
806
 
775
- binstub_spec = File.expand_path(File.join(File.dirname(__FILE__), '..', '..', '..', 'bin', File.basename(__FILE__)))
776
- $0 == binstub_spec
807
+ # If here, then filespecs are different but have the same basename.
808
+ gem_paths = ENV['GEM_PATH'].split(File::PATH_SEPARATOR)
809
+ basename = File.basename($0)
810
+ gem_paths.any? do |path|
811
+ path_plus_bin_basename = File.join(path, 'bin', basename)
812
+ __file__up_4 = File.expand_path(File.join(__FILE__, '..', '..', '..', '..'))
813
+ ($0 == path_plus_bin_basename) && (path == __file__up_4)
814
+ end
777
815
  end
778
816
 
779
817
 
data/mac-wifi.gemspec CHANGED
@@ -1,5 +1,6 @@
1
1
  # coding: utf-8
2
- VERSION = '1.0.0'
2
+ # This version must be kept in sync with the version in the mac-wifi file.
3
+ VERSION = '1.1.0'
3
4
 
4
5
  Gem::Specification.new do |spec|
5
6
  spec.name = "mac-wifi"
@@ -11,7 +12,7 @@ Gem::Specification.new do |spec|
11
12
  spec.homepage = "https://github.com/keithrbennett/mac-wifi"
12
13
  spec.license = "MIT"
13
14
 
14
- spec.files = `git ls-files`.split($/) - ['teaching_outline.md']
15
+ spec.files = `git ls-files`.split($/)
15
16
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
16
17
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
17
18
  spec.require_paths = ['lib']
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mac-wifi
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Keith Bennett
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-09-24 00:00:00.000000000 Z
11
+ date: 2017-10-01 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: A command line interface for managing wifi on a Mac.
14
14
  email:
@@ -22,6 +22,7 @@ files:
22
22
  - Gemfile
23
23
  - LICENSE.txt
24
24
  - README.md
25
+ - RELEASE_NOTES.md
25
26
  - bin/mac-wifi
26
27
  - mac-wifi.gemspec
27
28
  - spec/mac-wifi_spec.rb
@@ -29,7 +30,7 @@ homepage: https://github.com/keithrbennett/mac-wifi
29
30
  licenses:
30
31
  - MIT
31
32
  metadata: {}
32
- post_install_message:
33
+ post_install_message:
33
34
  rdoc_options: []
34
35
  require_paths:
35
36
  - lib
@@ -44,9 +45,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
44
45
  - !ruby/object:Gem::Version
45
46
  version: '0'
46
47
  requirements: []
47
- rubyforge_project:
48
+ rubyforge_project:
48
49
  rubygems_version: 2.6.13
49
- signing_key:
50
+ signing_key:
50
51
  specification_version: 4
51
52
  summary: Mac wifi utility
52
53
  test_files: