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