extensions.st
author jv
Thu, 30 Aug 2012 12:00:08 +0000
changeset 2 a26b35650f67
parent 1 8a5b7afa28ff
child 3 9a409f9edb67
permissions -rw-r--r--
- CypressMethodStructure changed: #extractCypressSource: - stx_goodies_cypress changed: #classNamesAndAttributes #extensionMethodNames #preRequisites - extensions ...
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
8a5b7afa28ff - First shot
jv
parents:
diff changeset
     1
"{ Package: 'stx:goodies/cypress' }"!
8a5b7afa28ff - First shot
jv
parents:
diff changeset
     2
2
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
     3
!Array methodsFor:'*Cypress-Structure'!
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
     4
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
     5
asCypressPropertyObject
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
     6
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
     7
	^self collect: [:each | each asCypressPropertyObject ]
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
     8
! !
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
     9
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
    10
!Array methodsFor:'*Cypress-Structure'!
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
    11
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
    12
writeCypressJsonOn: aStream forHtml: forHtml indent: startIndent
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
    13
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
    14
	| indent |
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
    15
	aStream 
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
    16
		nextPutAll: '[';
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
    17
		newLine.
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
    18
	indent := startIndent + 1.
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
    19
	1 to: self size do: [:index | | item | 
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
    20
		item := self at: index.
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
    21
		aStream tab: indent.
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
    22
		item writeCypressJsonOn: aStream forHtml: forHtml indent: indent.
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
    23
		index < self size ifTrue: [ aStream nextPutAll: ','; newLine ]].
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
    24
	self size = 0 ifTrue: [ aStream tab: indent ].
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
    25
	aStream nextPutAll: ' ]'
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
    26
! !
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
    27
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
    28
!Boolean methodsFor:'*Cypress-Structure'!
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
    29
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
    30
writeCypressJsonOn: aStream forHtml: forHtml indent: startIndent
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
    31
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
    32
	aStream 
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
    33
		nextPutAll: self printString
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
    34
! !
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
    35
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
    36
!Character methodsFor:'*Cypress-Structure'!
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
    37
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
    38
isSafeForHTTP
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
    39
        "whether a character is 'safe', or needs to be escaped when used, eg, in a URL"
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
    40
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
    41
        ^  asciivalue < 128
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
    42
                and: [ self isAlphaNumeric
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
    43
                                or: [ '.-_' includes: self ]]
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
    44
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
    45
    "Modified: / 30-08-2012 / 13:57:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
    46
! !
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
    47
1
8a5b7afa28ff - First shot
jv
parents:
diff changeset
    48
!CharacterArray methodsFor:'Compatibility-Cuis'!
8a5b7afa28ff - First shot
jv
parents:
diff changeset
    49
8a5b7afa28ff - First shot
jv
parents:
diff changeset
    50
withLineEndings: lineEndString
8a5b7afa28ff - First shot
jv
parents:
diff changeset
    51
    | stringColl |
8a5b7afa28ff - First shot
jv
parents:
diff changeset
    52
8a5b7afa28ff - First shot
jv
parents:
diff changeset
    53
    self assert: lineEndString size == 1.
8a5b7afa28ff - First shot
jv
parents:
diff changeset
    54
8a5b7afa28ff - First shot
jv
parents:
diff changeset
    55
    stringColl := self asStringCollection.
8a5b7afa28ff - First shot
jv
parents:
diff changeset
    56
8a5b7afa28ff - First shot
jv
parents:
diff changeset
    57
    ^stringColl
8a5b7afa28ff - First shot
jv
parents:
diff changeset
    58
        asStringWith: lineEndString first 
8a5b7afa28ff - First shot
jv
parents:
diff changeset
    59
        from:1 to:(stringColl size) 
8a5b7afa28ff - First shot
jv
parents:
diff changeset
    60
        compressTabs:false 
8a5b7afa28ff - First shot
jv
parents:
diff changeset
    61
        final:nil
8a5b7afa28ff - First shot
jv
parents:
diff changeset
    62
8a5b7afa28ff - First shot
jv
parents:
diff changeset
    63
    "Created: / 30-08-2012 / 11:27:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
8a5b7afa28ff - First shot
jv
parents:
diff changeset
    64
! !
8a5b7afa28ff - First shot
jv
parents:
diff changeset
    65
8a5b7afa28ff - First shot
jv
parents:
diff changeset
    66
!CharacterArray class methodsFor:'Compatibility-Cuis'!
8a5b7afa28ff - First shot
jv
parents:
diff changeset
    67
8a5b7afa28ff - First shot
jv
parents:
diff changeset
    68
lfString
8a5b7afa28ff - First shot
jv
parents:
diff changeset
    69
8a5b7afa28ff - First shot
jv
parents:
diff changeset
    70
    ^String with: Character lf.
8a5b7afa28ff - First shot
jv
parents:
diff changeset
    71
