require "taking/version" module Taking MATCH_METHODS = %i(deconstruct deconstruct_keys) # Unfolds Array arguments # # @param *args [Array[Any]] # # @return [Array[Any]] 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