u-case 3.1.0 → 4.2.1

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: d3472991bd5b3d6198cb7455044ac8144445b61c860ce76ca191eba1f6e09aac
4
- data.tar.gz: eebefecaa4a27d98f3a558aa17a1731de6639a69cc5011fc6acdf430a7e1f52b
3
+ metadata.gz: b9b498ae868d7b556a8a0e3a35c314e4704e206c8708b195d585bef6a7766b8b
4
+ data.tar.gz: 699ee398f8757ffa406ee1fd86e5d54fa757c7a79d30b73e8af86ba51a65f233
5
5
  SHA512:
6
- metadata.gz: e8cc6cc9994b30bc71b3a5485123dcd41a5583c195bba9969da41e85efb6ebb964f4ee5e39d02f86e324a2cbea24b420f1a9fa67d1dca410c8a60539873d80b9
7
- data.tar.gz: 48b7f05a0473dba7885d1907d794b503c44030de29b53e0fd757f71597e37c8d0248db980b071ae8f2492e207bfddb0616b25dd9acbefd219318114f72b73339
6
+ metadata.gz: b869538c2bff9f728f3dccee9f1be07bd68d47746dae078394e393962a4b29fe881d1909bd574d19ca0ebf82eddb1951932e29cf92aeed00975a73a61b53cb3b
7
+ data.tar.gz: 7adc5bf983cdbb9e1ce4cb0eea5ab985ab0df4889ccc43545585381695d5163ec4ca139b7399e41399e736a4989923b3992aece149a6126e6315f9db760a19d0
data/.travis.sh CHANGED
@@ -2,22 +2,42 @@
2
2
 
3
3
  ruby_v=$(ruby -v)
4
4
 
5
- ACTIVEMODEL_VERSION='3.2' bundle update
6
- ACTIVEMODEL_VERSION='3.2' ENABLE_TRANSITIONS='false' bundle exec rake test
7
- ACTIVEMODEL_VERSION='3.2' ENABLE_TRANSITIONS='true' bundle exec rake test
5
+ ACTIVERECORD_VERSION='3.2' bundle update
6
+ ACTIVERECORD_VERSION='3.2' ENABLE_TRANSITIONS='true' bundle exec rake test
7
+ ACTIVERECORD_VERSION='3.2' ENABLE_TRANSITIONS='false' bundle exec rake test
8
+
9
+ ACTIVERECORD_VERSION='4.0' bundle update
10
+ ACTIVERECORD_VERSION='4.0' ENABLE_TRANSITIONS='true' bundle exec rake test
11
+ ACTIVERECORD_VERSION='4.0' ENABLE_TRANSITIONS='false' bundle exec rake test
12
+
13
+ ACTIVERECORD_VERSION='4.1' bundle update
14
+ ACTIVERECORD_VERSION='4.1' ENABLE_TRANSITIONS='true' bundle exec rake test
15
+ ACTIVERECORD_VERSION='4.1' ENABLE_TRANSITIONS='false' bundle exec rake test
16
+
17
+ ACTIVERECORD_VERSION='4.2' bundle update
18
+ ACTIVERECORD_VERSION='4.2' ENABLE_TRANSITIONS='true' bundle exec rake test
19
+ ACTIVERECORD_VERSION='4.2' ENABLE_TRANSITIONS='false' bundle exec rake test
20
+
21
+ ACTIVERECORD_VERSION='5.0' bundle update
22
+ ACTIVERECORD_VERSION='5.0' ENABLE_TRANSITIONS='true' bundle exec rake test
23
+ ACTIVERECORD_VERSION='5.0' ENABLE_TRANSITIONS='false' bundle exec rake test
24
+
25
+ ACTIVERECORD_VERSION='5.1' bundle update
26
+ ACTIVERECORD_VERSION='5.1' ENABLE_TRANSITIONS='true' bundle exec rake test
27
+ ACTIVERECORD_VERSION='5.1' ENABLE_TRANSITIONS='false' bundle exec rake test
8
28
 
9
29
  if [[ ! $ruby_v =~ '2.2.0' ]]; then
