From 3caa6a665310ef74ea2ef6ec1d4980bcb859a63b Mon Sep 17 00:00:00 2001 From: Leon Date: Tue, 8 May 2018 15:20:46 -0400 Subject: [PATCH] added readme --- META-INF/MANIFEST.MF | 8 -- README.md | 114 +++++++----------- assets/project structure.png | Bin 0 -> 22752 bytes .../ReadMeGenerator.java | 2 +- 4 files changed, 46 insertions(+), 78 deletions(-) delete mode 100644 META-INF/MANIFEST.MF create mode 100644 assets/project structure.png diff --git a/META-INF/MANIFEST.MF b/META-INF/MANIFEST.MF deleted file mode 100644 index ecdcca0..0000000 --- a/META-INF/MANIFEST.MF +++ /dev/null @@ -1,8 +0,0 @@ -Manifest-Version: 1.0 -Name: gitleon/utils/projectdetails/detaileon -Specification-Title: "detaileon" -Specification-Version: "1.0" -Specification-Vendor: "Git-Leon". -Implementation-Title: "detaileon" -Implementation-Version: "1.0" -Implementation-Vendor: "Git-Leon" diff --git a/README.md b/README.md index d8263cf..c5888bb 100644 --- a/README.md +++ b/README.md @@ -1,69 +1,45 @@ - - -# Define class MainApplication -* Define concrete class in the `com.github.git_leon.class_assembly_generator` package named `MainApplication`. -* Define static method named `main`, which has a return type of type `void` and a parameter of type `java.lang.String[]` - -# Define class ModifierSpy -* Define concrete class in the `com.github.git_leon.class_assembly_generator` package named `ModifierSpy`. -* Define non-static method named `isAbstract`, which has a return type of type `boolean` and nullary parameters -* Define non-static method named `getStaticism`, which has a return type of type `String` and nullary parameters -* Define non-static method named `getFinalism`, which has a return type of type `String` and nullary parameters -* Define non-static method named `getAbstractness`, which has a return type of type `String` and nullary parameters -* Define non-static method named `getAccessibility`, which has a return type of type `String` and nullary parameters -* Define non-static method named `validateModifier`, which has a return type of type `String` and a parameter of type `java.lang.String[]` -* Declare non-static field named `modifiers` of type `Class`. The field has `private` accessibility. - -# Define class FieldDescriber -* Define concrete class in the `com.github.git_leon.class_assembly_generator` package named `FieldDescriber`. -* Define non-static method named `toString`, which has a return type of type `String` and nullary parameters -* Declare non-static field named `field` of type `Class`. The field has `private` accessibility. - -# Define class ClassSignatureDescriber -* Define concrete class in the `com.github.git_leon.class_assembly_generator` package named `ClassSignatureDescriber`. -* Define non-static method named `toString`, which has a return type of type `String` and nullary parameters -* Define non-static method named `getPrototype`, which has a return type of type `String` and nullary parameters -* Declare non-static field named `cls` of type `ParameterizedTypeImpl`. The field has `private` accessibility. -* Declare non-static field named `modifiers` of type `Class`. The field has `private` accessibility. - -# Define class ParameterDescriber -* Define concrete class in the `com.github.git_leon.class_assembly_generator` package named `ParameterDescriber`. -* Define non-static method named `toString`, which has a return type of type `String` and nullary parameters -* Declare non-static field named `parameters` of type `Class`. The field has `private` accessibility. -* Declare non-static field named `prefix` of type `Class`. The field has `private` accessibility. - -# Define class MethodDescriber -* Define concrete class in the `com.github.git_leon.class_assembly_generator` package named `MethodDescriber`. -* Define non-static method named `toString`, which has a return type of type `String` and nullary parameters -* Declare non-static field named `method` of type `Class`. The field has `private` accessibility. -* Declare non-static field named `modifierSpy` of type `Class`. The field has `private` accessibility. -* Declare non-static field named `prefix` of type `Class`. The field has `private` accessibility. - -# Define class ClassDescriber -* Define concrete class in the `com.github.git_leon.class_assembly_generator` package named `ClassDescriber`. -* Define static method named `getFullDescription`, which has a return type of type `String` and a parameter of type `java.lang.Class` -* Define static method named `getParameterDescription`, which has a return type of type `String` and a parameter of type `java.lang.reflect.Parameter[]` -* Define static method named `getClassSignatureDescription`, which has a return type of type `String` and a parameter of type `java.lang.Class` -* Define static method named `getFieldDescription`, which has a return type of type `String` and a parameter of type `java.lang.reflect.Field` -* Define static method named `getMethodDescription`, which has a return type of type `String` and a parameter of type `java.lang.reflect.Method` - -# Define class ProjectDescriber -* Define concrete class in the `com.github.git_leon.class_assembly_generator` package named `ProjectDescriber`. -* Define non-static method named `toString`, which has a return type of type `String` and nullary parameters -* Define non-static method named `getClasses`, which has a return type of type `Set` and nullary parameters -* Declare non-static field named `reflections` of type `Class`. The field has `default` accessibility. - -# Define class FileWriter -* Define concrete class in the `com.github.git_leon.class_assembly_generator` package named `FileWriter`. -* Define non-static method named `write`, which has a return type of type `void` and a parameter of type `java.lang.Object` -* Declare non-static field named `out` of type `Class`. The field has `private` accessibility. - -# Define class ReadMeGenerator -* Define concrete class in the `com.github.git_leon.class_assembly_generator` package named `ReadMeGenerator`. -* Define non-static method named `getFullDescription`, which has a return type of type `String` and a parameter of type `java.lang.Class` -* Define non-static method named `getParameterDescription`, which has a return type of type `String` and a parameter of type `java.lang.reflect.Parameter[]` -* Define non-static method named `getClassSignatureDescription`, which has a return type of type `String` and a parameter of type `java.lang.Class` -* Define non-static method named `getFieldDescription`, which has a return type of type `String` and a parameter of type `java.lang.reflect.Field` -* Define non-static method named `getMethodDescription`, which has a return type of type `String` and a parameter of type `java.lang.reflect.Method` -* Define non-static method named `writeToReadMe`, which has a return type of type `void` and nullary parameters -* Declare non-static field named `projectDescriber` of type `Class`. The field has `private` accessibility. \ No newline at end of file +# Project Assembly Generator +* This project generates step-by-step descriptions of how to stub out each method of each class in a given project. + +## Usage + +### Step 1 - Add Maven Repository to `pom.xml` +* Because this dependency is hosted on a private server, not MavenCentral, the `pom.xml` must be configured to search in the proper repository. + +```xml + + + git-leon-utils + https://packagecloud.io/git-leon/utils/maven2 + + true + + + true + + + +``` + +### Step 2 - Add Maven Dependency to `pom.xml` +* To use this project, add the dependency to your `pom.xml` + +```xml + + com.github.git-leon + project-assembly-generator + 1.1 + +``` + + +### Step 3 - Instantiate a `ReadMeGenerator` +* Instantiate a `ReadMeGenerator` which takes an argument of a `String` representative of the top level package-name. +* Invoke the `writeToReadMe()` method on the instance. +* Open the newly generated `README.md` from the top level directory of the project. + +```java +public static void main(String[] args) { + new ReadMeGenerator("com.github").writeToReadMe(); +} +``` \ No newline at end of file diff --git a/assets/project structure.png b/assets/project structure.png new file mode 100644 index 0000000000000000000000000000000000000000..501555f2810a4612b370d970163371fa0f0624f8 GIT binary patch literal 22752 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