Class: GreaterLess

Inherits:
Delegator
  • Object
show all
Defined in:
lib/greater_less.rb

Constant Summary collapse

GREATER_LESS =
/^[<>] ?/

Class Method Summary collapse

Instance Method Summary collapse

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_newObject



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

#andandObject

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

#inspectObject



238
239
240
# File 'lib/greater_less.rb', line 238

def inspect
  self.to_s
end

#inverted_signObject



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

Returns:

  • (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

Returns:

  • (Boolean)


242
243
244
# File 'lib/greater_less.rb', line 242

def kind_of?(klass)
  is_a?(klass)
end

#signObject



141
142
143
# File 'lib/greater_less.rb', line 141

def sign
  @sign
end

#to_fObject

:nodoc:



230
231
232
# File 'lib/greater_less.rb', line 230

def to_f
  self
end

#to_sObject



234
235
236
# File 'lib/greater_less.rb', line 234

def to_s
  "#{@sign} #{@float}"
end

#valueObject



154
155
156
# File 'lib/greater_less.rb', line 154

def value
  @float
end