convenient_service 0.20.0 → 0.21.0

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.
Files changed (119) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +8 -4
  3. data/lib/convenient_service/aliases.rb +113 -1
  4. data/lib/convenient_service/common/plugins/aliases.rb +69 -0
  5. data/lib/convenient_service/common/plugins/can_have_callbacks/entities/type_collection.rb +2 -2
  6. data/lib/convenient_service/common/plugins/has_instance_proxy/entities/instance_proxy.rb +8 -8
  7. data/lib/convenient_service/common.rb +14 -0
  8. data/lib/convenient_service/config.rb +8 -0
  9. data/lib/convenient_service/core/aliases.rb +84 -0
  10. data/lib/convenient_service/dependencies/built_in.rb +15 -1
  11. data/lib/convenient_service/dependencies/only_queries.rb +0 -6
  12. data/lib/convenient_service/dependencies/queries/gems/minitest.rb +55 -0
  13. data/lib/convenient_service/dependencies/queries/gems/rspec.rb +1 -1
  14. data/lib/convenient_service/dependencies/queries/gems.rb +2 -0
  15. data/lib/convenient_service/dependencies/queries/ruby.rb +2 -2
  16. data/lib/convenient_service/dependencies/queries.rb +67 -16
  17. data/lib/convenient_service/dependencies.rb +6 -6
  18. data/lib/convenient_service/extras/alias.rb +4 -1
  19. data/lib/convenient_service/feature/configs/standard.rb +34 -13
  20. data/lib/convenient_service/feature/core.rb +41 -0
  21. data/lib/convenient_service/feature/plugins/aliases.rb +29 -0
  22. data/lib/convenient_service/feature/plugins/can_have_rspec_stubbed_entries/concern.rb +34 -0
  23. data/lib/convenient_service/{rspec/helpers/classes/stub_entry/entities.rb → feature/plugins/can_have_rspec_stubbed_entries.rb} +1 -2
  24. data/lib/convenient_service/feature/plugins/can_have_stubbed_entries/commands/delete_feature_stubbed_entry.rb +71 -0
  25. data/lib/convenient_service/feature/plugins/can_have_stubbed_entries/commands/fetch_all_features_stubbed_entries_cache.rb +16 -2
  26. data/lib/convenient_service/feature/plugins/can_have_stubbed_entries/commands/fetch_feature_stubbed_entries_cache.rb +1 -1
  27. data/lib/convenient_service/feature/plugins/can_have_stubbed_entries/commands.rb +2 -0
  28. data/lib/convenient_service/feature/plugins/can_have_stubbed_entries/concern.rb +23 -0
  29. data/lib/convenient_service/feature/plugins/can_have_stubbed_entries/entities/feature_stub.rb +123 -0
  30. data/lib/convenient_service/feature/plugins/can_have_stubbed_entries/entities/feature_unstub.rb +122 -0
  31. data/lib/convenient_service/feature/plugins/can_have_stubbed_entries/entities/value_mock.rb +118 -0
  32. data/lib/convenient_service/feature/plugins/can_have_stubbed_entries/entities/value_unmock.rb +88 -0
  33. data/lib/convenient_service/feature/plugins/can_have_stubbed_entries/entities.rb +12 -0
  34. data/lib/convenient_service/feature/plugins/can_have_stubbed_entries.rb +1 -14
  35. data/lib/convenient_service/feature/plugins/has_amazing_print_inspect/concern.rb +34 -0
  36. data/lib/convenient_service/feature/{configs/standard/commands.rb → plugins/has_amazing_print_inspect.rb} +1 -2
  37. data/lib/convenient_service/feature/plugins/has_awesome_print_inspect/concern.rb +34 -0
  38. data/lib/convenient_service/{rspec/helpers/classes/stub_service/entities.rb → feature/plugins/has_awesome_print_inspect.rb} +1 -2
  39. data/lib/convenient_service/feature/plugins/has_inspect/concern.rb +27 -0
  40. data/lib/convenient_service/{service/configs/standard/commands.rb → feature/plugins/has_inspect.rb} +1 -2
  41. data/lib/convenient_service/feature/plugins.rb +1 -0
  42. data/lib/convenient_service/feature.rb +16 -0
  43. data/lib/convenient_service/logger.rb +11 -12
  44. data/lib/convenient_service/rspec/helpers/classes.rb +0 -2
  45. data/lib/convenient_service/rspec/helpers/stub_entry.rb +23 -5
  46. data/lib/convenient_service/rspec/helpers/stub_service.rb +79 -11
  47. data/lib/convenient_service/rspec/matchers/classes/cache_its_value.rb +2 -1
  48. data/lib/convenient_service/rspec/matchers/classes/delegate_to.rb +3 -5
  49. data/lib/convenient_service/rspec/matchers/classes/include_config.rb +4 -0
  50. data/lib/convenient_service/service/configs/aliases.rb +42 -0
  51. data/lib/convenient_service/service/configs/standard/aliases.rb +24 -0
  52. data/lib/convenient_service/service/configs/standard/v1.rb +17 -0
  53. data/lib/convenient_service/service/configs/standard.rb +50 -25
  54. data/lib/convenient_service/service/core.rb +39 -0
  55. data/lib/convenient_service/service/plugins/aliases.rb +48 -0
  56. data/lib/convenient_service/service/plugins/can_have_rollbacks/middleware.rb +33 -2
  57. data/lib/convenient_service/service/plugins/can_have_rspec_stubbed_results/concern.rb +34 -0
  58. data/lib/convenient_service/service/plugins/can_have_rspec_stubbed_results.rb +8 -0
  59. data/lib/convenient_service/service/plugins/can_have_stubbed_results/commands/delete_service_stubbed_result.rb +63 -0
  60. data/lib/convenient_service/service/plugins/can_have_stubbed_results/commands/fetch_all_services_stubbed_results_cache.rb +15 -10
  61. data/lib/convenient_service/service/plugins/can_have_stubbed_results/commands/fetch_service_stubbed_results_cache.rb +3 -3
  62. data/lib/convenient_service/service/plugins/can_have_stubbed_results/commands.rb +2 -0
  63. data/lib/convenient_service/service/plugins/can_have_stubbed_results/concern.rb +25 -0
  64. data/lib/convenient_service/service/plugins/can_have_stubbed_results/entities/result_mock.rb +254 -0
  65. data/lib/convenient_service/service/plugins/can_have_stubbed_results/entities/result_unmock.rb +82 -0
  66. data/lib/convenient_service/service/plugins/can_have_stubbed_results/entities/service_stub.rb +135 -0
  67. data/lib/convenient_service/service/plugins/can_have_stubbed_results/entities/service_unstub.rb +113 -0
  68. data/lib/convenient_service/service/plugins/can_have_stubbed_results/entities.rb +12 -0
  69. data/lib/convenient_service/service/plugins/can_have_stubbed_results.rb +1 -14
  70. data/lib/convenient_service/service/plugins/forbids_convenient_service_entities_as_constructor_arguments/exceptions.rb +84 -0
  71. data/lib/convenient_service/service/plugins/forbids_convenient_service_entities_as_constructor_arguments/middleware.rb +84 -32
  72. data/lib/convenient_service/service/plugins/has_j_send_result/entities/result/concern.rb +42 -2
  73. data/lib/convenient_service/service/plugins/has_j_send_result/entities/result/plugins/can_be_called/exceptions.rb +3 -2
  74. data/lib/convenient_service/service/plugins/has_j_send_result/entities/result/plugins/has_j_send_status_and_attributes/entities/status/concern/instance_methods.rb +5 -0
  75. data/lib/convenient_service/service.rb +16 -0
  76. data/lib/convenient_service/specification.rb +42 -12
  77. data/lib/convenient_service/support/backtrace_cleaner.rb +6 -7
  78. data/lib/convenient_service/support/middleware/stack_builder/entities/builders/custom.rb +4 -0
  79. data/lib/convenient_service/support/middleware/stack_builder/entities/builders/ruby_middleware.rb +4 -0
  80. data/lib/convenient_service/support/unique_value.rb +4 -1
  81. data/lib/convenient_service/support.rb +13 -0
  82. data/lib/convenient_service/utils/array/find_last.rb +18 -9
  83. data/lib/convenient_service/utils/class/display_name.rb +9 -9
  84. data/lib/convenient_service/utils/enumerable/find_last.rb +48 -0
  85. data/lib/convenient_service/utils/enumerable.rb +20 -0
  86. data/lib/convenient_service/utils/hash/assert_valid_keys.rb +4 -4
  87. data/lib/convenient_service/utils/hash/except.rb +5 -4
  88. data/lib/convenient_service/utils/hash/triple_equality_compare.rb +8 -8
  89. data/lib/convenient_service/utils/kernel/silence_warnings.rb +4 -4
  90. data/lib/convenient_service/utils/module/fetch_own_const.rb +36 -31
  91. data/lib/convenient_service/utils/module/get_namespace.rb +26 -21
  92. data/lib/convenient_service/utils/module/get_own_const.rb +21 -16
  93. data/lib/convenient_service/utils/object/clamp_class.rb +50 -47
  94. data/lib/convenient_service/utils/object/duck_class.rb +84 -81
  95. data/lib/convenient_service/utils/object/get_own_method.rb +1 -1
  96. data/lib/convenient_service/utils/object/instance_variable_delete.rb +0 -3
  97. data/lib/convenient_service/utils/object/instance_variable_fetch.rb +0 -3
  98. data/lib/convenient_service/utils/object/memoize_including_falsy_values.rb +0 -3
  99. data/lib/convenient_service/utils/object/resolve_type.rb +13 -11
  100. data/lib/convenient_service/utils/object/safe_send.rb +2 -0
  101. data/lib/convenient_service/utils/string/enclose.rb +11 -11
  102. data/lib/convenient_service/utils/string/tab.rb +60 -0
  103. data/lib/convenient_service/utils/string.rb +5 -0
  104. data/lib/convenient_service/utils.rb +9 -0
  105. data/lib/convenient_service/version.rb +8 -1
  106. data/lib/convenient_service.rb +232 -14
  107. metadata +37 -754
  108. data/lib/convenient_service/feature/configs/standard/commands/is_feature.rb +0 -39
  109. data/lib/convenient_service/feature/configs/standard/commands/is_feature_class.rb +0 -41
  110. data/lib/convenient_service/rspec/helpers/classes/stub_entry/constants.rb +0 -25
  111. data/lib/convenient_service/rspec/helpers/classes/stub_entry/entities/stubbed_feature.rb +0 -128
  112. data/lib/convenient_service/rspec/helpers/classes/stub_entry/entities/value_spec.rb +0 -79
  113. data/lib/convenient_service/rspec/helpers/classes/stub_entry.rb +0 -48
  114. data/lib/convenient_service/rspec/helpers/classes/stub_service/constants.rb +0 -25
  115. data/lib/convenient_service/rspec/helpers/classes/stub_service/entities/result_spec.rb +0 -211
  116. data/lib/convenient_service/rspec/helpers/classes/stub_service/entities/stubbed_service.rb +0 -119
  117. data/lib/convenient_service/rspec/helpers/classes/stub_service.rb +0 -43
  118. data/lib/convenient_service/service/configs/standard/commands/is_service.rb +0 -39
  119. data/lib/convenient_service/service/configs/standard/commands/is_service_class.rb +0 -41
