WAUrl


Seaside-HTTP

Comment:



Hierarchy:

ProtoObject
Object
WAUrl

Summary:

instance variables:

fragment host params path port scheme

methods:

instance class
accessing copying initialize-release printing private as yet unclassified

Detail:

instance variables:

fragment
inferredType:
UndefinedObject
host
inferredType:
UndefinedObject
params
InitialValue:
a Dictionary()
inferredType:
Dictionary
path
InitialValue:
an OrderedCollection()
inferredType:
OrderedCollection
port
inferredType:
UndefinedObject
scheme
InitialValue:
#http
inferredType:
Symbol

instance methods:

accessing
addParameter: aString

	self addParameter: aString value: nil
addParameter: keyString value: valueString

	params at: keyString put: valueString
addToPath: aString

	path addAll: (aString findTokens: '/')
fragment

	^ fragment
fragment: aString

	fragment _ aString
hostname

	^ host
hostname: aString

	host _ aString
parameters

	^ params
path

	^ path
port

	^ port ifNil: [self defaultPortForScheme: scheme]
port: aNumber

	port _ aNumber
scheme

	^ scheme
scheme: aSymbol

	scheme _ aSymbol

copying
copy

	| copy |
	copy _ self class new.
	copy hostname: host; port: port; scheme: scheme; fragment: fragment.
	copy addToPath: self pathString.
	params keysAndValuesDo: [:k :v | copy addParameter: k value: v].
	^ copy
with: pathString

	^ self copy
		addToPath: pathString;
		yourself
withParameter: aString

	^ self copy
		addParameter: aString;
		yourself
withParameter: aString value: valueString

	^ self copy
		addParameter: aString value: valueString;
		yourself

initialize-release
initialize

	path _ OrderedCollection new.
	params _ Dictionary new.
	scheme _ #http

printing
asString

	^ self urlWithQueryString
fragmentString

	^ fragment ifNil: [''] ifNotNil: ['#', fragment]
pathString

	^ String streamContents: [:s | path do: [:ea | s nextPut: $/; nextPutAll: ea]]
serverString

	host ifNil: [^ ''].
	
	^ String streamContents:
		[:stream |
		stream nextPutAll: scheme.
		stream nextPutAll: '://'.
		stream nextPutAll: host.
		
		((self defaultPortForScheme: scheme) = port)
			ifFalse: [stream nextPutAll: ':', port asString]]
urlString

	^ self serverString, self pathString, self fragmentString
urlWithQueryString

	^ String streamContents:
		[:s |
		s nextPutAll: self serverString.
		s nextPutAll: self pathString.
		params isEmpty ifFalse:
			[s nextPut: $?.
			params keysAndValuesDo: 
				[:k :v |
				s nextPutAll: k encodeForHTTP.
				v ifNotNil: [s nextPut: $=; nextPutAll: v encodeForHTTP].
				s nextPut: $&].
			s skip: -1].
		s nextPutAll: self fragmentString]

private
defaultPortForScheme: aSymbol

	^ aSymbol = #http
		ifTrue: [80]
		ifFalse: [aSymbol = #https
					ifTrue: [443]]

class methods:

as yet unclassified
new

	^ self basicNew initialize

^top


- made by Dandelion -