@@ -30,9 +30,6 @@ def message
30
30
include Resol ::Builder
31
31
include Resol ::Callbacks
32
32
33
- NOT_EXITED = Object . new . freeze
34
- BASE_CLASS = self
35
-
36
33
Result = Struct . new ( :data )
37
34
38
35
class << self
@@ -41,16 +38,13 @@ def inherited(klass)
41
38
super
42
39
end
43
40
44
- def use_initializer! ( initializer_lib )
45
- Initializers . apply! ( self , initializer_lib )
41
+ def inject_initializer! ( injector_name )
42
+ injector = DependencyContainer . resolve ( "libs.#{ injector_name } " )
43
+ injector . inject! ( self )
46
44
end
47
45
48
46
def plugin ( ...)
49
- if self ::BASE_CLASS != self
50
- raise ArgumentError , "can load plugins only on base Resol::Service"
51
- end
52
-
53
- manager . plugin ( ...)
47
+ manager . plugin ( self , ...)
54
48
end
55
49
56
50
def call ( ...)
@@ -59,15 +53,12 @@ def call(...)
59
53
result = handle_catch ( service ) do
60
54
service . instance_variable_set ( :@__performing__ , true )
61
55
__run_callbacks__ ( service )
62
- call_service ( service )
56
+ service . call
63
57
end
58
+ return Resol ::Success ( result . data ) if service . __result_method__called__
64
59
65
- if result == NOT_EXITED
66
- error_message = "No `#success!` or `#fail!` called in `#call` method in #{ service . class } ."
67
- raise InvalidCommandImplementation , error_message
68
- else
69
- Resol ::Success ( result . data )
70
- end
60
+ error_message = "No `#success!` or `#fail!` called in `#call` method in #{ service . class } ."
61
+ raise InvalidCommandImplementation , error_message
71
62
rescue self ::Failure => e
72
63
Resol ::Failure ( e )
73
64
end
@@ -79,50 +70,45 @@ def call!(...)
79
70
private
80
71
81
72
def manager
82
- @manager ||= Plugins ::Manager . new
83
- end
84
-
85
- def handle_catch ( service )
86
- catch ( service ) do
87
- yield
88
- NOT_EXITED
89
- end
73
+ @manager ||= DependencyContainer . resolve ( :base_plugin_manager )
90
74
end
91
75
92
- def call_service ( service )
93
- service . call
94
- NOT_EXITED
76
+ def handle_catch ( service , &)
77
+ catch ( service , &)
95
78
end
96
79
end
97
80
98
81
# @!method call
99
82
83
+ attr_accessor :__result_method__called__
84
+
100
85
private
101
86
102
87
attr_reader :__performing__
103
88
104
89
def fail! ( code , data = nil )
105
- check_performing do
106
- raise self . class ::Failure . new ( code , data )
107
- end
90
+ check_performing!
91
+ raise self . class ::Failure . new ( code , data )
108
92
end
109
93
110
94
def success! ( data = nil )
111
- check_performing do
112
- proceed_return ( self , Result . new ( data ) )
113
- end
95
+ check_performing!
96
+ result_method_called!
97
+ proceed_return ( self , Result . new ( data ) )
114
98
end
115
99
116
- def check_performing
117
- if __performing__
118
- yield
119
- else
120
- error_message =
121
- "It looks like #call instance method was called directly in #{ self . class } . " \
122
- "You must always use class-level `.call` or `.call!` method."
100
+ def check_performing!
101
+ return if __performing__
123
102
124
- raise InvalidCommandCall , error_message
125
- end
103
+ error_message =
104
+ "It looks like #call instance method was called directly in #{ self . class } . " \
105
+ "You must always use class-level `.call` or `.call!` method."
106
+
107
+ raise InvalidCommandCall , error_message
108
+ end
109
+
110
+ def result_method_called!
111
+ self . __result_method__called__ = true
126
112
end
127
113
128
114
def proceed_return ( service , data )
0 commit comments