skip to navigation
skip to content

simple-value-object 0.2.1

A simple mixin for create Value Objects

Based on Ruby Gem by NoFlopSquad (https://github.com/noflopsquad/value-object)

Installation

> pip install simple-value-object

Usage

Constructor and field readers

from simple_value_object import ValueObject

class Point(ValueObject):
    def __init__(self, x, y):
        pass

point = Point(1, 2)

point.x
# 1

point.y
# 2

point.x = 5
# CannotBeChangeException: You cannot change values from a Value Object, create a new one

class Date(ValueObject):
    def __init__(self, day, month, year):
        pass

date = Date(1, 10, 2015)

date.day
# 1

date.month
# 10

date.year
# 2015

date.month = 5
# CannotBeChangeException: You cannot change values from a Value Object, create a new one

Equality based on field values

from simple_value_object import ValueObject

class Point(ValueObject):
    def __init__(self, x, y):
        pass

a_point = Point(5, 3)

same_point = Point(5, 3)

a_point == same_point
# True

a_different_point = Point(6, 3)

a_point == a_different_point
# False

Hash code based on field values

from simple_value_object import ValueObject

class Point(ValueObject):
    def __init__(self, x, y):
        pass

a_point = Point(5, 3)

same_point = Point(5, 3)

a_point.hash == same_point.hash
# True

a_different_point = Point.new(6, 3)

a_point.hash == a_different_point.hash
# False

Invariants

from simple_value_object import ValueObject, invariant

class Point(ValueObject):

    def __init__(self, x, y):
        pass

    @invariant
    def inside_first_quadrant(cls, instance):
        return instance.x > 0 and instance.y > 0

    @invariant
    def x_less_than_y(cls, instance):
        return instance.x < instance.y

Point(-5, 3)
#ViolatedInvariantException: Args values [-5, 3] violates invariant: inside_first_cuadrant

Point(6, 3)
#ViolatedInvariantException: Args values [6, 3] violates invariant: x_less_than_y

Point(1,3)
#<__main__.Point at 0x7f2bd043c780>

Test

> pip install -r requirements-test.txt
> PYTHONPATH=$PYTHONPATH:. mamba
 
File Type Py Version Uploaded on Size
simple-value-object-0.2.1.tar.gz (md5) Source 2015-10-05 3KB