Class: ConvenientService::RSpec::Helpers::Classes::WrapMethod::Entities::WrappedMethod
- Inherits:
-
Object
- Object
- ConvenientService::RSpec::Helpers::Classes::WrapMethod::Entities::WrappedMethod
- Defined in:
- lib/convenient_service/rspec/helpers/classes/wrap_method/entities/wrapped_method.rb
Instance Attribute Summary collapse
-
#entity ⇒ Object
readonly
Returns the value of attribute entity.
-
#method ⇒ Object
readonly
Returns the value of attribute method.
-
#observe_middleware ⇒ Object
readonly
Returns the value of attribute observe_middleware.
Instance Method Summary collapse
- #==(other) ⇒ Boolean?
-
#call(*args, **kwargs, &block) ⇒ Object
Can be any type.
- #chain_args ⇒ Array
- #chain_block ⇒ Proc?
- #chain_called? ⇒ Boolean
- #chain_exception ⇒ StandardError?
- #chain_kwargs ⇒ Hash
-
#chain_value ⇒ Object
Can be any type.
- #handle_after_chain_next(value, _arguments) ⇒ Object
- #handle_before_chain_next(arguments) ⇒ Object
- #initialize(entity:, method:, observe_middleware:) ⇒ void constructor
- #klass ⇒ Class
- #observable_middleware ⇒ Class
- #reset! ⇒ void
- #scope ⇒ String
Constructor Details
#initialize(entity:, method:, observe_middleware:) ⇒ void
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/convenient_service/rspec/helpers/classes/wrap_method/entities/wrapped_method.rb', line 45 def initialize(entity:, method:, observe_middleware:) @entity = entity @method = method @observe_middleware = observe_middleware ## # TODO: When middleware is NOT used yet. # observable_middleware.middleware_events[:before_chain_next].add_observer(self) observable_middleware.middleware_events[:after_chain_next].add_observer(self) ## # TODO: Consider `ObjectSpace.define_finalizer`? Is it really needed? # # observable_middleware.middleware_events[:before_chain_next].delete_observer(self) # observable_middleware.middleware_events[:after_chain_next].delete_observer(self) end |
Instance Attribute Details
#entity ⇒ Object (readonly)
Returns the value of attribute entity.
25 26 27 |
# File 'lib/convenient_service/rspec/helpers/classes/wrap_method/entities/wrapped_method.rb', line 25 def entity @entity end |
#method ⇒ Object (readonly)
Returns the value of attribute method.
31 32 33 |
# File 'lib/convenient_service/rspec/helpers/classes/wrap_method/entities/wrapped_method.rb', line 31 def method @method end |
#observe_middleware ⇒ Object (readonly)
Returns the value of attribute observe_middleware.
37 38 39 |
# File 'lib/convenient_service/rspec/helpers/classes/wrap_method/entities/wrapped_method.rb', line 37 def observe_middleware @observe_middleware end |
Instance Method Details
#==(other) ⇒ Boolean?
189 190 191 192 193 194 195 196 197 |
# File 'lib/convenient_service/rspec/helpers/classes/wrap_method/entities/wrapped_method.rb', line 189 def ==(other) return unless other.instance_of?(self.class) return false if entity != other.entity return false if method != other.method return false if observe_middleware != other.observe_middleware true end |
#call(*args, **kwargs, &block) ⇒ Object
Returns Can be any type.
107 108 109 110 111 112 113 114 115 116 |
# File 'lib/convenient_service/rspec/helpers/classes/wrap_method/entities/wrapped_method.rb', line 107 def call(*args, **kwargs, &block) entity.__send__(method, *args, **kwargs, &block) rescue => exception @chain_exception = exception ## # NOTE: `raise` with no args inside `rescue` reraises rescued exception. # raise end |
#chain_args ⇒ Array
149 150 151 152 153 |
# File 'lib/convenient_service/rspec/helpers/classes/wrap_method/entities/wrapped_method.rb', line 149 def chain_args ::ConvenientService.raise Exceptions::ChainAttributePreliminaryAccess.new(attribute: :args) unless chain_called? @chain_arguments.args end |
#chain_block ⇒ Proc?
169 170 171 172 173 |
# File 'lib/convenient_service/rspec/helpers/classes/wrap_method/entities/wrapped_method.rb', line 169 def chain_block ::ConvenientService.raise Exceptions::ChainAttributePreliminaryAccess.new(attribute: :block) unless chain_called? @chain_arguments.block end |
#chain_called? ⇒ Boolean
131 132 133 |
# File 'lib/convenient_service/rspec/helpers/classes/wrap_method/entities/wrapped_method.rb', line 131 def chain_called? Utils.to_bool(defined? @chain_called) end |
#chain_exception ⇒ StandardError?
179 180 181 182 183 |
# File 'lib/convenient_service/rspec/helpers/classes/wrap_method/entities/wrapped_method.rb', line 179 def chain_exception ::ConvenientService.raise Exceptions::ChainAttributePreliminaryAccess.new(attribute: :exception) unless chain_called? @chain_exception end |
#chain_kwargs ⇒ Hash
159 160 161 162 163 |
# File 'lib/convenient_service/rspec/helpers/classes/wrap_method/entities/wrapped_method.rb', line 159 def chain_kwargs ::ConvenientService.raise Exceptions::ChainAttributePreliminaryAccess.new(attribute: :kwargs) unless chain_called? @chain_arguments.kwargs end |
#chain_value ⇒ Object
Returns Can be any type.
139 140 141 142 143 |
# File 'lib/convenient_service/rspec/helpers/classes/wrap_method/entities/wrapped_method.rb', line 139 def chain_value ::ConvenientService.raise Exceptions::ChainAttributePreliminaryAccess.new(attribute: :value) unless chain_called? @chain_value end |
#handle_after_chain_next(value, _arguments) ⇒ Object
76 77 78 |
# File 'lib/convenient_service/rspec/helpers/classes/wrap_method/entities/wrapped_method.rb', line 76 def handle_after_chain_next(value, _arguments) @chain_value = value end |
#handle_before_chain_next(arguments) ⇒ Object
67 68 69 70 |
# File 'lib/convenient_service/rspec/helpers/classes/wrap_method/entities/wrapped_method.rb', line 67 def handle_before_chain_next(arguments) @chain_called = true @chain_arguments = arguments end |
#klass ⇒ Class
90 91 92 |
# File 'lib/convenient_service/rspec/helpers/classes/wrap_method/entities/wrapped_method.rb', line 90 def klass @klass ||= Utils::Object.clamp_class(entity) end |
#observable_middleware ⇒ Class
97 98 99 |
# File 'lib/convenient_service/rspec/helpers/classes/wrap_method/entities/wrapped_method.rb', line 97 def observable_middleware @observable_middleware ||= klass.middlewares(method, scope: scope).to_a.find { |other| other == observe_middleware.observable } end |
#reset! ⇒ void
This method returns an undefined value.
121 122 123 124 125 126 |
# File 'lib/convenient_service/rspec/helpers/classes/wrap_method/entities/wrapped_method.rb', line 121 def reset! remove_instance_variable(:@chain_called) if defined? @chain_called remove_instance_variable(:@chain_value) if defined? @chain_value remove_instance_variable(:@chain_arguments) if defined? @chain_arguments remove_instance_variable(:@chain_exception) if defined? @chain_exception end |
#scope ⇒ String
83 84 85 |
# File 'lib/convenient_service/rspec/helpers/classes/wrap_method/entities/wrapped_method.rb', line 83 def scope @scope ||= Utils::Object.resolve_type(entity).to_sym end |