Skip to content

Instantly share code, notes, and snippets.

@mumez
Created April 19, 2022 13:39
Show Gist options
  • Save mumez/4ff2644ec9b501cd49b63df9c4182755 to your computer and use it in GitHub Desktop.
Save mumez/4ff2644ec9b501cd49b63df9c4182755 to your computer and use it in GitHub Desktop.
A very simple API example for GemStone/S
fileformat utf8
set compile_env: 0
! ------------------- Class definition for MyApi
expectvalue /Class
doit
ZnDefaultGsTransactionalServerDelegate subclass: 'MyApi'
instVarNames: #()
classVars: #()
classInstVars: #()
poolDictionaries: #()
inDictionary: ''
category: 'MyApi-Core'
options: #()
%
expectvalue /Class
doit
MyApi category: 'MyApi-Core'
%
! ------------------- Remove existing behavior from MyApi
removeAllMethods MyApi
removeAllClassMethods MyApi
! ------------------- Class methods for MyApi
! ------------------- Instance methods for MyApi
category: 'actions'
method: MyApi
addMessage: messageText at: topicId
| messages |
messages := self messagesAt: topicId.
messages
add:
{(DateAndTime now asString).
messageText}.
^ messages size
%
category: 'request-handling'
method: MyApi
addMessageRequest: aRequest
| uri topicId message messagesSize |
uri := aRequest uri.
topicId := uri
queryAt: 'topicId'
ifAbsent: [ ^ ZnResponse badRequest: aRequest ].
message := uri
queryAt: 'message'
ifAbsent: [ ^ ZnResponse badRequest: aRequest ].
messagesSize := self addMessage: message at: topicId.
^ self returnJson: messagesSize
%
category: 'initialize-release'
method: MyApi
initialize
super initialize.
self
map: 'messages' to: #'messagesRequest:';
map: 'addMessage' to: #'addMessageRequest:';
yourself
%
category: 'accessing'
method: MyApi
messagesAt: topicId
^ self messagesMap at: topicId ifAbsentPut: [ RcArray new ]
%
category: 'accessing'
method: MyApi
messagesMap
^ UserGlobals at: #'messagesMap' ifAbsentPut: [ Dictionary new ]
%
category: 'request-handling'
method: MyApi
messagesRequest: aRequest
| uri topicId messages entity |
uri := aRequest uri.
topicId := uri
queryAt: 'topicId'
ifAbsent: [ ^ ZnResponse badRequest: aRequest ].
messages := self messagesAt: topicId.
^ self returnJson: messages asArray
%
category: 'private'
method: MyApi
returnJson: anObject
| entity |
entity := ZnEntity
with: (STON toJsonString: anObject)
type: ZnMimeType applicationJson.
^ ZnResponse ok: entity
%
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment