Чтобы уточнить ответ @ macek, следуя пожеланиям @ drawnownward и @ lpsquiggle:
Вы можете сделать двух помощников, вот так:
def color(color)
"#%06x" % color
end
def darker_color(color)
x = color.match(/0x(..)(..)(..)/)
r = x[1].sub(/[0-3]/, '5')
g = x[2].sub(/[0-3]/, '5')
b = x[3].sub(/[0-3]/, '5')
rgb = "0x#{r}#{g}#{b}"
"#%06x" % (rgb.hex - 0x444444)
end
Преимущество: если вы определили цветной гекс с низкими значениями (здесь от 0 до 3), они будут увеличены до вычитания, так что они будут заканчиваться 0 после, вместо того, чтобы оборачиваться и становиться c, d, e или f (что даст вам цвет, которого вы не ожидали). Он делает это только для первого значения в каждой паре #rrggbb, поэтому # 313131 становится # 0d0d0d, что технически некорректно, но гораздо лучше, чем #fdfdfd, так что это кажется достаточно хорошим компромиссом, так как вы захотите сохранить эти вторые значения в других случаях.
В вашем шаблоне Erb вы бы написали:
.container {
color: <%= color pink %>;
border: 1px solid <%= darker_color pink %>;
}
Вместо:
.container {
color: <%= color pink %>;
border: 1px solid <%= color darker_pink %>;
}
Надеюсь, это кому-нибудь поможет.