[Pharo-dev] Add download+uncompress behavior to Metacello?

Hernán Morales Durand hernan.morales at gmail.com
Thu Apr 21 00:05:44 EDT 2016


Hi,

I checked Metacello configurations but I don't know where to add such
methods.
One option is to add them to Object but I don't like to add methods there.
I guess Metacello uses "template methods" somewhere but this
download+uncompress feature is not something used by all projects.

Where do you recommend to add them?

Hernán




2016-04-19 10:47 GMT-03:00 stepharo <stepharo at free.fr>:

> packaged them first :)
>
> Stef
>
> Le 19/4/16 15:14, Hernán Morales Durand a écrit :
>
>
>> Is there a chance to get this methods (or any better versions of them)
>> added to Metacello?
>>
>> >>extractZip: fileRef in: dst
>>     " If fileRef is a ZIP archive, uncompress its contents in dst and
>> delete it "
>>
>>     | zipArchive |
>>     (fileRef fullName endsWith: '.zip')
>>         ifFalse: [ ^ self ].
>>     zipArchive := ZipArchive new.
>>     [ zipArchive
>>         readFrom: fileRef fullName;
>>         extractAllTo: dst ]
>>         ensure: [ zipArchive close ].
>>     fileRef delete
>>
>>
>> >>extractGZip: fileRef in: dst
>>     " If fileRef is a ZIP archive, uncompress its contents in dst and
>> delete it "
>>
>>     | unzipped |
>>     (fileRef fullName endsWith: '.gz')
>>         ifFalse: [ ^ self ].
>>     unzipped := GZipReadStream unzip: fileRef basename to: dst.
>>     (Smalltalk hasClassNamed: #OSProcess)
>>         ifTrue: [
>>             (Smalltalk at: #OSProcess) thisOSProcess
>> waitForCommandOutput: 'tar xvf ' , unzipped asFileReference fullName.
>>             fileRef delete.
>>             unzipped asFileReference delete ]
>>
>> >>uncompress: fileRef
>>     " Private - Uncompress fileRef to the current working directory "
>>
>>     | dst |
>>     dst := FileSystem workingDirectory.
>>     self extractZip: fileRef in: dst.
>>     self extractGZip: fileRef in: dst.
>>
>> >>downloadResourcesFrom: urlString
>>     " Private - Download files from urlString "
>>
>>     ^ [ ZnEasy get: urlString ]
>>         on: ZnEntityTooLarge
>>         do: [ : ex | ex resume  ].
>>
>>
>> I use them to download external resources for my projects as follows:
>>
>> First I add a #preLoadDoIt: send in my baseline:
>>
>>     spec for: #'common' do: [
>>         spec blessing: #'baseline'.
>>         spec preLoadDoIt: #preLoad.
>>          ....
>>
>> >>preLoad
>>
>>     | url fileRef response |
>>
>>     self logCr: '====== Downloading my resource files...'.
>>     url := self platformFilesUrl asZnUrl.
>>     fileRef := FileSystem disk workingDirectory / url pathSegments last.
>>     (response := self downloadResourcesFrom: url) isSuccess
>>         ifTrue: [
>>             self logCr: '====== Writing resource file...'.
>>             fileRef writeStreamDo: [ : stream | stream nextPutAll:
>> response contents ] ]
>>         ifFalse: [ self error: 'Cannot download data files' ].
>>     self logCr: '====== Uncompressing files...'.
>>     self uncompress: fileRef.
>>
>> Hernán
>>
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.pharo.org/pipermail/pharo-dev_lists.pharo.org/attachments/20160421/25b1cf6b/attachment.html>


More information about the Pharo-dev mailing list