Plug.st
author Claus Gittinger <cg@exept.de>
Fri, 28 Jun 2019 09:04:31 +0200
changeset 4286 add7d9220e53
parent 4241 8c18cc3470d8
child 4338 b91474d7fd90
permissions -rw-r--r--
#OTHER by cg self class name -> self className
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
4241
8c18cc3470d8 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 3940
diff changeset
     1
"{ Encoding: utf8 }"
8c18cc3470d8 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 3940
diff changeset
     2
88
claus
parents: 82
diff changeset
     3
"
claus
parents: 82
diff changeset
     4
 COPYRIGHT (c) 1995 by Claus Gittinger
114
e577a2f332d0 uff - version methods changed to return stings
Claus Gittinger <cg@exept.de>
parents: 96
diff changeset
     5
	      All Rights Reserved
88
claus
parents: 82
diff changeset
     6
claus
parents: 82
diff changeset
     7
 This software is furnished under a license and may be used
claus
parents: 82
diff changeset
     8
 only in accordance with the terms of that license and with the
claus
parents: 82
diff changeset
     9
 inclusion of the above copyright notice.   This software may not
claus
parents: 82
diff changeset
    10
 be provided or otherwise made available to, or used by, any
claus
parents: 82
diff changeset
    11
 other person.  No title to or ownership of the software is
claus
parents: 82
diff changeset
    12
 hereby transferred.
claus
parents: 82
diff changeset
    13
"
3940
d5fb7f7790eb #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 2101
diff changeset
    14
"{ Package: 'stx:libview2' }"
88
claus
parents: 82
diff changeset
    15
3940
d5fb7f7790eb #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 2101
diff changeset
    16
"{ NameSpace: Smalltalk }"
1554
d01ffa42ca7a implements -> includesSelector
Claus Gittinger <cg@exept.de>
parents: 1317
diff changeset
    17
55
409211feffa2 *** empty log message ***
claus
parents: 54
diff changeset
    18
Model subclass:#Plug
2100
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
    19
	instanceVariableNames:'simulatedProtocol inheritedClasses'
162
cbbd2f3422a3 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 137
diff changeset
    20
	classVariableNames:''
cbbd2f3422a3 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 137
diff changeset
    21
	poolDictionaries:''
cbbd2f3422a3 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 137
diff changeset
    22
	category:'Kernel-Objects'
54
f8592e95890f Initial revision
claus
parents:
diff changeset
    23
!
f8592e95890f Initial revision
claus
parents:
diff changeset
    24
f8592e95890f Initial revision
claus
parents:
diff changeset
    25
!Plug class methodsFor:'documentation'!
f8592e95890f Initial revision
claus
parents:
diff changeset
    26
88
claus
parents: 82
diff changeset
    27
copyright
claus
parents: 82
diff changeset
    28
"
claus
parents: 82
diff changeset
    29
 COPYRIGHT (c) 1995 by Claus Gittinger
114
e577a2f332d0 uff - version methods changed to return stings
Claus Gittinger <cg@exept.de>
parents: 96
diff changeset
    30
	      All Rights Reserved
88
claus
parents: 82
diff changeset
    31
claus
parents: 82
diff changeset
    32
 This software is furnished under a license and may be used
claus
parents: 82
diff changeset
    33
 only in accordance with the terms of that license and with the
claus
parents: 82
diff changeset
    34
 inclusion of the above copyright notice.   This software may not
claus
parents: 82
diff changeset
    35
 be provided or otherwise made available to, or used by, any
claus
parents: 82
diff changeset
    36
 other person.  No title to or ownership of the software is
claus
parents: 82
diff changeset
    37
 hereby transferred.
claus
parents: 82
diff changeset
    38
"
claus
parents: 82
diff changeset
    39
!
claus
parents: 82
diff changeset
    40
54
f8592e95890f Initial revision
claus
parents:
diff changeset
    41
documentation
f8592e95890f Initial revision
claus
parents:
diff changeset
    42
