[Pharo-users] Tonel Fileout

Tim Mackinnon tim at testit.works
Sat Jun 30 13:15:15 EDT 2018


I think the tests for Tonel reader/writer do exactly that in memory trick - so I think we could get a no e soln. But to get 1.0 I think we get a menu item running with import/export and then we can in parallel write examples and build out a better integration.

Would be nice to show we can play in the same pools as the other children ;)

Tim

Sent from my iPhone


Sent from my iPhone

On 30 Jun 2018, at 09:24, Ben Coman <btc at openinworld.com> wrote:

>>>> 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' 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' 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/0aa09f4e/attachment.html>


More information about the Pharo-users mailing list