github.com/sam0x17/truthy

Adds intelligent to_b (to_boolen) to all objects in crystal

2 stars
0 dependents
License: MIT

Nothing has been indexed for 1.3.2 yet. The tag is recorded, its shard.yml has not been read, so the manifest and dependency list below are empty because they are unknown rather than because they are absent.

Installation

# Add this to your shard.yml
dependencies:
  truthy:
    github: sam0x17/truthy
    version: ~> 1.3.2

Then run:

shards install

shard.yml

No shard.yml has been indexed for 1.3.2. You can read it on the repository.

Dependencies

Unknown: the shard.yml for this version has not been read yet.

README

This README is the one indexed from the repository at its latest ref, not from the tag for this version.

truthy

Truthy patches all objects in crystal with a to_b (to boolean) method that will intelligently return a boolean based on the value of the object. This will differ from !!(expr) in a number of cases including the handling of "" and '\0' as false, and proper handling of class instances and arrays (an empty array => false, an array with elements => true).

expr.to_b will always return true or false no matter what you pass to it. !!(expr) is used as a fallback for any language features that are not explictly covered.

An alias is provided so that you can also use *.truthy? if you think this makes more sense than to_b. Both methods function in exactly the same way and are interchangable.

Installation

Add this to your application's shard.yml:

dependencies:
  truthy:
    github: sam0x17/truthy

Usage

require "truthy"

# Booleans
true.to_b # => true
false.to_b # => false

# Objects
nil.to_b # => false
SomeClass.new.to_b # => true

# Strings / Characters
"".to_b # => false
"hey".to_b # => true
'\0'.to_b # => false
'c'.to_b # => true
"0".to_b # => false
"1".to_b # => true
"200".to_b # => true
"1.0".to_b # => true
"-1.0".to_b # => false
"true".to_b # => true
"false".to_b # => false
"yes".to_b # => true
"no".to_b # => false
"nil".to_b # => false
"null".to_b # => false
"none".to_b # => false
"True".to_b # => true
"[]".to_b # => false
"{}".to_b # => false


# Integers
0.to_b # => false
-1.to_b # => false
1.to_b # => true
10.to_b # => true
0_i64.to_b # => false
1_i8.to_b # => true
-1_i16.to_b # => false
0_u64.to_b # => false
3_u16.to_b # => true

# Floats
0.0.to_b # => false
1.0.to_b # => true
0.001.to_b # => true
-0.001.to_b # => false
-1.0.to_b # => false
23.342.to_b # => true

# Arrays
[1, 2, 3].to_b # => true
([] of Int32).to_b # => false

# truthy? alias
true.truthy? # => true
false.truthy? # => false
0.truthy? # => false
1.truthy? # => true