"
228
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
    43
    A Plug is an object which simulates a protocol and evaluates
54
f8592e95890f Initial revision
claus
parents:
diff changeset
    44
    a corresponding block when receiving messages.
2100
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
    45
    A plug's interface can be changed dynamically.
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
    46
    A plug can also be told to simulate inheriting messages from other classes,
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
    47
    even multiple inheritance is possible.
228
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
    48
226
c5a265ceddd1 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 224
diff changeset
    49
    Its main use is for the demo doIts, to play the role of a model,
228
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
    50
    when no actual modelClass is available for the demonstration.
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
    51
    However, it can be used wherever some object is needed which responds to
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
    52
    some protocol AND you do not want to add a class for it
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
    53
    (lightWeight objects).
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
    54
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
    55
    There is a slight performance penalty - compared to `normal' objects,
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
    56
    getting `normal' messages, though.
224
fe3164373601 documentation
Claus Gittinger <cg@exept.de>
parents: 162
diff changeset
    57
3940
d5fb7f7790eb #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 2101
diff changeset
    58
    [caveat:]
d5fb7f7790eb #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 2101
diff changeset
    59
        The name 'plug' was chosen because instances can be 'plugged' in anywhere.
d5fb7f7790eb #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 2101
diff changeset
    60
        That name was invented way before the name 'mock' became popular;
d5fb7f7790eb #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 2101
diff changeset
    61
        nowadays, it would probably be called 'PluggableMock'...
d5fb7f7790eb #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 2101
diff changeset
    62
        
224
fe3164373601 documentation
Claus Gittinger <cg@exept.de>
parents: 162
diff changeset
    63
    [author:]
fe3164373601 documentation
Claus Gittinger <cg@exept.de>
parents: 162
diff changeset
    64
        Claus Gittinger
228
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
    65
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
    66
    [see also:]
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
    67
        Model
54
f8592e95890f Initial revision
claus
parents:
diff changeset
    68
"
f8592e95890f Initial revision
claus
parents:
diff changeset
    69
!
f8592e95890f Initial revision
claus
parents:
diff changeset
    70
f8592e95890f Initial revision
claus
parents:
diff changeset
    71
examples
f8592e95890f Initial revision
claus
parents:
diff changeset
    72
"
2100
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
    73
  a simple plug:
228
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
    74
                                                                        [exBegin]
2100
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
    75
        |plug|
54
f8592e95890f Initial revision
claus
parents:
diff changeset
    76
2100
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
    77
        plug := Plug new.
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
    78
        plug respondTo:#foo  with:[Transcript showCR:'Plug received foo'].
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
    79
        plug respondTo:#foo: with:[:arg | Transcript showCR:'Plug received foo: ', arg printString].
54
f8592e95890f Initial revision
claus
parents:
diff changeset
    80
2100
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
    81
        plug foo.
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
    82
        plug foo:'some argument'
228
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
    83
                                                                        [exEnd]
162
cbbd2f3422a3 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 137
diff changeset
    84
2101
58a78b51f78e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2100
diff changeset
    85
360
c5e6039033e7 another example
Claus Gittinger <cg@exept.de>
parents: 268
diff changeset
    86
  using a plug as a generator (simulates a readStream):
c5e6039033e7 another example
Claus Gittinger <cg@exept.de>
parents: 268
diff changeset
    87
                                                                        [exBegin]
2100
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
    88
        |generator num|
360
c5e6039033e7 another example
Claus Gittinger <cg@exept.de>
parents: 268
diff changeset
    89
2100
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
    90
        num := 0.
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
    91
        generator := Plug new.
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
    92
        generator respondTo:#next   with:[num := num + 1. num].
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
    93
        generator respondTo:#atEnd  with:[false].
360
c5e6039033e7 another example
Claus Gittinger <cg@exept.de>
parents: 268
diff changeset
    94
2100
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
    95
        10 timesRepeat:[
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
    96
            Transcript showCR:(generator next)
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
    97
        ]
