diff --git a/CHANGES.rst b/CHANGES.rst index 95b6cfd..437ebd0 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -1,6 +1,11 @@ Changelog ========= +1.2.0 (2019-01-15) +------------------ + +- Reduced the creation time + 1.1.1 (2015-09-05) ------------------ diff --git a/README.rst b/README.rst index 0098917..f5b7fec 100644 --- a/README.rst +++ b/README.rst @@ -187,7 +187,7 @@ Test > PYTHONPATH=$PYTHONPATH:. mamba -.. |Version Number| image:: https://img.shields.io/badge/version-1.1.1-blue.svg +.. |Version Number| image:: https://img.shields.io/badge/version-1.2.0-blue.svg .. |Build Status| image:: https://travis-ci.org/quiqueporta/simple-value-object.svg?branch=master :target: https://travis-ci.org/quiqueporta/simple-value-object diff --git a/simple_value_object/__init__.py b/simple_value_object/__init__.py index be9a167..5012e2d 100644 --- a/simple_value_object/__init__.py +++ b/simple_value_object/__init__.py @@ -3,7 +3,7 @@ from .value_object import ValueObject from .decorators import invariant -VERSION = (1, 1, 1, 'final') +VERSION = (1, 2, 0, 'final') __version__ = VERSION diff --git a/simple_value_object/value_object.py b/simple_value_object/value_object.py index 2fba4b7..a2e669a 100644 --- a/simple_value_object/value_object.py +++ b/simple_value_object/value_object.py @@ -53,22 +53,23 @@ def check_invariants(): ) def invariant_execute(invariant): - return_value = getattr(self, invariant)(self) + return_value = invariant(self, self) if not isinstance(return_value, bool): raise InvariantReturnValueException() return return_value + def is_invariant(method): + try: + return 'invariant_func_wrapper' in str(method) and '__init__' not in str(method) + except TypeError: + return False + def obtain_invariants(): - for member in inspect.getmembers(cls): - try: - is_method = hasattr(member[1], '__call__') - is_a_invariant_method = 'invariant_func_wrapper' in inspect.getsourcelines(member[1].__code__)[0][0] - if is_method and is_a_invariant_method: - yield(member[0]) - except AttributeError: - continue + invariants = [member[1] for member in inspect.getmembers(cls, is_invariant)] + for invariant in invariants: + yield(invariant) def check_mutable_data_types(): mutable_types = (list, dict, set)