Module: ConvenientService::Core::Concern::ClassMethods
- Defined in:
- lib/convenient_service/core/concern/class_methods.rb
Instance Method Summary collapse
-
#commit_config!(trigger: ConvenientService::Core::Constants::Triggers::USER) ⇒ Boolean
Commits config when called for the first time.
- #concerns ⇒ Object
-
#has_committed_config? ⇒ Boolean
Returns ‘true` when config is committed, otherwise - `false`.
- #middlewares ⇒ Object
-
#new(*args, **kwargs, &block) ⇒ Object
Can be any type.
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method, *args, **kwargs, &block) ⇒ void (private)
Note:
Config commitment via a missing class method is very common. Convenient Service Standard config does that by ‘.new`, `.result` and `.step` most of the time.
This method returns an undefined value.
Commits config. In other words, includes ‘concerns` into the mixing class. If `method` is still NOT defined, raises `NoMethodError`, otherwise - retries to call the `method`.
123 124 125 126 127 128 129 130 131 132 133 |
# File 'lib/convenient_service/core/concern/class_methods.rb', line 123 def method_missing(method, *args, **kwargs, &block) commit_config!(trigger: Constants::Triggers::CLASS_METHOD_MISSING) return ::ConvenientService.reraise { super } unless Utils::Module.class_method_defined?(self, method, public: true, protected: false, private: false) return ::ConvenientService.reraise { super } if middlewares(method, scope: :class).defined_without_super_method? ConvenientService.logger.debug { "[Core] Committed config for `#{self}` | Triggered by `method_missing` | Method: `.#{method}`" } __send__(method, *args, **kwargs, &block) end |
Instance Method Details
#commit_config!(trigger: ConvenientService::Core::Constants::Triggers::USER) ⇒ Boolean
Commits config when called for the first time. Does nothing for the subsequent calls.
49 50 51 52 |
# File 'lib/convenient_service/core/concern/class_methods.rb', line 49 def commit_config!(trigger: ConvenientService::Core::Constants::Triggers::USER) (@__convenient_service_config__ ||= Entities::Config.new(klass: self)).commit!(trigger: trigger) .tap { ConvenientService.logger.debug { "[Core] Committed config for `#{self}` | Triggered by `.commit_config!(trigger: #{trigger.inspect})` " } } end |
#concerns ⇒ Object
14 15 16 |
# File 'lib/convenient_service/core/concern/class_methods.rb', line 14 def concerns(...) (@__convenient_service_config__ ||= Entities::Config.new(klass: self)).concerns(...) end |
#has_committed_config? ⇒ Boolean
Returns ‘true` when config is committed, otherwise - `false`.
32 33 34 |
# File 'lib/convenient_service/core/concern/class_methods.rb', line 32 def has_committed_config? (@__convenient_service_config__ ||= Entities::Config.new(klass: self)).committed? end |
#middlewares ⇒ Object
25 26 27 |
# File 'lib/convenient_service/core/concern/class_methods.rb', line 25 def middlewares(...) (@__convenient_service_config__ ||= Entities::Config.new(klass: self)).middlewares(...) end |
#new(*args, **kwargs, &block) ⇒ Object
Returns Can be any type.
65 66 67 |
# File 'lib/convenient_service/core/concern/class_methods.rb', line 65 def new(*args, **kwargs, &block) has_committed_config? ? super : method_missing(:new, *args, **kwargs, &block) end |