Class: Dommy::CookieStore

Inherits:
Object
  • Object
show all
Includes:
EventTarget
Defined in:
lib/dommy/cookie_store.rb

Overview

‘cookieStore` — the asynchronous Cookie Store API. Reads and writes go through the existing `Document#cookie_jar`, so values set via `document.cookie = …` round-trip via `cookieStore.get`.

Spec: wicg.github.io/cookie-store/

Instance Method Summary collapse

Methods included from EventTarget

#__deliver_event__, #add_event_listener, #dispatch_event, #invoke_listener, #remove_event_listener

Constructor Details

#initialize(window) ⇒ CookieStore

Returns a new instance of CookieStore.



12
13
14
# File 'lib/dommy/cookie_store.rb', line 12

def initialize(window)
  @window = window
end

Instance Method Details

#__event_parent__Object



82
83
84
# File 'lib/dommy/cookie_store.rb', line 82

def __event_parent__
  nil
end

#__js_call__(method, args) ⇒ Object



63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/dommy/cookie_store.rb', line 63

def __js_call__(method, args)
  case method
  when "get"
    get(args[0])
  when "getAll"
    get_all(args[0])
  when "set"
    set(args[0], args[1])
  when "delete"
    delete(args[0])
  when "addEventListener"
    add_event_listener(args[0], args[1], args[2])
  when "removeEventListener"
    remove_event_listener(args[0], args[1])
  when "dispatchEvent"
    dispatch_event(args[0])
  end
end

#delete(name_or_options) ⇒ Object



50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/dommy/cookie_store.rb', line 50

def delete(name_or_options)
  name = name_or_options.is_a?(Hash) ? (name_or_options["name"] || name_or_options[:name]) : name_or_options
  cookie_jar.cookies.delete(name.to_s)
  dispatch_event(
    CookieChangeEvent.new(
      "change",
      "changed" => [],
      "deleted" => [build_record(name.to_s, "")]
    )
  )
  PromiseValue.resolve(@window, nil)
end

#get(name_or_options) ⇒ Object



16
17
18
19
20
# File 'lib/dommy/cookie_store.rb', line 16

def get(name_or_options)
  name = name_or_options.is_a?(Hash) ? (name_or_options["name"] || name_or_options[:name]) : name_or_options
  raw = cookie_jar.cookies[name.to_s]
  raw ? PromiseValue.resolve(@window, build_record(name.to_s, raw)) : PromiseValue.resolve(@window, nil)
end

#get_all(name = nil) ⇒ Object Also known as: getAll



22
23
24
25
26
# File 'lib/dommy/cookie_store.rb', line 22

def get_all(name = nil)
  records = cookie_jar.cookies.map { |k, v| build_record(k, v) }
  records = records.select { |r| r["name"] == name.to_s } if name
  PromiseValue.resolve(@window, records)
end

#set(name_or_options, value = nil) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/dommy/cookie_store.rb', line 30

def set(name_or_options, value = nil)
  if name_or_options.is_a?(Hash)
    opts = name_or_options.transform_keys(&:to_s)
    name = opts["name"]
    value = opts["value"]
  else
    name = name_or_options
  end

  cookie_jar.set_cookie("#{name}=#{value}")
  dispatch_event(
    CookieChangeEvent.new(
      "change",
      "changed" => [build_record(name.to_s, value.to_s)],
      "deleted" => []
    )
  )
  PromiseValue.resolve(@window, nil)
end