lib/bcdd/result/mixin.rb in bcdd-result-0.5.0 vs lib/bcdd/result/mixin.rb in bcdd-result-0.6.0
- old
+ new
@@ -1,13 +1,40 @@
# frozen_string_literal: true
class BCDD::Result
module Mixin
- def Success(type, value = nil)
- Success.new(type: type, value: value, subject: self)
+ module Methods
+ def Success(type, value = nil)
+ Success.new(type: type, value: value, subject: self)
+ end
+
+ def Failure(type, value = nil)
+ Failure.new(type: type, value: value, subject: self)
+ end
end
- def Failure(type, value = nil)
- Failure.new(type: type, value: value, subject: self)
+ module Addons
+ module Continuable
+ private def Continue(value)
+ Success(:continued, value)
+ end
+ end
+
+ OPTIONS = { Continue: Continuable }.freeze
+
+ def self.options(names)
+ Array(names).filter_map { |name| OPTIONS[name] }
+ end
end
end
+
+ def self.mixin(with: nil)
+ addons = Mixin::Addons.options(with)
+
+ mod = Module.new
+ mod.send(:include, Mixin::Methods)
+ mod.send(:include, *addons) unless addons.empty?
+ mod
+ end
+
+ private_constant :Mixin
end