Class: GreaterLess
- Inherits:
-
Delegator
- Object
- Delegator
- GreaterLess
- Defined in:
- lib/greater_less.rb
Constant Summary collapse
- GREATER_LESS =
/^[<>] ?/
Class Method Summary collapse
Instance Method Summary collapse
- #*(numerical) ⇒ Object
- #+(numerical) ⇒ Object
- #-(numerical) ⇒ Object
- #-@ ⇒ Object
- #/(numerical) ⇒ Object
- #<(numerical) ⇒ Object
- #<=(numerical) ⇒ Object
-
#==(numerical) ⇒ Object
:doc:.
- #>(numerical) ⇒ Object
- #>=(numerical) ⇒ Object
-
#__getobj__ ⇒ Object
delegate any method not defined in this class to float.
- #__setobj__(obj) ⇒ Object
-
#andand ⇒ Object
fixes delegator breaking andand functionality.
- #coerce(object) ⇒ Object
-
#initialize(content) ⇒ GreaterLess
constructor
A new instance of GreaterLess.
- #inspect ⇒ Object
- #inverted_sign ⇒ Object
- #is_a?(klass) ⇒ Boolean
- #kind_of?(klass) ⇒ Boolean
- #sign ⇒ Object
-
#to_f ⇒ Object
:nodoc:.
- #to_s ⇒ Object
- #value ⇒ Object
Constructor Details
#initialize(content) ⇒ GreaterLess
Returns a new instance of GreaterLess.
109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 |
# File 'lib/greater_less.rb', line 109 def initialize(content) if content.is_a? String if content =~ /^>/ @sign = ">" elsif content =~ /^</ @sign = "<" end @float = content.gsub(/^[<>] ?/, "").to_f elsif content.is_a? Numeric @float = content.to_f else raise "Can't handle #{content.class}!" end super(@float) end |
Class Method Details
.new(content, coerce = false) ⇒ Object
100 101 102 103 104 105 106 |
# File 'lib/greater_less.rb', line 100 def new(content, coerce=false) if coerce or content =~ GREATER_LESS old_new(content) else content.to_f end end |
.old_new ⇒ Object
98 |
# File 'lib/greater_less.rb', line 98 alias :old_new :new |
Instance Method Details
#*(numerical) ⇒ Object
191 192 193 194 195 196 197 198 199 |
# File 'lib/greater_less.rb', line 191 def *(numerical) value, sign = if numerical.is_a? self.class raise "Can't handle #{self.class}!" if @sign [@float * numerical.value, @float > 0 ? numerical.sign : numerical.inverted_sign] else [@float * numerical, numerical > 0 ? @sign : inverted_sign] end GreaterLess.new("#{sign} #{value}") end |
#+(numerical) ⇒ Object
211 212 213 214 215 216 217 218 219 |
# File 'lib/greater_less.rb', line 211 def +(numerical) value, sign = if numerical.is_a? self.class raise "Can't handle #{self.class}!" if @sign [@float + numerical.value, numerical.sign] else [@float + numerical, @sign] end GreaterLess.new("#{sign} #{value}") end |
#-(numerical) ⇒ Object
221 222 223 |
# File 'lib/greater_less.rb', line 221 def -(numerical) self + -numerical end |
#-@ ⇒ Object
225 226 227 |
# File 'lib/greater_less.rb', line 225 def -@ GreaterLess.new("#{inverted_sign} -#{value}") end |
#/(numerical) ⇒ Object
201 202 203 204 205 206 207 208 209 |
# File 'lib/greater_less.rb', line 201 def /(numerical) value, sign = if numerical.is_a? self.class raise "Can't handle #{self.class}!" if @sign [@float / numerical.value, @float > 0 ? numerical.inverted_sign : numerical.sign] else [@float / numerical, numerical > 0 ? @sign : inverted_sign] end GreaterLess.new("#{sign} #{value}") end |
#<(numerical) ⇒ Object
175 176 177 |
# File 'lib/greater_less.rb', line 175 def <(numerical) numerical > self end |
#<=(numerical) ⇒ Object
187 188 189 |
# File 'lib/greater_less.rb', line 187 def <=(numerical) self == numerical or self < numerical end |
#==(numerical) ⇒ Object
:doc:
159 160 161 162 163 164 165 |
# File 'lib/greater_less.rb', line 159 def ==(numerical) if numerical.is_a? self.class @sign == numerical.sign and @float == numerical.value else false end end |
#>(numerical) ⇒ Object
167 168 169 170 171 172 173 |
# File 'lib/greater_less.rb', line 167 def >(numerical) if numerical.is_a? self.class @float >= numerical.value and [nil, ">"].include? @sign and [nil, "<"].include? numerical.sign else @float >= numerical and @sign == ">" end end |
#>=(numerical) ⇒ Object
183 184 185 |
# File 'lib/greater_less.rb', line 183 def >=(numerical) self == numerical or self > numerical end |
#__getobj__ ⇒ Object
delegate any method not defined in this class to float
134 135 136 |
# File 'lib/greater_less.rb', line 134 def __getobj__ @float end |
#__setobj__(obj) ⇒ Object
137 138 139 |
# File 'lib/greater_less.rb', line 137 def __setobj__(obj) @float = obj end |
#andand ⇒ Object
fixes delegator breaking andand functionality
255 256 257 |
# File 'lib/greater_less.rb', line 255 def andand(*) self end |
#coerce(object) ⇒ Object
125 126 127 128 129 130 131 |
# File 'lib/greater_less.rb', line 125 def coerce(object) if object.is_a? Numeric and not object.is_a? self.class [GreaterLess.new(object, true), self] else raise "Can't handle #{object.class}!" end end |
#inspect ⇒ Object
238 239 240 |
# File 'lib/greater_less.rb', line 238 def inspect self.to_s end |
#inverted_sign ⇒ Object
145 146 147 148 149 150 151 152 |
# File 'lib/greater_less.rb', line 145 def inverted_sign case @sign when ">" "<" when "<" ">" end end |
#is_a?(klass) ⇒ Boolean
246 247 248 249 250 251 252 |
# File 'lib/greater_less.rb', line 246 def is_a?(klass) if klass == self.class true else @float.is_a? klass end end |
#kind_of?(klass) ⇒ Boolean
242 243 244 |
# File 'lib/greater_less.rb', line 242 def kind_of?(klass) is_a?(klass) end |
#sign ⇒ Object
141 142 143 |
# File 'lib/greater_less.rb', line 141 def sign @sign end |
#to_f ⇒ Object
:nodoc:
230 231 232 |
# File 'lib/greater_less.rb', line 230 def to_f self end |
#to_s ⇒ Object
234 235 236 |
# File 'lib/greater_less.rb', line 234 def to_s "#{@sign} #{@float}" end |
#value ⇒ Object
154 155 156 |
# File 'lib/greater_less.rb', line 154 def value @float end |