10
- ACTIVEMODEL_VERSION='5.2' bundle update
11
- ACTIVEMODEL_VERSION='5.2' ENABLE_TRANSITIONS='false' bundle exec rake test
12
- ACTIVEMODEL_VERSION='5.2' ENABLE_TRANSITIONS='true' bundle exec rake test
30
+ ACTIVERECORD_VERSION='5.2' bundle update
31
+ ACTIVERECORD_VERSION='5.2' ENABLE_TRANSITIONS='true' bundle exec rake test
32
+ ACTIVERECORD_VERSION='5.2' ENABLE_TRANSITIONS='false' bundle exec rake test
13
33
  fi
14
34
 
15
35
  if [[ $ruby_v =~ '2.5.' ]] || [[ $ruby_v =~ '2.6.' ]] || [[ $ruby_v =~ '2.7.' ]]; then
16
- ACTIVEMODEL_VERSION='6.0' bundle update
17
- ACTIVEMODEL_VERSION='6.0' ENABLE_TRANSITIONS='false' bundle exec rake test
18
- ACTIVEMODEL_VERSION='6.0' ENABLE_TRANSITIONS='true' bundle exec rake test
36
+ ACTIVERECORD_VERSION='6.0' bundle update
37
+ ACTIVERECORD_VERSION='6.0' ENABLE_TRANSITIONS='true' bundle exec rake test
38
+ ACTIVERECORD_VERSION='6.0' ENABLE_TRANSITIONS='false' bundle exec rake test
19
39
  fi
20
40
 
21
41
  bundle update
22
- ENABLE_TRANSITIONS='false' bundle exec rake test
23
42
  ENABLE_TRANSITIONS='true' bundle exec rake test
43
+ ENABLE_TRANSITIONS='false' bundle exec rake test
data/Gemfile CHANGED
@@ -2,19 +2,19 @@ source "https://rubygems.org"
2
2
 
3
3
  git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
4
4
 
5
- activemodel_version = ENV.fetch('ACTIVEMODEL_VERSION', '6.1.0')
5
+ activerecord_version = ENV.fetch('ACTIVERECORD_VERSION', '6.1')
6
6
 
7
- activemodel = case activemodel_version
7
+ activerecord = case activerecord_version
8
8
  when '3.2' then '3.2.22'
9
+ when '4.0' then '4.0.13'
10
+ when '4.1' then '4.1.16'
11
+ when '4.2' then '4.2.11'
12
+ when '5.0' then '5.0.7'
13
+ when '5.1' then '5.1.7'
9
14
  when '5.2' then '5.2.3'
10
- when '6.0' then '6.0.2'
15
+ when '6.0' then '6.0.3'
11
16
  end
12
17
 
13
- if activemodel_version < '6.1.0'
14
- gem 'activemodel', activemodel, require: false
15
- gem 'activesupport', activemodel, require: false
16
- end
17
-
18
18
  simplecov_version =
19
19
  case RUBY_VERSION
20
20
  when /\A2.[23]/ then '~> 0.17.1'
@@ -23,9 +23,20 @@ simplecov_version =
23
23
  end
24
24
 
25
25
  group :test do
26
- gem 'minitest', activemodel_version < '4.1' ? '~> 4.2' : '~> 5.0'
26
+ gem 'minitest', activerecord_version < '4.1' ? '~> 4.2' : '~> 5.0'
27
27
 
28
28
  gem 'simplecov', simplecov_version, require: false
29
+
30
+ if activerecord
31
+ sqlite3 =
32
+ case activerecord
33
+ when /\A6\.0/, nil then '~> 1.4.0'
34
+ else '~> 1.3.0'
35
+ end
36
+
37
+ gem 'sqlite3', sqlite3
38
+ gem 'activerecord', activerecord, require: 'active_record'
39
+ end
29
40
  end
30
41
 
31
42
  pry_byebug_version =
data/README.md CHANGED
@@ -1,12 +1,12 @@
1
1
  <p align="center">
2
- <img src="./assets/ucase_logo_v1.png" alt="u-case - Create simple and powerful use cases as Ruby objects.">
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.">
3
3
 
4
- <p align="center"><i>Create simple and powerful use cases as Ruby objects.</i></p>
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
5
  <br>
6
6
  </p>
7
7
 
8
8
  <p align="center">
9
- <img src="https://img.shields.io/badge/ruby-2.2+-ruby.svg?colorA=99004d&colorB=cc0066" alt="Ruby">
9
+ <img src="https://img.shields.io/badge/ruby->%3D%202.2.0-ruby.svg?colorA=99004d&colorB=cc0066" alt="Ruby">
10
10
 
11
11
  <a href="https://rubygems.org/gems/u-case">
12
12
  <img alt="Gem" src="https://img.shields.io/gem/v/u-case.svg?style=flat-square">
@@ -38,11 +38,13 @@ The main project goals are:
38
38
 
39
39
  Version | Documentation
40
40
  --------- | -------------
41
- 3.1.0 | https://github.com/serradura/u-case/blob/main/README.md
41
+ unreleased| https://github.com/serradura/u-case/blob/main/README.md
42
+ 4.2.1 | 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
42
44
  2.6.0 | https://github.com/serradura/u-case/blob/v2.x/README.md
43
45
  1.1.0 | https://github.com/serradura/u-case/blob/v1.x/README.md
44
46
 
45
- > **Note:** Você entende português? 🇧🇷🇵🇹 Verifique o [README traduzido em pt-BR](https://github.com/serradura/u-case/blob/main/README.pt-BR.md).
47
+ > **Note:** Você entende português? 🇧🇷&nbsp;🇵🇹 Verifique o [README traduzido em pt-BR](https://github.com/serradura/u-case/blob/main/README.pt-BR.md).
46
48
 
47
49
  ## Table of Contents <!-- omit in toc -->
48
50
  - [Compatibility](#compatibility)
@@ -81,6 +83,9 @@ Version | Documentation
81
83
  - [Success results](#success-results)
82
84
  - [Failure results](#failure-results)
83
85
  - [`Micro::Cases::Flow`](#microcasesflow)
86
+ - [Running the benchmarks](#running-the-benchmarks)
87
+ - [Performance (Benchmarks IPS)](#performance-benchmarks-ips)
88
+ - [Memory profiling](#memory-profiling)
84
89
  - [Comparisons](#comparisons)
85
90
  - [Examples](#examples)
86
91
  - [1️⃣ Users creation](#1️⃣-users-creation)
@@ -94,11 +99,13 @@ Version | Documentation
94
99
 
95
100
  ## Compatibility
96
101
 
97
- | u-case | branch | ruby | activemodel |
98
- | -------------- | ------- | -------- | ------------- |
99
- | 3.1.0 | main | >= 2.2.0 | >= 3.2, < 6.1 |
100
- | 2.6.0 | v2.x | >= 2.2.0 | >= 3.2, < 6.1 |
101
- | 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.2.1 | 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 |
102
109
 
103
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.
104
111
 
@@ -119,7 +126,7 @@ Version | Documentation
119
126
  Add this line to your application's Gemfile:
120
127
 
121
128
  ```ruby
122
- gem 'u-case', '~> 3.1.0'
129
+ gem 'u-case', '~> 4.1.0'
123
130
  ```
124
131
 
125
132
  And then execute:
@@ -128,7 +135,7 @@ And then execute:
128
135
 
129
136
  Or install it yourself as:
130
137
 
131
- $ gem install u-case --pre
138
+ $ gem install u-case
132
139
 
133
140
  ## Usage
134
141
 
@@ -1193,104 +1200,106 @@ end
1193
1200
 
1194
1201
  | Gem / Abstraction | Iterations per second | Comparison |
1195
1202
  | ----------------- | --------------------: | ----------------: |
1196
- | Dry::Monads | 141730.1 | _**The Fastest**_ |
1197
- | **Micro::Case** | 103541.3 | 1.37x slower |
1198
- | Interactor | 29100.8 | 4.87x slower |
1199
- | Trailblazer::Operation | 15031.4 | 9.43x slower |
1200
- | Dry::Transaction | 5674.0 | 24.98x slower |
1203
+ | Dry::Monads | 315635.1 | _**The Fastest**_ |
1204
+ | **Micro::Case** | 75837.7 | 4.16x slower |
1205
+ | Interactor | 59745.5 | 5.28x slower |
1206
+ | Trailblazer::Operation | 28423.9 | 11.10x slower |
1207
+ | Dry::Transaction | 10130.9 | 31.16x slower |
1201
1208
 
1202
1209
  <details>
1203
1210
  <summary>Show the full <a href="https://github.com/evanphx/benchmark-ips">benchmark/ips</a> results.</summary>
1204
1211
 
1205
1212
  ```ruby
1206
1213
  # Warming up --------------------------------------
1207
- # Interactor 2.915k i/100ms
1208
- # Trailblazer::Operation 1.543k i/100ms
1209
- # Dry::Monads 14.288k i/100ms
1210
- # Dry::Transaction 571.000 i/100ms
1211
- # Micro::Case 10.418k i/100ms
1212
- # Micro::Case::Strict 8.296k i/100ms
1213
- # Micro::Case::Safe 10.254k i/100ms
1214
+ # Interactor 5.711k i/100ms
1215
+ # Trailblazer::Operation
1216
+ # 2.283k i/100ms
1217
+ # Dry::Monads 31.130k i/100ms
1218
+ # Dry::Transaction 994.000 i/100ms
1219
+ # Micro::Case 7.911k i/100ms
1220
+ # Micro::Case::Safe 7.911k i/100ms
1221
+ # Micro::Case::Strict 6.248k i/100ms
1214
1222
 
1215
1223
  # Calculating -------------------------------------
1216
- # Interactor 29.101k 2.1%) i/s - 145.750k in 5.010660s
1217
- # Trailblazer::Operation 15.031k (± 2.0%) i/s - 75.607k in 5.032071s
1218
- # Dry::Monads 141.730k 3.1%) i/s - 714.400k in 5.045546s
1219
- # Dry::Transaction 5.674k (± 1.9%) i/s - 28.550k in 5.033564s
1220
- # Micro::Case 103.541k1.6%) i/s - 520.900k in 5.032077s
1221
- # Micro::Case::Strict 83.045k2.4%) i/s - 423.096k in 5.098031s
1222
- # Micro::Case::Safe 101.662k 1.5%) i/s - 512.700k in 5.044386s
1224
+ # Interactor 59.746k29.9%) i/s - 274.128k in 5.049901s
1225
+ # Trailblazer::Operation
1226
+ # 28.424k15.8%) i/s - 141.546k in 5.087882s
1227
+ # Dry::Monads 315.635k6.1%) i/s - 1.588M in 5.048914s
1228
+ # Dry::Transaction 10.131k6.4%) i/s - 50.694k in 5.025150s
1229
+ # Micro::Case 75.838k9.7%) i/s - 379.728k in 5.052573s
1230
+ # Micro::Case::Safe 75.461k10.1%) i/s - 379.728k in 5.079238s
1231
+ # Micro::Case::Strict 64.235k (± 9.0%) i/s - 324.896k in 5.097028s
1223
1232
 
1224
1233
  # Comparison:
1225
- # Dry::Monads: 141730.1 i/s
1226
- # Micro::Case: 103541.3 i/s - 1.37x (± 0.00) slower
1227
- # Micro::Case::Safe: 101662.2 i/s - 1.39x (± 0.00) slower
1228
- # Micro::Case::Strict: 83044.6 i/s - 1.71x (± 0.00) slower
1229
- # Interactor: 29100.8 i/s - 4.87x (± 0.00) slower
1230
- # Trailblazer::Operation: 15031.4 i/s - 9.43x (± 0.00) slower
1231
- # Dry::Transaction: 5674.0 i/s - 24.98x (± 0.00) slower
1234
+ # Dry::Monads: 315635.1 i/s
1235
+ # Micro::Case: 75837.7 i/s - 4.16x (± 0.00) slower
1236
+ # Micro::Case::Safe: 75461.3 i/s - 4.18x (± 0.00) slower
1237
+ # Micro::Case::Strict: 64234.9 i/s - 4.91x (± 0.00) slower
1238
+ # Interactor: 59745.5 i/s - 5.28x (± 0.00) slower
1239
+ # Trailblazer::Operation: 28423.9 i/s - 11.10x (± 0.00) slower
1240
+ # Dry::Transaction: 10130.9 i/s - 31.16x (± 0.00) slower
1232
1241
  ```
1233
1242
  </details>
1234
1243
 
1235
- https://github.com/serradura/u-case/blob/main/benchmarks/use_case/with_success_result.rb
1244
+ https://github.com/serradura/u-case/blob/main/benchmarks/perfomance/use_case/success_results.rb
1236
1245
 
1237
1246
  #### Failure results
1238
1247
 
1239
1248
  | Gem / Abstraction | Iterations per second | Comparison |
1240
1249
  | ----------------- | --------------------: | ----------------: |
1241
- | **Micro::Case** | 98820.8 | _**The Fastest**_ |
1242
- | Dry::Monads | 71329.7 | 1.39x slower |
1243
- | Trailblazer::Operation | 15034.9 | 6.57x slower |
1244
- | Interactor | 13958.7 | 7.08x slower |
1245
- | Dry::Transaction | 5067.5 | 19.50x slower |
1250
+ | Dry::Monads | 135386.9 | _**The Fastest**_ |
1251
+ | **Micro::Case** | 73489.3 | 1.85x slower |
1252
+ | Trailblazer::Operation | 29016.4 | 4.67x slower |
1253
+ | Interactor | 27037.0 | 5.01x slower |
1254
+ | Dry::Transaction | 8988.6 | 15.06x slower |
1246
1255
 
1247
1256
  <details>
1248
1257
  <summary>Show the full <a href="https://github.com/evanphx/benchmark-ips">benchmark/ips</a> results.</summary>
1249
1258
 
1250
1259
  ```ruby
1251
1260
  # Warming up --------------------------------------
1252
- # Interactor 1.324k i/100ms
1253
- # Trailblazer::Operation 1.525k i/100ms
1254
- # Dry::Monads 7.126k i/100ms
1255
- # Dry::Transaction 499.000 i/100ms
1256
- # Micro::Case 9.919k i/100ms
1257
- # Micro::Case::Strict 7.837k i/100ms
1258
- # Micro::Case::Safe 9.762k i/100ms
1261
+ # Interactor 2.626k i/100ms
1262
+ # Trailblazer::Operation 2.343k i/100ms
1263
+ # Dry::Monads 13.386k i/100ms
1264
+ # Dry::Transaction 868.000 i/100ms
1265
+ # Micro::Case 7.603k i/100ms
1266
+ # Micro::Case::Safe 7.598k i/100ms
1267
+ # Micro::Case::Strict 6.178k i/100ms
1259
1268
 
1260
1269
  # Calculating -------------------------------------
1261
- # Interactor 13.959k 2.5%) i/s - 70.172k in 5.030240s
1262
- # Trailblazer::Operation 15.035k 2.2%) i/s - 76.250k in 5.074108s
1263
- # Dry::Monads 71.330k 2.4%) i/s - 363.426k in 5.097993s
1264
- # Dry::Transaction 5.068k1.9%) i/s - 25.449k in 5.023922s
1265
- # Micro::Case 98.821k2.9%) i/s - 495.950k in 5.023421s
1266
- # Micro::Case::Strict 79.936k3.1%) i/s - 399.687k in 5.005435s
1267
- # Micro::Case::Safe 98.695k1.9%) i/s - 497.862k in 5.046246s
1270
+ # Interactor 27.037k24.9%) i/s - 128.674k in 5.102133s
1271
+ # Trailblazer::Operation 29.016k12.4%) i/s - 145.266k in 5.074991s
1272
+ # Dry::Monads 135.387k15.1%) i/s - 669.300k in 5.055356s
1273
+ # Dry::Transaction 8.989k9.2%) i/s - 45.136k in 5.084820s
1274
+ # Micro::Case 73.247k9.9%) i/s - 364.944k in 5.030449s
1275
+ # Micro::Case::Safe 73.489k9.6%) i/s - 364.704k in 5.007282s
1276
+ # Micro::Case::Strict 61.980k8.0%) i/s - 308.900k in 5.014821s
1268
1277
 
1269
1278
  # Comparison:
1270
- # Micro::Case: 98820.8 i/s
1271
- # Micro::Case::Safe: 98695.0 i/s - same-ish: difference falls within error
1272
- # Micro::Case::Strict: 79935.9 i/s - 1.24x (± 0.00) slower
1273
- # Dry::Monads: 71329.7 i/s - 1.39x (± 0.00) slower
1274
- # Trailblazer::Operation: 15034.9 i/s - 6.57x (± 0.00) slower
1275
- # Interactor: 13958.7 i/s - 7.08x (± 0.00) slower
1276
- # Dry::Transaction: 5067.5 i/s - 19.50x (± 0.00) slower
1279
+ # Dry::Monads: 135386.9 i/s
1280
+ # Micro::Case::Safe: 73489.3 i/s - 1.84x (± 0.00) slower
1281
+ # Micro::Case: 73246.6 i/s - 1.85x (± 0.00) slower
1282
+ # Micro::Case::Strict: 61979.7 i/s - 2.18x (± 0.00) slower
1283
+ # Trailblazer::Operation: 29016.4 i/s - 4.67x (± 0.00) slower
1284
+ # Interactor: 27037.0 i/s - 5.01x (± 0.00) slower
1285
+ # Dry::Transaction: 8988.6 i/s - 15.06x (± 0.00) slower
1277
1286
  ```
1278
1287
  </details>
1279
1288
 
1280
- https://github.com/serradura/u-case/blob/main/benchmarks/use_case/with_failure_result.rb
1289
+ https://github.com/serradura/u-case/blob/main/benchmarks/perfomance/use_case/failure_results.rb
1281
1290
 
1282
1291
  ---
1283
1292
 
1284
1293
  ### `Micro::Cases::Flow`
1285
1294
 
1286
- | 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) |
1295
+ | 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) |
1287
1296
  | ------------------------------------------- | ----------------: | ----------------: |
1288
- | Micro::Case internal flow (private methods) | _**The Fastest**_ | _**The Fastest**_ |
1289
- | Micro::Case internal flow (through lambdas) | 1.03x slower | 1.04x slower |
1290
- | Micro::Case `then` method | 1.49x slower | 0x slower |
1291
- | Micro::Cases.flow | 1.53x slower | 1.04x slower |
1292
- | Micro::Cases.safe_flow | 1.54x slower | 1.04x slower |
1293
- | Interactor::Organizer | 2.05x slower | 6.27x slower |
1297
+ | Micro::Case::Result `pipe` method | 80936.2 i/s | 78280.4 i/s |
1298
+ | Micro::Case::Result `then` method | 0x slower | 0x slower |
1299
+ | Micro::Cases.flow | 0x slower | 0x slower |
1300
+ | Micro::Case class with an inner flow | 1.72x slower | 1.68x slower |
1301
+ | Micro::Case class including itself as a step| 1.93x slower | 1.87x slower |
1302
+ | Interactor::Organizer | 3.33x slower | 3.22x slower |
1294
1303
 
1295
1304
  \* The `Dry::Monads`, `Dry::Transaction`, `Trailblazer::Operation` gems are out of this analysis because all of them doesn't have this kind of feature.
1296
1305
 
@@ -1299,40 +1308,28 @@ https://github.com/serradura/u-case/blob/main/benchmarks/use_case/with_failure_r
1299
1308
 
1300
1309
  ```ruby
1301
1310
  # Warming up --------------------------------------
1302
- # Interactor::Organizer
1303
- # 4.837k i/100ms
1304
- # Micro::Cases.flow([])
1305
- # 6.755k i/100ms
1306
- # Micro::Cases::safe_flow([])
1307
- # 6.809k i/100ms
1308
- # Micro::Case flow using `then` method
1309
- # 6.968k i/100ms
1310
- # Micro::Case flow using private methods
1311
- # 10.362k i/100ms
1312
- # Micro::Case flow using private methods through lambdas
1313
- # 10.258k i/100ms
1311
+ # Interactor::Organizer 1.809k i/100ms
1312
+ # Micro::Cases.flow([]) 7.808k i/100ms
1313
+ # Micro::Case flow in a class 4.816k i/100ms
1314
+ # Micro::Case including the class 4.094k i/100ms
1315
+ # Micro::Case::Result#| 7.656k i/100ms
1316
+ # Micro::Case::Result#then 7.138k i/100ms
1314
1317
 
1315
1318
  # Calculating -------------------------------------
1316
- # Interactor::Organizer
1317
- # 50.731k 1.6%) i/s - 256.361k in 5.054694s
1318
- # Micro::Cases.flow([])
1319
- # 67.757k1.6%) i/s - 344.505k in 5.085681s
1320
- # Micro::Cases::safe_flow([])
1321
- # 67.613k1.6%) i/s - 340.450k in 5.036562s
1322
- # Micro::Case flow using `then` method
1323
- # 69.483k (± 1.5%) i/s - 348.400k in 5.015351s
1324
- # Micro::Case flow using private methods
1325
- # 103.788k (± 1.0%) i/s - 528.462k in 5.092240s
1326
- # Micro::Case flow using private methods through lambdas
1327
- # 101.081k (± 1.2%) i/s - 512.900k in 5.074904s
1319
+ # Interactor::Organizer 24.290k (±24.0%) i/s - 113.967k in 5.032825s
1320
+ # Micro::Cases.flow([]) 74.790k11.1%) i/s - 374.784k in 5.071740s
1321
+ # Micro::Case flow in a class 47.043k (± 8.0%) i/s - 235.984k in 5.047477s
1322
+ # Micro::Case including the class 42.030k8.5%) i/s - 208.794k in 5.002138s
1323
+ # Micro::Case::Result#| 80.936k (±15.9%) i/s - 398.112k in 5.052531s
1324
+ # Micro::Case::Result#then 71.459k8.8%) i/s - 356.900k in 5.030526s
1328
1325
 
1329
1326
  # Comparison:
1330
- # Micro::Case flow using private methods: 103787.5 i/s
1331
- # Micro::Case flow using private methods through lambdas: 101080.6 i/s - 1.03x (± 0.00) slower
1332
- # Micro::Case flow using `then` method: 69483.3 i/s - 1.49x (± 0.00) slower
1333
- # Micro::Cases.flow([]): 67757.2 i/s - 1.53x (± 0.00) slower
1334
- # Micro::Cases::safe_flow([]): 67613.3 i/s - 1.54x (± 0.00) slower
1335
- # Interactor::Organizer: 50730.8 i/s - 2.05x (± 0.00) slower
1327
+ # Micro::Case::Result#|: 80936.2 i/s
1328
+ # Micro::Cases.flow([]): 74790.1 i/s - same-ish: difference falls within error
1329
+ # Micro::Case::Result#then: 71459.5 i/s - same-ish: difference falls within error
1330
+ # Micro::Case flow in a class: 47042.6 i/s - 1.72x (± 0.00) slower
1331
+ # Micro::Case including the class: 42030.2 i/s - 1.93x (± 0.00) slower
1332
+ # Interactor::Organizer: 24290.3 i/s - 3.33x (± 0.00) slower
1336
1333
  ```
1337
1334
  </details>
1338
1335
 
@@ -1341,43 +1338,72 @@ https://github.com/serradura/u-case/blob/main/benchmarks/use_case/with_failure_r
1341
1338
 
1342
1339
  ```ruby
1343
1340
  # Warming up --------------------------------------
1344
- # Interactor::Organizer
1345
- # 2.299k i/100ms
1346
- # Micro::Cases.flow([])
1347
- # 14.187k i/100ms
1348
- # Micro::Cases::safe_flow([])
1349
- # 13.609k i/100ms
1350
- # Micro::Case flow using `then` method
1351
- # 14.578k i/100ms
1352
- # Micro::Case flow using private methods
1353
- # 14.101k i/100ms
1354
- # Micro::Case flow using private methods through lambdas
1355
- # 13.670k i/100ms
1341
+ # Interactor::Organizer 1.734k i/100ms
1342
+ # Micro::Cases.flow([]) 7.515k i/100ms
1343
+ # Micro::Case flow in a class 4.636k i/100ms
1344
+ # Micro::Case including the class 4.114k i/100ms
1345
+ # Micro::Case::Result#| 7.588k i/100ms
1346
+ # Micro::Case::Result#then 6.681k i/100ms
1347
+
1356
1348
  # Calculating -------------------------------------
1357
- # Interactor::Organizer
1358
- # 23.306k2.1%) i/s - 117.249k in 5.033171s
1359
- # Micro::Cases.flow([])
1360
- # 140.111k1.6%) i/s - 709.350k in 5.064041s
1361
- # Micro::Cases::safe_flow([])
1362
- # 139.927k1.7%) i/s - 707.668k in 5.058971s
1363
- # Micro::Case flow using `then` method
1364
- # 146.073k (± 2.0%) i/s - 743.478k in 5.091741s
1365
- # Micro::Case flow using private methods
1366
- # 142.092k (± 1.5%) i/s - 719.151k in 5.062298s
1367
- # Micro::Case flow using private methods through lambdas
1368
- # 140.791k (± 1.2%) i/s - 710.840k in 5.049584s
1349
+ # Interactor::Organizer 24.280k (±24.5%) i/s - 112.710k in 5.013334s
1350
+ # Micro::Cases.flow([]) 74.999k9.8%) i/s - 375.750k in 5.055777s
1351
+ # Micro::Case flow in a class 46.681k (± 9.3%) i/s - 236.436k in 5.105105s
1352
+ # Micro::Case including the class 41.921k8.9%) i/s - 209.814k in 5.043622s
1353
+ # Micro::Case::Result#| 78.280k (±12.6%) i/s - 386.988k in 5.022146s
1354
+ # Micro::Case::Result#then 68.898k8.8%) i/s - 347.412k in 5.080116s
1369
1355
 
1370
1356
  # Comparison:
1371
- # Micro::Case flow using `then` method: 146073.0 i/s
1372
- # Micro::Case flow using private methods: 142091.7 i/s - same-ish: difference falls within error
1373
- # Micro::Case flow using private methods through lambdas: 140791.1 i/s - 1.04x (± 0.00) slower
1374
- # Micro::Cases.flow([]): 140110.8 i/s - 1.04x (± 0.00) slower
1375
- # Micro::Cases::safe_flow([]): 139926.6 i/s - 1.04x (± 0.00) slower
1376
- # Interactor::Organizer: 23305.9 i/s - 6.27x (± 0.00) slower
1357
+ # Micro::Case::Result#|: 78280.4 i/s
1358
+ # Micro::Cases.flow([]): 74999.4 i/s - same-ish: difference falls within error
1359
+ # Micro::Case::Result#then: 68898.4 i/s - same-ish: difference falls within error
1360
+ # Micro::Case flow in a class: 46681.0 i/s - 1.68x (± 0.00) slower
1361
+ # Micro::Case including the class: 41920.8 i/s - 1.87x (± 0.00) slower
1362
+ # Interactor::Organizer: 24280.0 i/s - 3.22x (± 0.00) slower
1377
1363
  ```
1378
1364
  </details>
1379
1365
 
1380
- https://github.com/serradura/u-case/tree/main/benchmarks/flow
1366
+ https://github.com/serradura/u-case/blob/main/benchmarks/perfomance/flow/
1367
+
1368
+ [⬆️ Back to Top](#table-of-contents-)
1369
+
1370
+ ### Running the benchmarks
1371
+
1372
+ #### Performance (Benchmarks IPS)
1373
+
1374
+ Clone this repo and access its folder, then run the commands below:
1375
+
1376
+ **Use cases**
1377
+
1378
+ ```sh
1379
+ ruby benchmarks/perfomance/use_case/failure_results.rb
1380
+ ruby benchmarks/perfomance/use_case/success_results.rb
1381
+ ```
1382
+
1383
+ **Flows**
1384
+
1385
+ ```sh
1386
+ ruby benchmarks/perfomance/flow/failure_results.rb
1387
+ ruby benchmarks/perfomance/flow/success_results.rb
1388
+ ```
1389
+
1390
+ #### Memory profiling
1391
+
1392
+ **Use cases**
1393
+
1394
+ ```sh
1395
+ ./benchmarks/memory/use_case/success/with_transitions/analyze.sh
1396
+ ./benchmarks/memory/use_case/success/without_transitions/analyze.sh
1397
+ ```
1398
+
1399
+ **Flows**
1400
+
1401
+ ```sh
1402
+ ./benchmarks/memory/flow/success/with_transitions/analyze.sh
1403
+ ./benchmarks/memory/flow/success/without_transitions/analyze.sh
1404
+ ```
1405
+
1406
+ [⬆️ Back to Top](#table-of-contents-)
1381
1407
 
1382
1408
  ### Comparisons
1383
1409