[Pharo-users] Tonel Fileout

Esteban Lorenzano estebanlm at gmail.com
Sat Jun 16 17:10:33 EDT 2018

> On 16 Jun 2018, at 16: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 <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 <mailto: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? 

in fact, Martin McClure is working to make tonel available to work on file-per-package and even file-per-method again. In general, we do not want one or the other, but there are certain contexts where those can be useful.

> 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

well, while file-out is good, we want to use Tonel format also to file-out and file-in. Not a replacement but an addition. Because the format is more readable, is sometimes more suitable for exchange too.


> . 
> 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 <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

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.pharo.org/pipermail/pharo-users_lists.pharo.org/attachments/20180616/76142c0c/attachment.html>

More information about the Pharo-users mailing list