Class: Dommy::Permissions

Inherits:
Object
  • Object
show all
Defined in:
lib/dommy/navigator.rb

Overview

‘navigator.permissions` — query returns a PermissionStatus whose `state` defaults to “granted” for every recognized name. Tests can override via `permissions.set(“name”, “denied”)` before exercising user code.

Constant Summary collapse

KNOWN_NAMES =
%w[
geolocation
notifications
push
midi
camera
microphone
clipboard-read
clipboard-write
background-fetch
background-sync
persistent-storage
accelerometer
gyroscope
magnetometer
screen-wake-lock
storage-access
window-management
    ]
.freeze

Instance Method Summary collapse

Constructor Details

#initialize(window) ⇒ Permissions

Returns a new instance of Permissions.



164
165
166
167
# File 'lib/dommy/navigator.rb', line 164

def initialize(window)
  @window = window
  @overrides = {}
end

Instance Method Details

#__js_call__(method, args) ⇒ Object



202
203
204
205
206
207
# File 'lib/dommy/navigator.rb', line 202

def __js_call__(method, args)
  case method
  when "query"
    query(args[0])
  end
end

#__js_get__(_key) ⇒ Object



194
195
196
# File 'lib/dommy/navigator.rb', line 194

def __js_get__(_key)
  nil
end

#__js_set__(_key, _value) ⇒ Object



198
199
200
# File 'lib/dommy/navigator.rb', line 198

def __js_set__(_key, _value)
  nil
end

#query(descriptor) ⇒ Object



181
182
183
184
185
186
187
188
189
190
191
192
# File 'lib/dommy/navigator.rb', line 181

def query(descriptor)
  name = if descriptor.is_a?(Hash)
    (descriptor["name"] || descriptor[:name]).to_s
  else
    descriptor.to_s
  end

  state = @overrides[name] || "granted"
  @statuses ||= {}
  status = @statuses[name] ||= PermissionStatus.new(@window, name, state)
  PromiseValue.resolve(@window, status)
end

#set(name, state) ⇒ Object

Test helper: override the resolved state for a permission name. Subsequent ‘query()` calls will see the new value, and existing PermissionStatus objects fire `change` events.



172
173
174
175
176
177
178
179
# File 'lib/dommy/navigator.rb', line 172

def set(name, state)
  key = name.to_s
  @overrides[key] = state.to_s
  @statuses ||= {}
  status = @statuses[key]
  status&.__set_state__(state.to_s)
  nil
end