custom_boolean 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,18 @@
1
+ require '../lib/custom_boolean'
2
+
3
+ # only :horse is true
4
+ CustomBoolean.truth_test = proc { |b| b == :horse }
5
+
6
+ if?(true) {
7
+ puts 'evaluates to true'
8
+ }.
9
+ else {
10
+ puts 'reached else'
11
+ }
12
+
13
+ if?(:horse) {
14
+ puts 'evaluates to true'
15
+ }.
16
+ else {
17
+ puts 'reached else'
18
+ }
@@ -0,0 +1,21 @@
1
+ require '../lib/custom_boolean'
2
+
3
+ x = :delighted
4
+ y = :aroused
5
+
6
+ if?(x == :sad) {
7
+ puts 'evaluates to true'
8
+ }.
9
+ else_if(x == :delighted) {
10
+ if?(y == :happy) {
11
+ puts 'delighted and happy'
12
+ }.
13
+ else_if(y == :aroused) {
14
+ puts 'delighted and aroused'
15
+ }.
16
+ else { puts 'just delighted' }
17
+ }.
18
+ else {
19
+ puts 'not delighted'
20
+ }
21
+
@@ -0,0 +1,11 @@
1
+ require '../lib/custom_boolean'
2
+
3
+ CustomBoolean.truth_test = CustomBoolean::PERL_TRUTH
4
+
5
+ x = "0"
6
+ if?(negate(x)) {
7
+ puts 'evaluates to true'
8
+ }.
9
+ else {
10
+ puts 'reached else'
11
+ }
@@ -1,26 +1,32 @@
1
1
  # CustomBoolean by John Mair (banisterfiend)
2
2
  # MIT license
3
3
 
4
- module CustomBooleanOperators
5
- def &(other)
6
- CustomBoolean.truthy?(self) && CustomBoolean.truthy?(other)
7
- end
8
- alias and &
9
-
10
- def |(other)
11
- CustomBoolean.truthy?(self) || CustomBoolean.truthy?(other)
4
+
5
+ direc = File.dirname(__FILE__)
6
+ require "#{direc}/custom_boolean/version"
7
+
8
+ class CustomBoolean
9
+ module Operators
10
+ def &(other)
11
+ CustomBoolean.truthy?(self) && CustomBoolean.truthy?(other)
12
+ end
13
+ alias_method :and, :"&"
14
+
15
+ def |(other)
16
+ CustomBoolean.truthy?(self) || CustomBoolean.truthy?(other)
17
+ end
18
+ alias_method :or, :"|"
12
19
  end
13
- alias or |
14
20
  end
15
21
 
16
- true.extend(CustomBooleanOperators)
17
- false.extend(CustomBooleanOperators)
18
- Object.send(:include, CustomBooleanOperators)
22
+ true.extend(CustomBoolean::Operators)
23
+ false.extend(CustomBoolean::Operators)
24
+ Object.send(:include, CustomBoolean::Operators)
19
25
 
20
- def negate(other)
21
- !CustomBoolean.truthy?(self)
26
+ def negate(expr)
27
+ !CustomBoolean.truthy?(expr)
22
28
  end
23
-
29
+
24
30
  def if_(condition, &block)
25
31
  truth = !!CustomBoolean.truthy?(condition)
26
32
  bvalue = block.call if truth
@@ -52,7 +58,7 @@ class CustomBoolean
52
58
  STRICT_TRUTH = proc { |expr| raise "Expression must be strictly true or false." if expr != true && expr != false; expr }
53
59
  PERL_TRUTH = proc { |expr| expr && expr != 0 && expr != "" && expr != "0" }
54
60
  C_TRUTH = proc { |expr| expr && expr != 0 }
55
-
61
+
56
62
  # default truth test is Ruby's
57
63
  self.truth_test = RUBY_TRUTH
58
64
 
@@ -1,3 +1,3 @@
1
1
  class CustomBoolean
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
@@ -319,6 +319,104 @@ class CustomBooleanTest < Test::Unit::TestCase
319
319
  end
320
320
  CustomBoolean.truth_test = CustomBoolean::RUBY_TRUTH
321
321
  end
