Skip to content

Repository files navigation

eorules

Set of custom ArchUnit rules to ensure Elegant Objects principles respect.

eorules helps you design and craft code that respect strong object-oriented programming paradigm.

Build Status Python CI Nodes.js CI

EO principles respected here DevOps By Rultor.com We recommend IntelliJ IDEA

PDD status

codecov Mutation testing badge

Hits-of-Code

Bugs Code Smells Duplicated Lines (%) Lines of Code Reliability Rating Security Rating Technical Debt Maintainability Rating Vulnerabilities

nullfree status staticfree status allfinal status allpublic status setterfree status nomultiplereturn status

Maven Central Javadoc

License

✨ Features

📥 Installation

Add the dependency to your project:

<dependency>
    <groupId>com.github.roroche</groupId>
    <artifactId>eorules</artifactId>
    <version>${latest.version}</version>
    <scope>test</scope>
</dependency>

🚀 Usage

class ArchitectureTest {

    private final JavaClasses classes = new ClassFileImporter()
        .withImportOption(ImportOption.Predefined.DO_NOT_INCLUDE_TESTS)
        .importPackages("com.example");

    @Test
    void checksClassesAreAbstractOrFinal() {
        new ClassesAreAbstractOrFinalRule().check(this.classes);
    }

    @Test
    void checksThereAreNoStaticMethods() {
        new ClassesShouldHaveNoStaticMethodsRule().check(this.classes);
    }

    @Test
    void checksClassesDoNotHaveGettersOrSetters() {
        new ClassesShouldNotHaveGettersOrSettersRule().check(this.classes);
    }

    @Test
    void checksClassesDoNotHavePrivateMethods() {
        new ClassesShouldNotHavePrivateMethodsRule().check(this.classes);
    }

    @Test
    void checksFieldsAreFinal() {
        new FieldsShouldBeFinalRule().check(this.classes);
    }

    @Test
    void checksPublicMethodsAreDeclaredInInterfaces() {
        new PublicMethodsDeclaredInInterfacesRule().check(this.classes);
    }
}

To bypass the checks, you can annotate your class with @ExcludeFromArchUnit.

🤝 Contributing

Contributions are welcome!

If you'd like to report a bug, suggest a feature, or submit a pull request, please read our 👉 Contributing Guide

It contains everything you need to know about:

  • Development setup
  • Coding standards
  • Commit conventions
  • Pull request process
  • Quality requirements

Thank you for helping improve eorules 🚀

⭐ Star History

Star History Chart

📄 License

Distributed under the MIT License. See LICENSE for more information.

About

Set of custom ArchUnit rules to ensure Elegant Objects principles respect

Topics

Resources

Contributing

Stars

4 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages