https://9dok.net/document/zgw28m67-dynamically-adaptable-software-product-lines-using-ruby-metaprogramming.html