322
+
323
+ def test_perl_truth_operators
324
+ CustomBoolean.truth_test = CustomBoolean::PERL_TRUTH
325
+
326
+ truthy_value = "0"
327
+
328
+ [:and, :or].each do |o|
329
+ v = +if?(truthy_value.send(o, true)) {
330
+ true
331
+ }.
332
+ else! {
333
+ false
334
+ }
335
+
336
+ assert_equal(true, v) if o == :or
337
+ assert_equal(false, v) if o == :and
338
+ end
339
+
340
+ v = +if?(negate(truthy_value)) {
341
+ true
342
+ }.
343
+ else! {
344
+ false
345
+ }
346
+
347
+ assert_equal(true, v)
348
+
349
+ CustomBoolean.truth_test = CustomBoolean::RUBY_TRUTH
350
+ end
351
+
352
+ def test_python_truth_operators
353
+ CustomBoolean.truth_test = CustomBoolean::PYTHON_TRUTH
354
+
355
+ truthy_value = []
356
+ [:and, :or].each do |o|
357
+ v = +if?(truthy_value.send(o, true)) {
358
+ true
359
+ }.
360
+ else! {
361
+ false
362
+ }
363
+
364
+ assert_equal(true, v) if o == :or
365
+ assert_equal(false, v) if o == :and
366
+ end
367
+
368
+ v = +if?(negate(truthy_value)) {
369
+ true
370
+ }.
371
+ else! {
372
+ false
373
+ }
374
+
375
+ assert_equal(true, v)
376
+
377
+ CustomBoolean.truth_test = CustomBoolean::RUBY_TRUTH
378
+ end
379
+
380
+ def test_c_truth_operators
381
+ CustomBoolean.truth_test = CustomBoolean::C_TRUTH
382
+
383
+ truthy_value = 0
384
+ [:and, :or].each do |o|
385
+ v = +if?(truthy_value.send(o, true)) {
386
+ true
387
+ }.
388
+ else! {
389
+ false
390
+ }
391
+
392
+ assert_equal(true, v) if o == :or
393
+ assert_equal(false, v) if o == :and
394
+ end
395
+
396
+ v = +if?(negate(truthy_value)) {
397
+ true
398
+ }.
399
+ else! {
400
+ false
401
+ }
402
+
403
+ assert_equal(true, v)
404
+
405
+ CustomBoolean.truth_test = CustomBoolean::RUBY_TRUTH
406
+ end
407
+
408
+ def test_if_expression
409
+ CustomBoolean.truth_test = CustomBoolean::RUBY_TRUTH
410
+
411
+ v = +if?(true) {
412
+ :hero
413
+ }.
414
+ else {
415
+ :ostrich
416
+ }
417
+
418
+ assert_equal(:hero, v)
419
+ end
322
420
  end
323
421
 
324
422
 
metadata CHANGED
@@ -1,13 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: custom_boolean
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
5
4
  prerelease: false
6
5
  segments:
7
6
  - 0
8
7
  - 1
9
- - 0
10
- version: 0.1.0
8
+ - 1
9
+ version: 0.1.1
11
10
  platform: ruby
12
11
  authors:
13
12
  - John Mair (banisterfiend)
@@ -15,7 +14,7 @@ autorequire:
15
14
  bindir: bin
16
15
  cert_chain: []
17
16
 
18
- date: 2010-09-27 00:00:00 +13:00
17
+ date: 2010-09-28 00:00:00 +13:00
19
18
  default_executable:
20
19
  dependencies: []
21
20
 
@@ -34,6 +33,9 @@ files:
34
33
  - lib/custom_boolean.rb
35
34
  - lib/custom_boolean/version.rb
36
35
  - examples/example.rb
36
+ - examples/example_horse.rb
37
+ - examples/example_nested.rb
38
+ - examples/example_operators.rb
37
39
  - test/test.rb
38
40
  has_rdoc: true
39
41
  homepage: http://banisterfiend.wordpress.com
@@ -49,7 +51,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
49
51
  requirements:
50
52
  - - ">="
51
53
  - !ruby/object:Gem::Version
52
- hash: 3
53
54
  segments:
54
55
  - 0
55
56
  version: "0"
@@ -58,7 +59,6 @@ required_rubygems_version: !ruby/object:Gem::Requirement
58
59
  requirements:
59
60
  - - ">="
60
61
  - !ruby/object:Gem::Version
61
- hash: 3
62
62
  segments:
63
63
  - 0
64
64
  version: "0"