8a5b7afa28ff - First shot
jv
parents:
diff changeset
    72
    "Created: / 30-08-2012 / 11:27:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
8a5b7afa28ff - First shot
jv
parents:
diff changeset
    73
! !
8a5b7afa28ff - First shot
jv
parents:
diff changeset
    74
2
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
    75
!Class methodsFor:'*Cypress-Definitions'!
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
    76
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
    77
asCypressClassDefinition
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
    78
	^CypressClassDefinition
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
    79
		name: self name
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
    80
		superclassName: self superclass name
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
    81
		category: self category 
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
    82
		instVarNames: self instVarNames
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
    83
		classInstVarNames: self class instVarNames
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
    84
		comment: self comment
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
    85
! !
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
    86
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
    87
!Dictionary methodsFor:'*Cypress-Structure'!
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
    88
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
    89
asCypressPropertyObject
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
    90
    self associations do: [ :assoc | self at: assoc key put: assoc value asCypressPropertyObject ]
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
    91
! !
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
    92
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
    93
!Dictionary methodsFor:'*Cypress-Structure'!
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
    94
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
    95
writeCypressJsonOn: aStream forHtml: forHtml indent: startIndent
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
    96
    | indent count |
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
    97
    indent := startIndent.
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
    98
    aStream
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
    99
        nextPutAll: '{';
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   100
        newLine.
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   101
    count := 0.
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   102
    indent := indent + 1.
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   103
    (self keys sort: [ :a :b | a <= b ])
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   104
        do: [ :key | 
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   105
            | value |
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   106
            value := self at: key.
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   107
            count := count + 1.
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   108
            aStream tab: indent.
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   109
            key writeCypressJsonOn: aStream forHtml: forHtml indent: indent.
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   110
            aStream nextPutAll: ' : '.
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   111
            value writeCypressJsonOn: aStream forHtml: forHtml indent: indent.
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   112
            count < self size
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   113
                ifTrue: [ 
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   114
                    aStream
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   115
                        nextPutAll: ',';
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   116
                        newLine ] ].
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   117
    self size = 0
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   118
        ifTrue: [ aStream tab: indent ].
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   119
    aStream nextPutAll: ' }'
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   120
! !
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   121
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   122
!Number methodsFor:'*Cypress-Structure'!
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   123
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   124
writeCypressJsonOn: aStream forHtml: forHtml indent: startIndent
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   125
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   126
	aStream 
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   127
		nextPutAll: self printString
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   128
! !
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   129
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   130
!Object methodsFor:'*Cypress-Structure'!
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   131
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   132
asCypressPropertyObject
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   133
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   134
	^self
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   135
! !
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   136
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   137
!String methodsFor:'*Cypress-Structure'!
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   138
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   139
asCypressPropertyObject
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   140
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   141
	^self unescapePercents withLineEndings: String lfString
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   142
! !
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   143
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   144
!String methodsFor:'*Cypress-Structure'!
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   145
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   146
encodeForHTTP
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   147
	"change dangerous characters to their %XX form, for use in HTTP transactions"
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   148
	| encodedStream |
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   149
	encodedStream _ WriteStream on: (String new).
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   150
	
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   151
	1 to: self size do: [ :n | | c |
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   152
		c := self at: n.
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   153
		c isSafeForHTTP ifTrue: [ encodedStream nextPut: c ] ifFalse: [
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   154
			encodedStream nextPut: $%.
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   155
			encodedStream nextPut: (c asciiValue // 16) asHexDigit.
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   156
			encodedStream nextPut: (c asciiValue \\ 16) asHexDigit.
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   157
		]
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   158
	].
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   159
	^encodedStream contents.
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   160
! !
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   161
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   162
!String methodsFor:'*Cypress-Structure'!
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   163
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   164
writeCypressJsonOn: aStream forHtml: forHtml indent: startIndent
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   165
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   166
	aStream 
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   167
		nextPutAll: '"';
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   168
		nextPutAll: (forHtml
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   169
			ifTrue: [ (self withLineEndings: String lfString) encodeForHTTP ]
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   170
			ifFalse: [ self withLineEndings: String lfString ]);
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   171
		nextPutAll: '"'
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   172
! !
a26b35650f67 - CypressMethodStructure
jv
parents: 1
diff changeset
   173
1
8a5b7afa28ff - First shot
jv
parents:
diff changeset
   174
!stx_goodies_cypress class methodsFor:'documentation'!
8a5b7afa28ff - First shot
jv
parents:
diff changeset
   175
8a5b7afa28ff - First shot
jv
parents:
diff changeset
   176
extensionsVersion_SVN
8a5b7afa28ff - First shot
jv
parents:
diff changeset
   177
    ^ '$Id::                                                                                                                        $'
8a5b7afa28ff - First shot
jv
parents:
diff changeset
   178
! !