[Pharo-users] Tonel Fileout

Ben Coman btc at openinworld.com
Sat Jun 30 04:24:36 EDT 2018


>
> On 16 Jun 2018, at 15:38, Ben Coman <btc at openInWorld.com> wrote:
>
> Le 16/06/2018 à 10:43, Ben Coman a écrit :
>
>> How can a fileout/filein be done using Tonel format?
>> In the first case as a script?
>> and secondly as a possible menu option for Pharo?
>>
>> This is to facilitate transfer of student coding exercises for Exercism.
>> http://exercism.io/languages/pharo/launch
>>
>> Could Tonel handle a full package export in one file?
>>
>
> On 16 June 2018 at 17:13, Hilaire <hilaire at drgeo.eu> wrote:
>
>> Hi Ben,
>>
>> I am not sure, but the purpose of Tonel is to propose a file
>> representation of "one class=one file".
>>
>
> Sure thats how Tonel came about, and its how we mostly use it, but is this
> an inherent limitation?
> Each method is prefixed with its class, so from my 100ft viewpoint it
> seems feasible to transport a whole package in one Tonel file.
>
>
> Why not using Fileout st files to transfer the code?
>>
>
> The same question might be asked why Iceberg didn't just use a Fileout at
> class level.
> The Tonel format is more readable, especially minus the scattering of
> exclamation marks.
>
> I also meant to ask, what methods are used to file-in a Tonel file ?
> Or more the point, what method process a string in Tonel format that has
> been downloaded from a website?
>
> Actually, hunting around a bit I found....
>
> TonelParserTest >> testMethodDefList
> shows that... ((TonelParser on: tonelString readStream)
> perform: #methodDefList)
> returns an array of MCMethodDefinitions that respond to #load
> with...
> MCMethodDefinition >> load
> self actualClass
> compile: source
> classified: category
> withStamp: timeStamp
> notifying: nil
>
> And...
> TonelParserTest >> testTypeDef
> shows that ((TonelParser on: tonelString readStream) perform: #typeDef)
> returns a MCClassDefinition that also responds to #load
> with...
> MCClassDefinition >> load
> self createClass
>
>
> So as an experiment I deleted MCMockClassD,
> then in playground evaluated...
>     tonelString := (ZnEasy get: 'https://raw.githubusercontent.com/pharo-
> project/pharo/development/src/MonticelloMocks/MCMockClassD.class.st')
> contents.
>     parser := (TonelParser on: tonelString readStream).
>     classDef := parser perform: #typeDef.
>     methodDefs := parser perform: #methodDefList.
>     classDef load.
>     methodDefs do: [ :md | md load ].
>
> and super cool...   MCMockClassD>>one  was restored.
> So is that the correct way to use it?
>
> cheers -ben
>
>
>
>
On 29 Jun 2018, at 17:11, Tim Mackinnon <tim at testit.works> wrote:

Just as a followup to this - Bens suggestion can be slightly simplified
(and less dependent on implementation details) as:

tonelStream := ‘…path…./src/Polymorph-Widgets-Rules/IconShortcutRule
.class.st <http://iconshortcutrule.class.st/>' asFileReference readStream.
parser := (TonelParser on: tonelStream).
parser document do: [ :item | item load  ].

If you want to load an entire directory you can use a reader (but sadly the
reader doesn’t let you load only one file)

tonelLocator := ‘…path…./src/Polymorph-Widgets-Rules/IconShortcutRule
.class.st <http://iconshortcutrule.class.st/>' asFileReference.
(TonelReader on: tonelLocator fileName: tonelLocator path parent pathString
) loadDefinitions.

Thought this might help someone in the future (particularly if you are
recovering a deleted file(s) from git ;)

Tim


On 30 June 2018 at 07:31, Tim Mackinnon <tim at testit.works> wrote:

> As another output (and an answer to Ben’s question) - to output, you need
> a snapshot - the easiest I could work out was something like:
>
> TonelWriter new sourceDir: '.' asFileReference; writeSnapshot: (MCPackage
> named: HelloWorldTest package name) snapshot.
>
>

hey! thats super cool.  Perhaps we do that writing to a memory file-system,
then upload those files a strings to the Execism server.
Do you have a similar idea for the reverse?

cheers -ben
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.pharo.org/pipermail/pharo-users_lists.pharo.org/attachments/20180630/34d28736/attachment-0001.html>


More information about the Pharo-users mailing list