lib/bcdd/result/mixin.rb in bcdd-result-0.7.0 vs lib/bcdd/result/mixin.rb in bcdd-result-0.8.0

- old
+ new

@@ -1,9 +1,18 @@ # frozen_string_literal: true class BCDD::Result module Mixin + module Factory + def self.module! + ::Module.new do + def self.included(base); base.const_set(:ResultMixin, self); end + def self.extended(base); base.const_set(:ResultMixin, self); end + end + end + end + module Methods def Success(type, value = nil) Success.new(type: type, value: value, subject: self) end @@ -17,29 +26,33 @@ private def Continue(value) Success(:continued, value) end end - OPTIONS = { Continue: Continuable }.freeze + OPTIONS = { continue: Continuable }.freeze - def self.options(names) - Array(names).filter_map { |name| OPTIONS[name] } + def self.options(config_flags) + Config::Options.addon(map: config_flags, from: OPTIONS) end end - - def self.module! - ::Module.new do - def self.included(base); base.const_set(:ResultMixin, self); end - def self.extended(base); base.const_set(:ResultMixin, self); end - end - end end - def self.mixin(with: nil) - addons = Mixin::Addons.options(with) + def self.mixin(config: nil) + addons = mixin_module::Addons.options(config) - mod = Mixin.module! - mod.send(:include, Mixin::Methods) + mod = mixin_module::Factory.module! + mod.send(:include, mixin_module::Methods) + mod.const_set(:Result, result_factory) mod.send(:include, *addons) unless addons.empty? mod end + + def self.mixin_module + Mixin + end + + def self.result_factory + ::BCDD::Result + end + + private_class_method :mixin_module, :result_factory end