Class: ConvenientService::Core::Entities::Config
- Inherits:
-
Object
- Object
- ConvenientService::Core::Entities::Config
- Defined in:
- lib/convenient_service/core/entities/config.rb,
lib/convenient_service/core/entities/config/exceptions.rb,
lib/convenient_service/core/entities/config/entities/concerns.rb,
lib/convenient_service/core/entities/config/commands/find_entity_class.rb,
lib/convenient_service/core/entities/config/entities/method_middlewares.rb,
lib/convenient_service/core/entities/config/commands/create_entity_class.rb,
lib/convenient_service/core/entities/config/entities/concerns/entities/stack.rb,
lib/convenient_service/core/entities/config/commands/find_or_create_entity_class.rb,
lib/convenient_service/core/entities/config/entities/concerns/entities/middleware.rb,
lib/convenient_service/core/entities/config/entities/concerns/entities/default_concern.rb,
lib/convenient_service/core/entities/config/entities/method_middlewares/entities/stack.rb,
lib/convenient_service/core/entities/config/entities/method_middlewares/entities/caller.rb,
lib/convenient_service/core/entities/config/commands/track_method_missing_commit_trigger.rb,
lib/convenient_service/core/entities/config/entities/method_middlewares/entities/container.rb,
lib/convenient_service/core/entities/config/entities/method_middlewares/entities/caller/concern.rb,
lib/convenient_service/core/entities/config/entities/method_middlewares/entities/caller/constants.rb,
lib/convenient_service/core/entities/config/entities/method_middlewares/entities/middlewares/base.rb,
lib/convenient_service/core/entities/config/entities/method_middlewares/entities/container/concern.rb,
lib/convenient_service/core/entities/config/entities/method_middlewares/entities/middlewares/chain.rb,
lib/convenient_service/core/entities/config/entities/method_middlewares/commands/generate_stack_name.rb,
lib/convenient_service/core/entities/config/entities/method_middlewares/entities/middlewares/classic.rb,
lib/convenient_service/core/entities/config/entities/method_middlewares/entities/middleware_creators/base.rb,
lib/convenient_service/core/entities/config/entities/method_middlewares/entities/middleware_creators/with.rb,
lib/convenient_service/core/entities/config/entities/method_middlewares/entities/middlewares/base/concern.rb,
lib/convenient_service/core/entities/config/entities/concerns/entities/middleware/commands/cast_middleware.rb,
lib/convenient_service/core/entities/config/entities/method_middlewares/entities/middlewares/chain/concern.rb,
lib/convenient_service/core/entities/config/entities/method_middlewares/entities/middlewares/base/constants.rb,
lib/convenient_service/core/entities/config/entities/method_middlewares/entities/caller/commands/cast_caller.rb,
lib/convenient_service/core/entities/config/entities/method_middlewares/entities/caller/concern/class_methods.rb,
lib/convenient_service/core/entities/config/entities/method_middlewares/entities/middleware_creators/observable.rb,
lib/convenient_service/core/entities/config/entities/method_middlewares/entities/caller/concern/instance_methods.rb,
lib/convenient_service/core/entities/config/entities/method_middlewares/entities/container/concern/class_methods.rb,
lib/convenient_service/core/entities/config/entities/method_middlewares/entities/container/commands/cast_container.rb,
lib/convenient_service/core/entities/config/entities/method_middlewares/entities/container/concern/instance_methods.rb,
lib/convenient_service/core/entities/config/entities/method_middlewares/entities/caller/commands/define_method_callers.rb,
lib/convenient_service/core/entities/config/entities/method_middlewares/entities/middlewares/base/concern/class_methods.rb,
lib/convenient_service/core/entities/config/entities/method_middlewares/entities/caller/commands/undefine_method_callers.rb,
lib/convenient_service/core/entities/config/entities/method_middlewares/entities/middlewares/chain/concern/class_methods.rb,
lib/convenient_service/core/entities/config/entities/method_middlewares/entities/middlewares/chain/entities/method_chain.rb,
lib/convenient_service/core/entities/config/entities/method_middlewares/entities/middlewares/base/structs/intended_method.rb,
lib/convenient_service/core/entities/config/entities/method_middlewares/entities/middlewares/chain/commands/normalize_env.rb,
lib/convenient_service/core/entities/config/entities/method_middlewares/entities/middlewares/base/concern/instance_methods.rb,
lib/convenient_service/core/entities/config/entities/method_middlewares/entities/middlewares/chain/concern/instance_methods.rb,
lib/convenient_service/core/entities/config/entities/method_middlewares/entities/middleware_creators/observable/entities/event.rb,
lib/convenient_service/core/entities/config/entities/method_middlewares/entities/container/commands/resolve_methods_middlewares_callers.rb,
lib/convenient_service/core/entities/config/entities/method_middlewares/entities/middlewares/base/commands/create_observable_middleware.rb,
lib/convenient_service/core/entities/config/entities/method_middlewares/entities/middlewares/chain/commands/create_observable_middleware.rb
Defined Under Namespace
Modules: Commands, Entities, Exceptions
Instance Attribute Summary collapse
-
#klass ⇒ Object
readonly
Returns the value of attribute klass.
-
#lock ⇒ Object
readonly
Returns the value of attribute lock.
Instance Method Summary collapse
-
#commit!(trigger: Constants::Triggers::USER) ⇒ Boolean
Commits config when called for the first time.
- #committed? ⇒ Boolean
-
#concerns(&configuration_block) ⇒ Object
Sets or gets concerns for a service class.
-
#entity(name, &configuration_block) ⇒ Class?
This method is intended to be used only inside config
included
blocks. - #initialize(klass:) ⇒ void constructor
- #method_missing_commits_counter ⇒ ConvenientService::Support::ThreadSafeCounter
-
#middlewares(method, scope: :instance, &configuration_block) ⇒ Object
Sets or gets middlewares for a service class.
-
#options ⇒ ConvenientService::Config::Entities::Options
This method is intended to be used only inside config
included
blocks.
Constructor Details
#initialize(klass:) ⇒ void
32 33 34 35 36 37 38 39 |
# File 'lib/convenient_service/core/entities/config.rb', line 32 def initialize(klass:) @klass = klass ## # IMPORTANT: Intentionally initializes `lock` in constructor to ensure thread-safety. # @lock = ::Mutex.new end |
Instance Attribute Details
#klass ⇒ Object (readonly)
Returns the value of attribute klass.
20 21 22 |
# File 'lib/convenient_service/core/entities/config.rb', line 20 def klass @klass end |
#lock ⇒ Object (readonly)
Returns the value of attribute lock.
26 27 28 |
# File 'lib/convenient_service/core/entities/config.rb', line 26 def lock @lock end |
Instance Method Details
#commit!(trigger: Constants::Triggers::USER) ⇒ Boolean
Commits config when called for the first time. Does nothing for the subsequent calls.
205 206 207 208 |
# File 'lib/convenient_service/core/entities/config.rb', line 205 def commit!(trigger: Constants::Triggers::USER) (committed? ? false : concerns.include!) .tap { Commands::TrackMethodMissingCommitTrigger.call(config: self, trigger: trigger) } end |
#committed? ⇒ Boolean
186 187 188 |
# File 'lib/convenient_service/core/entities/config.rb', line 186 def committed? @committed ||= concerns.included? end |
#concerns ⇒ ConvenientService::Core::Entities::Config::Entities::Concerns #concerns(&configuration_block) ⇒ ConvenientService::Core::Entities::Config::Entities::Concerns
Sets or gets concerns for a service class.
60 61 62 63 64 65 66 67 68 69 |
# File 'lib/convenient_service/core/entities/config.rb', line 60 def concerns(&configuration_block) if configuration_block assert_not_committed! @concerns ||= Entities::Concerns.new(klass: klass) @concerns.configure(&configuration_block) end @concerns || Entities::Concerns.new(klass: klass) end |
#entity(name, &configuration_block) ⇒ Class?
This method is intended to be used only inside config included
blocks.
154 155 156 157 158 159 160 161 162 163 164 |
# File 'lib/convenient_service/core/entities/config.rb', line 154 def entity(name, &configuration_block) return Commands::FindEntityClass.call(config: self, name: name) unless configuration_block assert_not_committed! entity_class = Commands::FindOrCreateEntityClass.call(config: self, name: name) entity_class.class_exec(&configuration_block) entity_class end |
#method_missing_commits_counter ⇒ ConvenientService::Support::ThreadSafeCounter
169 170 171 |
# File 'lib/convenient_service/core/entities/config.rb', line 169 def method_missing_commits_counter @method_missing_commits_counter ||= Support::ThreadSafeCounter.new(max_value: Constants::Commits::METHOD_MISSING_MAX_TRIES) end |
#middlewares(method) ⇒ Hash{Symbol => Hash{Symbol => ConvenientService::Core::Entities::Config::Entities::MethodMiddlewares}} #middlewares(method, scope: ) ⇒ Hash{Symbol => Hash{Symbol => ConvenientService::Core::Entities::Config::Entities::MethodMiddlewares}} #middlewares(method, &configuration_block) ⇒ ConvenientService::Core::Entities::Config::Entities::MethodMiddlewares #middlewares(method, scope: , &configuration_block) ⇒ ConvenientService::Core::Entities::Config::Entities::MethodMiddlewares
Sets or gets middlewares for a service class.
110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 |
# File 'lib/convenient_service/core/entities/config.rb', line 110 def middlewares(method, scope: :instance, &configuration_block) @middlewares ||= Support::Cache.backed_by(:hash).new scoped_middlewares = @middlewares.scope(scope) method_middlewares = scoped_middlewares.get(method) || Entities::MethodMiddlewares.new(scope: scope, method: method, klass: klass) return method_middlewares unless configuration_block assert_not_committed! method_middlewares.configure(&configuration_block) if method_middlewares.any? method_middlewares.define! scoped_middlewares.set(method, method_middlewares) else method_middlewares.undefine! scoped_middlewares.delete(method) end method_middlewares end |
#options ⇒ ConvenientService::Config::Entities::Options
This method is intended to be used only inside config included
blocks.
143 144 145 |
# File 'lib/convenient_service/core/entities/config.rb', line 143 def @options ||= Utils.safe_send(klass, :namespace)&.__convenient_service_config__&. || ConvenientService::Config::Entities::Options.new end |