Class: WifiWand::Platforms::Mac::StatusQueries

Inherits:
Object
  • Object
show all
Includes:
StringPredicates
Defined in:
lib/wifi_wand/platforms/mac/status_queries.rb

Constant Summary collapse

NO_CONNECTED_NETWORK =
Object.new.freeze

Instance Method Summary collapse

Methods included from StringPredicates

string_nil_or_blank?, string_nil_or_empty?

Constructor Details

#initialize(helper_client_provider:, command_runner:, system_profiler_wifi_data_reader:, system_profiler_wifi_data_cache_runner:, wifi_interface_cache_reader:, wifi_interface_cache_writer:, wifi_interface_probe:, system_network_info_provider:, status_deadline_factory:, status_timeout_calculator:) ⇒ StatusQueries

Returns a new instance of StatusQueries.



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/wifi_wand/platforms/mac/status_queries.rb', line 19

def initialize(
  helper_client_provider:,
  command_runner:,
  system_profiler_wifi_data_reader:,
  system_profiler_wifi_data_cache_runner:,
  wifi_interface_cache_reader:,
  wifi_interface_cache_writer:,
  wifi_interface_probe:,
  system_network_info_provider:,
  status_deadline_factory:,
  status_timeout_calculator:
)
  @helper_client_provider = helper_client_provider
  @command_runner = command_runner
  @system_profiler_wifi_data_reader = system_profiler_wifi_data_reader
  @system_profiler_wifi_data_cache_runner = system_profiler_wifi_data_cache_runner
  @wifi_interface_cache_reader = wifi_interface_cache_reader
  @wifi_interface_cache_writer = wifi_interface_cache_writer
  @wifi_interface_probe = wifi_interface_probe
  @system_network_info_provider = system_network_info_provider
  @status_deadline_factory = status_deadline_factory
  @status_timeout_calculator = status_timeout_calculator
end

Instance Method Details

#status_network_identity(timeout_in_secs: nil) ⇒ Object



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/wifi_wand/platforms/mac/status_queries.rb', line 43

def status_network_identity(timeout_in_secs: nil)
  deadline = status_deadline(timeout_in_secs)

  with_system_profiler_wifi_data_cache_scope do
    return disconnected_identity unless wifi_on_before_deadline?(deadline)

    helper_result = helper_client.connected_network_name(
      timeout_seconds: status_timeout_for(deadline)
    )
    helper_ssid = helper_result.payload
    if helper_ssid && !placeholder_network_name?(helper_ssid)
      return { connected:      true,
               network_name:   helper_ssid,
               signal_quality: helper_result.signal_quality }
    end
    return disconnected_identity if helper_result.not_connected?

    fast_network_name = status_network_name_using_fast_commands(deadline)
    return disconnected_identity if no_connected_network?(fast_network_name)
    if fast_network_name
      return { connected:      true,
               network_name:   fast_network_name,
               signal_quality: nil }
    end

    status_network_identity_from_system_profiler_wifi_data(deadline)
  end
end

#status_wifi_on?(timeout_in_secs: nil) ⇒ Boolean

Returns:

  • (Boolean)


72
73
74
75
76
# File 'lib/wifi_wand/platforms/mac/status_queries.rb', line 72

def status_wifi_on?(timeout_in_secs: nil)
  deadline = status_deadline(timeout_in_secs)

  wifi_on_before_deadline?(deadline)
end