class YieldParser Result = Struct.new(:number, :label) def self.parse(yield_string) match = /(\d+(?:\.\d*)?)\s*(\w[\w\s]*)?/.match(yield_string) case when match.nil? nil when match[2] Result.new(match[1].to_f, match[2].strip.singularize) else Result.new(match[1].to_f, 'each') end end end