u-case 3.0.0.rc8 → 4.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c2265a60386ce542b8ee6006a58d4fb801dcfb396d7dfcf84d342910095fcbf8
4
- data.tar.gz: 1502d1a284c616860ae99e0c03fe02a81be3e9d0adc0cc75a414825b4132f792
3
+ metadata.gz: e43c3e14dcb10002feb94f83f7d9289b49164e5908f3e8b58fa64e62d69796db
4
+ data.tar.gz: 9f3a37d02e5e1c1369f74e8cdf14cc3038fad55df5db08bd1a330dd7004e5ba1
5
5
  SHA512:
6
- metadata.gz: ab5c45e1e1e12f157a4e5f5fa596fdb778e6bd6267d5111e438094ff37e017a0452e4a1d85a39df0e63ec28876260bad8f7c4a56ca18796a95805187efe2d002
7
- data.tar.gz: 6cefcdbbb39a4400bbd4c52b7ccf77f2c142958680049a3e53f4af37d1ef696fdc3a9019cde0f8f18463dd814e79e9753ef5a270eb446dbb2bee81e7c734ffab
6
+ metadata.gz: 744d7c78a228a3ae9197762f9e259dd72ab2f1b8c20af968fca4cbe46931c703abd9aa051c4aa0669b61f51b14d42a990834dc4fc34dc2f60a9f20d68867fbab
7
+ data.tar.gz: 7da45bc3752296dd000bf016ef35ff7c993d0ea5c2218e43e6f1d492ec7d41f457e7048cf8b281d0ecb6f40efe05df19d07809d69db3a7a41df02f10028a7e68
data/.travis.sh CHANGED
@@ -3,21 +3,21 @@
3
3
  ruby_v=$(ruby -v)
4
4
 
5
5
  ACTIVEMODEL_VERSION='3.2' bundle update
6
- ACTIVEMODEL_VERSION='3.2' ENABLE_TRANSITIONS='true' bundle exec rake test
7
6
  ACTIVEMODEL_VERSION='3.2' ENABLE_TRANSITIONS='false' bundle exec rake test
7
+ ACTIVEMODEL_VERSION='3.2' ENABLE_TRANSITIONS='true' bundle exec rake test
8
8
 
9
9
  if [[ ! $ruby_v =~ '2.2.0' ]]; then
10
10
  ACTIVEMODEL_VERSION='5.2' bundle update
11
- ACTIVEMODEL_VERSION='5.2' ENABLE_TRANSITIONS='true' bundle exec rake test
12
11
  ACTIVEMODEL_VERSION='5.2' ENABLE_TRANSITIONS='false' bundle exec rake test
12
+ ACTIVEMODEL_VERSION='5.2' ENABLE_TRANSITIONS='true' bundle exec rake test
13
13
  fi
14
14
 
15
15
  if [[ $ruby_v =~ '2.5.' ]] || [[ $ruby_v =~ '2.6.' ]] || [[ $ruby_v =~ '2.7.' ]]; then
16
16
  ACTIVEMODEL_VERSION='6.0' bundle update
17
- ACTIVEMODEL_VERSION='6.0' ENABLE_TRANSITIONS='true' bundle exec rake test
18
17
  ACTIVEMODEL_VERSION='6.0' ENABLE_TRANSITIONS='false' bundle exec rake test
18
+ ACTIVEMODEL_VERSION='6.0' ENABLE_TRANSITIONS='true' bundle exec rake test
19
19
  fi
20
20
 
21
21
  bundle update
22
- ENABLE_TRANSITIONS='true' bundle exec rake test
23
22
  ENABLE_TRANSITIONS='false' bundle exec rake test
23
+ ENABLE_TRANSITIONS='true' bundle exec rake test
data/Gemfile CHANGED
@@ -15,9 +15,17 @@ if activemodel_version < '6.1.0'
15
15
  gem 'activesupport', activemodel, require: false
16
16
  end
17
17
 
18
+ simplecov_version =
19
+ case RUBY_VERSION
20
+ when /\A2.[23]/ then '~> 0.17.1'
21
+ when /\A2.4/ then '~> 0.18.5'
22
+ else '~> 0.19'
23
+ end
24
+
18
25
  group :test do
19
26
  gem 'minitest', activemodel_version < '4.1' ? '~> 4.2' : '~> 5.0'
