[Pharo-users] Tonel Fileout
tim at testit.works
Fri Jun 29 12:11:14 EDT 2018
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 ;)
> 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 <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?
> 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
> MCMethodDefinition >> load
> self actualClass
> compile: source
> classified: category
> withStamp: timeStamp
> notifying: nil
> TonelParserTest >> testTypeDef
> shows that ((TonelParser on: tonelString readStream) perform: #typeDef)
> returns a MCClassDefinition that also responds to #load
> 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...
More information about the Pharo-users