360
c5e6039033e7 another example
Claus Gittinger <cg@exept.de>
parents: 268
diff changeset
    98
                                                                        [exEnd]
162
cbbd2f3422a3 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 137
diff changeset
    99
2101
58a78b51f78e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2100
diff changeset
   100
58a78b51f78e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2100
diff changeset
   101
  simulating a big collection:
58a78b51f78e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2100
diff changeset
   102
                                                                        [exBegin]
58a78b51f78e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2100
diff changeset
   103
        |virtualList|
58a78b51f78e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2100
diff changeset
   104
58a78b51f78e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2100
diff changeset
   105
        virtualList := Plug new.
58a78b51f78e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2100
diff changeset
   106
        virtualList inheritFrom:SequenceableCollection.
58a78b51f78e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2100
diff changeset
   107
        virtualList respondTo:#size with:[ 1000000 ].
58a78b51f78e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2100
diff changeset
   108
        virtualList respondTo:#at:  with:[:lineNr | 'List line Nr. ' , lineNr printString ].
58a78b51f78e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2100
diff changeset
   109
        virtualList inspect.
58a78b51f78e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2100
diff changeset
   110
                                                                        [exEnd]
58a78b51f78e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2100
diff changeset
   111
58a78b51f78e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2100
diff changeset
   112
162
cbbd2f3422a3 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 137
diff changeset
   113
  simulating ``instance variables'':
cbbd2f3422a3 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 137
diff changeset
   114
  (actually, this is somewhat expensive - the contexts locals are used for them ...)
cbbd2f3422a3 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 137
diff changeset
   115
  be careful with unintended variable sharing (if plugs are created in a loop ..)
228
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
   116
                                                                        [exBegin]
2100
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
   117
        |plug1 plug2 local1 local2|
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
   118
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
   119
        plug1 := Plug new.
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
   120
        plug1 respondTo:#get  with:[local1].
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
   121
        plug1 respondTo:#set: with:[:arg | local1 := arg].
162
cbbd2f3422a3 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 137
diff changeset
   122
2100
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
   123
        plug2 := Plug new.
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
   124
        plug2 respondTo:#get  with:[local2].
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
   125
        plug2 respondTo:#set: with:[:arg | local2 := arg].
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
   126
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
   127
        Transcript show:'plug1''s value: '; showCR:plug1 get.
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
   128
        Transcript show:'plug2''s value: '; showCR:plug2 get.
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
   129
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
   130
        plug1 set:5.
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
   131
        plug2 set:17.
162
cbbd2f3422a3 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 137
diff changeset
   132
2100
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
   133
        Transcript show:'plug1''s value: '; showCR:plug1 get.
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
   134
        Transcript show:'plug2''s value: '; showCR:plug2 get.
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
   135
                                                                        [exEnd]
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
   136
2101
58a78b51f78e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2100
diff changeset
   137
2100
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
   138
  simulating a big list in a ListView 
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
   139
  (real applications would read the lines from a database or file):
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
   140
                                                                        [exBegin]
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
   141
        |virtualList top lv|
162
cbbd2f3422a3 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 137
diff changeset
   142
2100
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
   143
        virtualList := Plug new.
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
   144
        virtualList inheritFrom:SequenceableCollection.
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
   145
        virtualList respondTo:#size with:[ 1000000 ].
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
   146
        virtualList respondTo:#at:  with:[:lineNr | 'List line Nr. ' , lineNr printString ].
162
cbbd2f3422a3 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 137
diff changeset
   147
2100
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
   148
        top := StandardSystemView extent:200@200.
162
cbbd2f3422a3 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 137
diff changeset
   149
2100
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
   150
        lv := ScrollableView for:ListView in:top.
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
   151
        lv origin:0.0 @ 0.0 corner:1.0 @ 1.0. 
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
   152
        lv list:virtualList expandTabs:false scanForNonStrings:false includesNonStrings:false.
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
   153
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
   154
        top open.
