Class: OpenStruct
- Inherits:
-
Object
- Object
- OpenStruct
- Defined in:
- lib/sumhash/ostruct.rb
Constant Summary collapse
- NUMBER_CLASSES =
[Integer, Fixnum, Bignum, Float, Rational]
- SUPPORTED_CLASSES =
NUMBER_CLASSES + [Hash, OpenStruct]
Instance Method Summary collapse
-
#*(num) ⇒ Object
Multiplication.
-
#+(os) ⇒ Object
Plus.
-
#+@ ⇒ Object
Unary plus.
-
#-(os) ⇒ Object
Minus.
-
#-@ ⇒ Object
Unary minus.
-
#/(num) ⇒ Object
Division.
- #_fields ⇒ Object
Instance Method Details
#*(num) ⇒ Object
Multiplication
50 51 52 53 54 55 56 57 |
# File 'lib/sumhash/ostruct.rb', line 50 def *(num) raise TypeError, "#{num.class} can't be coerced into Float" unless NUMBER_CLASSES.include? num.class self._fields.inject(OpenStruct.new()) do |res, f| v = self.send(f) res.send(:"#{f}=", SUPPORTED_CLASSES.include?(v.class) && !v.kind_of?(String) ? v*num.to_f : v) res end end |
#+(os) ⇒ Object
Plus
10 11 12 13 14 15 |
# File 'lib/sumhash/ostruct.rb', line 10 def +(os) (self._fields + os._fields).inject(OpenStruct.new()) do |sum, f| sum.send(:"#{f}=", sum(self.send(f), os.send(f))) sum end end |
#+@ ⇒ Object
Unary plus
35 36 37 |
# File 'lib/sumhash/ostruct.rb', line 35 def +@ self end |
#-(os) ⇒ Object
Minus
18 19 20 21 22 23 |
# File 'lib/sumhash/ostruct.rb', line 18 def -(os) (self._fields + os._fields).inject(OpenStruct.new()) do |sum, f| sum.send(:"#{f}=", sum(self.send(f), os.send(f), :-)) sum end end |
#-@ ⇒ Object
Unary minus
26 27 28 29 30 31 32 |
# File 'lib/sumhash/ostruct.rb', line 26 def -@ self._fields.inject(OpenStruct.new()) do |res, f| v = self.send(f) res.send(:"#{f}=", SUPPORTED_CLASSES.include?(v.class) ? -v : v) res end end |
#/(num) ⇒ Object
Division
40 41 42 43 44 45 46 47 |
# File 'lib/sumhash/ostruct.rb', line 40 def /(num) raise TypeError, "#{num.class} can't be coerced into Float" unless NUMBER_CLASSES.include? num.class self._fields.inject(OpenStruct.new()) do |res, f| v = self.send(f) res.send(:"#{f}=", SUPPORTED_CLASSES.include?(v.class) ? v/num.to_f : v) res end end |
#_fields ⇒ Object
5 6 7 |
# File 'lib/sumhash/ostruct.rb', line 5 def _fields @table.keys.map{|k| k.to_sym } end |