diff --git a/README.md b/README.md index 97c6aa0..6e1e4fb 100644 --- a/README.md +++ b/README.md @@ -162,7 +162,7 @@ fn = R.cond([ - [x] 0.1.2 curry - [x] 0.1.2 curryN - [ ] dec -- [ ] defaultTo +- [x] defaultTo - [ ] descend - [x] 0.1.2 difference - [x] 0.1.2 differenceWith diff --git a/ramda/__init__.py b/ramda/__init__.py index 3d7aa22..e4bbf50 100644 --- a/ramda/__init__.py +++ b/ramda/__init__.py @@ -20,6 +20,7 @@ from .countBy import countBy from .curry import curry from .curryN import curryN +from .defaultTo import defaultTo from .difference import difference from .differenceWith import differenceWith from .divide import divide diff --git a/ramda/defaultTo.py b/ramda/defaultTo.py new file mode 100644 index 0000000..290af51 --- /dev/null +++ b/ramda/defaultTo.py @@ -0,0 +1,3 @@ +from .private._curry2 import _curry2 + +defaultTo = _curry2(lambda d, v: d if v is None else v) diff --git a/test/test_defaultTo.py b/test/test_defaultTo.py new file mode 100644 index 0000000..6aa644c --- /dev/null +++ b/test/test_defaultTo.py @@ -0,0 +1,30 @@ + +import unittest + +import ramda as R + +""" +https://github.com/ramda/ramda/blob/master/test/defaultTo.js +""" + +defaultTo42 = R.defaultTo(42) + +class TestDefaultTo(unittest.TestCase): + def test_returns_the_default_value_if_input_is_None(self): + self.assertEqual(42, defaultTo42(None)) + + def test_returns_the_input_value_if_it_is_not_None(self): + self.assertEqual('a real value', defaultTo42('a real value')) + + def test_returns_the_input_value_even_if_it_is_considered_falsy(self): + self.assertEqual('', defaultTo42('')) + self.assertEqual(0, defaultTo42(0)) + self.assertEqual(False, defaultTo42(False)) + self.assertEqual([], defaultTo42([])) + + def test_can_be_called_with_both_arguments_directly(self): + self.assertEqual(42, R.defaultTo(42, None)) + self.assertEqual('a real value', R.defaultTo(42, 'a real value')) + +if __name__ == '__main__': + unittest.main()