228
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
   155
                                                                        [exEnd]
54
f8592e95890f Initial revision
claus
parents:
diff changeset
   156
"
f8592e95890f Initial revision
claus
parents:
diff changeset
   157
! !
f8592e95890f Initial revision
claus
parents:
diff changeset
   158
f8592e95890f Initial revision
claus
parents:
diff changeset
   159
!Plug class methodsFor:'instance creation'!
f8592e95890f Initial revision
claus
parents:
diff changeset
   160
f8592e95890f Initial revision
claus
parents:
diff changeset
   161
new
232
b898f5762952 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 228
diff changeset
   162
    ^ super basicNew privateInitialize
228
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
   163
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
   164
    "Modified: 27.4.1996 / 16:16:59 / cg"
54
f8592e95890f Initial revision
claus
parents:
diff changeset
   165
! !
f8592e95890f Initial revision
claus
parents:
diff changeset
   166
137
449db28201ec checkin from browser
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   167
!Plug methodsFor:'initialization'!
449db28201ec checkin from browser
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   168
232
b898f5762952 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 228
diff changeset
   169
privateInitialize
228
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
   170
    "this method is NOT called `#initialize' to allow plugging that
137
449db28201ec checkin from browser
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   171
     selector ..."
449db28201ec checkin from browser
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   172
449db28201ec checkin from browser
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   173
    simulatedProtocol := IdentityDictionary new.
228
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
   174
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
   175
    "Modified: 27.4.1996 / 16:15:45 / cg"
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
   176
    "Created: 27.4.1996 / 16:17:07 / cg"
137
449db28201ec checkin from browser
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   177
! !
449db28201ec checkin from browser
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   178
54
f8592e95890f Initial revision
claus
parents:
diff changeset
   179
!Plug methodsFor:'message sending'!
f8592e95890f Initial revision
claus
parents:
diff changeset
   180
1760
48478a48da82 *** empty log message ***
martin
parents: 1554
diff changeset
   181
at:key
48478a48da82 *** empty log message ***
martin
parents: 1554
diff changeset
   182
    "catch this one - its so common"
48478a48da82 *** empty log message ***
martin
parents: 1554
diff changeset
   183
