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.
37 38 39 40 |
# File 'opal/browser/cookies.rb', line 37 def initialize(document, = {}) @document = document @options = DEFAULT.merge() end |
Instance Attribute Details
#keys ⇒ Array<String> (readonly)
Returns all the cookie names.
100 101 102 103 104 |
# File 'opal/browser/cookies.rb', line 100 def keys( = {}) Array(`#@document.cookie.split(/; /)`).map do || .split(/\s*=\s*/).first end end |
#options ⇒ Object (readonly)
Returns the value of attribute options.
31 32 33 |
# File 'opal/browser/cookies.rb', line 31 def @options end |
#values ⇒ Array (readonly)
Returns all the cookie values.
108 109 110 111 112 113 |
# File 'opal/browser/cookies.rb', line 108 def values( = {}) = @options.merge() keys.map do |key| self[key, ] end end |
Instance Method Details
#[](name, options = {}) ⇒ Object
Access the cookie with the given name.
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'opal/browser/cookies.rb', line 50 def [](name, = {}) = @options.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.
80 81 82 83 84 85 86 87 88 89 |
# File 'opal/browser/cookies.rb', line 80 def []=(name, = {}, value) = @options.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
139 140 141 142 143 144 145 |
# File 'opal/browser/cookies.rb', line 139 def clear( = {}) keys.each do |key| delete key end self end |
#delete(name, _options = {}) ⇒ Object
Delete a cookie.
94 95 96 |
# File 'opal/browser/cookies.rb', line 94 def delete(name, = {}) `#@document.cookie = #{encode name, '', expires: Time.now}` end |
#each(options = {}) {|key, value| ... } ⇒ self
Enumerate the cookies.
125 126 127 128 129 130 131 132 133 134 |
# File 'opal/browser/cookies.rb', line 125 def each( = {}, &block) return enum_for :each, unless block = @options.merge() keys.each do |key| yield key, self[key, ] end self end |