From 0d924fa23f3ce53846366dfca9579088f4d56d35 Mon Sep 17 00:00:00 2001 From: Offray Luna Date: Mon, 25 Jul 2022 09:43:45 -0500 Subject: [PATCH] Implementing external package management for Nim dependencies. --- src/MiniDocs/ManifestMiniDocs.class.st | 5 ++++ src/MiniDocs/NanoID.class.st | 17 ++++++++++++ src/MiniDocs/Nimble.class.st | 38 ++++++++++++++++++++++++++ 3 files changed, 60 insertions(+) create mode 100644 src/MiniDocs/Nimble.class.st diff --git a/src/MiniDocs/ManifestMiniDocs.class.st b/src/MiniDocs/ManifestMiniDocs.class.st index b834264..02c5572 100644 --- a/src/MiniDocs/ManifestMiniDocs.class.st +++ b/src/MiniDocs/ManifestMiniDocs.class.st @@ -11,3 +11,8 @@ Class { ManifestMiniDocs class >> ruleExcessiveVariablesRuleV1FalsePositive [ ^ #(#(#(#RGClassDefinition #(#Markdeep)) #'2022-07-16T12:24:34.695032-05:00') ) ] + +{ #category : #'code-critics' } +ManifestMiniDocs class >> ruleParseTreeLintRuleV1FalsePositive [ + ^ #(#(#(#RGPackageDefinition #(#MiniDocs)) #'2022-07-25T09:28:50.156394-05:00') ) +] diff --git a/src/MiniDocs/NanoID.class.st b/src/MiniDocs/NanoID.class.st index f44b2ee..2670e61 100644 --- a/src/MiniDocs/NanoID.class.st +++ b/src/MiniDocs/NanoID.class.st @@ -18,6 +18,23 @@ Class { #category : #'MiniDocs-MiniDocs' } +{ #category : #accessing } +NanoID class >> binaryFile [ + ^ self scriptSourceCode parent / self scriptSourceCode basenameWithoutExtension +] + +{ #category : #accessing } +NanoID class >> install [ + "For the moment, only Gnu/Linux and Mac are supported. + IMPORTANT: Nimble, Nim's package manager should be installed, as this process doesn't verify its proper installation." + Nimble install: 'nanoid'. + OSSUnixSubprocess new + command: 'nim'; + arguments: {'c'. self scriptSourceCode fullName}; + workingDirectory: self binaryFile parent; + runAndWaitOnExitDo: [ :process :outString | ^ self binaryFile parent ] +] + { #category : #accessing } NanoID class >> scriptSourceCode [ ^ FileLocator image parent / 'pharo-local/iceberg/Offray/MiniDocs/src/nanoIdGen.nim' diff --git a/src/MiniDocs/Nimble.class.st b/src/MiniDocs/Nimble.class.st new file mode 100644 index 0000000..f37fa56 --- /dev/null +++ b/src/MiniDocs/Nimble.class.st @@ -0,0 +1,38 @@ +" +I'm a helper class modelling the common uses of the Nim's [Nimble package manager](https://github.com/nim-lang/nimble). +This was evolved in the context of the [Grafoscopio](mutabit.com/grafoscopio/en.html) community exploration and prototyping of interactive documentation. +" +Class { + #name : #Nimble, + #superclass : #Object, + #category : #'MiniDocs-MiniDocs' +} + +{ #category : #accessing } +Nimble class >> detect: packageName [ + ^ self installed + detect: [ :dependency | dependency beginsWith: packageName ] + ifFound: [ ^ true ] + ifNone: [ ^ false ] +] + +{ #category : #accessing } +Nimble class >> install: packageName [ + (self detect: packageName) ifTrue: [ ^ self ]. + OSSUnixSubprocess new + command: 'nimble'; + arguments: {'install'. + packageName}; + runAndWaitOnExitDo: [ :process :outString | ^ outString ] +] + +{ #category : #accessing } +Nimble class >> installed [ + | installed | + OSSUnixSubprocess new + command: 'nimble'; + arguments: #('list' '--installed'); + redirectStdout; + runAndWaitOnExitDo: [ :command :outString | installed := outString ]. + ^ installed lines +]