48478a48da82 *** empty log message ***
martin
parents: 1554
diff changeset
   184
    ^ self doesNotUnderstand:(Message selector:#at: arguments:(Array with:key))
48478a48da82 *** empty log message ***
martin
parents: 1554
diff changeset
   185
!
48478a48da82 *** empty log message ***
martin
parents: 1554
diff changeset
   186
48478a48da82 *** empty log message ***
martin
parents: 1554
diff changeset
   187
at:key put:value
48478a48da82 *** empty log message ***
martin
parents: 1554
diff changeset
   188
    ^ self doesNotUnderstand:(Message selector:#at:put: arguments:(Array with:key with:value))
48478a48da82 *** empty log message ***
martin
parents: 1554
diff changeset
   189
!
48478a48da82 *** empty log message ***
martin
parents: 1554
diff changeset
   190
54
f8592e95890f Initial revision
claus
parents:
diff changeset
   191
doesNotUnderstand:aMessage
228
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
   192
    "catch unhandled messages by looking in my simulated protocol
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
   193
     definition; if there is some block for it, return its value.
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
   194
     Otherwise, fall into the real doesNotUnderstand error."
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
   195
54
f8592e95890f Initial revision
claus
parents:
diff changeset
   196
    |block|
f8592e95890f Initial revision
claus
parents:
diff changeset
   197
2041
fd1527246662 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1982
diff changeset
   198
    block := simulatedProtocol at:(aMessage selector) ifAbsent:[].
2100
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
   199
    block notNil ifTrue:[
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
   200
        ^ block valueWithArguments:(aMessage arguments)
54
f8592e95890f Initial revision
claus
parents:
diff changeset
   201
    ].
2100
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
   202
    inheritedClasses notNil ifTrue:[
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
   203
        inheritedClasses do:[:eachClass |
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
   204
            |method|
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
   205
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
   206
            method := eachClass lookupMethodFor:(aMessage selector).
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
   207
            method notNil ifTrue:[
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
   208
                ^ method valueWithReceiver:self arguments:(aMessage arguments).
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
   209
            ].
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
   210
        ].
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
   211
    ].
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
   212
    ^ super doesNotUnderstand:aMessage
228
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
   213
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
   214
    "Modified: 27.4.1996 / 16:15:34 / cg"
377
afe504923e5b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 360
diff changeset
   215
!
afe504923e5b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 360
diff changeset
   216
2101
58a78b51f78e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2100
diff changeset
   217
isSequenceable
4241
8c18cc3470d8 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 3940
diff changeset
   218
    "return true, if the receiver is some kind of sequenceableCollection,
8c18cc3470d8 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 3940
diff changeset
   219
     i.e. if its elements are accessable by an integer index,
8c18cc3470d8 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 3940
diff changeset
   220
     and support the do:-protocol."
8c18cc3470d8 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 3940
diff changeset
   221
2101
58a78b51f78e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2100
diff changeset
   222
    "catch this one - its so common"
58a78b51f78e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2100
diff changeset
   223
58a78b51f78e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2100
diff changeset
   224
    ^ self doesNotUnderstand:(Message selector:#isSequenceable arguments:#())
4241
8c18cc3470d8 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 3940
diff changeset
   225
8c18cc3470d8 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 3940
diff changeset
   226
    "Modified (comment): / 03-03-2019 / 00:09:24 / Claus Gittinger"
2101
58a78b51f78e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2100
diff changeset
   227
!
58a78b51f78e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2100
diff changeset
   228
2100
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
   229
size
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
   230
    "catch this one - its so common"
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
   231
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
   232
    ^ self doesNotUnderstand:(Message selector:#size arguments:#())
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
   233
!
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
   234
1317
18aabf275ec2 allow #update:with:from:
Claus Gittinger <cg@exept.de>
parents: 444
diff changeset
   235
update:something with:aParameter from:changedObject
18aabf275ec2 allow #update:with:from:
Claus Gittinger <cg@exept.de>
parents: 444
diff changeset
   236
    "catch unhandled messages by looking in my simulated protocol
18aabf275ec2 allow #update:with:from:
Claus Gittinger <cg@exept.de>
parents: 444
diff changeset
   237
     definition; if there is some block for it, return its value.
18aabf275ec2 allow #update:with:from:
Claus Gittinger <cg@exept.de>
parents: 444
diff changeset
   238
     Otherwise, fall into the real update."
18aabf275ec2 allow #update:with:from:
Claus Gittinger <cg@exept.de>
parents: 444
diff changeset
   239
18aabf275ec2 allow #update:with:from:
Claus Gittinger <cg@exept.de>
parents: 444
diff changeset
   240
    |block|
18aabf275ec2 allow #update:with:from:
Claus Gittinger <cg@exept.de>
parents: 444
diff changeset
   241
18aabf275ec2 allow #update:with:from:
Claus Gittinger <cg@exept.de>
parents: 444
diff changeset
   242
    block := simulatedProtocol at:#'update:with:from:' ifAbsent:[].
18aabf275ec2 allow #update:with:from:
Claus Gittinger <cg@exept.de>
parents: 444
diff changeset
   243
    block isNil ifTrue:[
18aabf275ec2 allow #update:with:from:
Claus Gittinger <cg@exept.de>
parents: 444
diff changeset
   244
        ^ super update:something with:aParameter from:changedObject
18aabf275ec2 allow #update:with:from:
Claus Gittinger <cg@exept.de>
parents: 444
diff changeset
   245
    ].
18aabf275ec2 allow #update:with:from:
Claus Gittinger <cg@exept.de>
parents: 444
diff changeset
   246
    ^ block valueWithArguments:(Array with:something with:aParameter with:changedObject)
18aabf275ec2 allow #update:with:from:
Claus Gittinger <cg@exept.de>
parents: 444
diff changeset
   247
18aabf275ec2 allow #update:with:from:
Claus Gittinger <cg@exept.de>
parents: 444
diff changeset
   248
!
18aabf275ec2 allow #update:with:from:
Claus Gittinger <cg@exept.de>
parents: 444
diff changeset
   249
377
afe504923e5b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 360
diff changeset
   250
value
afe504923e5b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 360
diff changeset
   251
    "catch this one - its so common"
afe504923e5b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 360
diff changeset
   252
1982
61c4a1986224 special case for #value message
Claus Gittinger <cg@exept.de>
parents: 1760
diff changeset
   253
    |block|
377
afe504923e5b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 360
diff changeset
   254
1982
61c4a1986224 special case for #value message
Claus Gittinger <cg@exept.de>
parents: 1760
diff changeset
   255
    block := simulatedProtocol at:#value ifAbsent:[].
61c4a1986224 special case for #value message
Claus Gittinger <cg@exept.de>
parents: 1760
diff changeset
   256
    block isNil ifTrue:[
61c4a1986224 special case for #value message
Claus Gittinger <cg@exept.de>
parents: 1760
diff changeset
   257
        ^ self
61c4a1986224 special case for #value message
Claus Gittinger <cg@exept.de>
parents: 1760
diff changeset
   258
    ].
61c4a1986224 special case for #value message
Claus Gittinger <cg@exept.de>
parents: 1760
diff changeset
   259
    ^ block valueWithArguments:#()
377
afe504923e5b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 360
diff changeset
   260
!
afe504923e5b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 360
diff changeset
   261
afe504923e5b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 360
diff changeset
   262
value:arg
afe504923e5b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 360
diff changeset
   263
    "catch this one - its so common"
afe504923e5b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 360
diff changeset
   264
afe504923e5b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 360
diff changeset
   265
    ^ self doesNotUnderstand:(Message selector:#value: argument:arg)
afe504923e5b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 360
diff changeset
   266
afe504923e5b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 360
diff changeset
   267
    "Created: 21.1.1997 / 15:21:36 / cg"
54
f8592e95890f Initial revision
claus
parents:
diff changeset
   268
! !
f8592e95890f Initial revision
claus
parents:
diff changeset
   269
137
449db28201ec checkin from browser
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   270
!Plug methodsFor:'protocol definition'!
449db28201ec checkin from browser
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   271
228
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
   272
forgetAbout:aSelector
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
   273
    "tell the receiver to forget about how to respond to the given by selector"
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
   274
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
   275
    simulatedProtocol removeKey:aSelector ifAbsent:nil
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
   276
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
   277
    "
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
   278
     |p|
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
   279
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
   280
     p := Plug new.
268
1998023f12dc showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 232
diff changeset
   281
     p respondTo:#foo  with:[Transcript showCR:'foo'].
1998023f12dc showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 232
diff changeset
   282
     p respondTo:#foo: with:[:arg | Transcript show:'foo:'; showCR:arg].
228
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
   283
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
   284
     p foo.
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
   285
     p foo:'hello'.
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
   286
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
   287
     p forgetAbout:#foo.
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
   288
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
   289
     p foo.
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
   290
    "
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
   291
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
   292
    "Modified: 27.4.1996 / 16:14:19 / cg"
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
   293
    "Created: 27.4.1996 / 16:19:08 / cg"
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
   294
!
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
   295
2100
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
   296
inheritFrom:aClass
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
   297
    "very tricky - change the inheritance.
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
   298
     This cannot be done by changing my class directly, because the instance layout
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
   299
     must still be correct for Plugs instance variables.
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
   300
     Therefore, the inheritance is remembered, and done dynamically in the doesNotUnderstand
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
   301
     implementation."
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
   302
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
   303
    self assert:(aClass instSize == 0).
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
   304
    inheritedClasses isNil ifTrue:[
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
   305
        inheritedClasses := Array with:aClass
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
   306
    ] ifFalse:[
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
   307
        inheritedClasses := inheritedClasses copyWith:aClass
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
   308
    ].
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
   309
!
17cc7c9aa82d plugs can now inherit
Claus Gittinger <cg@exept.de>
parents: 2041
diff changeset
   310
137
449db28201ec checkin from browser
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   311
respondTo:aSelector with:aBlock
228
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
   312
    "tell the receiver to respond to a message given by selector,
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
   313
     with evaluating aBlock. The number of arguments as defined by the 
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
   314
     selector must match the number of blockArsg expected by the block.
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
   315
     The value returned from aBlock will be the value returned from the
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
   316
     message."
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
   317
1554
d01ffa42ca7a implements -> includesSelector
Claus Gittinger <cg@exept.de>
parents: 1317
diff changeset
   318
    (self class includesSelector:aSelector) ifFalse:[
444
4ad5cc26ad6a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 377
diff changeset
   319
        (self class superclass canUnderstand:aSelector) ifTrue:[
377
afe504923e5b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 360
diff changeset
   320
afe504923e5b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 360
diff changeset
   321
            "/ sorry - this implementation is too quick of a hack.
afe504923e5b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 360
diff changeset
   322
            "/ (must be rewritten to inherit from nil, in order 
afe504923e5b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 360
diff changeset
   323
            "/  to be able to catch more ...)
afe504923e5b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 360
diff changeset
   324
afe504923e5b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 360
diff changeset
   325
            self error:'inherited message cannot be redefined: ' , aSelector.
afe504923e5b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 360
diff changeset
   326
        ]
afe504923e5b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 360
diff changeset
   327
    ].
137
449db28201ec checkin from browser
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   328
    simulatedProtocol at:aSelector put:aBlock
228
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
   329
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
   330
    "
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
   331
     |p|
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
   332
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
   333
     p := Plug new.
268
1998023f12dc showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 232
diff changeset
   334
     p respondTo:#foo  with:[Transcript showCR:'foo'].
1998023f12dc showCr: -> showCR:
Claus Gittinger <cg@exept.de>
parents: 232
diff changeset
   335
     p respondTo:#foo: with:[:arg | Transcript show:'foo:'; showCR:arg].
228
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
   336
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
   337
     p foo.
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
   338
     p foo:'hello'
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
   339
    "
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
   340
444
4ad5cc26ad6a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 377
diff changeset
   341
    "Modified: 21.2.1997 / 18:35:07 / cg"
137
449db28201ec checkin from browser
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   342
! !
449db28201ec checkin from browser
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   343
82
claus
parents: 55
diff changeset
   344
!Plug methodsFor:'queries'!
claus
parents: 55
diff changeset
   345
claus
parents: 55
diff changeset
   346
respondsTo:aSelector
228
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
   347
    "return true, if the receiver responds to a message"
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
   348
82
claus
parents: 55
diff changeset
   349
    (simulatedProtocol includesKey:aSelector) ifTrue:[^ true].
claus
parents: 55
diff changeset
   350
    ^ super respondsTo:aSelector
228
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
   351
8f73cdf66b60 commentary
Claus Gittinger <cg@exept.de>
parents: 226
diff changeset
   352
    "Modified: 27.4.1996 / 16:14:41 / cg"
82
claus
parents: 55
diff changeset
   353
! !
claus
parents: 55
diff changeset
   354
137
449db28201ec checkin from browser
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   355
!Plug class methodsFor:'documentation'!
54
f8592e95890f Initial revision
claus
parents:
diff changeset
   356
137
449db28201ec checkin from browser
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   357
version
3940
d5fb7f7790eb #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 2101
diff changeset
   358
    ^ '$Header$'
54
f8592e95890f Initial revision
claus
parents:
diff changeset
   359
! !
3940
d5fb7f7790eb #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 2101
diff changeset
   360