Class: Browser::Cookies
- Includes:
- Enumerable
- Defined in:
- opal/browser/cookies.rb
Overview
Allows manipulation of browser cookies.
Usage:
cookies = $document.cookies cookies["my-cookie"] = "monster" cookies.delete("my-cookie")
By default, cookies are stored JSON-encoded. You can supply a raw:
option
whenever you need to access/write the cookies in a raw way, eg.
cookies["my-other-cookie", raw: true] = 123
You can also set this option while referencing $document.cookies, eg.
cookies = $document.cookies(raw: true) cookies["my-other-cookie"] = 123
Constant Summary collapse
- DEFAULT =
Default cookie options.
{ expires: Time.now + 60 * 60 * 24, secure: false }
Instance Attribute Summary collapse
-
#keys ⇒ Array<String>
readonly
All the cookie names.
-
#options ⇒ Object
readonly
Returns the value of attribute options.
-
#values ⇒ Array
readonly
All the cookie values.
Instance Method Summary collapse
-
#[](name, options = {}) ⇒ Object
Access the cookie with the given name.
-
#[]=(name, options = {}, value) ⇒ Object
Set a cookie.
-
#clear(_options = {}) ⇒ self
Delete all the cookies.
-
#delete(name, _options = {}) ⇒ Object
Delete a cookie.
-
#each(options = {}) {|key, value| ... } ⇒ self
Enumerate the cookies.
-
#initialize(document, options = {}) ⇒ Cookies
constructor
Create a new Cookies wrapper.
Constructor Details
#initialize(document, options = {}) ⇒ Cookies
Create a new Browser::Cookies wrapper.
38 39 40 41 |
# File 'opal/browser/cookies.rb', line 38 def initialize(document, = {}) @document = document = DEFAULT.merge() end |
Instance Attribute Details
#keys ⇒ Array<String> (readonly)
Returns all the cookie names.
101 102 103 104 105 |
# File 'opal/browser/cookies.rb', line 101 def keys( = {}) Array(`#@document.cookie.split(/; /)`).map do || .split(/\s*=\s*/).first end end |
#options ⇒ Object (readonly)
Returns the value of attribute options.
32 33 34 |
# File 'opal/browser/cookies.rb', line 32 def end |
#values ⇒ Array (readonly)
Returns all the cookie values.
109 110 111 112 113 114 |
# File 'opal/browser/cookies.rb', line 109 def values( = {}) = .merge() keys.map do |key| self[key, ] end end |
Instance Method Details
#[](name, options = {}) ⇒ Object
Access the cookie with the given name.
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'opal/browser/cookies.rb', line 51 def [](name, = {}) = .merge() matches = `#@document.cookie`.scan(/#{Regexp.escape(FormData.encode(name))}=([^;]*)/) return if matches.empty? result = matches.flatten.map do |value| if [:raw] FormData.decode(value) else JSON.parse(FormData.decode(value)) end end result.length == 1 ? result.first : result end |
#[]=(name, options = {}, value) ⇒ Object
Set a cookie.
81 82 83 84 85 86 87 88 89 90 |
# File 'opal/browser/cookies.rb', line 81 def []=(name, = {}, value) = .merge() if [:raw] string = value.to_s else string = JSON.dump(value) end encoded_value = encode(name, string, ) `#@document.cookie = #{encoded_value}` end |
#clear(_options = {}) ⇒ self
Delete all the cookies
140 141 142 143 144 145 146 |
# File 'opal/browser/cookies.rb', line 140 def clear( = {}) keys.each do |key| delete key end self end |
#delete(name, _options = {}) ⇒ Object
Delete a cookie.
95 96 97 |
# File 'opal/browser/cookies.rb', line 95 def delete(name, = {}) `#@document.cookie = #{encode name, '', expires: Time.now}` end |
#each(options = {}) {|key, value| ... } ⇒ self
Enumerate the cookies.
126 127 128 129 130 131 132 133 134 135 |
# File 'opal/browser/cookies.rb', line 126 def each( = {}, &block) return enum_for :each, unless block = .merge() keys.each do |key| yield key, self[key, ] end self end |