wifi-wand 2.4.2 → 2.5.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 +4 -4
- data/README.md +4 -1
- data/RELEASE_NOTES.md +6 -1
- data/exe/wifi-wand +0 -19
- data/lib/wifi-wand/command_line_interface.rb +12 -6
- data/lib/wifi-wand/main.rb +46 -43
- data/lib/wifi-wand/models/base_model.rb +29 -5
- data/lib/wifi-wand/models/mac_os_model.rb +54 -30
- data/lib/wifi-wand/operating_systems.rb +0 -5
- data/lib/wifi-wand/os/base_os.rb +1 -1
- data/lib/wifi-wand/os/imaginary_os.rb +1 -1
- data/lib/wifi-wand/os/mac_os.rb +2 -2
- data/lib/wifi-wand/version.rb +1 -1
- data/spec/wifi-wand/models/mac_os_model_spec.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c9c498e8044e8913348ab143847be13dd0e1683d72c0e26448ae63d817a0675d
|
4
|
+
data.tar.gz: 440847dc2ddc905172a60cf090b863669ec5fef41d5a23f93e7540326d257583
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5ab2bfebaf3c9dd5ad50e8cc7f9aeaa96c1f9799c504153616e920e278419b4f9d004f32083997f1f5c9cc0794557d6b5af093f2b483f519c1d4691b25346772
|
7
|
+
data.tar.gz: 48cc73787df1b6d8a5cb0aa641047bd7b796c9e2c7cf8b25d112427122c780101d7847d3b380cb704ac2f173eb3e8ba9b294295e26e6cca5ee299b93cc95a449
|
data/README.md
CHANGED
@@ -28,9 +28,12 @@ output at the time of this writing:
|
|
28
28
|
```
|
29
29
|
$ wifi-wand -h
|
30
30
|
|
31
|
+
|
32
|
+
|
31
33
|
Command Line Switches: [wifi-wand version 2.4.2]
|
32
34
|
|
33
|
-
-o
|
35
|
+
-o {i,j,p,y} - outputs data in inspect, JSON, puts, or YAML format when not in shell mode
|
36
|
+
-p wifi_port_name - override automatic detection of port name with this name
|
34
37
|
-s - run in shell mode
|
35
38
|
-v - verbose mode (prints OS commands and their outputs)
|
36
39
|
|
data/RELEASE_NOTES.md
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
## v2.5.0
|
2
|
+
|
3
|
+
* Add limited support for nonstandard wifi devices (https://github.com/keithrbennett/wifiwand/issues/6).
|
4
|
+
|
5
|
+
|
1
6
|
## v2.4.2
|
2
7
|
|
3
8
|
* Fix test.
|
@@ -5,7 +10,7 @@
|
|
5
10
|
|
6
11
|
## v2.4.1
|
7
12
|
|
8
|
-
* Fix bug: undefined local variable or method `connected_network_name'
|
13
|
+
* Fix bug: undefined local variable or method `connected_network_name'.
|
9
14
|
|
10
15
|
|
11
16
|
## v2.4.0
|
data/exe/wifi-wand
CHANGED
@@ -1,24 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
# This script brings together several useful wifi-related functions.
|
4
|
-
#
|
5
|
-
# It is a bit of a kludge in that it calls Mac OS commands and uses
|
6
|
-
# the text output for its data. At some point I would like to replace
|
7
|
-
# that with system calls. Currently this script can break if Apple
|
8
|
-
# decides to modify the name, options, behavior, and/or format of its utilities.
|
9
|
-
#
|
10
|
-
# What would be *really* nice, would be for Apple to retrofit all
|
11
|
-
# system commands to optionally output JSON and/or YAML. Some offer XML, but that
|
12
|
-
# is not convenient to use.
|
13
|
-
#
|
14
|
-
# Mac OS commands currently used are: airport, ipconfig, networksetup, security.
|
15
|
-
#
|
16
|
-
# Author: keithrbennett (on Github, GMail, Twitter)
|
17
|
-
# I am available for Ruby development, troubleshooting, training, tutoring, etc.
|
18
|
-
#
|
19
|
-
# License: MIT License
|
20
|
-
|
21
|
-
|
22
3
|
require_relative '../lib/wifi-wand/main'
|
23
4
|
|
24
5
|
WifiWand::Main.new.call
|
@@ -1,5 +1,6 @@
|
|
1
|
-
require_relative 'version'
|
2
1
|
require_relative 'operating_systems'
|
2
|
+
require 'ostruct'
|
3
|
+
require_relative 'version'
|
3
4
|
|
4
5
|
module WifiWand
|
5
6
|
|
@@ -51,7 +52,8 @@ class CommandLineInterface
|
|
51
52
|
HELP_TEXT = "
|
52
53
|
Command Line Switches: [wifi-wand version #{WifiWand::VERSION}]
|
53
54
|
|
54
|
-
-o
|
55
|
+
-o {i,j,k,p,y} - outputs data in inspect, JSON, pretty JSON, puts, or YAML format when not in shell mode
|
56
|
+
-p wifi_port_name - override automatic detection of port name with this name
|
55
57
|
-s - run in shell mode
|
56
58
|
-v - verbose mode (prints OS commands and their outputs)
|
57
59
|
|
@@ -90,7 +92,11 @@ When in interactive shell mode:
|
|
90
92
|
@options = options
|
91
93
|
current_os = OperatingSystems.new.current_os
|
92
94
|
raise "Could not determine operating system" if current_os.nil?
|
93
|
-
|
95
|
+
model_options = OpenStruct.new({
|
96
|
+
verbose: options.verbose,
|
97
|
+
wifi_port: options.wifi_port
|
98
|
+
})
|
99
|
+
@model = current_os.create_model(model_options)
|
94
100
|
@interactive_mode = !!(options.interactive_mode)
|
95
101
|
run_shell if @interactive_mode
|
96
102
|
end
|
@@ -141,7 +147,7 @@ When in interactive shell mode:
|
|
141
147
|
# Asserts that a command has been passed on the command line.
|
142
148
|
def validate_command_line
|
143
149
|
if ARGV.empty?
|
144
|
-
puts "Syntax is: #{
|
150
|
+
puts "Syntax is: #{$0} [options] command [command_options]"
|
145
151
|
print_help
|
146
152
|
exit(-1)
|
147
153
|
end
|
@@ -285,7 +291,7 @@ When in interactive shell mode:
|
|
285
291
|
end
|
286
292
|
|
287
293
|
|
288
|
-
def
|
294
|
+
def cmd_l
|
289
295
|
info = model.available_network_info
|
290
296
|
if interactive_mode
|
291
297
|
info
|
@@ -409,7 +415,7 @@ When in interactive shell mode:
|
|
409
415
|
Command.new('d', 'disconnect', -> (*_options) { cmd_d }),
|
410
416
|
Command.new('h', 'help', -> (*_options) { cmd_h }),
|
411
417
|
Command.new('i', 'info', -> (*_options) { cmd_i }),
|
412
|
-
Command.new('l', 'ls_avail_nets', -> (*_options) {
|
418
|
+
Command.new('l', 'ls_avail_nets', -> (*_options) { cmd_l }),
|
413
419
|
Command.new('n', 'network_name', -> (*_options) { cmd_n }),
|
414
420
|
Command.new('of', 'off', -> (*_options) { cmd_of }),
|
415
421
|
Command.new('on', 'on', -> (*_options) { cmd_on }),
|
data/lib/wifi-wand/main.rb
CHANGED
@@ -1,66 +1,69 @@
|
|
1
|
+
require 'json'
|
2
|
+
require 'optparse'
|
3
|
+
require 'ostruct'
|
4
|
+
require 'yaml'
|
5
|
+
|
1
6
|
require_relative 'command_line_interface'
|
2
7
|
require_relative 'operating_systems'
|
3
8
|
|
4
9
|
|
5
10
|
module WifiWand
|
11
|
+
class Main
|
6
12
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
class Main
|
13
|
-
|
14
|
-
# Parses the command line with Ruby's internal 'optparse'.
|
15
|
-
# Looks for "-v" flag to set verbosity to true.
|
16
|
-
# optparse removes what it processes from ARGV, which simplifies our command parsing.
|
17
|
-
def parse_command_line
|
18
|
-
options = OpenStruct.new
|
19
|
-
OptionParser.new do |parser|
|
20
|
-
parser.on("-v", "--[no-]verbose", "Run verbosely") do |v|
|
21
|
-
options.verbose = v
|
22
|
-
end
|
13
|
+
# Parses the command line with Ruby's internal 'optparse'.
|
14
|
+
# optparse removes what it processes from ARGV, which simplifies our command parsing.
|
15
|
+
def parse_command_line
|
16
|
+
options = OpenStruct.new
|
23
17
|
|
24
|
-
|
25
|
-
|
26
|
-
|
18
|
+
OptionParser.new do |parser|
|
19
|
+
parser.on("-v", "--[no-]verbose", "Run verbosely") do |v|
|
20
|
+
options.verbose = v
|
21
|
+
end
|
27
22
|
|
28
|
-
|
23
|
+
parser.on("-s", "--shell", "Start interactive shell") do |v|
|
24
|
+
options.interactive_mode = true
|
25
|
+
end
|
29
26
|
|
30
|
-
|
31
|
-
'i' => ->(object) { object.inspect },
|
32
|
-
'j' => ->(object) { JSON.pretty_generate(object) },
|
33
|
-
'p' => ->(object) { sio = StringIO.new; sio.puts(object); sio.string },
|
34
|
-
'y' => ->(object) { object.to_yaml }
|
35
|
-
}
|
27
|
+
parser.on("-o", "--output_format FORMAT", "Format output data") do |v|
|
36
28
|
|
37
|
-
|
29
|
+
formatters = {
|
30
|
+
'i' => ->(object) { object.inspect },
|
31
|
+
'j' => ->(object) { object.to_json },
|
32
|
+
'k' => ->(object) { JSON.pretty_generate(object) },
|
33
|
+
'p' => ->(object) { sio = StringIO.new; sio.puts(object); sio.string },
|
34
|
+
'y' => ->(object) { object.to_yaml }
|
35
|
+
}
|
38
36
|
|
39
|
-
|
40
|
-
raise %Q{Output format "#{choice}" not in list of available formats} +
|
41
|
-
" (#{transformers.keys.inspect})."
|
42
|
-
end
|
37
|
+
choice = v[0].downcase
|
43
38
|
|
44
|
-
|
39
|
+
unless formatters.keys.include?(choice)
|
40
|
+
raise %Q{Output format "#{choice}" not in list of available formats} +
|
41
|
+
" (#{formatters.keys.inspect})."
|
45
42
|
end
|
46
43
|
|
47
|
-
|
48
|
-
|
49
|
-
end
|
50
|
-
end.parse!
|
51
|
-
options
|
52
|
-
end
|
44
|
+
options.post_processor = formatters[choice]
|
45
|
+
end
|
53
46
|
|
47
|
+
parser.on("-p", "--wifi-port PORT", "WiFi port name") do |v|
|
48
|
+
options.wifi_port = v
|
49
|
+
end
|
54
50
|
|
55
|
-
|
56
|
-
|
57
|
-
unless operating_systems.current_id == :mac
|
58
|
-
raise "OS not in supported list of #{operating_systems.supported_os_names.inspect}"
|
51
|
+
parser.on("-h", "--help", "Show help") do |_help_requested|
|
52
|
+
ARGV << 'h' # pass on the request to the command processor
|
59
53
|
end
|
54
|
+
end.parse!
|
55
|
+
options
|
56
|
+
end
|
57
|
+
|
60
58
|
|
61
|
-
|
59
|
+
def call
|
60
|
+
options = parse_command_line
|
62
61
|
|
62
|
+
begin
|
63
63
|
WifiWand::CommandLineInterface.new(options).call
|
64
|
+
rescue => e
|
65
|
+
puts "Error: #{e.message}"
|
64
66
|
end
|
65
67
|
end
|
68
|
+
end
|
66
69
|
end
|
@@ -6,6 +6,8 @@ module WifiWand
|
|
6
6
|
|
7
7
|
class BaseModel
|
8
8
|
|
9
|
+
attr_accessor :wifi_port, :verbose_mode
|
10
|
+
|
9
11
|
class OsCommandError < RuntimeError
|
10
12
|
attr_reader :exitstatus, :command, :text
|
11
13
|
|
@@ -14,22 +16,39 @@ class BaseModel
|
|
14
16
|
@command = command
|
15
17
|
@text = text
|
16
18
|
end
|
19
|
+
|
20
|
+
def to_s
|
21
|
+
"#{self.class.name}: Error code #{exitstatus}, command = #{command}, text = #{text}"
|
22
|
+
end
|
23
|
+
|
24
|
+
def to_h
|
25
|
+
{ exitstatus: exitstatus, command: command, text: text }
|
26
|
+
end
|
17
27
|
end
|
18
28
|
|
19
29
|
|
20
|
-
def initialize(
|
21
|
-
@verbose_mode = verbose
|
30
|
+
def initialize(options)
|
31
|
+
@verbose_mode = options.verbose
|
32
|
+
if options.wifi_port && (! is_wifi_port?(options.wifi_port))
|
33
|
+
raise "#{options.wifi_port} is not a Wi-Fi interface."
|
34
|
+
end
|
35
|
+
@wifi_port = options.wifi_port
|
22
36
|
end
|
23
37
|
|
24
38
|
|
25
|
-
def run_os_command(command)
|
39
|
+
def run_os_command(command, raise_on_error = true)
|
40
|
+
|
26
41
|
output = `#{command} 2>&1` # join stderr with stdout
|
27
|
-
|
42
|
+
|
43
|
+
if $?.exitstatus != 0 && raise_on_error
|
28
44
|
raise OsCommandError.new($?.exitstatus, command, output)
|
29
45
|
end
|
46
|
+
|
30
47
|
if @verbose_mode
|
31
|
-
puts "\n\n#{'-' * 79}\nCommand: #{command}\n\
|
48
|
+
puts "\n\n#{'-' * 79}\nCommand: #{command}\n\n"
|
49
|
+
puts "#{output}#{'-' * 79}\n\n"
|
32
50
|
end
|
51
|
+
|
33
52
|
output
|
34
53
|
end
|
35
54
|
|
@@ -246,5 +265,10 @@ class BaseModel
|
|
246
265
|
nameservers = unique_nameserver_lines.map { |line| line.split(' : ').last.strip }
|
247
266
|
nameservers
|
248
267
|
end
|
268
|
+
|
269
|
+
|
270
|
+
def wifi_port
|
271
|
+
@wifi_port ||= detect_wifi_port
|
272
|
+
end
|
249
273
|
end
|
250
274
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'ostruct'
|
1
2
|
require 'shellwords'
|
2
3
|
|
3
4
|
require_relative 'base_model'
|
@@ -8,31 +9,31 @@ class MacOsModel < BaseModel
|
|
8
9
|
|
9
10
|
AIRPORT_CMD = '/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport'
|
10
11
|
|
11
|
-
|
12
|
+
# Takes an OpenStruct containing options such as verbose mode and port name.
|
13
|
+
def initialize(options = OpenStruct.new)
|
12
14
|
super
|
13
15
|
end
|
14
16
|
|
15
17
|
|
16
18
|
# Identifies the (first) wireless network hardware port in the system, e.g. en0 or en1
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
end
|
19
|
+
# This may not detect wifi ports with nonstandard names, such as USB wifi devices.
|
20
|
+
def detect_wifi_port
|
21
|
+
lines = run_os_command("networksetup -listallhardwareports").split("\n")
|
22
|
+
# Produces something like this:
|
23
|
+
# Hardware Port: Wi-Fi
|
24
|
+
# Device: en0
|
25
|
+
# Ethernet Address: ac:bc:32:b9:a9:9d
|
26
|
+
#
|
27
|
+
# Hardware Port: Bluetooth PAN
|
28
|
+
# Device: en3
|
29
|
+
# Ethernet Address: ac:bc:32:b9:a9:9e
|
30
|
+
wifi_port_line_num = (0...lines.size).detect do |index|
|
31
|
+
/: Wi-Fi$/.match(lines[index])
|
32
|
+
end
|
33
|
+
if wifi_port_line_num.nil?
|
34
|
+
raise %Q{Wifi port (e.g. "en0") not found in output of: networksetup -listallhardwareports}
|
35
|
+
else
|
36
|
+
lines[wifi_port_line_num + 1].split(': ').last
|
36
37
|
end
|
37
38
|
end
|
38
39
|
|
@@ -41,6 +42,14 @@ class MacOsModel < BaseModel
|
|
41
42
|
# For some reason, this often returns no results, so I've put the operation in a loop.
|
42
43
|
# I was unable to detect a sort strategy in the airport utility's output, so I sort
|
43
44
|
# the lines alphabetically, to show duplicates and for easier lookup.
|
45
|
+
#
|
46
|
+
# Sample Output:
|
47
|
+
#
|
48
|
+
# => ["SSID BSSID RSSI CHANNEL HT CC SECURITY (auth/unicast/group)",
|
49
|
+
# "ByCO-U00tRzUzMEg 64:6c:b2:db:f3:0c -56 6 Y -- NONE",
|
50
|
+
# "Chancery 0a:18:d6:0b:b9:c3 -82 11 Y -- NONE",
|
51
|
+
# "Chancery 2a:a4:3c:03:33:99 -59 60,+1 Y -- NONE",
|
52
|
+
# "DIRECT-sq-BRAVIA 02:71:cc:87:4a:8c -76 6 Y -- WPA2(PSK/AES/AES) ", #
|
44
53
|
def available_network_info
|
45
54
|
return nil unless wifi_on? # no need to try
|
46
55
|
command = "#{AIRPORT_CMD} -s"
|
@@ -61,6 +70,7 @@ class MacOsModel < BaseModel
|
|
61
70
|
# Reformat the line so that the name is left instead of right justified
|
62
71
|
reformat_line.(line)
|
63
72
|
end
|
73
|
+
# TODO: Need to sort case insensitively?:
|
64
74
|
data_lines.sort!
|
65
75
|
[reformat_line.(header_line)] + data_lines
|
66
76
|
end
|
@@ -145,7 +155,7 @@ class MacOsModel < BaseModel
|
|
145
155
|
|
146
156
|
# Returns data pertaining to "preferred" networks, many/most of which will probably not be available.
|
147
157
|
def preferred_networks
|
148
|
-
lines = run_os_command("networksetup -listpreferredwirelessnetworks #{
|
158
|
+
lines = run_os_command("networksetup -listpreferredwirelessnetworks #{wifi_port}").split("\n")
|
149
159
|
# Produces something like this, unsorted, and with leading tabs:
|
150
160
|
# Preferred networks on en0:
|
151
161
|
# LibraryWiFi
|
@@ -158,6 +168,14 @@ class MacOsModel < BaseModel
|
|
158
168
|
end
|
159
169
|
|
160
170
|
|
171
|
+
# Returns whether or not the specified interface is a WiFi interfae.
|
172
|
+
def is_wifi_port?(port)
|
173
|
+
run_os_command("networksetup -listpreferredwirelessnetworks #{port} 2>/dev/null")
|
174
|
+
exit_status = $?.exitstatus
|
175
|
+
exit_status != 10
|
176
|
+
end
|
177
|
+
|
178
|
+
|
161
179
|
# Returns true if wifi is on, else false.
|
162
180
|
def wifi_on?
|
163
181
|
lines = run_os_command("#{AIRPORT_CMD} -I").split("\n")
|
@@ -168,7 +186,7 @@ class MacOsModel < BaseModel
|
|
168
186
|
# Turns wifi on.
|
169
187
|
def wifi_on
|
170
188
|
return if wifi_on?
|
171
|
-
run_os_command("networksetup -setairportpower #{
|
189
|
+
run_os_command("networksetup -setairportpower #{wifi_port} on")
|
172
190
|
wifi_on? ? nil : raise("Wifi could not be enabled.")
|
173
191
|
end
|
174
192
|
|
@@ -176,14 +194,14 @@ class MacOsModel < BaseModel
|
|
176
194
|
# Turns wifi off.
|
177
195
|
def wifi_off
|
178
196
|
return unless wifi_on?
|
179
|
-
run_os_command("networksetup -setairportpower #{
|
197
|
+
run_os_command("networksetup -setairportpower #{wifi_port} off")
|
180
198
|
wifi_on? ? raise("Wifi could not be disabled.") : nil
|
181
199
|
end
|
182
200
|
|
183
201
|
|
184
202
|
# This method is called by BaseModel#connect to do the OS-specific connection logic.
|
185
203
|
def os_level_connect(network_name, password = nil)
|
186
|
-
command = "networksetup -setairportnetwork #{
|
204
|
+
command = "networksetup -setairportnetwork #{wifi_port} " + "#{Shellwords.shellescape(network_name)}"
|
187
205
|
if password
|
188
206
|
command << ' ' << Shellwords.shellescape(password)
|
189
207
|
end
|
@@ -214,7 +232,7 @@ class MacOsModel < BaseModel
|
|
214
232
|
# Returns the IP address assigned to the wifi port, or nil if none.
|
215
233
|
def ip_address
|
216
234
|
begin
|
217
|
-
run_os_command("ipconfig getifaddr #{
|
235
|
+
run_os_command("ipconfig getifaddr #{wifi_port}").chomp
|
218
236
|
rescue OsCommandError => error
|
219
237
|
if error.exitstatus == 1
|
220
238
|
nil
|
@@ -228,7 +246,7 @@ class MacOsModel < BaseModel
|
|
228
246
|
def remove_preferred_network(network_name)
|
229
247
|
network_name = network_name.to_s
|
230
248
|
run_os_command("sudo networksetup -removepreferredwirelessnetwork " +
|
231
|
-
"#{
|
249
|
+
"#{wifi_port} #{Shellwords.shellescape(network_name)}")
|
232
250
|
end
|
233
251
|
|
234
252
|
|
@@ -250,10 +268,16 @@ class MacOsModel < BaseModel
|
|
250
268
|
# Returns some useful wifi-related information.
|
251
269
|
def wifi_info
|
252
270
|
|
271
|
+
connected = begin
|
272
|
+
connected_to_internet?
|
273
|
+
rescue
|
274
|
+
false
|
275
|
+
end
|
276
|
+
|
253
277
|
info = {
|
254
|
-
'wifi_on' =>
|
255
|
-
'internet_on' =>
|
256
|
-
'port' =>
|
278
|
+
'wifi_on' => wifi_on?,
|
279
|
+
'internet_on' => connected,
|
280
|
+
'port' => wifi_port,
|
257
281
|
'network' => connected_network_name,
|
258
282
|
'ip_address' => ip_address,
|
259
283
|
'nameservers' => nameservers_using_scutil,
|
@@ -264,7 +288,7 @@ class MacOsModel < BaseModel
|
|
264
288
|
info.merge!(more_info)
|
265
289
|
info.delete('AirPort') # will be here if off, but info is already in wifi_on key
|
266
290
|
|
267
|
-
if info['
|
291
|
+
if info['internet_on']
|
268
292
|
begin
|
269
293
|
info['public_ip'] = public_ip_address_info
|
270
294
|
rescue => e
|
data/lib/wifi-wand/os/base_os.rb
CHANGED
data/lib/wifi-wand/os/mac_os.rb
CHANGED
@@ -12,9 +12,9 @@ class MacOs < BaseOs
|
|
12
12
|
!! /darwin/.match(RbConfig::CONFIG["host_os"])
|
13
13
|
end
|
14
14
|
|
15
|
-
def create_model(
|
15
|
+
def create_model(options)
|
16
16
|
require_relative '../models/mac_os_model'
|
17
|
-
MacOsModel.new(
|
17
|
+
MacOsModel.new(options)
|
18
18
|
end
|
19
19
|
end
|
20
20
|
end
|
data/lib/wifi-wand/version.rb
CHANGED
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.
|
4
|
+
version: 2.5.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-
|
11
|
+
date: 2018-03-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -101,7 +101,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
101
101
|
version: '0'
|
102
102
|
requirements: []
|
103
103
|
rubyforge_project:
|
104
|
-
rubygems_version: 2.7.
|
104
|
+
rubygems_version: 2.7.6
|
105
105
|
signing_key:
|
106
106
|
specification_version: 4
|
107
107
|
summary: Mac wifi utility
|