@@ -1,39 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- ##
4
- # @author Marian Kostyk <mariankostyk13895@gmail.com>
5
- # @license LGPLv3 <https://www.gnu.org/licenses/lgpl-3.0.html>
6
- ##
7
-
8
- module ConvenientService
9
- module Feature
10
- module Configs
11
- module Standard
12
- module Commands
13
- class IsFeature < Support::Command
14
- ##
15
- # @!attribute [r] feature
16
- # @return [Object] Can be any type.
17
- #
18
- attr_reader :feature
19
-
20
- ##
21
- # @param feature [Object] Can be any type.
22
- # @return [void]
23
- #
24
- def initialize(feature:)
25
- @feature = feature
26
- end
27
-
28
- ##
29
- # @return [Boolean]
30
- #
31
- def call
32
- Commands::IsFeatureClass[feature_class: feature.class]
33
- end
34
- end
35
- end
36
- end
37
- end
38
- end
39
- end
@@ -1,41 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- ##
4
- # @author Marian Kostyk <mariankostyk13895@gmail.com>
5
- # @license LGPLv3 <https://www.gnu.org/licenses/lgpl-3.0.html>
6
- ##
7
-
8
- module ConvenientService
9
- module Feature
10
- module Configs
11
- module Standard
12
- module Commands
13
- class IsFeatureClass < Support::Command
14
- ##
15
- # @!attribute [r] feature_class
16
- # @return [Object] Can be any type.
17
- #
18
- attr_reader :feature_class
19
-
20
- ##
21
- # @param feature_class [Object] Can be any type.
22
- # @return [void]
23
- #
24
- def initialize(feature_class:)
25
- @feature_class = feature_class
26
- end
27
-
28
- ##
29
- # @return [Boolean]
30
- #
31
- def call
32
- return unless feature_class.instance_of?(::Class)
33
-
34
- feature_class.include?(Feature::Core)
35
- end
36
- end
37
- end
38
- end
39
- end
40
- end
41
- end
@@ -1,25 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- ##
4
- # @author Marian Kostyk <mariankostyk13895@gmail.com>
5
- # @license LGPLv3 <https://www.gnu.org/licenses/lgpl-3.0.html>
6
- ##
7
-
8
- module ConvenientService
9
- module RSpec
10
- module Helpers
11
- module Classes
12
- class StubEntry < Support::Command
13
- module Constants
14
- module Triggers
15
- ##
16
- # @return [ConvenientService::Support::UniqueValue]
17
- #
18
- STUB_ENTRY = Support::UniqueValue.new("STUB_ENTRY")
19
- end
20
- end
21
- end
22
- end
23
- end
24
- end
25
- end
@@ -1,128 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- ##
4
- # @author Marian Kostyk <mariankostyk13895@gmail.com>
5
- # @license LGPLv3 <https://www.gnu.org/licenses/lgpl-3.0.html>
6
- ##
7
-
8
- module ConvenientService
9
- module RSpec
10
- module Helpers
11
- module Classes
12
- class StubEntry < Support::Command
13
- module Entities
14
- class StubbedFeature
15
- ##
16
- # @param feature_class [ConvenientService::Feature]
17
- # @param entry_name [Symbol, String]
18
- # @return [void]
19
- #
20
- # @internal
21
- # NOTE: `@arguments = nil` means "match any arguments".
22
- #
23
- def initialize(feature_class:, entry_name:)
24
- @feature_class = feature_class
25
- @entry_name = entry_name
26
- @arguments = nil
27
- end
28
-
29
- ##
30
- # @return [ConvenientService::RSpec::Helpers::Classes::StubService::Entities::StubService]
31
- #
32
- def with_arguments(...)
33
- @arguments = Support::Arguments.new(...)
34
-
35
- self
36
- end
37
-
38
- ##
39
- # @return [ConvenientService::RSpec::Helpers::Classes::StubService::Entities::StubService]
40
- #
41
- # @internal
42
- # NOTE: `@arguments = nil` means "match any arguments".
43
- #
44
- def with_any_arguments(...)
45
- @arguments = nil
46
-
47
- self
48
- end
49
-
50
- ##
51
- # @return [ConvenientService::RSpec::Helpers::Classes::StubService::Entities::StubService]
52
- #
53
- def without_arguments
54
- @arguments = Support::Arguments.null_arguments
55
-
56
- self
57
- end
58
-
59
- ##
60
- # @param value_spec [ConvenientService::RSpec::Helpers::Classes::StubService::Entities::ResultSpec]
61
- # @return [ConvenientService::RSpec::Helpers::Classes::StubService::Entities::StubService]
62
- #
63
- def to(value_spec)
64
- @value_spec = value_spec
65
-
66
- feature_class.commit_config!(trigger: Constants::Triggers::STUB_ENTRY)
67
-
68
- Feature::Plugins::CanHaveStubbedEntries.set_feature_stubbed_entry(feature_class, entry_name, arguments, value)
69
-
70
- self
71
- end
72
-
73
- ##
74
- # @param other [Object] Can be any type.
75
- # @return [Boolean, nil]
76
- #
77
- def ==(other)
78
- return unless other.instance_of?(self.class)
79
-
80
- return false if feature_class != other.feature_class
81
- return false if entry_name != other.entry_name
82
- return false if arguments != other.arguments
83
- return false if value_spec != other.value_spec
84
-
85
- true
86
- end
87
-
88
- protected
89
-
90
- ##
91
- # @!attribute [r] feature_class
92
- # @return [ConvenientService::Feature]
93
- #
94
- attr_reader :feature_class
95
-
96
- ##
97
- # @!attribute [r] entry_name
98
- # @return [Symbol, String]
99
- #
100
- attr_reader :entry_name
101
-
102
- ##
103
- # @!attribute [r] arguments
104
- # @return [Hash]
105
- #
106
- attr_reader :arguments
107
-
108
- ##
109
- # @!attribute [r] value_spec
110
- # @return [ConvenientService::RSpec::Helpers::Classes::StubEntry::Entities::ValueSpec]
111
- #
112
- attr_reader :value_spec
113
-
114
- private
115
-
116
- ##
117
- # @return [Object] Can be any type.
118
- #
119
- def value
120
- @value ||= value_spec.for(feature_class).calculate_value
121
- end
122
- end
123
- end
124
- end
125
- end
126
- end
127
- end
128
- end
@@ -1,79 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- ##
4
- # @author Marian Kostyk <mariankostyk13895@gmail.com>
5
- # @license LGPLv3 <https://www.gnu.org/licenses/lgpl-3.0.html>
6
- ##
7
-
8
- module ConvenientService
9
- module RSpec
10
- module Helpers
11
- module Classes
12
- ##
13
- # @internal
14
- # TODO: Specs.
15
- #
16
- class StubEntry < Support::Command
17
- module Entities
18
- class ValueSpec
19
- ##
20
- # @param value [Object] Can be any type.
21
- # @param feature_class [Class]
22
- # @return [void]
23
- #
24
- def initialize(value:, feature_class: nil)
25
- @value = value
26
- @feature_class = feature_class
27
- end
28
-
29
- ##
30
- # @param feature_class [Class]
31
- # @return [ConvenientService::RSpec::Helpers::Classes::StubEntry::Entities::ValueSpec]
32
- #
33
- def for(feature_class)
34
- self.class.new(value: value, feature_class: feature_class)
35
- end
36
-
37
- ##
38
- # @return [Object]
39
- #
40
- # @internal
41
- # TODO: Assert.
42
- #
43
- def calculate_value
44
- value
45
- end
46
-
47
- ##
48
- # @param other [Object] Can be any type.
49
- # @return [Boolean, nil]
50
- #
51
- def ==(other)
52
- return unless other.instance_of?(self.class)
53
-
54
- return false if value != other.value
55
- return false if feature_class != other.feature_class
56
-
57
- true
58
- end
59
-
60
- protected
61
-
62
- ##
63
- # @!attribute [r] value
64
- # @return [Object] Can be any type.
65
- #
66
- attr_reader :value
67
-
68
- ##
69
- # @!attribute [r] feature_class
70
- # @return [Class]
71
- #
72
- attr_reader :feature_class
73
- end
74
- end
75
- end
76
- end
77
- end
78
- end
79
- end
@@ -1,48 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- ##
4
- # @author Marian Kostyk <mariankostyk13895@gmail.com>
5
- # @license LGPLv3 <https://www.gnu.org/licenses/lgpl-3.0.html>
6
- ##
7
-
8
- require_relative "stub_entry/constants"
9
- require_relative "stub_entry/entities"
10
-
11
- module ConvenientService
12
- module RSpec
13
- module Helpers
14
- module Classes
15
- class StubEntry < Support::Command
16
- ##
17
- # @!attribute [r] feature_class
18
- # @return [ConvenientService::Feature]
19
- #
20
- attr_reader :feature_class
21
-
22
- ##
23
- # @!attribute [r] entry_name
24
- # @return [Symbol, String]
25
- #
26
- attr_reader :entry_name
27
-
28
- ##
29
- # @param feature_class [ConvenientService::Feature]
30
- # @param entry_name [Symbol, String]
31
- # @return [void]
32
- #
33
- def initialize(feature_class, entry_name)
34
- @feature_class = feature_class
35
- @entry_name = entry_name
36
- end
37
-
38
- ##
39
- # @return [ConvenientService::RSpec::Helpers::Classes::StubEntry::Entities::StubbedFeature]
40
- #
41
- def call
42
- Entities::StubbedFeature.new(feature_class: feature_class, entry_name: entry_name)
43
- end
44
- end
45
- end
46
- end
47
- end
48
- end
@@ -1,25 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- ##
4
- # @author Marian Kostyk <mariankostyk13895@gmail.com>
5
- # @license LGPLv3 <https://www.gnu.org/licenses/lgpl-3.0.html>
6
- ##
7
-
8
- module ConvenientService
9
- module RSpec
10
- module Helpers
11
- module Classes
12
- class StubService < Support::Command
13
- module Constants
14
- module Triggers
15
- ##
16
- # @return [ConvenientService::Support::UniqueValue]
17
- #
18
- STUB_SERVICE = Support::UniqueValue.new("STUB_SERVICE")
19
- end
20
- end
21
- end
22
- end
23
- end
24
- end
25
- end
@@ -1,211 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- ##
4
- # @author Marian Kostyk <mariankostyk13895@gmail.com>
5
- # @license LGPLv3 <https://www.gnu.org/licenses/lgpl-3.0.html>
6
- ##
7
-
8
- module ConvenientService
9
- module RSpec
10
- module Helpers
11
- module Classes
12
- class StubService < Support::Command
13
- module Entities
14
- ##
15
- # @internal
16
- # IMPORTANT: Do NOT cache `data`, `message`, and `code` since they can be set multiple times by `with_data`, `and_data`, `with_message`, `and_message`, `with_code`, and `and_code`.
17
- #
18
- class ResultSpec
19
- ##
20
- # @param status [Symbol]
21
- # @param service_class [Class]
22
- # @param chain [Hash]
23
- # @return [void]
24
- #
25
- def initialize(status:, service_class: nil, chain: {})
26
- @status = status
27
- @service_class = service_class
28
- @chain = chain
29
- end
30
-
31
- ##
32
- # @param service_class [Class]
33
- # @return [ConvenientService::RSpec::Helpers::Classes::StubService::Entities::ResultSpec]
34
- #
35
- def for(service_class)
36
- self.class.new(status: status, service_class: service_class, chain: chain)
37
- end
38
-
39
- ##
40
- # @param data [Hash]
41
- # @return [ConvenientService::RSpec::Helpers::Classes::StubService::Entities::ResultSpec]
42
- #
43
- def with_data(data)
44
- chain[:data] = data
45
-
46
- self
47
- end
48
-
49
- ##
50
- # @param message [String]
51
- # @return [ConvenientService::RSpec::Helpers::Classes::StubService::Entities::ResultSpec]
52
- #
53
- def with_message(message)
54
- chain[:message] = message
55
-
56
- self
57
- end
58
-
59
- ##
60
- # @param code [String]
61
- # @return [ConvenientService::RSpec::Helpers::Classes::StubService::Entities::ResultSpec]
62
- #
63
- def with_code(code)
64
- chain[:code] = code
65
-
66
- self
67
- end
68
-
69
- ##
70
- # @param data [Hash]
71
- # @return [ConvenientService::RSpec::Helpers::Classes::StubService::Entities::ResultSpec]
72
- #
73
- def and_data(data)
74
- chain[:data] = data
75
-
76
- self
77
- end
78
-
79
- ##
80
- # @param message [String]
81
- # @return [ConvenientService::RSpec::Helpers::Classes::StubService::Entities::ResultSpec]
82
- #
83
- def and_message(message)
84
- chain[:message] = message
85
-
86
- self
87
- end
88
-
89
- ##
90
- # @param code [String]
91
- # @return [ConvenientService::RSpec::Helpers::Classes::StubService::Entities::ResultSpec]
92
- #
93
- def and_code(code)
94
- chain[:code] = code
95
-
96
- self
97
- end
98
-
99
- ##
100
- # @return [Object]
101
- #
102
- def calculate_value
103
- service_class.__send__(status, **kwargs).copy(overrides: {kwargs: {stubbed_result: true}})
104
- end
105
-
106
- ##
107
- # @param other [Object] Can be any type.
108
- # @return [Boolean, nil]
109
- #
110
- def ==(other)
111
- return unless other.instance_of?(self.class)
112
-
113
- return false if status != other.status
114
- return false if service_class != other.service_class
115
- return false if chain != other.chain
116
-
117
- true
118
- end
119
-
120
- protected
121
-
122
- ##
123
- # @!attribute [r] status
124
- # @return [Symbol]
125
- #
126
- attr_reader :status
127
-
128
- ##
129
- # @!attribute [r] service_class
130
- # @return [Class]
131
- #
132
- attr_reader :service_class
133
-
134
- ##
135
- # @!attribute [r] chain
136
- # @return [Hash]
137
- #
138
- attr_reader :chain
139
-
140
- private
141
-
142
- ##
143
- # @return [Hash]
144
- #
145
- def kwargs
146
- kwargs = {}
147
-
148
- kwargs[:data] = data if used_data?
149
- kwargs[:message] = message if used_message?
150
- kwargs[:code] = code if used_code?
151
-
152
- kwargs[:service] = service_instance
153
-
154
- kwargs
155
- end
156
-
157
- ##
158
- # @return [Boolean]
159
- #
160
- def used_data?
161
- chain.key?(:data)
162
- end
163
-
164
- ##
165
- # @return [Boolean]
166
- #
167
- def used_message?
168
- chain.key?(:message)
169
- end
170
-
171
- ##
172
- # @return [Boolean]
173
- #
174
- def used_code?
175
- chain.key?(:code)
176
- end
177
-
178
- ##
179
- # @return [Hash]
180
- #
181
- def data
182
- chain[:data] || {}
183
- end
184
-
185
- ##
186
- # @return [String]
187
- #
188
- def message
189
- chain[:message] || ""
190
- end
191
-
192
- ##
193
- # @return [String]
194
- #
195
- def code
196
- chain[:code] || ""
197
- end
198
-
199
- ##
200
- # @return [ConvenientService::Service]
201
- #
202
- def service_instance
203
- service_class.new_without_initialize
204
- end
205
- end
206
- end
207
- end
208
- end
209
- end
210
- end
211
- end