Class: Opera::Operation::Builder::OptionsBuilder
- Inherits:
-
Object
- Object
- Opera::Operation::Builder::OptionsBuilder
- Defined in:
- lib/opera/operation/builder/options_builder.rb
Constant Summary collapse
- ALLOWED_OPTIONS =
%i[if unless].freeze
Class Method Summary collapse
Class Method Details
.build(opts) ⇒ Object
9 10 11 12 13 14 15 16 |
# File 'lib/opera/operation/builder/options_builder.rb', line 9 def self.build(opts) return {} if opts.empty? unknown = opts.keys - ALLOWED_OPTIONS raise ArgumentError, "Unknown option(s): #{unknown.inspect}. Allowed: #{ALLOWED_OPTIONS}" if unknown.any? { predicate: build_predicate(opts) }.compact end |
.build_predicate(opts) ⇒ Object
18 19 20 21 22 23 24 25 |
# File 'lib/opera/operation/builder/options_builder.rb', line 18 def self.build_predicate(opts) return nil unless opts[:if] || opts[:unless] raise ArgumentError, 'Cannot use :if and :unless together' if opts[:if] && opts[:unless] cond = opts[:if] || opts[:unless] condition_proc = cond.is_a?(Symbol) ? proc { send(cond) } : cond opts.key?(:if) ? condition_proc : proc { !instance_exec(&condition_proc) } end |