Я часто використовував цю схему для розширення основної поведінки Ruby, щоб полегшити роботу з перетворенням довільних типів даних у булі значення, що полегшує роботу з різними параметрами URL-адреси тощо.
class String
def to_boolean
ActiveRecord::Type::Boolean.new.cast(self)
end
end
class NilClass
def to_boolean
false
end
end
class TrueClass
def to_boolean
true
end
def to_i
1
end
end
class FalseClass
def to_boolean
false
end
def to_i
0
end
end
class Integer
def to_boolean
to_s.to_boolean
end
end
Скажімо, у вас є параметр, fooякий може бути:
- ціле число (0 помилкове, всі інші істинні)
- справжній булевий (вірний / хибний)
- рядок ("true", "false", "0", "1", "TRUE", "FALSE")
- нуль
Замість того, щоб використовувати купу умовних умов, ви можете просто зателефонувати, foo.to_booleanі це зробить решту магії за вас.
У Rails я додаю це до ініціалізатора, названого core_ext.rbмайже у всіх моїх проектах, оскільки ця модель є такою поширеною.
## EXAMPLES
nil.to_boolean == false
true.to_boolean == true
false.to_boolean == false
0.to_boolean == false
1.to_boolean == true
99.to_boolean == true
"true".to_boolean == true
"foo".to_boolean == true
"false".to_boolean == false
"TRUE".to_boolean == true
"FALSE".to_boolean == false
"0".to_boolean == false
"1".to_boolean == true
true.to_i == 1
false.to_i == 0
trueабоfalseйого достатньо, якщо результат - триут або фальси? Якщо останні, тоfalseвже є фальси, і обидва,trueі'true'є трибунними, тому єдине значення, для якого результат вже не правильний, це'false':if input == 'false' then true else input endслід це робити.