A simple mixin for create Value Objects
Project description
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
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Close
Hashes for simple-value-object-0.3.1.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1bd8155151f7f73e529dae6dc580be34191f0ee2132ef6a797c8c7f36706b376 |
|
MD5 | 601db37c3a62c06d0c33ae2a989a4880 |
|
BLAKE2b-256 | 055717de2f37537f6830de6b54c4a0e4051766e3dd2edabcaf4286aea900ac66 |
Close
Hashes for simple_value_object-0.3.1-py2-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5cc2428b98a40c3e4a929a8f2442da686ce701473af5d8e09b09042ee78eea3b |
|
MD5 | 504771bd119da7d8db716e6c2aea3142 |
|
BLAKE2b-256 | 59bcca1801d9616dc7b08c9ba9f6ea8862c1bafd8ee312038a3b1c7acf50db24 |