mirror of
https://github.com/samsonjs/http-cookie.git
synced 2026-03-25 08:55:53 +00:00
Define HTTP::Cookie#name= with validation.
This commit is contained in:
parent
e18013e25e
commit
a47a849387
2 changed files with 21 additions and 10 deletions
|
|
@ -47,8 +47,7 @@ class HTTP::Cookie
|
||||||
|
|
||||||
include URIFix if defined?(URIFix)
|
include URIFix if defined?(URIFix)
|
||||||
|
|
||||||
attr_reader :name
|
attr_accessor :name, :value, :version
|
||||||
attr_accessor :value, :version
|
|
||||||
attr_accessor :domain, :path, :secure
|
attr_accessor :domain, :path, :secure
|
||||||
attr_reader :domain_name
|
attr_reader :domain_name
|
||||||
attr_accessor :comment, :max_age
|
attr_accessor :comment, :max_age
|
||||||
|
|
@ -84,11 +83,11 @@ class HTTP::Cookie
|
||||||
@created_at = @accessed_at = Time.now
|
@created_at = @accessed_at = Time.now
|
||||||
case args.size
|
case args.size
|
||||||
when 2
|
when 2
|
||||||
@name, @value = *args
|
self.name, self.value = *args
|
||||||
@for_domain = false
|
@for_domain = false
|
||||||
return
|
return
|
||||||
when 3
|
when 3
|
||||||
@name, @value, attr_hash = *args
|
self.name, self.value, attr_hash = *args
|
||||||
when 1
|
when 1
|
||||||
attr_hash = args.first
|
attr_hash = args.first
|
||||||
else
|
else
|
||||||
|
|
@ -104,10 +103,6 @@ class HTTP::Cookie
|
||||||
case skey
|
case skey
|
||||||
when 'for_domain'
|
when 'for_domain'
|
||||||
for_domain = !!val
|
for_domain = !!val
|
||||||
when 'name'
|
|
||||||
@name = val
|
|
||||||
when 'value'
|
|
||||||
@value = val
|
|
||||||
when 'origin'
|
when 'origin'
|
||||||
origin = val
|
origin = val
|
||||||
else
|
else
|
||||||
|
|
@ -115,6 +110,9 @@ class HTTP::Cookie
|
||||||
send(setter, val) if respond_to?(setter)
|
send(setter, val) if respond_to?(setter)
|
||||||
end
|
end
|
||||||
}
|
}
|
||||||
|
if @name.nil? || @value.nil?
|
||||||
|
raise ArgumentError, "at least name and value must be specified"
|
||||||
|
end
|
||||||
@for_domain = for_domain
|
@for_domain = for_domain
|
||||||
if origin
|
if origin
|
||||||
self.origin = origin
|
self.origin = origin
|
||||||
|
|
@ -259,6 +257,15 @@ class HTTP::Cookie
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def name=(name)
|
||||||
|
if name.nil? || name.empty?
|
||||||
|
raise ArgumentError, "cookie name cannot be empty"
|
||||||
|
elsif name.match(/[\x00-\x1F=\x7F]/)
|
||||||
|
raise ArgumentError, "cookie name cannot contain a control character or an equal sign"
|
||||||
|
end
|
||||||
|
@name = name
|
||||||
|
end
|
||||||
|
|
||||||
# Sets the domain attribute. A leading dot in +domain+ implies
|
# Sets the domain attribute. A leading dot in +domain+ implies
|
||||||
# turning the +for_domain?+ flag on.
|
# turning the +for_domain?+ flag on.
|
||||||
def domain=(domain)
|
def domain=(domain)
|
||||||
|
|
@ -382,8 +389,6 @@ class HTTP::Cookie
|
||||||
def yaml_initialize(tag, map)
|
def yaml_initialize(tag, map)
|
||||||
map.each { |key, value|
|
map.each { |key, value|
|
||||||
case key
|
case key
|
||||||
when 'name'
|
|
||||||
@name = value
|
|
||||||
when *PERSISTENT_PROPERTIES
|
when *PERSISTENT_PROPERTIES
|
||||||
send(:"#{key}=", value)
|
send(:"#{key}=", value)
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -463,6 +463,12 @@ class TestHTTPCookie < Test::Unit::TestCase
|
||||||
assert_equal expires, cookie.expires
|
assert_equal expires, cookie.expires
|
||||||
assert_equal 'example.org', cookie.domain
|
assert_equal 'example.org', cookie.domain
|
||||||
assert_equal true, cookie.for_domain?
|
assert_equal true, cookie.for_domain?
|
||||||
|
|
||||||
|
assert_raises(ArgumentError) { HTTP::Cookie.new(:name => 'name') }
|
||||||
|
assert_raises(ArgumentError) { HTTP::Cookie.new(:value => 'value') }
|
||||||
|
assert_raises(ArgumentError) { HTTP::Cookie.new('', 'value') }
|
||||||
|
assert_raises(ArgumentError) { HTTP::Cookie.new('key=key', 'value') }
|
||||||
|
assert_raises(ArgumentError) { HTTP::Cookie.new("key\tkey", 'value') }
|
||||||
end
|
end
|
||||||
|
|
||||||
def cookie_values(options = {})
|
def cookie_values(options = {})
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue