Module: ConvenientService::Core::Concern::ClassMethods

Defined in:
lib/convenient_service/core/concern/class_methods.rb

Overview

Since:

  • 1.0.0

API:

  • public

Instance Method Summary collapse

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.

Parameters:

Since:

  • 1.0.0

API:

  • public



148
149
150
151
152
153
154
155
156
157
158
# File 'lib/convenient_service/core/concern/class_methods.rb', line 148

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

#__convenient_service_config__Object

Since:

  • 1.0.0

API:

  • public



21
22
23
# File 'lib/convenient_service/core/concern/class_methods.rb', line 21

def __convenient_service_config__
  @__convenient_service_config__ ||= Entities::Config.new(klass: self)
end

#commit_config!(trigger: ConvenientService::Core::Constants::Triggers::USER) ⇒ Boolean

Commits config when called for the first time. Does nothing for the subsequent calls.

Parameters:

  • (defaults to: ConvenientService::Core::Constants::Triggers::USER)

Returns:

  • true if called for the first time, false otherwise (similarly as ‘Kernel#require`).

See Also:

Since:

  • 1.0.0

API:

  • public



74
75
76
77
# File 'lib/convenient_service/core/concern/class_methods.rb', line 74

def commit_config!(trigger: ConvenientService::Core::Constants::Triggers::USER)
  __convenient_service_config__.commit!(trigger: trigger)
    .tap { ConvenientService.logger.debug { "[Core] Committed config for `#{self}` | Triggered by `.commit_config!(trigger: #{trigger.inspect})` " } }
end

#concernsObject

See Also:

Since:

  • 1.0.0

API:

  • public



33
34
35
# File 'lib/convenient_service/core/concern/class_methods.rb', line 33

def concerns(...)
  __convenient_service_config__.concerns(...)
end

#entityObject

See Also:

Since:

  • 1.0.0

API:

  • public



54
55
56
# File 'lib/convenient_service/core/concern/class_methods.rb', line 54

def entity(...)
  __convenient_service_config__.entity(...)
end

#has_committed_config?Boolean

Returns true when config is committed, otherwise - false.

Returns:

  • Returns true when config is committed, otherwise - false.

Since:

  • 1.0.0

API:

  • public



61
62
63
# File 'lib/convenient_service/core/concern/class_methods.rb', line 61

def has_committed_config?
  __convenient_service_config__.committed?
end

#middlewaresObject

See Also:

Since:

  • 1.0.0

API:

  • public



40
41
42
# File 'lib/convenient_service/core/concern/class_methods.rb', line 40

def middlewares(...)
  __convenient_service_config__.middlewares(...)
end

#new(*args, **kwargs, &block) ⇒ Object

Returns Can be any type.

Parameters:

Returns:

  • Can be any type.

Since:

  • 1.0.0

API:

  • public



90
91
92
# File 'lib/convenient_service/core/concern/class_methods.rb', line 90

def new(*args, **kwargs, &block)
  has_committed_config? ? super : method_missing(:new, *args, **kwargs, &block)
end

#optionsObject

See Also:

Since:

  • 1.0.0

API:

  • public



47
48
49
# File 'lib/convenient_service/core/concern/class_methods.rb', line 47

def options(...)
  __convenient_service_config__.options(...)
end