Hi Stephan

2016-08-29 14:16 GMT-03:00 Stephan Eggermont <stephan@stack.nl>:
On 26/08/16 18:49, Hern��n Morales Durand wrote:
Is not fully tested but here is how you install it:

Gofer it
�� �� smalltalkhubUser: 'hernan' project: 'CodeGenerator';
�� �� configuration;
�� �� loadDevelopment.

CGSmalltalkExamples exampleNSISPharo4.
CGSmalltalkExamples exampleNSISPharo5.

It will generate a .nsi file in image directory.


Thanks Hern��n.
Could you tell us something more about the CodeGenerator
that you created it with? For someone new to NSIS there
are a lot of moving parts like this.

This will be properly documented in the future. But here I go with some basic notes.
The idea is to have a very modular hierarchy of code generation capabilities. There is a very basic generator for QC Magritte ;) but I hadn't the time for testing or complete yet
A description of hierarchy classes is

-CGAbstract (Provides code stream)
--CGTemplate (Utility class for extracting template methods from classes - in the sense of a Template framework, not design patterns)
---CGAuthoring (Provides identity management)
----CGBash (Bash code generator)
----CGNSISInstaller (Unicode NSIS Installer Script (.nsi) Generator, requires Mustache Templates and ZipDLL.nsh plugin installed)
----CGSmalltalkAuthoring (Abstract Smalltalk code generator providing author management - not the same as identity)

- CGStConvenienceMethods (Smalltalk Code Generator based in the pattern Convenience Methods (1998) by Robert Hirschfeld)
- CGStAbstractClassPattern (Smalltalk Code Generator based in the Abstract Class Pattern by Bobby Woolf.)
- CGStBuilderPattern (Builder Design Pattern - I don't remember the status of this one, I should check)

- CGStHierarchyCreator (Smalltalk Code Generator to generate a class hierarchy)
- CGStMagritte
- CGQCMagritte (Seaside QC Magritte Generator)
- CGQCBMagritte (Seaside QC Magritte + Bootstrap) Generator

- CGStImageImporter (Scans an input directory and uses ImageReadWriter to read binary file streams)
- CGStTextImporter (Same for textual resources)

- CGStSingleton (Generates a Singleton in Smalltalk)
- CGSunit (SUnit Tests Generator)

- CGStSpec (To be implemented)

These are examples of how to generate code:

Simple class and variables:

������ CGSmalltalk uniqueInstance
������ ������ setCleanTarget;
������ ������ targetClassCategory: 'MPIRunner-Core';
������ ������ targetClass: #MPIRunner;
������ ������ addInstanceVariables: #(#nproc #submitToQueue).

Convenience methods

������ CGStConvenienceMethods uniqueInstance
������ ������ setCleanTarget;
������ ������ parameterCount: 1;
������ ������ targetSelector: #cgConvEx1;
������ ������ targetClassCategory: 'ConvenienceMethodsEx';
������ ������ targetClass: #ConvenienceMethodsEx;
������ ������ generateMethods.

Singleton

������ CGStSingleton uniqueInstance
������ ������ setCleanTarget;
������ ������ targetClassCategory: 'SingletonEx1';
������ ������ targetClass: #SingletonEx1;
������ ������ generateMethods.

Builder

������ CGStBuilderPattern uniqueInstance
������ ������ setCleanTarget;
������ ������ targetClassCategory: 'CGGeneratedCode-Core';
������ ������ " Abstract Builder class name (ex: UIBuilder) "
������ ������ targetClass: #CGExCarBuilder;
������ ������ productNames: #('CGExFordCar' 'CGExBMWCar' 'CGExHondaCar');
������ ������ builderNames: #('CGExFordBuilder' 'CGExBMWBuilder' 'CGExHondaBuilder');
������ ������ familyNames: #('CGExCarEngine' 'CGExCarBody');
������ ������ " How many product parts per family ? "
������ ������ productPartsPerFamilyCount: 3;
������ ������ directorClassName: #CGExCarAssembler;
������ ������ generateClasses.




It would be great to have an example that is complete
and compiles out of the box. Good target for a screencast
also (for me they work very well for improved community
communication).


I would love to have more time :)

Hern��n

��
Stephan