Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/jecisc/rules
Rules is a small model of rules that a model should not violate. It is able to compute the technical debt for a set of violations.
https://github.com/jecisc/rules
Last synced: 4 days ago
JSON representation
Rules is a small model of rules that a model should not violate. It is able to compute the technical debt for a set of violations.
- Host: GitHub
- URL: https://github.com/jecisc/rules
- Owner: jecisc
- License: mit
- Created: 2019-11-07T17:19:44.000Z (about 5 years ago)
- Default Branch: master
- Last Pushed: 2022-05-16T14:45:13.000Z (over 2 years ago)
- Last Synced: 2024-11-17T06:40:18.132Z (about 1 month ago)
- Language: Smalltalk
- Homepage:
- Size: 98.6 KB
- Stars: 3
- Watchers: 3
- Forks: 2
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
# Rules
Rules is a small model of rules that a model should not violate. It is able to compute the technical debt for a set of violations.
[![Build Status](https://travis-ci.org/jecisc/Rules.svg?branch=master)](https://travis-ci.org/jecisc/Rules) [![Coverage Status](https://coveralls.io/repos/github/jecisc/Rules/badge.svg)](https://coveralls.io/github/jecisc/Rules)
- [Installation](#installation)
- [Quick start](#quick-start)
- [Documentation](#documentation)
- [Version management](#version-management)
- [Smalltalk versions compatibility](#smalltalk-versions-compatibility)
- [Contact](#contact)## Installation
To install Rules on your Pharo image, execute the following script:
```Smalltalk
Metacello new
githubUser: 'jecisc' project: 'Rules' commitish: 'v1.x.x' path: 'src';
baseline: 'Rules';
load
```To add Rules to your baseline:
```Smalltalk
spec
baseline: 'Rules'
with: [ spec repository: 'github://jecisc/Rules:v1.x.x/src' ]
```Note you can replace the #master by another branch such as #development or a tag such as #v1.0.0, #v1.? or #v1.2.? .
## Quick start
To create a batch of rules to run on a model you first need to create a `RuRulesManager`.
A rule manager is a composite rule that will know the model which the rules should apply and that contains all the rules.
```Smalltalk
model := #(2 4 6 8 11 14).rulesManager := RuRulesManager
labelled: 'My number collection rules'
explanation: 'This composite rule contains all the constraits my collection of numbers should respect.'
model: model.
```Then we can add our rules. A rule contains mainly a block that takes a model (the "universe") as parameter and returns the collection of entities, within this model, that violate the rule.
```Smalltalk
rulesManager
addRule:
(RuRule
rule: [ :model | model select: #odd ]
label: 'No odd number'
explanation: 'In my collection of number I do not want any odd numbers (Because they are too odd...)'
remediationTime: 30 seconds);
addRule:
(RuRule
rule: [ :model | model select: #isPrime ]
label: 'No prime'
explanation: 'In my collection of number I do not want any prime numbers.'
remediationTime: 1 minute).
```And then get informations from those rules.
```Smalltalk
rulesManager technicalDebt. "0:00:02:30"rulesManager violations. "a Set(11 2)"
String
streamContents: [ :s |
rulesManager listAllRules
do: [ :rule |
s
nextPutAll: rule label;
nextPutAll: ': ';
nextPutAll: rule explanation;
lf;
nextPutAll: 'Remediation time: ';
print: rule totalRemediationTime;
lf;
nextPutAll: 'Violations:';
lf.
rule violations
do: [ :v |
s
nextPutAll: '- ';
print: v ]
separatedBy: [ s lf ].
s
lf;
lf ] ]"'No odd number: In my collection of number I do not want any odd numbers (Because they are too odd...)
Remediation time: 0:00:00:30
Violations:
- 11No prime: In my collection of number I do not want any prime numbers.
Remediation time: 0:00:02:00
Violations:
- 2
- 11'"
```## Documentation
Documentation can be found [here](documentation/Documentation.md).
## Version management
This project use semantic versioning to define the releases. This means that each stable release of the project will be assigned a version number of the form `vX.Y.Z`.
- **X** defines the major version number
- **Y** defines the minor version number
- **Z** defines the patch version numberWhen a release contains only bug fixes, the patch number increases. When the release contains new features that are backward compatible, the minor version increases. When the release contains breaking changes, the major version increases.
Thus, it should be safe to depend on a fixed major version and moving minor version of this project.
## Smalltalk versions compatibility
| Version | Compatible Pharo versions |
|------------- |--------------------------- |
| 1.x.x | Pharo 61, 70, 80, 90, 10 |## Contact
If you have any questions or problems do not hesitate to open an issue or contact cyril (a) ferlicot.me