Я часто використовував цю схему для розширення основної поведінки 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
слід це робити.