custom_boolean 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,2 +1,9 @@
1
- 27/0/10 version 0.1.0
1
+ 28/9/10 version 0.1.2
2
+ * added YARD documentation
3
+ * added more examples and tests
4
+ 27/9/10 version 0.1.1
5
+ * added boolean operators
6
+
7
+ 27/9/10 version 0.1.0
2
8
  * release!
9
+
data/Rakefile CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'rake/gempackagetask'
2
+ require 'rake/rdoctask'
2
3
  require './lib/custom_boolean/version'
3
4
 
4
5
  $dlext = Config::CONFIG['DLEXT']
@@ -14,7 +15,10 @@ specification = Gem::Specification.new do |s|
14
15
  s.require_path = 'lib'
15
16
  s.platform = Gem::Platform::RUBY
16
17
  s.homepage = "http://banisterfiend.wordpress.com"
17
- s.has_rdoc = false
18
+ s.has_rdoc = 'yard'
19
+ s.extra_rdoc_files = ["README.markdown"]
20
+ s.rdoc_options << '--main' << 'README.markdown'
21
+
18
22
  s.files = ["Rakefile", "README.markdown", "CHANGELOG",
19
23
  "lib/custom_boolean.rb", "lib/custom_boolean/version.rb"] +
20
24
  FileList["examples/*.rb", "test/*.rb"].to_a
@@ -25,3 +29,7 @@ Rake::GemPackageTask.new(specification) do |package|
25
29
  package.need_tar = false
26
30
  end
27
31
 
32
+ Rake::RDocTask.new do |rd|
33
+ rd.main = "README.markdown"
34
+ rd.rdoc_files.include("README.markdown", "lib/**/*.rb")
35
+ end
@@ -1,17 +1,40 @@
1
1
  # CustomBoolean by John Mair (banisterfiend)
2
2
  # MIT license
3
3
 
4
-
5
4
  direc = File.dirname(__FILE__)
6
5
  require "#{direc}/custom_boolean/version"
7
6
 
7
+ # @author John Mair (banisterfiend)
8
8
  class CustomBoolean
9
9
  module Operators
10
+
11
+ # Equivalent of **&&** for CustomBoolean truthiness.
12
+ # Differs from regular **&&** as it uses CustomBoolean truthiness
13
+ #
14
+ # **NOTE:** It is usually better to use the {#and} alias, as fewer objects override this
15
+ # method)
16
+ #
17
+ # @param The rhs of the boolean *and* operator
18
+ # @return [Boolean]
19
+ # @example
20
+ # obj1 & obj2
21
+ # obj1.and obj2
10
22
  def &(other)
11
23
  CustomBoolean.truthy?(self) && CustomBoolean.truthy?(other)
12
24
  end
13
25
  alias_method :and, :"&"
14
26
 
27
+ # Equivalent of **||** for CustomBoolean truthiness.
28
+ # Differs from regular **||** as it uses CustomBoolean truthiness
29
+ #
30
+ # **NOTE:** It is usually better to use the {#or} alias, as fewer objects override this
31
+ # method)
32
+ #
33
+ # @param The rhs of the boolean *or* operator
34
+ # @return [Boolean]
35
+ # @example
36
+ # obj1 | obj2
37
+ # obj1.or obj2
15
38
  def |(other)
16
39
  CustomBoolean.truthy?(self) || CustomBoolean.truthy?(other)
17
40
  end
@@ -19,14 +42,38 @@ class CustomBoolean
19
42
  end
20
43
  end
21
44
 
45
+ # Unfortunately patching these objects is necessary :(
22
46
  true.extend(CustomBoolean::Operators)
23
47
  false.extend(CustomBoolean::Operators)
24
48
  Object.send(:include, CustomBoolean::Operators)
25
49
 
50
+ # Equivalent of **!** for CustomBoolean truthiness.
51
+ # Differs from regular **!** as it uses CustomBoolean truthiness
52
+ #
53
+ # @param The expression to be negated
54
+ # @return [Boolean]
55
+ # @example
56
+ # negate(obj)
26
57
  def negate(expr)
27
58
  !CustomBoolean.truthy?(expr)
28
59
  end
29
60
 
61
+ # Equivalent of **if** for CustomBoolean truthiness.
62
+ # Differs from regular **if** as it uses CustomBoolean truthiness
63
+ #
64
+ # @example basic usage
65
+ # Use as follows: if_(condition) { ... }
66
+ # Other conditionals chain on to the end of if_() as follows:
67
+ #
68
+ # if_(condition) { ... }.else { ... }
69
+ # @example if-expression form
70
+ # Can turn if_() statement into if-expression by prefixing with a `+`
71
+ #
72
+ # value = +if_(true) { :hello }
73
+ # value #=> :hello
74
+ # @param an expression to evaluate
75
+ # @return [CustomBoolean]
76
+ # @yield the block will be executed if the condition evalues to true
30
77
  def if_(condition, &block)
31
78
  truth = !!CustomBoolean.truthy?(condition)
32
79
  bvalue = block.call if truth
@@ -39,11 +86,42 @@ alias _if if_
39
86
  alias if? if_
40
87
 
41
88
  class CustomBoolean
42
- attr_accessor :truth_value, :value
89
+
90
+ # @return [Boolean]
91
+ attr_accessor :truth_value
92
+
93
+ # @return [Object] The value of the block that was executed in the
94
+ # if/else_if/else
95
+ attr_accessor :value
43
96
 
