lib/taking.rb in taking-0.0.1 vs lib/taking.rb in taking-0.1.0

- old
+ new

@@ -1,17 +1,31 @@ require "taking/version" module Taking + MATCH_METHODS = %i(deconstruct deconstruct_keys) + # Unfolds Array arguments # # @param *args [Array[Any]] # # @return [Array[Any]] - def self.from(*args) = args + def self.from(lead = nil, *args, **kwargs) + if args.empty? && kwargs.empty? + return can_deconstruct?(lead) ? lead : nil + end + kwargs.empty? ? [lead, *args] : kwargs + end + + def self.from_list(*args) = args + # Unfolds Keyword arguments # # @param **args [Hash[Any, Any]] # # @return [Hash[Any, Any]] def self.from_kw(**args) = args + + def self.can_deconstruct?(o) + MATCH_METHODS.any? { o.respond_to?(_1) } + end end