20
- gem 'simplecov', require: false
27
+
28
+ gem 'simplecov', simplecov_version, require: false
21
29
  end
22
30
 
23
31
  pry_byebug_version =
data/README.md CHANGED
@@ -1,12 +1,29 @@
1
- ![Ruby](https://img.shields.io/badge/ruby-2.2+-ruby.svg?colorA=99004d&colorB=cc0066)
2
- [![Gem](https://img.shields.io/gem/v/u-case.svg?style=flat-square)](https://rubygems.org/gems/u-case)
3
- [![Build Status](https://travis-ci.com/serradura/u-case.svg?branch=main)](https://travis-ci.com/serradura/u-case)
4
- [![Maintainability](https://api.codeclimate.com/v1/badges/5c3c8ad1b0b943f88efd/maintainability)](https://codeclimate.com/github/serradura/u-case/maintainability)
5
- [![Test Coverage](https://api.codeclimate.com/v1/badges/5c3c8ad1b0b943f88efd/test_coverage)](https://codeclimate.com/github/serradura/u-case/test_coverage)
1
+ <p align="center">
2
+ <img src="./assets/ucase_logo_v1.png" alt="u-case - Represent use cases in a simple and powerful way while writing modular, expressive and sequentially logical code.">
6
3
 
7
- <img src="./assets/ucase_logo_v1.png" alt="u-case - Create simple and powerful use cases as Ruby objects.">
4
+ <p align="center"><i>Represent use cases in a simple and powerful way while writing modular, expressive and sequentially logical code.</i></p>
5
+ <br>
6
+ </p>
8
7
 
9
- Create simple and powerful use cases as Ruby objects.
8
+ <p align="center">
9
+ <img src="https://img.shields.io/badge/ruby->%3D%202.2.0-ruby.svg?colorA=99004d&colorB=cc0066" alt="Ruby">
10
+
11
+ <a href="https://rubygems.org/gems/u-case">
12
+ <img alt="Gem" src="https://img.shields.io/gem/v/u-case.svg?style=flat-square">
13
+ </a>
14
+
15
+ <a href="https://travis-ci.com/serradura/u-case">
16
+ <img alt="Build Status" src="https://travis-ci.com/serradura/u-case.svg?branch=main">
17
+ </a>
18
+
19
+ <a href="https://codeclimate.com/github/serradura/u-case/maintainability">
20
+ <img alt="Maintainability" src="https://api.codeclimate.com/v1/badges/5c3c8ad1b0b943f88efd/maintainability">
21
+ </a>
22
+
23
+ <a href="https://codeclimate.com/github/serradura/u-case/test_coverage">
24
+ <img alt="Test Coverage" src="https://api.codeclimate.com/v1/badges/5c3c8ad1b0b943f88efd/test_coverage">
25
+ </a>
26
+ </p>
10
27
 
11
28
  The main project goals are:
12
29
  1. Easy to use and easy to learn (input **>>** process **>>** output).
@@ -21,7 +38,9 @@ The main project goals are:
21
38
 
22
39
  Version | Documentation
23
40
  --------- | -------------
24
- 3.0.0.rc8 | https://github.com/serradura/u-case/blob/main/README.md
41
+ unreleased| https://github.com/serradura/u-case/blob/main/README.md
42
+ 4.1.0 | https://github.com/serradura/u-case/blob/v4.x/README.md
43
+ 3.1.0 | https://github.com/serradura/u-case/blob/v3.x/README.md
25
44
  2.6.0 | https://github.com/serradura/u-case/blob/v2.x/README.md
26
45
  1.1.0 | https://github.com/serradura/u-case/blob/v1.x/README.md
27
46
 
@@ -60,10 +79,13 @@ Version | Documentation
60
79
  - [`Kind::Validator`](#kindvalidator)
61
80
  - [`Micro::Case.config`](#microcaseconfig)
62
81
  - [Benchmarks](#benchmarks)
63
- - [`Micro::Case` (v3.0.0)](#microcase-v300)
82
+ - [`Micro::Case`](#microcase)
64
83
  - [Success results](#success-results)
65
84
  - [Failure results](#failure-results)
66
- - [`Micro::Cases::Flow` (v3.0.0)](#microcasesflow-v300)
85
+ - [`Micro::Cases::Flow`](#microcasesflow)
86
+ - [Running the benchmarks](#running-the-benchmarks)
87
+ - [Performance (Benchmarks IPS)](#performance-benchmarks-ips)
88
+ - [Memory profiling](#memory-profiling)
67
89
  - [Comparisons](#comparisons)
68
90
  - [Examples](#examples)
69
91
  - [1️⃣ Users creation](#1️⃣-users-creation)
@@ -77,11 +99,13 @@ Version | Documentation
77
99
 
78
100
  ## Compatibility
79
101
 
80
- | u-case | branch | ruby | activemodel |
81
- | -------------- | ------- | -------- | ------------- |
82
- | 3.0.0.rc8 | main | >= 2.2.0 | >= 3.2, < 6.1 |
83
- | 2.6.0 | v2.x | >= 2.2.0 | >= 3.2, < 6.1 |
84
- | 1.1.0 | v1.x | >= 2.2.0 | >= 3.2, < 6.1 |
102
+ | u-case | branch | ruby | activemodel | u-attributes |
103
+ | -------------- | ------- | -------- | ------------- | ------------ |
104
+ | unreleased | main | >= 2.2.0 | >= 3.2, < 6.1 | ~> 2.0 |
105
+ | 4.1.0 | v4.x | >= 2.2.0 | >= 3.2, < 6.1 | ~> 2.0 |
106
+ | 3.1.0 | v3.x | >= 2.2.0 | >= 3.2, < 6.1 | ~> 1.1 |
107
+ | 2.6.0 | v2.x | >= 2.2.0 | >= 3.2, < 6.1 | ~> 1.1 |
108
+ | 1.1.0 | v1.x | >= 2.2.0 | >= 3.2, < 6.1 | ~> 1.1 |
85
109
 
86
110
  > Note: The activemodel is an optional dependency, this module [can be enabled](#u-casewith_activemodel_validation---how-to-validate-use-case-attributes) to validate the use cases' attributes.
87
111
 
@@ -102,7 +126,7 @@ Version | Documentation
102
126
  Add this line to your application's Gemfile:
103
127
 
104
128
  ```ruby
105
- gem 'u-case', '~> 3.0.0.rc8'
129
+ gem 'u-case', '~> 4.1.0'
106
130
  ```
107
131
 
108
132
  And then execute:
@@ -111,7 +135,7 @@ And then execute:
111
135
 
112
136
  Or install it yourself as:
113
137
 
114
- $ gem install u-case --pre
138
+ $ gem install u-case
115
139
 
116
140
  ## Usage
117
141
 
@@ -1060,7 +1084,7 @@ class Multiply < Micro::Case
1060
1084
  validates :a, :b, presence: true, numericality: true
1061
1085
 
1062
1086
  def call!
1063
- return Failure :validation_error, result: { errors: self.errors } if invalid?
1087
+ return Failure :invalid_attributes, result: { errors: self.errors } if invalid?
1064
1088
 
1065
1089
  Success result: { number: a * b }
1066
1090
  end
@@ -1170,110 +1194,110 @@ end
1170
1194
 
1171
1195
  ## Benchmarks
1172
1196
 
1173
- ### `Micro::Case` (v3.0.0)
1197
+ ### `Micro::Case`
1174
1198
 
1175
1199
  #### Success results
1176
1200
 
1177
1201
  | Gem / Abstraction | Iterations per second | Comparison |
1178
1202
  | ----------------- | --------------------: | ----------------: |
1179
- | Dry::Monads | 141730.1 | _**The Fastest**_ |
1180
- | **Micro::Case** | 103541.3 | 1.37x slower |
1181
- | Interactor | 29100.8 | 4.87x slower |
1182
- | Trailblazer::Operation | 15031.4 | 9.43x slower |
1183
- | Dry::Transaction | 5674.0 | 24.98x slower |
1203
+ | Dry::Monads | 281515.4 | _**The Fastest**_ |
1204
+ | **Micro::Case** | 151711.3 | 1.86x slower |
1205
+ | Interactor | 53016.2 | 5.31x slower |
1206
+ | Trailblazer::Operation | 38314.2 | 7.35x slower |
1207
+ | Dry::Transaction | 10440.7 | 26.96x slower |
1184
1208
 
1185
1209
  <details>
1186
1210
  <summary>Show the full <a href="https://github.com/evanphx/benchmark-ips">benchmark/ips</a> results.</summary>
1187
1211
 
1188
1212
  ```ruby
1189
1213
  # Warming up --------------------------------------
1190
- # Interactor 2.915k i/100ms
1191
- # Trailblazer::Operation 1.543k i/100ms
1192
- # Dry::Monads 14.288k i/100ms
1193
- # Dry::Transaction 571.000 i/100ms
1194
- # Micro::Case 10.418k i/100ms
1195
- # Micro::Case::Strict 8.296k i/100ms
1196
- # Micro::Case::Safe 10.254k i/100ms
1214
+ # Interactor 5.151k i/100ms
1215
+ # Trailblazer::Operation 3.805k i/100ms
1216
+ # Dry::Monads 28.153k i/100ms
1217
+ # Dry::Transaction 1.063k i/100ms
1218
+ # Micro::Case 15.159k i/100ms
1219
+ # Micro::Case::Safe 15.172k i/100ms
1220
+ # Micro::Case::Strict 12.557k i/100ms
1197
1221
 
1198
1222
  # Calculating -------------------------------------
1199
- # Interactor 29.101k2.1%) i/s - 145.750k in 5.010660s
1200
- # Trailblazer::Operation 15.031k2.0%) i/s - 75.607k in 5.032071s
1201
- # Dry::Monads 141.730k3.1%) i/s - 714.400k in 5.045546s
1202
- # Dry::Transaction 5.674k (± 1.9%) i/s - 28.550k in 5.033564s
1203
- # Micro::Case 103.541k (± 1.6%) i/s - 520.900k in 5.032077s
1204
- # Micro::Case::Strict 83.045k2.4%) i/s - 423.096k in 5.098031s
1205
- # Micro::Case::Safe 101.662k1.5%) i/s - 512.700k in 5.044386s
1223
+ # Interactor 53.016k1.8%) i/s - 267.852k in 5.053967s
1224
+ # Trailblazer::Operation 38.314k1.7%) i/s - 194.055k in 5.066374s
1225
+ # Dry::Monads 281.515k2.4%) i/s - 1.408M in 5.003266s
1226
+ # Dry::Transaction 10.441k2.1%) i/s - 53.150k in 5.092957s
1227
+ # Micro::Case 151.711k (± 1.7%) i/s - 773.109k in 5.097555s
1228
+ # Micro::Case::Safe 145.801k6.7%) i/s - 728.256k in 5.022666s
1229
+ # Micro::Case::Strict 115.636k8.4%) i/s - 577.622k in 5.042079s
1206
1230
 
1207
1231
  # Comparison:
1208
- # Dry::Monads: 141730.1 i/s
1209
- # Micro::Case: 103541.3 i/s - 1.37x (± 0.00) slower
1210
- # Micro::Case::Safe: 101662.2 i/s - 1.39x (± 0.00) slower
1211
- # Micro::Case::Strict: 83044.6 i/s - 1.71x (± 0.00) slower
1212
- # Interactor: 29100.8 i/s - 4.87x (± 0.00) slower
1213
- # Trailblazer::Operation: 15031.4 i/s - 9.43x (± 0.00) slower
1214
- # Dry::Transaction: 5674.0 i/s - 24.98x (± 0.00) slower
1232
+ # Dry::Monads: 281515.4 i/s
1233
+ # Micro::Case: 151711.3 i/s - 1.86x (± 0.00) slower
1234
+ # Micro::Case::Safe: 145800.8 i/s - 1.93x (± 0.00) slower
1235
+ # Micro::Case::Strict: 115635.8 i/s - 2.43x (± 0.00) slower
1236
+ # Interactor: 53016.2 i/s - 5.31x (± 0.00) slower
1237
+ # Trailblazer::Operation: 38314.2 i/s - 7.35x (± 0.00) slower
1238
+ # Dry::Transaction: 10440.7 i/s - 26.96x (± 0.00) slower
1215
1239
  ```
1216
1240
  </details>
1217
1241
 
1218
- https://github.com/serradura/u-case/blob/main/benchmarks/use_case/with_success_result.rb
1242
+ https://github.com/serradura/u-case/blob/main/benchmarks/perfomance/use_case/success_results.rb
1219
1243
 
1220
1244
  #### Failure results
1221
1245
 
1222
1246
  | Gem / Abstraction | Iterations per second | Comparison |
1223
1247
  | ----------------- | --------------------: | ----------------: |
1224
- | **Micro::Case** | 98820.8 | _**The Fastest**_ |
1225
- | Dry::Monads | 71329.7 | 1.39x slower |
1226
- | Trailblazer::Operation | 15034.9 | 6.57x slower |
1227
- | Interactor | 13958.7 | 7.08x slower |
1228
- | Dry::Transaction | 5067.5 | 19.50x slower |
1248
+ | **Micro::Case** | 140794.0 | _**The Fastest**_ |
1249
+ | Dry::Monads | 133865.5 | 0x slower |
1250
+ | Trailblazer::Operation | 39829.9 | 3.53x slower |
1251
+ | Interactor | 23856.0 | 5.90x slower |
1252
+ | Dry::Transaction | 7975.0 | 17.65x slower |
1229
1253
 
1230
1254
  <details>
1231
1255
  <summary>Show the full <a href="https://github.com/evanphx/benchmark-ips">benchmark/ips</a> results.</summary>
1232
1256
 
1233
1257
  ```ruby
1234
1258
  # Warming up --------------------------------------
1235
- # Interactor 1.324k i/100ms
1236
- # Trailblazer::Operation 1.525k i/100ms
1237
- # Dry::Monads 7.126k i/100ms
1238
- # Dry::Transaction 499.000 i/100ms
1239
- # Micro::Case 9.919k i/100ms
1240
- # Micro::Case::Strict 7.837k i/100ms
1241
- # Micro::Case::Safe 9.762k i/100ms
1259
+ # Interactor 2.351k i/100ms
1260
+ # Trailblazer::Operation 3.941k i/100ms
1261
+ # Dry::Monads 13.567k i/100ms
1262
+ # Dry::Transaction 927.000 i/100ms
1263
+ # Micro::Case 14.959k i/100ms
1264
+ # Micro::Case::Safe 14.904k i/100ms
1265
+ # Micro::Case::Strict 12.007k i/100ms
1242
1266
 
1243
1267
  # Calculating -------------------------------------
1244
- # Interactor 13.959k2.5%) i/s - 70.172k in 5.030240s
1245
- # Trailblazer::Operation 15.035k2.2%) i/s - 76.250k in 5.074108s
1246
- # Dry::Monads 71.330k (± 2.4%) i/s - 363.426k in 5.097993s
1247
- # Dry::Transaction 5.068k1.9%) i/s - 25.449k in 5.023922s
1248
- # Micro::Case 98.821k 2.9%) i/s - 495.950k in 5.023421s
1249
- # Micro::Case::Strict 79.936k3.1%) i/s - 399.687k in 5.005435s
1250
- # Micro::Case::Safe 98.695k 1.9%) i/s - 497.862k in 5.046246s
1268
+ # Interactor 23.856k1.7%) i/s - 119.901k in 5.027585s
1269
+ # Trailblazer::Operation 39.830k1.2%) i/s - 200.991k in 5.047032s
1270
+ # Dry::Monads 133.866k (± 2.5%) i/s - 678.350k in 5.070899s
1271
+ # Dry::Transaction 7.975k8.6%) i/s - 39.861k in 5.036260s
1272
+ # Micro::Case 130.534k24.4%) i/s - 583.401k in 5.040907s
1273
+ # Micro::Case::Safe 140.794k8.1%) i/s - 700.488k in 5.020935s
1274
+ # Micro::Case::Strict 102.641k21.3%) i/s - 480.280k in 5.020354s
1251
1275
 
1252
1276
  # Comparison:
1253
- # Micro::Case: 98820.8 i/s
1254
- # Micro::Case::Safe: 98695.0 i/s - same-ish: difference falls within error
1255
- # Micro::Case::Strict: 79935.9 i/s - 1.24x (± 0.00) slower
1256
- # Dry::Monads: 71329.7 i/s - 1.39x (± 0.00) slower
1257
- # Trailblazer::Operation: 15034.9 i/s - 6.57x (± 0.00) slower
1258
- # Interactor: 13958.7 i/s - 7.08x (± 0.00) slower
1259
- # Dry::Transaction: 5067.5 i/s - 19.50x (± 0.00) slower
1277
+ # Micro::Case::Safe: 140794.0 i/s
1278
+ # Dry::Monads: 133865.5 i/s - same-ish: difference falls within error
1279
+ # Micro::Case: 130534.0 i/s - same-ish: difference falls within error
1280
+ # Micro::Case::Strict: 102640.7 i/s - 1.37x (± 0.00) slower
1281
+ # Trailblazer::Operation: 39829.9 i/s - 3.53x (± 0.00) slower
1282
+ # Interactor: 23856.0 i/s - 5.90x (± 0.00) slower
1283
+ # Dry::Transaction: 7975.0 i/s - 17.65x (± 0.00) slower
1260
1284
  ```
1261
1285
  </details>
1262
1286
 
1263
- https://github.com/serradura/u-case/blob/main/benchmarks/use_case/with_failure_result.rb
1287
+ https://github.com/serradura/u-case/blob/main/benchmarks/perfomance/use_case/failure_results.rb
1264
1288
 
1265
1289
  ---
1266
1290
 
1267
- ### `Micro::Cases::Flow` (v3.0.0)
1291
+ ### `Micro::Cases::Flow`
1268
1292
 
1269
- | Gems / Abstraction | [Success results](https://github.com/serradura/u-case/blob/main/benchmarks/flow/with_success_result.rb#L40) | [Failure results](https://github.com/serradura/u-case/blob/main/benchmarks/flow/with_failure_result.rb#L40) |
1293
+ | Gems / Abstraction | [Success results](https://github.com/serradura/u-case/blob/main/benchmarks/perfomance/flow/success_results.rb) | [Failure results](https://github.com/serradura/u-case/blob/main/benchmarks/perfomance/flow/failure_results.rb) |
1270
1294
  | ------------------------------------------- | ----------------: | ----------------: |
1271
- | Micro::Case internal flow (private methods) | _**The Fastest**_ | _**The Fastest**_ |
1272
- | Micro::Case internal flow (through lambdas) | 1.03x slower | 1.04x slower |
1273
- | Micro::Case `then` method | 1.49x slower | 0x slower |
1274
- | Micro::Cases.flow | 1.53x slower | 1.04x slower |
1275
- | Micro::Cases.safe_flow | 1.54x slower | 1.04x slower |
1276
- | Interactor::Organizer | 2.05x slower | 6.27x slower |
1295
+ | Micro::Case::Result `pipe` method | 172734.4 i/s | 153745.6 i/s |
1296
+ | Micro::Case::Result `then` method | 1.24x slower | 1.21x slower |
1297
+ | Micro::Cases.flow | 1.30x slower | 1.30x slower |
1298
+ | Micro::Case class with an inner flow | 2.05x slower | 1.98x slower |
1299
+ | Micro::Case class including itself as a step| 2.14x slower | 2.09x slower |
1300
+ | Interactor::Organizer | 7.69x slower | 7.03x slower |
1277
1301
 
1278
1302
  \* The `Dry::Monads`, `Dry::Transaction`, `Trailblazer::Operation` gems are out of this analysis because all of them doesn't have this kind of feature.
1279
1303
 
@@ -1282,40 +1306,28 @@ https://github.com/serradura/u-case/blob/main/benchmarks/use_case/with_failure_r
1282
1306
 
1283
1307
  ```ruby
1284
1308
  # Warming up --------------------------------------
1285
- # Interactor::Organizer
1286
- # 4.837k i/100ms
1287
- # Micro::Cases.flow([])
1288
- # 6.755k i/100ms
1289
- # Micro::Cases::safe_flow([])
1290
- # 6.809k i/100ms
1291
- # Micro::Case flow using `then` method
1292
- # 6.968k i/100ms
1293
- # Micro::Case flow using private methods
1294
- # 10.362k i/100ms
1295
- # Micro::Case flow using private methods through lambdas
1296
- # 10.258k i/100ms
1309
+ # Interactor::Organizer 2.163k i/100ms
1310
+ # Micro::Cases.flow([]) 13.158k i/100ms
1311
+ # Micro::Case flow in a class 8.400k i/100ms
1312
+ # Micro::Case including the class 8.008k i/100ms
1313
+ # Micro::Case::Result#| 17.151k i/100ms
1314
+ # Micro::Case::Result#then 14.121k i/100ms
1297
1315
 
1298
1316
  # Calculating -------------------------------------
1299
- # Interactor::Organizer
1300
- # 50.731k (± 1.6%) i/s - 256.361k in 5.054694s
1301
- # Micro::Cases.flow([])
1302
- # 67.757k (± 1.6%) i/s - 344.505k in 5.085681s
1303
- # Micro::Cases::safe_flow([])
1304
- # 67.613k (± 1.6%) i/s - 340.450k in 5.036562s
1305
- # Micro::Case flow using `then` method
1306
- # 69.483k (± 1.5%) i/s - 348.400k in 5.015351s
1307
- # Micro::Case flow using private methods
1308
- # 103.788k (± 1.0%) i/s - 528.462k in 5.092240s
1309
- # Micro::Case flow using private methods through lambdas
1310
- # 101.081k (± 1.2%) i/s - 512.900k in 5.074904s
1317
+ # Interactor::Organizer 22.467k (± 1.8%) i/s - 112.476k in 5.007787s
1318
+ # Micro::Cases.flow([]) 133.183k (± 1.5%) i/s - 671.058k in 5.039815s
1319
+ # Micro::Case flow in a class 84.083k (± 1.8%) i/s - 428.400k in 5.096623s
1320
+ # Micro::Case including the class 80.574k (± 1.6%) i/s - 408.408k in 5.070029s
1321
+ # Micro::Case::Result#| 172.734k (± 1.1%) i/s - 874.701k in 5.064429s
1322
+ # Micro::Case::Result#then 139.799k (± 1.7%) i/s - 706.050k in 5.052035s
1311
1323
 
1312
1324
  # Comparison:
1313
- # Micro::Case flow using private methods: 103787.5 i/s
1314
- # Micro::Case flow using private methods through lambdas: 101080.6 i/s - 1.03x (± 0.00) slower
1315
- # Micro::Case flow using `then` method: 69483.3 i/s - 1.49x (± 0.00) slower
1316
- # Micro::Cases.flow([]): 67757.2 i/s - 1.53x (± 0.00) slower
1317
- # Micro::Cases::safe_flow([]): 67613.3 i/s - 1.54x (± 0.00) slower
1318
- # Interactor::Organizer: 50730.8 i/s - 2.05x (± 0.00) slower
1325
+ # Micro::Case::Result#|: 172734.4 i/s
1326
+ # Micro::Case::Result#then: 139799.0 i/s - 1.24x (± 0.00) slower
1327
+ # Micro::Cases.flow([]): 133182.9 i/s - 1.30x (± 0.00) slower
1328
+ # Micro::Case flow in a class: 84082.6 i/s - 2.05x (± 0.00) slower
1329
+ # Micro::Case including the class: 80574.3 i/s - 2.14x (± 0.00) slower
1330
+ # Interactor::Organizer: 22467.4 i/s - 7.69x (± 0.00) slower
1319
1331
  ```
1320
1332
  </details>
1321
1333
 
@@ -1324,43 +1336,72 @@ https://github.com/serradura/u-case/blob/main/benchmarks/use_case/with_failure_r
1324
1336
 
1325
1337
  ```ruby
1326
1338
  # Warming up --------------------------------------
1327
- # Interactor::Organizer
1328
- # 2.299k i/100ms
1329
- # Micro::Cases.flow([])
1330
- # 14.187k i/100ms
1331
- # Micro::Cases::safe_flow([])
1332
- # 13.609k i/100ms
1333
- # Micro::Case flow using `then` method
1334
- # 14.578k i/100ms
1335
- # Micro::Case flow using private methods
1336
- # 14.101k i/100ms
1337
- # Micro::Case flow using private methods through lambdas
1338
- # 13.670k i/100ms
1339
+ # Interactor::Organizer 2.167k i/100ms
1340
+ # Micro::Cases.flow([]) 11.797k i/100ms
1341
+ # Micro::Case flow in a class 7.783k i/100ms
1342
+ # Micro::Case including the class 7.097k i/100ms
1343
+ # Micro::Case::Result#| 14.398k i/100ms
1344
+ # Micro::Case::Result#then 12.719k i/100ms
1345
+
1339
1346
  # Calculating -------------------------------------
1340
- # Interactor::Organizer
1341
- # 23.306k2.1%) i/s - 117.249k in 5.033171s
1342
- # Micro::Cases.flow([])
1343
- # 140.111k (± 1.6%) i/s - 709.350k in 5.064041s
1344
- # Micro::Cases::safe_flow([])
1345
- # 139.927k (± 1.7%) i/s - 707.668k in 5.058971s
1346
- # Micro::Case flow using `then` method
1347
- # 146.073k (± 2.0%) i/s - 743.478k in 5.091741s
1348
- # Micro::Case flow using private methods
1349
- # 142.092k (± 1.5%) i/s - 719.151k in 5.062298s
1350
- # Micro::Case flow using private methods through lambdas
1351
- # 140.791k (± 1.2%) i/s - 710.840k in 5.049584s
1347
+ # Interactor::Organizer 21.863k (± 2.5%) i/s - 110.517k in 5.058420s
1348
+ # Micro::Cases.flow([]) 118.124k1.8%) i/s - 601.647k in 5.095102s
1349
+ # Micro::Case flow in a class 77.801k (± 1.5%) i/s - 389.150k in 5.003002s
1350
+ # Micro::Case including the class 73.533k2.1%) i/s - 369.044k in 5.021076s
1351
+ # Micro::Case::Result#| 153.746k (± 1.5%) i/s - 777.492k in 5.058177s
1352
+ # Micro::Case::Result#then 126.897k (± 1.7%) i/s - 635.950k in 5.013059s
1352
1353
 
1353
1354
  # Comparison:
1354
- # Micro::Case flow using `then` method: 146073.0 i/s
1355
- # Micro::Case flow using private methods: 142091.7 i/s - same-ish: difference falls within error
1356
- # Micro::Case flow using private methods through lambdas: 140791.1 i/s - 1.04x (± 0.00) slower
1357
- # Micro::Cases.flow([]): 140110.8 i/s - 1.04x (± 0.00) slower
1358
- # Micro::Cases::safe_flow([]): 139926.6 i/s - 1.04x (± 0.00) slower
1359
- # Interactor::Organizer: 23305.9 i/s - 6.27x (± 0.00) slower
1355
+ # Micro::Case::Result#|: 153745.6 i/s
1356
+ # Micro::Case::Result#then: 126896.6 i/s - 1.21x (± 0.00) slower
1357
+ # Micro::Cases.flow([]): 118123.9 i/s - 1.30x (± 0.00) slower
1358
+ # Micro::Case flow in a class: 77800.7 i/s - 1.98x (± 0.00) slower
1359
+ # Micro::Case including the class: 73532.9 i/s - 2.09x (± 0.00) slower
1360
+ # Interactor::Organizer: 21862.9 i/s - 7.03x (± 0.00) slower
1360
1361
  ```
1361
1362
  </details>
1362
1363
 
1363
- https://github.com/serradura/u-case/tree/main/benchmarks/flow
1364
+ https://github.com/serradura/u-case/blob/main/benchmarks/perfomance/flow/
1365
+
1366
+ [⬆️ Back to Top](#table-of-contents-)
1367
+
1368
+ ### Running the benchmarks
1369
+
1370
+ #### Performance (Benchmarks IPS)
1371
+
1372
+ Clone this repo and access its folder, then run the commands below:
1373
+
1374
+ **Use cases**
1375
+
1376
+ ```sh
1377
+ ruby benchmarks/perfomance/use_case/failure_results.rb
1378
+ ruby benchmarks/perfomance/use_case/success_results.rb
1379
+ ```
1380
+
1381
+ **Flows**
1382
+
1383
+ ```sh
1384
+ ruby benchmarks/perfomance/flow/failure_results.rb
1385
+ ruby benchmarks/perfomance/flow/success_results.rb
1386
+ ```
1387
+
1388
+ #### Memory profiling
1389
+
1390
+ **Use cases**
1391
+
1392
+ ```sh
1393
+ ./benchmarks/memory/use_case/success/with_transitions/analyze.sh
1394
+ ./benchmarks/memory/use_case/success/without_transitions/analyze.sh
1395
+ ```
1396
+
1397
+ **Flows**
1398
+
1399
+ ```sh
1400
+ ./benchmarks/memory/flow/success/with_transitions/analyze.sh
1401
+ ./benchmarks/memory/flow/success/without_transitions/analyze.sh
1402
+ ```
1403
+
1404
+ [⬆️ Back to Top](#table-of-contents-)
1364
1405
 
1365
1406
  ### Comparisons
1366
1407