An open API service indexing awesome lists of open source software.

https://github.com/trashhalo/constant_sandbox

Tool for ruby codebases used to enforce boundaries and modularize Rails applications
https://github.com/trashhalo/constant_sandbox

linter rails ruby

Last synced: 11 months ago
JSON representation

Tool for ruby codebases used to enforce boundaries and modularize Rails applications

Awesome Lists containing this project

README

          

# constant_sandbox

Constant Sandbox is a cli tool for ruby codebases used to enforce boundaries and modularize Rails applications. Inspired by [packwerk](https://github.com/Shopify/packwerk) but without the rails 6 requirement.

Constant Sandbox can be used to:

* Combine groups of files into packages
* Define package-level constant visibility (i.e. have publicly accessible constants)
* Enforce privacy (inbound) and dependency (outbound) boundaries between packages
* Help existing codebases to become more modular without obstructing development

## Prerequisites

No dependencies are required for your ruby codebase. The [parser library used](https://github.com/lib-ruby-parser/lib-ruby-parser) support ruby 3.0.

## Installation

### Homebrew (linux/mac)
```
brew install trashhalo/homebrew-brews/constant_sandbox
```
### Releases (linux/mac/win)
https://github.com/trashhalo/constant_sandbox/releases

## Usage

The primary sub-command to use this tool is `verify`. This looks for `box.yml` files in your codebase that it treats as entry points for packages. These `box.yml` allow you to define what constants this folder exports and imports to the rest of your codebase.

To create your first constant sandbox the `init` command can take a folder and generate values for imports and exports based on your current usage.

```
constant_sandbox init lib/rubrowser/parser
```

You can now verify the box that was created by typing:

```
constant_sandbox verify
```

The last command available is `inspect`. This command evaluates your ruby codebase and outputs to stdout all of the connections that exist to the provided folder. Outputing a box configuration that would cover your current usage. This is useful for learning more about the cohesion of your codebase.

Example output:
```
For more information try --help
../constant_sandbox/target/release/constant_sandbox inspect lib/rubrowser/parser
non exported reference Rubrowser::Parser::Factory found in lib/rubrowser/data.rb on line 26
non imported reference Parser::Builders::Default found in lib/rubrowser/parser/file/builder.rb on line 8
non imported reference Parser::SyntaxError found in lib/rubrowser/parser/file.rb on line 26
non imported reference Parser::Source::Buffer found in lib/rubrowser/parser/file.rb on line 33
non imported reference Encoding::UTF_8 found in lib/rubrowser/parser/file.rb on line 34
non imported reference Parser::CurrentRuby found in lib/rubrowser/parser/file.rb on line 41
non imported reference Parser::AST::Node found in lib/rubrowser/parser/file.rb on line 145
---
imports:
- "Encoding::UTF_8"
- "Parser::AST::Node"
- "Parser::Builders::Default"
- "Parser::CurrentRuby"
- "Parser::Source::Buffer"
- "Parser::SyntaxError"
exports:
- "Rubrowser::Parser::Factory"

```