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