action_logic 0.2.4 → 0.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fb4115622aa03370f1c78ca57d8c45670d2c52bf
4
- data.tar.gz: f1687c7f429d52c51369d91814cde3927a3eadd2
3
+ metadata.gz: c66d180782e1862be0377d7fe898882aa0ade055
4
+ data.tar.gz: 888830e3f75532ca8f4478d408a50c44598b0f06
5
5
  SHA512:
6
- metadata.gz: 65e4f68bd7c54c1a838fdd81f399c9031c25a1409c423ad622d68203cbde71532f27b6df86a2c50437d6c0d23d360938df536b6593c550ce4580ea3302ac1054
7
- data.tar.gz: 453fa766e4778a577fcea58ffdfc2c59b8fb256ca42322136874926f1f5bf56748aa9fc79998edbbaff6eec696c7e942e91d6b3e6034d7c13c3ca72580b5d171
6
+ metadata.gz: a74659bc15c3f9d9269954cdf222f03bf33d10a0164ca11a76494e4d94ea508b8659d0c89f9fc344b374b56dd05de4b96e5377894f67644c0cc20a8530745cc2
7
+ data.tar.gz: 8178b2136a5c4855fb3f50318f97c1645f551d269e129b7b147d57a4c37919cd077edd9187c70bf85148969ae277d7e1e4d70b9e83db1b4356bbf50c78523509
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- action_logic (0.2.3)
4
+ action_logic (0.2.4)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/README.md CHANGED
@@ -32,6 +32,11 @@ Why another business logic abstraction gem? `ActionLogic` provides teams of vari
32
32
  * [Before Validations](#before-validations)
33
33
  * [After Validations](#after-validations)
34
34
  * [Around Validations](#around-validations)
35
+ * [Benchmarking](#benchmarking)
36
+ * [Enable Benchmarking](#enable-benchmarking)
37
+ * [Benchmark Logging](#benchmark-logging)
38
+ * [Benchark Log Formatting](#benchmark-log-formatting)
39
+ * [Custom Benchmark Handling](#custom-benchmark-handling)
35
40
 
36
41
  ### Backstory
37
42
 
@@ -925,3 +930,120 @@ result = ActionTaskExample.execute(:example_attribute => [1, 2, 3], :example_att
925
930
 
926
931
  result # => #<ActionLogic::ActionContext example_attribute=[1, 2, 3], example_attribute2=1, status=:success>
927
932
  ```
933
+
934
+ ### Benchmarking
935
+
936
+ At some point you may want to benchmark and profile the performance of your code. `ActionLogic` allows for benchmarking that
937
+ range from simple defaults to highly customizable options depending on your use case and needs.
938
+
939
+ ### Enable Benchmarking
940
+
941
+ Because benchmarking negatively impacts performance, we must explicitly tell `ActionLogic` that we want to benchmark (otherwise
942
+ it defaults to ignore benchmarking). To do this, we configure `ActionLogic` using the `configure` method. With the provided
943
+ `config` object, we explicitly enable benchmarking by setting `config.benchmark = true`:
944
+
945
+ ```ruby
946
+ ActionLogic.configure do |config|
947
+ config.benchmark = true
948
+ end
949
+ ```
950
+
951
+ ### Benchmark Logging
952
+
953
+ Additionally, `ActionLogic` writes a benchmark log to `$stdout` by default, or you can override this default configuration
954
+ by specifying a log file. To do this, you configure `ActionLogic` to use a `File` object for logging benchmark results via the
955
+ `ActionLogic.configure` method:
956
+
957
+ ```ruby
958
+ ActionLogic.configure do |config|
959
+ config.benchmark = true
960
+ config.benchmark_log = File.open("benchmark.log", "w")
961
+ end
962
+ ```
963
+
964
+ ### Benchmark Log Formatting
965
+
966
+ By default, `ActionLogic` formats benchmark logs in the following format:
967
+
968
+ ```
969
+ context:ValidateAroundPresenceTestUseCase user_time:0.000000 system_time:0.000000 total_time:0.000000 real_time:0.000135
970
+ ...
971
+ ```
972
+
973
+ The default format is intended to be machine readable for easy parsing and is not intended to be used for human reading.
974
+ However, if you wish to change the format of the log output, `ActionLogic` allows you to override the default formatter by
975
+ allowing you to provide your own formatter:
976
+
977
+ ```ruby
978
+ ActionLogic.configure do |config|
979
+ config.benchmark = true
980
+ config.benchmark_log = File.open("benchmark.log", "w")
981
+ config.benchmark_formatter = YourCustomFormatter
982
+ end
983
+ ```
984
+
985
+ Where `YourCustomFormatter` subclasses `ActionLogic::ActionBenchmark::DefaultFormatter`:
986
+
987
+ ```ruby
988
+ class CustomFormatter < ActionLogic::ActionBenchmark::DefaultFormatter
989
+
990
+ def log_coordinator(benchmark_result, execution_context_name)
991
+ benchmark_log.puts("The ActionCoordinator #{execution_context_name} took #{benchmark_result.real} to complete.")
992
+ end
993
+
994
+ def log_use_case(benchmark_result, execution_context_name)
995
+ benchmark_log.puts("The ActionUseCase #{execution_context_name} took #{benchmark_result.real} to complete.")
996
+ end
997
+
998
+ def log_task(benchmark_result, execution_context_name)
999
+ benchmark_log.puts("The ActionTask #{execution_context_name} took #{benchmark_result.real} to complete.")
1000
+ end
1001
+
1002
+ end
1003
+ ```
1004
+
1005
+ From the example above, you can see that a custom formatter is required to define three methods: `log_coordinator`, `log_use_case` and `log_task`. The `log_t cqcoordinator`
1006
+ method is called when a `ActionCoordinator` context is benchmarked. The `use_case` and `task` methods are invoked when `ActionUseCase` and `ActionTask`
1007
+ contexts are benchmarked, respectively.
1008
+
1009
+ Each of the three log methods receives two input parameters: `benchmark_result` and `execution_context_name` where `benchmark_result` is a Ruby
1010
+ standard library `Benchmark` result object, and `execution_context_name` is the class name of the `ActionLogic` context.
1011
+
1012
+ Once configured, you can verify that the formatter outputs to the specified log file by executing your `ActionLogic` contexts
1013
+ and verifying that the log file is written to with the correct format:
1014
+
1015
+ ```
1016
+ The ActionUseCase TestUseCase2 took 0.00011722202179953456 to complete.
1017
+ The ActionTask TestTask3 took 4.570698365569115e-05 to complete.
1018
+ ...
1019
+ ```
1020
+
1021
+ ### Custom Benchmark Handling
1022
+
1023
+ By default, `ActionLogic` benchmarks execution contexts using Ruby's `Benchmark` module. If you are content with a `Benchmark` result object, then
1024
+ you do not need to specify a custom benchmark handler. However, if you wish to have maximum control, or you require something different than Ruby's
1025
+ `Benchmark` module, you can define a custom handler like so:
1026
+
1027
+ ```ruby
1028
+ class CustomHandler
1029
+ def call
1030
+ # custom logic
1031
+ yield
1032
+ # custom logic
1033
+ end
1034
+ end
1035
+ ```
1036
+
1037
+ Your custom handler is free to define any custom logic, but you must yield during the body of the `call` method. This is what triggers the execution
1038
+ context and will allow your custom handler to measure the length of execution. If you do not yield, the relevant `ActionCoordinator`, `ActionUseCase`
1039
+ or `ActionTask` will not be executed and will result in no execution to benchmark.
1040
+
1041
+ Additionally, you must register your custom handler with `ActionLogic` using `ActionLogic.configure`:
1042
+
1043
+ ```ruby
1044
+ ActionLogic.configure do |config|
1045
+ config.benchmark = true
1046
+ config.benchmark_log = File.open("benchmark.log", "w")
1047
+ config.benchmark_handler = CustomHandler.new
1048
+ end
1049
+ ```
@@ -1,4 +1,3 @@
1
- require 'action_logic/action_configuration'
2
1
  require 'action_logic/action_context'
3
2
  require 'action_logic/action_coordinator'
4
3
  require 'action_logic/action_core'
@@ -7,6 +6,8 @@ require 'action_logic/action_use_case'
7
6
  require 'action_logic/action_validation'
8
7
  require 'action_logic/action_benchmark'
9
8
  require 'action_logic/action_benchmark/default_formatter'
9
+ require 'action_logic/action_benchmark/default_benchmark_block'
10
10
 
11
+ require 'action_logic/configuration'
11
12
  require 'action_logic/errors'
12
13
  require 'action_logic/version'
@@ -1,38 +1,25 @@
1
- require 'benchmark'
2
-
3
1
  module ActionLogic
4
2
  module ActionBenchmark
5
-
6
3
  module ClassMethods
7
4
  def with_benchmark(execution_context, &block)
8
- if benchmark?
9
- benchmark_result, context = benchmark!(&block)
10
- log!(benchmark_result, execution_context)
11
- context
12
- else
13
- block.call
14
- end
5
+ ActionLogic.benchmark? ? benchmark!(execution_context, &block) : block.call
15
6
  end
16
7
 
17
8
  private
18
9
 
19
- def benchmark?
20
- ActionConfiguration.benchmark?
21
- end
22
-
23
- def benchmark!(&block)
10
+ def benchmark!(execution_context, &block)
24
11
  context = nil
25
- benchmark_result = Benchmark.measure { context = block.call }
26
- [benchmark_result, context]
12
+ benchmark_result = ActionLogic.benchmark_handler.call { context = block.call }
13
+ log!(benchmark_result, execution_context)
14
+ context
27
15
  end
28
16
 
29
17
  def log!(benchmark_result, execution_context)
30
- benchmark_formatter.send(execution_context.__private__type, benchmark_result, execution_context.name)
18
+ ActionLogic.benchmark_formatter.send("log_#{execution_context.__private__type}".to_sym,
19
+ benchmark_result,
20
+ execution_context.name)
31
21
  end
32
22
 
33
- def benchmark_formatter
34
- ActionConfiguration.benchmark_formatter
35
- end
36
23
  end
37
24
  end
38
25
  end
@@ -0,0 +1,11 @@
1
+ require 'benchmark'
2
+
3
+ module ActionLogic
4
+ module ActionBenchmark
5
+ class DefaultBenchmarkHandler
6
+ def call
7
+ Benchmark.measure { yield }
8
+ end
9
+ end
10
+ end
11
+ end
@@ -1,12 +1,12 @@
1
1
  module ActionLogic
2
2
  module ActionBenchmark
3
3
  class DefaultFormatter
4
- def initialize(benchmark_log: ActionConfiguration.benchmark_log)
4
+ def initialize(benchmark_log: ActionLogic.benchmark_log)
5
5
  @benchmark_log = benchmark_log
6
6
  end
7
7
 
8
8
  def format(benchmark_result, context_name)
9
- benchmark_log.printf("%-10s %-50s %-10s %-10f %-10s %-10f %-10s %-10f %-10s %-10f\n",
9
+ benchmark_log.printf("%s%s %s%f %s%f %s%f %s%f\n",
10
10
  "context:",
11
11
  context_name,
12
12
  "user_time:",
@@ -19,9 +19,9 @@ module ActionLogic
19
19
  benchmark_result.real)
20
20
  end
21
21
 
22
- alias_method :coordinator, :format
23
- alias_method :use_case, :format
24
- alias_method :task, :format
22
+ alias_method :log_coordinator, :format
23
+ alias_method :log_use_case, :format
24
+ alias_method :log_task, :format
25
25
 
26
26
  private
27
27
  attr_reader :benchmark_log
@@ -35,7 +35,7 @@ module ActionLogic
35
35
  end
36
36
 
37
37
  def __private__type
38
- :coordinator
38
+ "coordinator"
39
39
  end
40
40
  end
41
41
  end
@@ -17,7 +17,7 @@ module ActionLogic
17
17
  end
18
18
 
19
19
  def __private__type
20
- :task
20
+ "task"
21
21
  end
22
22
  end
23
23
  end
@@ -23,7 +23,7 @@ module ActionLogic
23
23
  end
24
24
 
25
25
  def __private__type
26
- :use_case
26
+ "use_case"
27
27
  end
28
28
  end
29
29
  end
@@ -0,0 +1,44 @@
1
+ require 'ostruct'
2
+
3
+ module ActionLogic
4
+ extend self
5
+
6
+ def self.configure(&block)
7
+ block.call(configuration_options)
8
+ end
9
+
10
+ def self.configuration_options
11
+ @configuration_options ||= OpenStruct.new
12
+ end
13
+
14
+ def self.benchmark?
15
+ configuration_options.benchmark || false
16
+ end
17
+
18
+ def self.benchmark_log
19
+ configuration_options.benchmark_log || $stdout
20
+ end
21
+
22
+ def self.benchmark_formatter
23
+ custom_benchmark_formatter || default_formatter
24
+ end
25
+
26
+ def self.benchmark_handler
27
+ configuration_options.benchmark_handler || ActionBenchmark::DefaultBenchmarkHandler.new
28
+ end
29
+
30
+ def self.reset!
31
+ @configuration_options = OpenStruct.new
32
+ @custom_benchmark_formatter = nil
33
+ @default_formatter = nil
34
+ end
35
+
36
+ def self.custom_benchmark_formatter
37
+ @custom_benchmark_formatter ||= configuration_options.benchmark_formatter &&
38
+ configuration_options.benchmark_formatter.new
39
+ end
40
+
41
+ def self.default_formatter
42
+ @default_formatter ||= ActionBenchmark::DefaultFormatter.new
43
+ end
44
+ end
@@ -1,3 +1,3 @@
1
1
  module ActionLogic
2
- VERSION = '0.2.4'
2
+ VERSION = '0.2.5'
3
3
  end
@@ -9,21 +9,21 @@ module ActionLogic::ActionBenchmark
9
9
  subject { described_class.new(benchmark_log: benchmark_log) }
10
10
 
11
11
  it "writes the benchmark result to the log for an ActionCoordinator" do
12
- subject.coordinator(benchmark_result, "CoordinatorContext")
12
+ subject.log_coordinator(benchmark_result, "CoordinatorContext")
13
13
  expect(benchmark_log.string).to\
14
- eq "context: CoordinatorContext user_time: 0.000030 system_time: 0.000020 total_time: 0.000010 real_time: 0.000300 \n"
14
+ eq "context:CoordinatorContext user_time:0.000030 system_time:0.000020 total_time:0.000010 real_time:0.000300\n"
15
15
  end
16
16
 
17
17
  it "writes the benchmark result to the log for an ActionUseCase" do
18
- subject.coordinator(benchmark_result, "UseCaseContext")
18
+ subject.log_use_case(benchmark_result, "UseCaseContext")
19
19
  expect(benchmark_log.string).to\
20
- eq "context: UseCaseContext user_time: 0.000030 system_time: 0.000020 total_time: 0.000010 real_time: 0.000300 \n"
20
+ eq "context:UseCaseContext user_time:0.000030 system_time:0.000020 total_time:0.000010 real_time:0.000300\n"
21
21
  end
22
22
 
23
23
  it "writes the benchmark result to the log for an ActionTask" do
24
- subject.coordinator(benchmark_result, "TaskContext")
24
+ subject.log_task(benchmark_result, "TaskContext")
25
25
  expect(benchmark_log.string).to\
26
- eq "context: TaskContext user_time: 0.000030 system_time: 0.000020 total_time: 0.000010 real_time: 0.000300 \n"
26
+ eq "context:TaskContext user_time:0.000030 system_time:0.000020 total_time:0.000010 real_time:0.000300\n"
27
27
  end
28
28
  end
29
29
  end
@@ -6,7 +6,7 @@ require 'fixtures/custom_types'
6
6
  module ActionLogic
7
7
  describe ActionCoordinator do
8
8
  it "knows its type" do
9
- expect(TestCoordinator1.__private__type).to eq(:coordinator)
9
+ expect(TestCoordinator1.__private__type).to eq("coordinator")
10
10
  end
11
11
 
12
12
  context "no failures and no halts" do
@@ -5,7 +5,7 @@ require 'fixtures/tasks'
5
5
  module ActionLogic
6
6
  describe ActionTask do
7
7
  it "knows its type" do
8
- expect(SimpleTestTask.__private__type).to eq(:task)
8
+ expect(SimpleTestTask.__private__type).to eq("task")
9
9
  end
10
10
 
11
11
  it "returns an instance of ActionContext" do
@@ -6,7 +6,7 @@ require 'fixtures/custom_types'
6
6
  module ActionLogic
7
7
  describe ActionUseCase do
8
8
  it "knows its type" do
9
- expect(SimpleTestUseCase.__private__type).to eq(:use_case)
9
+ expect(SimpleTestUseCase.__private__type).to eq("use_case")
10
10
  end
11
11
 
12
12
  it "returns an instance of ActionContext" do
@@ -0,0 +1,75 @@
1
+ require 'spec_helper'
2
+ require 'action_logic'
3
+
4
+ describe ActionLogic do
5
+
6
+ subject { described_class }
7
+
8
+ around do |example|
9
+ described_class.reset!
10
+ example.run
11
+ described_class.reset!
12
+ end
13
+
14
+ context "benchmark" do
15
+ it "defaults the benchmark configuration option to false" do
16
+ expect(described_class.benchmark?).to be_falsey
17
+ end
18
+
19
+ it "returns true when the benchmark configuration option is set to true" do
20
+ described_class.configure do |config|
21
+ config.benchmark = true
22
+ end
23
+
24
+ expect(described_class.benchmark?).to be_truthy
25
+ end
26
+ end
27
+
28
+ context "benchmark_log" do
29
+ it "defaults benchmark log file to stdout" do
30
+ expect(described_class.benchmark_log).to eq($stdout)
31
+ end
32
+
33
+ it "returns the log file when the benchmark log configuration option is set" do
34
+ temp_file = Object.new
35
+
36
+ described_class.configure do |config|
37
+ config.benchmark_log = temp_file
38
+ end
39
+
40
+ expect(described_class.benchmark_log).to eq(temp_file)
41
+ end
42
+ end
43
+
44
+ context "benchmark_formatter" do
45
+ it "uses default formatter if a custom formatter is not provided" do
46
+ expect(described_class.benchmark_formatter).to be_a(ActionLogic::ActionBenchmark::DefaultFormatter)
47
+ end
48
+
49
+ it "uses a custom formatter if one is provided" do
50
+ class CustomFormatter; end
51
+
52
+ described_class.configure do |config|
53
+ config.benchmark_formatter = CustomFormatter
54
+ end
55
+
56
+ expect(described_class.benchmark_formatter).to be_a(CustomFormatter)
57
+ end
58
+ end
59
+
60
+ context "benchmark_handler" do
61
+ it "uses a default benchmark handler if a custom benchmark handler is not provided" do
62
+ expect(described_class.benchmark_handler).to be_a(ActionLogic::ActionBenchmark::DefaultBenchmarkHandler)
63
+ end
64
+
65
+ it "uses a custom benchmark handler if one is provided" do
66
+ custom_benchmark_handler = -> { yield }
67
+
68
+ described_class.configure do |config|
69
+ config.benchmark_handler = custom_benchmark_handler
70
+ end
71
+
72
+ expect(described_class.benchmark_handler).to eq(custom_benchmark_handler)
73
+ end
74
+ end
75
+ end
@@ -9,10 +9,33 @@ $LOAD_PATH << File.join(File.dirname(__FILE__))
9
9
 
10
10
  require 'action_logic'
11
11
 
12
+ class CustomFormatter < ActionLogic::ActionBenchmark::DefaultFormatter
13
+ def log_coordinator(benchmark_result, execution_context_name)
14
+ benchmark_log.puts("The ActionCoordinator #{execution_context_name} took #{benchmark_result} to complete.")
15
+ end
16
+
17
+ def log_use_case(benchmark_result, execution_context_name)
18
+ benchmark_log.puts("The ActionUseCase #{execution_context_name} took #{benchmark_result} to complete.")
19
+ end
20
+
21
+ def log_task(benchmark_result, execution_context_name)
22
+ benchmark_log.puts("The ActionTask #{execution_context_name} took #{benchmark_result} to complete.")
23
+ end
24
+ end
25
+
26
+ class CustomHandler
27
+ def call
28
+ yield
29
+ "this is the custom handler"
30
+ end
31
+ end
32
+
12
33
  if ENV['BENCHMARK']
13
- ActionLogic::ActionConfiguration.configure do |config|
34
+ ActionLogic.configure do |config|
14
35
  config.benchmark = true
15
36
  config.benchmark_log = File.open("benchmark.log", "w")
37
+ config.benchmark_formatter = CustomFormatter
38
+ config.benchmark_handler = CustomHandler.new
16
39
  end
17
40
  end
18
41
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: action_logic
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ version: 0.2.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rick Winfrey
@@ -80,8 +80,8 @@ files:
80
80
  - action_logic.gemspec
81
81
  - lib/action_logic.rb
82
82
  - lib/action_logic/action_benchmark.rb
83
+ - lib/action_logic/action_benchmark/default_benchmark_block.rb
83
84
  - lib/action_logic/action_benchmark/default_formatter.rb
84
- - lib/action_logic/action_configuration.rb
85
85
  - lib/action_logic/action_context.rb
86
86
  - lib/action_logic/action_coordinator.rb
87
87
  - lib/action_logic/action_core.rb
@@ -93,6 +93,7 @@ files:
93
93
  - lib/action_logic/action_validation/base_validation.rb
94
94
  - lib/action_logic/action_validation/presence_validation.rb
95
95
  - lib/action_logic/action_validation/type_validation.rb
96
+ - lib/action_logic/configuration.rb
96
97
  - lib/action_logic/errors.rb
97
98
  - lib/action_logic/version.rb
98
99
  - resources/action_coordinator_diagram.png
@@ -101,11 +102,11 @@ files:
101
102
  - resources/diagrams.sketch
102
103
  - resources/overview_diagram.png
103
104
  - spec/action_logic/action_benchmark/default_formatter_spec.rb
104
- - spec/action_logic/action_configuration_spec.rb
105
105
  - spec/action_logic/action_context_spec.rb
106
106
  - spec/action_logic/action_coordinator_spec.rb
107
107
  - spec/action_logic/action_task_spec.rb
108
108
  - spec/action_logic/active_use_case_spec.rb
109
+ - spec/action_logic/configuration_spec.rb
109
110
  - spec/fixtures/constants.rb
110
111
  - spec/fixtures/coordinators.rb
111
112
  - spec/fixtures/custom_types.rb
@@ -138,11 +139,11 @@ specification_version: 4
138
139
  summary: Business logic abstraction
139
140
  test_files:
140
141
  - spec/action_logic/action_benchmark/default_formatter_spec.rb
141
- - spec/action_logic/action_configuration_spec.rb
142
142
  - spec/action_logic/action_context_spec.rb
143
143
  - spec/action_logic/action_coordinator_spec.rb
144
144
  - spec/action_logic/action_task_spec.rb
145
145
  - spec/action_logic/active_use_case_spec.rb
146
+ - spec/action_logic/configuration_spec.rb
146
147
  - spec/fixtures/constants.rb
147
148
  - spec/fixtures/coordinators.rb
148
149
  - spec/fixtures/custom_types.rb
@@ -1,40 +0,0 @@
1
- require 'ostruct'
2
-
3
- module ActionLogic
4
- class ActionConfiguration
5
- def self.configure(&block)
6
- block.call(configuration_options)
7
- end
8
-
9
- def self.configuration_options
10
- @configuration_options ||= OpenStruct.new
11
- end
12
-
13
- def self.benchmark?
14
- configuration_options.benchmark || false
15
- end
16
-
17
- def self.benchmark_log
18
- configuration_options.benchmark_log || $stdout
19
- end
20
-
21
- def self.benchmark_formatter
22
- custom_benchmark_formatter || default_formatter
23
- end
24
-
25
- def self.reset!
26
- @configuration_options = OpenStruct.new
27
- @custom_benchmark_formatter = nil
28
- @default_formatter = nil
29
- end
30
-
31
- def self.custom_benchmark_formatter
32
- @custom_benchmark_formatter ||= configuration_options.benchmark_formatter &&
33
- configuration_options.benchmark_formatter.new
34
- end
35
-
36
- def self.default_formatter
37
- @default_formatter ||= ::ActionLogic::ActionBenchmark::DefaultFormatter.new
38
- end
39
- end
40
- end
@@ -1,62 +0,0 @@
1
- require 'spec_helper'
2
- require 'action_logic'
3
-
4
- module ActionLogic
5
- describe ActionConfiguration do
6
- subject { described_class }
7
-
8
- before do
9
- described_class.reset!
10
- end
11
-
12
- after do
13
- described_class.reset!
14
- end
15
-
16
- context "benchmark" do
17
- it "defaults the benchmark configuration option to false" do
18
- expect(described_class.benchmark?).to be_falsey
19
- end
20
-
21
- it "returns true when the benchmark configuration option is set to true" do
22
- described_class.configure do |config|
23
- config.benchmark = true
24
- end
25
-
26
- expect(described_class.benchmark?).to be_truthy
27
- end
28
- end
29
-
30
- context "benchmark_log" do
31
- it "defaults benchmark log file to stdout" do
32
- expect(described_class.benchmark_log).to eq($stdout)
33
- end
34
-
35
- it "returns the log file when the benchmark log configuration option is set" do
36
- temp_file = Object.new
37
-
38
- described_class.configure do |config|
39
- config.benchmark_log = temp_file
40
- end
41
-
42
- expect(described_class.benchmark_log).to eq(temp_file)
43
- end
44
- end
45
-
46
- context "benchmark_formatter" do
47
- it "uses default formatter if a custom formatter is not provided" do
48
- expect(described_class.benchmark_formatter).to be_a(ActionLogic::ActionBenchmark::DefaultFormatter)
49
- end
50
-
51
- it "uses a custom formatter if one is provided" do
52
- class CustomFormatter; end
53
-
54
- described_class.configure do |config|
55
- config.benchmark_formatter = CustomFormatter
56
- end
57
-
58
- expect(described_class.benchmark_formatter).to be_a(CustomFormatter)
59
- end
60
- end
61
- end
62
- end