Skip to content

Commit

Permalink
Refactoring de la validación de los negativos
Browse files Browse the repository at this point in the history
  • Loading branch information
diegoguemes committed Feb 7, 2012
1 parent ac94e00 commit 34169de
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 9 deletions.
10 changes: 2 additions & 8 deletions diegoguemes/EneroStringCalculator/NumberSplitter.cs
Expand Up @@ -11,17 +11,11 @@ public class NumberSplitter
private const string CUSTOM_SEPARATOR_START = "//";
private const string CUSTOM_SEPARATOR_END = "\n";

public IEnumerable<string> SplitNumbers(string numbers)
public IEnumerable<int> SplitNumbers(string numbers)
{
string numbersPart = GetNumbersPart(numbers);
string[] separators = GetSeparators(numbers);
var parsedNumbers = numbersPart.Split(separators, StringSplitOptions.RemoveEmptyEntries);
if(parsedNumbers.Any(n => int.Parse(n) < 0))
{
throw new ArgumentException(string.Format("Negatives not allowed: {0}",
string.Join(",", parsedNumbers.Where(n => int.Parse(n) < 0))));
}
return parsedNumbers;
return numbersPart.Split(separators, StringSplitOptions.RemoveEmptyEntries).Select(int.Parse);
}

private string GetNumbersPart(string numbers)
Expand Down
22 changes: 21 additions & 1 deletion diegoguemes/EneroStringCalculator/StringCalculator.cs
Expand Up @@ -18,9 +18,29 @@ public int Add(string numbers)
if (string.IsNullOrEmpty(numbers))
return 0;
var parsedNumbers = splitter.SplitNumbers(numbers);
return parsedNumbers.Sum(n => int.Parse(n));
ValidateNumbers(parsedNumbers);
return parsedNumbers.Sum();
}

private void ValidateNumbers(IEnumerable<int> numbers)
{
var negatives = GetNegatives(numbers);
if (negatives.Count() > 0)
{
throw new ArgumentException(string.Format("Negatives not allowed: {0}",
string.Join(",", negatives)));
}
}

private IEnumerable<int> GetNegatives(IEnumerable<int> numbers)
{
return numbers.Where(IsNegative);
}

private bool IsNegative(int number)
{
return number < 0;
}

}
}

0 comments on commit 34169de

Please sign in to comment.