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)
|
||||
|
||||
attr_reader :name
|
||||
attr_accessor :value, :version
|
||||
attr_accessor :name, :value, :version
|
||||
attr_accessor :domain, :path, :secure
|
||||
attr_reader :domain_name
|
||||
attr_accessor :comment, :max_age
|
||||
|
|
@ -84,11 +83,11 @@ class HTTP::Cookie
|
|||
@created_at = @accessed_at = Time.now
|
||||
case args.size
|
||||
when 2
|
||||
@name, @value = *args
|
||||
self.name, self.value = *args
|
||||
@for_domain = false
|
||||
return
|
||||
when 3
|
||||
@name, @value, attr_hash = *args
|
||||
self.name, self.value, attr_hash = *args
|
||||
when 1
|
||||
attr_hash = args.first
|
||||
else
|
||||
|
|
@ -104,10 +103,6 @@ class HTTP::Cookie
|
|||
case skey
|
||||
when 'for_domain'
|
||||
for_domain = !!val
|
||||
when 'name'
|
||||
@name = val
|
||||
when 'value'
|
||||
@value = val
|
||||
when 'origin'
|
||||
origin = val
|
||||
else
|
||||
|
|
@ -115,6 +110,9 @@ class HTTP::Cookie
|
|||
send(setter, val) if respond_to?(setter)
|
||||
end
|
||||
}
|
||||
if @name.nil? || @value.nil?
|
||||
raise ArgumentError, "at least name and value must be specified"
|
||||
end
|
||||
@for_domain = for_domain
|
||||
if origin
|
||||
self.origin = origin
|
||||
|
|
@ -259,6 +257,15 @@ class HTTP::Cookie
|
|||
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
|
||||
# turning the +for_domain?+ flag on.
|
||||
def domain=(domain)
|
||||
|
|
@ -382,8 +389,6 @@ class HTTP::Cookie
|
|||
def yaml_initialize(tag, map)
|
||||
map.each { |key, value|
|
||||
case key
|
||||
when 'name'
|
||||
@name = value
|
||||
when *PERSISTENT_PROPERTIES
|
||||
send(:"#{key}=", value)
|
||||
end
|
||||
|
|
|
|||
|
|
@ -463,6 +463,12 @@ class TestHTTPCookie < Test::Unit::TestCase
|
|||
assert_equal expires, cookie.expires
|
||||
assert_equal 'example.org', cookie.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
|
||||
|
||||
def cookie_values(options = {})
|
||||
|
|
|
|||
Loading…
Reference in a new issue