Module: Roadie::Rails::Utils
- Defined in:
- lib/roadie/rails/utils.rb
Class Method Summary collapse
-
.combine_callable(first, second) ⇒ Object
Return a callable that will call both inputs.
-
.combine_hash(first, second) ⇒ Object
Combine two hashes, or return the non-nil hash if either is nil.
-
.combine_nilable(first, second) ⇒ Object
Discard the nil value.
-
.combine_providers(first, second) ⇒ Object
Combine two Provider ducks into a ProviderList.
Class Method Details
.combine_callable(first, second) ⇒ Object
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.
combine_callable(-> { 1 }, -> { 2 }).call # => 2
combine_callable(-> { 1 }, nil).call # => 1
combine_callable(nil, nil).nil? # => true
27 28 29 30 31 32 33 34 |
# File 'lib/roadie/rails/utils.rb', line 27 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_hash(first, second) ⇒ Object
Combine two hashes, or return the non-nil hash if either is nil. Returns nil if both are nil.
10 11 12 13 14 |
# File 'lib/roadie/rails/utils.rb', line 10 def combine_hash(first, second) combine_nilable(first, second) do |a, b| a.merge(b) end end |
.combine_nilable(first, second) ⇒ Object
Discard the nil value. If neither is nil, then yield both and return the result from the block.
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
53 54 55 56 57 58 59 |
# File 'lib/roadie/rails/utils.rb', line 53 def combine_nilable(first, second) if first && second yield first, second else first || second end end |
.combine_providers(first, second) ⇒ Object
Combine two Provider ducks into a ProviderList. If either is nil, pick the non-nil value instead.
38 39 40 41 42 |
# File 'lib/roadie/rails/utils.rb', line 38 def combine_providers(first, second) combine_nilable(first, second) do |a, b| ProviderList.new(a.to_a + Array.wrap(b)) end end |