44
97
  class << self
98
+
99
+ # @return [Proc] The proc that defines the truth test
45
100
  attr_accessor :truth_test
46
101
 
102
+ # Tests whether *condition* is truthy according to
103
+ # CustomBoolean truthiness.
104
+ # CustomBoolean truthiness is determined by the proc referenced
105
+ # by CustomBoolean.truth_test.
106
+ #
107
+ # Built in Truth tests include:
108
+ # CustomBoolean::RUBY_TRUTH
109
+ #
110
+ # CustomBoolean::PYTHON_TRUTH
111
+ #
112
+ # CustomBoolean::PERL_TRUTH
113
+ #
114
+ # CustomBoolean::C_TRUTH
115
+ #
116
+ # CustomBoolean::STRICT_TRUTH
117
+ #
118
+ # @example changing truthiness to a preset
119
+ # CustomBoolean.truth_test = CustomBoolean::PYTHON_TRUTH
120
+ # @example user-defined truthiness
121
+ # # only :horse is true:
122
+ # CustomBoolean.truth_test = proc { |expr| expr == :horse }
123
+ # @param an expression to evaluate
124
+ # @return [Boolean]
47
125
  def truthy?(condition)
48
126
  self.truth_test.call(condition)
49
127
  end
@@ -67,10 +145,42 @@ class CustomBoolean
67
145
  self.value = block_value
68
146
  end
69
147
 
148
+ # Prefixing +if_+ with `+` turns if-statement into if-expression
149
+ # by invoking #value on CustomBoolean object.
150
+ # @return [Object] extracts the value of the if, transforming it
151
+ # into an if-expression
152
+ # @example single if-expression example
153
+ # +if(true) { :hello } #=> :hello
154
+ # +if(fale) { :hello } #=> nil
155
+ # @example if-else-expression example
156
+ # +if(false) {
157
+ # :hello
158
+ # }.
159
+ # else {
160
+ # :goodbye
161
+ # }
162
+ # #=> :goodbye
70
163
  def +@
71
164
  self.value
72
165
  end
73
166
 
167
+ # Equivalent of **elsif** for CustomBoolean truthiness.
168
+ # Must be chained after an if_() or another else_if()
169
+ #
170
+ # Differs from regular **elsif** as it uses CustomBoolean truthiness
171
+ #
172
+ # @example else_if example
173
+ # if_(cond) {
174
+ # :hello
175
+ # }.
176
+ # else_if(cond2) {
177
+ # :goodbye
178
+ # }
179
+ # @param [Object] an expression to evaluate
180
+ # @return [CustomBoolean]
181
+ # @yield the block will be executed if the condition evalues to true
182
+ # (so long as no prior *else_if* or *if* has evaluated to true further
183
+ # up the chain)
74
184
  def else_if(condition, &block)
75
185
  raise InvalidConditional, "No further conditionals allowed after an else." if self.truth_value == :else_reached
76
186
 
@@ -90,6 +200,26 @@ class CustomBoolean
90
200
  alias elsif? else_if
91
201
  alias elsif! else_if
92
202
 
203
+ # Equivalent of **else** for CustomBoolean truthiness.
204
+ # Must be chained after an if_() or an else_if()
205
+ #
206
+ # Differs from regular **else** as it uses CustomBoolean truthiness
207
+ #
208
+ # No other conditionals may be chained after an +else+.
209
+ # In event a conditional is chained after an +else+ an
210
+ # **InvalidConditional** exception will be raised.
211
+ #
212
+ # @example else example
213
+ # if_(cond) {
214
+ # :hello
215
+ # }.
216
+ # else {
217
+ # :goodbye
218
+ # }
219
+ # @return [CustomBoolean]
220
+ # @yield the block will be executed if the condition evalues to true
221
+ # (so long as no prior *else_if* or *if* has evaluated to true further
222
+ # up the chain)
93
223
  def else(&block)
94
224
  raise InvalidConditional, "No further conditionals allowed after an else." if self.truth_value == :else_reached
95
225
 
@@ -1,3 +1,3 @@
1
1
  class CustomBoolean
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 1
8
- - 1
9
- version: 0.1.1
8
+ - 2
9
+ version: 0.1.2
10
10
  platform: ruby
11
11
  authors:
12
12
  - John Mair (banisterfiend)
@@ -24,8 +24,8 @@ executables: []
24
24
 
25
25
  extensions: []
26
26
 
27
- extra_rdoc_files: []
28
-
27
+ extra_rdoc_files:
28
+ - README.markdown
29
29
  files:
30
30
  - Rakefile
31
31
  - README.markdown
@@ -37,13 +37,14 @@ files:
37
37
  - examples/example_nested.rb
38
38
  - examples/example_operators.rb
39
39
  - test/test.rb
40
- has_rdoc: true
40
+ has_rdoc: yard
41
41
  homepage: http://banisterfiend.wordpress.com
42
42
  licenses: []
43
43
 
44
44
  post_install_message:
45
- rdoc_options: []
46
-
45
+ rdoc_options:
46
+ - --main
47
+ - README.markdown
47
48
  require_paths:
48
49
  - lib
49
50
  required_ruby_version: !ruby/object:Gem::Requirement