Class: GeneralUnits::Base::Measurement
- Inherits:
-
Object
- Object
- GeneralUnits::Base::Measurement
- Defined in:
- lib/general_units/units/base/measurement.rb
Instance Attribute Summary collapse
-
#amount ⇒ Object
readonly
Returns the value of attribute amount.
-
#unit ⇒ Object
readonly
Returns the value of attribute unit.
Class Method Summary collapse
- .i18n_class_key ⇒ Object
- .i18n_format_key(format = nil) ⇒ Object
- .i18n_key(*args) ⇒ Object
- .i18n_scope_key ⇒ Object
-
.select_units(*args) ⇒ Object
SELECT UNITS START ###.
Instance Method Summary collapse
- #%(val) ⇒ Object
- #*(other_object) ⇒ Object
- #+(other_object) ⇒ Object
- #-(other_object) ⇒ Object
- #-@ ⇒ Object
- #/(other_object) ⇒ Object
- #<(other_object) ⇒ Object
- #<=(other_object) ⇒ Object
- #<=>(other_object) ⇒ Object
- #==(other_object) ⇒ Object
- #>(other_object) ⇒ Object
- #>=(other_object) ⇒ Object
- #abs ⇒ Object
- #attributes ⇒ Object
- #coerce(other) ⇒ Object
- #div(value) ⇒ Object
- #divmod(val) ⇒ Object
- #eql?(other_object) ⇒ Boolean
- #i18n_delimeter(options = {}) ⇒ Object
-
#initialize(amount = 0, unit) ⇒ Measurement
constructor
A new instance of Measurement.
- #inspect ⇒ Object
- #measurement ⇒ Object
- #modulo(val) ⇒ Object
- #negative? ⇒ Boolean
- #nonzero? ⇒ Boolean
- #positive? ⇒ Boolean
- #remainder(val) ⇒ Object
- #rounded(round = nil) ⇒ Object
- #to_s(*args) ⇒ Object
- #zero? ⇒ Boolean
Constructor Details
#initialize(amount = 0, unit) ⇒ Measurement
Returns a new instance of Measurement.
9 10 11 12 13 14 |
# File 'lib/general_units/units/base/measurement.rb', line 9 def initialize(amount = 0, unit) if unit = valid_unit?(unit) @amount = amount.try(:to_d)||0.to_d @unit = unit end end |
Instance Attribute Details
#amount ⇒ Object (readonly)
Returns the value of attribute amount.
6 7 8 |
# File 'lib/general_units/units/base/measurement.rb', line 6 def amount @amount end |
#unit ⇒ Object (readonly)
Returns the value of attribute unit.
6 7 8 |
# File 'lib/general_units/units/base/measurement.rb', line 6 def unit @unit end |
Class Method Details
.i18n_class_key ⇒ Object
20 21 22 |
# File 'lib/general_units/units/base/measurement.rb', line 20 def self.i18n_class_key "#{i18n_scope_key}.#{name.demodulize.underscore}" end |
.i18n_format_key(format = nil) ⇒ Object
24 25 26 |
# File 'lib/general_units/units/base/measurement.rb', line 24 def self.i18n_format_key(format = nil) [i18n_class_key, :formats, format].compact.join(".") end |
.i18n_key(*args) ⇒ Object
28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/general_units/units/base/measurement.rb', line 28 def self.i18n_key(*args) key = args.first = args. [:locale] ||= I18n.locale begin I18n.t("#{i18n_format_key(options[:format])}.#{key}", .merge(:raise => true)) rescue begin I18n.t("#{i18n_class_key}.#{key}", .merge(:raise => true)) rescue I18n.t("#{i18n_scope_key}.#{key}", ) end end end |
.i18n_scope_key ⇒ Object
16 17 18 |
# File 'lib/general_units/units/base/measurement.rb', line 16 def self.i18n_scope_key 'general_units' end |
.select_units(*args) ⇒ Object
SELECT UNITS START ###
197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 |
# File 'lib/general_units/units/base/measurement.rb', line 197 def self.select_units(*args) = args. systems = Array([:system]).map(&:to_sym) only = Array([:only]).map(&:to_sym) except = Array([:except]).map(&:to_sym) list = (Array(args.first) if args.first)||self.units if systems.present? list = list.select {|u| u.system.in?(systems)} end if only.present? list = list.select {|u| u.code.in?(only)} end if except.present? list = list.select {|u| !u.code.in?(except)} end list end |
Instance Method Details
#%(val) ⇒ Object
162 163 164 |
# File 'lib/general_units/units/base/measurement.rb', line 162 def %(val) modulo(val) end |
#*(other_object) ⇒ Object
125 126 127 |
# File 'lib/general_units/units/base/measurement.rb', line 125 def *(other_object) self.class.new(amount * valid_amount(other_object), unit) end |
#+(other_object) ⇒ Object
117 118 119 |
# File 'lib/general_units/units/base/measurement.rb', line 117 def +(other_object) self.class.new(amount + valid_amount(other_object), unit) end |
#-(other_object) ⇒ Object
121 122 123 |
# File 'lib/general_units/units/base/measurement.rb', line 121 def -(other_object) self.class.new(amount - valid_amount(other_object), unit) end |
#-@ ⇒ Object
73 74 75 |
# File 'lib/general_units/units/base/measurement.rb', line 73 def -@ self.class.new(-amount, unit) end |
#/(other_object) ⇒ Object
129 130 131 |
# File 'lib/general_units/units/base/measurement.rb', line 129 def /(other_object) self.class.new(amount / valid_amount(other_object), unit) end |
#<(other_object) ⇒ Object
97 98 99 |
# File 'lib/general_units/units/base/measurement.rb', line 97 def <(other_object) amount < valid_amount(other_object) end |
#<=(other_object) ⇒ Object
105 106 107 |
# File 'lib/general_units/units/base/measurement.rb', line 105 def <=(other_object) amount <= valid_amount(other_object) end |
#<=>(other_object) ⇒ Object
87 88 89 90 91 |
# File 'lib/general_units/units/base/measurement.rb', line 87 def <=>(other_object) amount <=> valid_amount(other_object) rescue NoMethodError raise ArgumentError, "Comparison of #{self.class} with #{val.inspect} failed" end |
#==(other_object) ⇒ Object
77 78 79 80 81 |
# File 'lib/general_units/units/base/measurement.rb', line 77 def ==(other_object) amount == valid_amount(other_object) rescue NoMethodError false end |
#>(other_object) ⇒ Object
93 94 95 |
# File 'lib/general_units/units/base/measurement.rb', line 93 def >(other_object) amount > valid_amount(other_object) end |
#>=(other_object) ⇒ Object
101 102 103 |
# File 'lib/general_units/units/base/measurement.rb', line 101 def >=(other_object) amount >= valid_amount(other_object) end |
#abs ⇒ Object
178 179 180 |
# File 'lib/general_units/units/base/measurement.rb', line 178 def abs self.class.new(amount.abs, unit) end |
#attributes ⇒ Object
47 48 49 |
# File 'lib/general_units/units/base/measurement.rb', line 47 def attributes {:amount => amount, :unit => unit} end |
#coerce(other) ⇒ Object
190 191 192 |
# File 'lib/general_units/units/base/measurement.rb', line 190 def coerce(other) [self, other] end |
#div(value) ⇒ Object
133 134 135 |
# File 'lib/general_units/units/base/measurement.rb', line 133 def div(value) amount.div(value) end |
#divmod(val) ⇒ Object
137 138 139 140 141 142 143 |
# File 'lib/general_units/units/base/measurement.rb', line 137 def divmod(val) if val.is_a?(self.class) divmod_object(val) else divmod_other(val) end end |
#eql?(other_object) ⇒ Boolean
83 84 85 |
# File 'lib/general_units/units/base/measurement.rb', line 83 def eql?(other_object) self == other_object end |
#i18n_delimeter(options = {}) ⇒ Object
43 44 45 |
# File 'lib/general_units/units/base/measurement.rb', line 43 def i18n_delimeter( = {}) self.class.i18n_key(:delimeter, ) end |
#inspect ⇒ Object
62 63 64 |
# File 'lib/general_units/units/base/measurement.rb', line 62 def inspect "<#{self.class.name} amount=#{to_f} unit=#{unit.code}>" end |
#measurement ⇒ Object
69 70 71 |
# File 'lib/general_units/units/base/measurement.rb', line 69 def measurement self.class.name.split("::").last.underscore end |
#modulo(val) ⇒ Object
158 159 160 |
# File 'lib/general_units/units/base/measurement.rb', line 158 def modulo(val) divmod(val)[1] end |
#negative? ⇒ Boolean
113 114 115 |
# File 'lib/general_units/units/base/measurement.rb', line 113 def negative? self < 0 end |
#nonzero? ⇒ Boolean
186 187 188 |
# File 'lib/general_units/units/base/measurement.rb', line 186 def nonzero? amount != 0 ? self : nil end |
#positive? ⇒ Boolean
109 110 111 |
# File 'lib/general_units/units/base/measurement.rb', line 109 def positive? self > 0 end |
#remainder(val) ⇒ Object
166 167 168 169 170 171 172 173 174 175 176 |
# File 'lib/general_units/units/base/measurement.rb', line 166 def remainder(val) if val.is_a?(self.class) && unit != val.unit val = val.convert_to(unit) end if (amount < 0 && val < 0) || (amount > 0 && val > 0) self.modulo(val) else self.modulo(val) - (val.is_a?(self.class) ? val : self.class.new(val, unit)) end end |
#rounded(round = nil) ⇒ Object
58 59 60 |
# File 'lib/general_units/units/base/measurement.rb', line 58 def rounded(round = nil) to_f.divmod(1).last == 0 ? to_f.round(0) : to_f.round(round||2) end |
#to_s(*args) ⇒ Object
51 52 53 54 55 56 |
# File 'lib/general_units/units/base/measurement.rb', line 51 def to_s(*args) = args. value = "#{rounded(options[:round])}".gsub(".", i18n_delimeter()) unit_string = unit.to_s({:count => rounded([:round]), :format => :short}.merge()) "#{value} #{unit_string}" end |
#zero? ⇒ Boolean
182 183 184 |
# File 'lib/general_units/units/base/measurement.rb', line 182 def zero? amount == 0 end |