module Roadie::Rails::Utils
Public Instance Methods
Return a callable that will call both inputs. If either is nil, then just return the other.
The result from the second one will be the result of the combined callable.
“`ruby #combine_callable(-> { 1 }, -> { 2 }).call # => 2 #combine_callable(-> { 1 }, nil).call # => 1 #combine_callable(nil, nil).nil? # => true “`
# File lib/roadie/rails/utils.rb, line 25 def combine_callable(first, second) combine_nilable(first, second) do |a, b| lambda do |*args| a.call(*args) b.call(*args) end end end
Combine two hashes, or return the non-nil hash if either is nil. Returns nil if both are nil.
# File lib/roadie/rails/utils.rb, line 8 def combine_hash(first, second) combine_nilable(first, second) do |a, b| a.merge(b) end end
Discard the nil value. If neither is nil, then yield both and return the result from the block.
“`ruby #combine_nilable(nil, 5) { |a, b| a+b } # => 5 #combine_nilable(7, nil) { |a, b| a+b } # => 7 #combine_nilable(nil, nil) { |a, b| a+b } # => nil #combine_nilable(7, 5) { |a, b| a+b } # => 12 “`
# File lib/roadie/rails/utils.rb, line 51 def combine_nilable(first, second) if first && second yield first, second else first || second end end
Combine two Provider ducks into a ProviderList. If either is nil, pick the non-nil value instead.
# File lib/roadie/rails/utils.rb, line 36 def combine_providers(first, second) combine_nilable(first, second) do |a, b| ProviderList.new(a.to_a + Array.wrap(b)) end end