numeric_with_unit 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 48d05ab9f9aa01a815b412324ef7a04b198041db
4
- data.tar.gz: 5b55204a0a0b340dfe941ea141e29f6977197a34
3
+ metadata.gz: f33f4241debd10d0f422dffd58afaa2ea4ff81bb
4
+ data.tar.gz: d75d05e2524f9f840a9019ed7cb17b2f0acd7071
5
5
  SHA512:
6
- metadata.gz: d52e9021767bdbfee29dde88feaa8a64790475db07c0cee5df91c79f546e88604d08097f95a4730088df620336760d74d68f7f1f8ac9bf583f87ab7505b71a18
7
- data.tar.gz: e3d277dee997ad68c2b38c8a4c06d6404b60bc1fb8d0328661055b5f75904afc834a8a6513d07c0d0e56688ae0577f6c35352c3fc1020080a92f8d8e0fea20ff
6
+ metadata.gz: 7edf5db65fff4bcd7dffbc9e035da919f60a079ca2583a95fd6acb47019ec3f7b11738ad728ff6117d33ca451b9d97971f2e246ba6772625bcc89274bb66d97e
7
+ data.tar.gz: f23d463f342e2d2ed4b1d0dc8b674b3e71030041e3500ff7740299ea0458856d6baec99a9a9d3fa5a2cee44549eed882f14a56aa862baa24e69220748b3e1a85
@@ -5,14 +5,13 @@ class NumericWithUnit
5
5
  class Unit
6
6
  class Config
7
7
  attr_reader :symbol, :dimension, :derivation
8
- attr_reader :si, :proportional
8
+ attr_reader :si
9
9
 
10
10
  def initialize(parent=nil)
11
11
  @symbol = nil
12
12
  @dimension = Hash.new(0)
13
13
  @from_si = nil
14
14
  @to_si = nil
15
- @derivation = Hash.new(0)
16
15
  @si = false
17
16
 
18
17
  @parent = parent
@@ -20,52 +19,12 @@ class NumericWithUnit
20
19
 
21
20
  def compile
22
21
  @dimension.delete_if{|k,v| v.zero?}
23
- @derivation.delete_if{|k,v| v.zero?}
24
- @derivation.delete_if{|k,v| k.symbol.nil?}
25
22
 
26
- if @derivation.empty?
27
- @from_si ||= ->(x){x}
28
- @to_si ||= ->(x){x}
29
- @derivation[@parent] += 1 unless @parent.nil?
30
- else # configにderivationが与えられた時は、derivationをもとに@dimension,@symbol,@to_si,@from_siを設定
31
- h = @derivation.sort_by{|u,v| u.symbol}.sort_by{|u,v| v} # ←どうしよう
32
-
33
- s1 = h.select{|u,v| v > 0}.map{|u,v| u.symbol + ((v.abs>1) ? v.abs.to_s : '')}.join('.')
34
- s2 = h.select{|u,v| v < 0}.map{|u,v| u.symbol + ((v.abs>1) ? v.abs.to_s : '')}.join('.')
35
- @symbol = s1 + (s2.empty? ? '' : "/(#{s2})")
36
-
37
- @derivation.each do |u,v|
38
- u.dimension.each do |d,i|
39
- @dimension[d] += i*v
40
- end
41
- end
42
-
43
- @from_si = @derivation.map{|u,v|
44
- prc = if v > 0
45
- ->(x){u.from_si(x)}
46
- else
47
- ->(x){x.quo(u.from_si(1)-u.from_si(0))} # ℃とKの変換のような場合に、変換式の切片を消すため。変換式が線形じゃないケースは想定していない
48
- end
49
- [prc, v.abs]
50
- }.map{|prc,v|
51
- ->(x){ v.times{x = prc[x]}; x }
52
- }.reduce{|memo, prc|
53
- ->(x){memo[prc[x]]}
54
- }
55
-
56
- @to_si = @derivation.map{|u,v|
57
- prc = if v > 0
58
- ->(x){u.to_si(x)}
59
- else
60
- ->(x){x.quo(u.to_si(1)-u.to_si(0))} # ℃とKの変換のような場合に、変換式の切片を消すため。変換式が線形じゃないケースは想定していない
61
- end
62
- [prc, v.abs]
63
- }.map{|prc,v|
64
- ->(x){ v.times{x = prc[x]}; x }
65
- }.reduce{|memo, prc|
66
- ->(x){memo[prc[x]]}
67
- }
68
- end
23
+ @from_si ||= ->(x){x}
24
+ @to_si ||= ->(x){x}
25
+
26
+ @derivation = Hash.new(0)
27
+ @derivation[@parent] += 1 unless @parent.nil?
69
28
 
70
29
  self
71
30
  end
@@ -109,11 +68,6 @@ class NumericWithUnit
109
68
  raise unless [TrueClass, FalseClass].any?{|klass|arg.is_a?(klass)}
110
69
  @si = arg
111
70
  end
112
-
113
- def derivation=(arg)
114
- raise unless arg.is_a?(Hash)
115
- @derivation = arg
116
- end
117
71
  end
118
72
  end
119
73
  end
@@ -156,11 +110,68 @@ class NumericWithUnit
156
110
  }
157
111
 
158
112
  # class methods
113
+
114
+ # create new unit from derivation _(for internal use)_ .
115
+ def self.derive
116
+ derivation = Hash.new(0)
117
+ yield(derivation)
118
+
119
+ return Unit.new if derivation.empty?
120
+
121
+ dimension = Hash.new(0)
122
+
123
+ h = derivation.sort_by{|u,v| u.symbol}.sort_by{|u,v| v} # ←どうしよう
124
+
125
+ s1 = h.select{|u,v| v > 0}.map{|u,v| u.symbol + ((v.abs>1) ? v.abs.to_s : '')}.join('.')
126
+ s2 = h.select{|u,v| v < 0}.map{|u,v| u.symbol + ((v.abs>1) ? v.abs.to_s : '')}.join('.')
127
+ symbol = s1 + (s2.empty? ? '' : "/(#{s2})")
128
+
129
+ derivation.each do |u,v|
130
+ u.dimension.each do |d,i|
131
+ dimension[d] += i*v
132
+ end
133
+ end
134
+
135
+ from_si = derivation.map{|u,v|
136
+ prc = if v > 0
137
+ ->(x){u.from_si(x)}
138
+ else
139
+ ->(x){x.quo(u.from_si(1)-u.from_si(0))} # ℃とKの変換のような場合に、変換式の切片を消すため。変換式が線形じゃないケースは想定していない
140
+ end
141
+ [prc, v.abs]
142
+ }.map{|prc,v|
143
+ ->(x){ v.times{x = prc[x]}; x }
144
+ }.reduce{|memo, prc|
145
+ ->(x){memo[prc[x]]}
146
+ }
147
+
148
+ to_si = derivation.map{|u,v|
149
+ prc = if v > 0
150
+ ->(x){u.to_si(x)}
151
+ else
152
+ ->(x){x.quo(u.to_si(1)-u.to_si(0))} # ℃とKの変換のような場合に、変換式の切片を消すため。変換式が線形じゃないケースは想定していない
153
+ end
154
+ [prc, v.abs]
155
+ }.map{|prc,v|
156
+ ->(x){ v.times{x = prc[x]}; x }
157
+ }.reduce{|memo, prc|
158
+ ->(x){memo[prc[x]]}
159
+ }
160
+
161
+ self.new{|conf|
162
+ conf.symbol = symbol
163
+ conf.dimension = dimension
164
+ conf.from_si = from_si
165
+ conf.to_si = to_si
166
+ }
167
+ end
159
168
 
169
+ # apply to_s to arg and return parsed unit.
160
170
  def self.[](arg)
161
171
  self.parse(arg.to_s)
162
172
  end
163
173
 
174
+ # cast unit and add unit to base unit list at the same time.
164
175
  def self.[]=(key, arg)
165
176
  if arg.is_a?(Array) and arg.size == 2
166
177
  a = [key, arg.first]
@@ -172,10 +183,12 @@ class NumericWithUnit
172
183
  @@list << (u.is_a?(self) ? u : self[u]).cast(*a)
173
184
  end
174
185
 
186
+ # return base unit list.
175
187
  def self.list
176
188
  @@list.map(&:symbol)
177
189
  end
178
190
 
191
+ # add unit to base unit list.
179
192
  def self.<<(arg)
180
193
  if arg.is_a?(self)
181
194
  @@list << arg
@@ -184,75 +197,125 @@ class NumericWithUnit
184
197
  end
185
198
  end
186
199
 
200
+ # remove unit from base unit list.
187
201
  def self.delete(unit_symbol)
188
202
  @@list.delete_if{|unit| unit.symbol == unit_symbol}
189
203
  end
190
204
 
205
+ # create new unit and add unit to base unit list at the same time.
191
206
  def self.assign
192
207
  @@list << self.new{|config| yield(config)}
193
208
  end
194
-
209
+
210
+
211
+ # parsing unit_str (ex. "kg", km/hr", "cm2") to (derived) unit.
195
212
  def self.parse(unit_str)
196
- a = parse_1st(unit_str)
197
- parse_2nd([a])
213
+ rec = ->(arg){__send__(__method__, arg)}
214
+
215
+ dervation_str = parse_3rd(parse_2nd(parse_1st(unit_str)))
216
+ derive{|derivation|
217
+ dervation_str.each do |unit_str, order|
218
+ if i = @@list.rindex{|unit| unit.symbol == unit_str}
219
+ derivation[@@list[i]] += order
220
+ elsif m = unit_str.match(/^(?<prefix>#{@@prefix.keys.join('|')})(?<unit>#{list.join('|')})$/) and m[:unit].empty?.!
221
+ u = rec[m[:unit]].cast(unit_str, @@prefix[m[:prefix]])
222
+ derivation[u] += order
223
+ else
224
+ raise NoUnitError, "[#{unit_str}] is not defined!"
225
+ end
226
+ end
227
+ }
198
228
  end
199
-
200
229
 
201
- # 文字列を配列にパース
202
- # ex. 'J/(kg.K)' -> [#<Unit:J>, ['/', #<Unit:kg>, '.', #<Unit:K>]]
203
- # とても手続き的な書き方で禿げる
204
- def self.parse_1st(unit_str)
205
- i = @@list.rindex{|u| u.symbol == unit_str}
206
- return @@list[i] if i
207
-
208
- return unit_str if unit_str =~ /^[\.\/]$/
209
-
210
- # 再帰で呼び出す用
230
+ def self.parse_1st(unit_str) #:nodoc:
231
+ return [unit_str] if @@list.rindex{|u| u.symbol == unit_str}
232
+
211
233
  rec = ->(arg){__send__(__method__, arg)}
212
234
 
213
- a = unit_str.scan(/(?<=\().*(?=\))|[\.\/]|[^\(\)\.\/]+/)
214
- return a.map{|elem| rec[elem]} if a.size > 1
215
-
216
- m = unit_str.match(/-?\d+$/)
217
- return m.to_s if m and m.pre_match.empty?
218
- return [rec[m.pre_match], m.to_s] if m
219
-
220
- m = unit_str.match(/^(?<prefix>#{@@prefix.keys.join('|')})(?<unit>#{list.join('|')})$/)
221
- return rec[m[:unit]].cast(unit_str, @@prefix[m[:prefix]]) if m
222
-
223
- raise NoUnitError, "\"#{unit_str}\" is not assigned"
235
+ a = []
236
+ tmp = ''
237
+ nest = 0
238
+ unit_str.each_char do |char|
239
+ nest -= 1 if char == ')'
240
+
241
+ if nest == 0
242
+ case char
243
+ when '(', ')'
244
+ a << rec[tmp] unless tmp.empty?
245
+ tmp = ''
246
+ when '.', '/'
247
+ a << tmp unless tmp.empty?
248
+ a << char
249
+ tmp = ''
250
+ else
251
+ tmp += char
252
+ end
253
+ else
254
+ tmp += char
255
+ end
256
+
257
+ nest += 1 if char == '('
258
+ raise StandardError, "parse error" if nest < 0
259
+ end
260
+ a << tmp unless tmp.empty?
261
+ a
224
262
  end
225
- private_class_method :parse_1st
226
263
 
227
- # 配列を組立単位に変換
228
- # derivationにそのまま突っ込んだほうがすっきりする気がする
229
- def self.parse_2nd(unit_array)
230
- # 再帰で呼び出す用
264
+
265
+ def self.parse_2nd(unit_array) #:nodoc:
231
266
  rec = ->(arg){__send__(__method__, arg)}
232
-
233
- buff_ary = []
234
- buff_unit = ''
235
- buff_sign = 1
236
-
237
- unit_array.each do |elem|
238
- case elem
239
- when self
240
- buff_ary << elem ** buff_sign
267
+
268
+ a = []
269
+ sign = 1
270
+ order = 1
271
+ tmp = nil
272
+ unit_array.each do |unit_x|
273
+ if tmp and not( unit_x.is_a?(String) and unit_x =~ /^\d+$/ )
274
+ a << {unit: tmp, order: sign*order} if tmp
275
+ sign = 1
276
+ order = 1
277
+ tmp = nil
278
+ end
279
+
280
+ case unit_x
241
281
  when '.'
242
- buff_sign = 1
282
+ sign = 1
243
283
  when '/'
244
- buff_sign = -1
245
- when Array
246
- buff_ary << rec[elem] ** buff_sign
247
- when /^-?\d+$/
248
- buff_ary[-1] **= elem.to_i
284
+ sign = -1
285
+ when /^(-?\d+)$/
286
+ order = $1.to_i
287
+ when /^(.+?)(-?\d+)$/
288
+ order = $2.to_i
289
+ tmp = $1
290
+ else
291
+ tmp = unit_x.is_a?(Array) ? rec[unit_x] : unit_x
249
292
  end
250
293
  end
251
-
252
- buff_ary.reduce(:*)
294
+ a << {unit: tmp, order: sign*order} if tmp
295
+ a
253
296
  end
254
- private_class_method :parse_2nd
255
-
297
+
298
+ def self.parse_3rd(unit_x, derivation=Hash.new(0), order=1) #:nodoc:
299
+ rec = ->(*arg){__send__(__method__, *arg)}
300
+
301
+ if unit_x.is_a?(Hash)
302
+ if unit_x[:unit].is_a?(Array)
303
+ rec[unit_x[:unit], derivation, order * unit_x[:order]]
304
+ else
305
+ derivation[unit_x[:unit]] += (order * unit_x[:order])
306
+ end
307
+ elsif unit_x.is_a?(Array)
308
+ unit_x.each do |x|
309
+ rec[x, derivation, order]
310
+ end
311
+ else
312
+ raise StandardError, "maybe bug"
313
+ end
314
+ derivation
315
+ end
316
+
317
+ private_class_method :parse_1st, :parse_2nd, :parse_3rd
318
+
256
319
  end
257
320
 
258
321
 
@@ -261,12 +324,10 @@ class NumericWithUnit
261
324
 
262
325
  # Instance Methods
263
326
 
264
- # attr_accessor :symbol
265
327
  attr_reader :symbol
266
328
  attr_reader :dimension, :derivation
267
329
 
268
330
  def initialize
269
-
270
331
  # Unit::Configとinitializeの役割が分離できていないので見なおせ
271
332
  config = Config.new(self)
272
333
  yield(config) if block_given?
@@ -280,6 +341,8 @@ class NumericWithUnit
280
341
  @derivation = config.derivation
281
342
  end
282
343
 
344
+ # create new unit with new symbol and factor from self.
345
+ # use for converting [in] = 25.4[mm] .
283
346
  def cast(new_symbol, factor = 1)
284
347
  self.class.new do |conf|
285
348
  conf.symbol = new_symbol
@@ -306,6 +369,7 @@ class NumericWithUnit
306
369
  @dimension.all?{|k,v| v.zero?}
307
370
  end
308
371
 
372
+ # return true if self and other_unit have the same dimension.
309
373
  def dimension_equal?(other_unit)
310
374
  (@dimension.keys | other_unit.dimension.keys).all?{|k|
311
375
  @dimension[k] == other_unit.dimension[k]
@@ -321,16 +385,16 @@ class NumericWithUnit
321
385
  end
322
386
 
323
387
  def *(other_unit)
324
- self.class.new do |conf|
325
- @derivation.each{|k, v| conf.derivation[k] += v}
326
- other_unit.derivation.each{|k, v| conf.derivation[k] += v}
388
+ self.class.derive do |derivation|
389
+ @derivation.each{|k, v| derivation[k] += v}
390
+ other_unit.derivation.each{|k, v| derivation[k] += v}
327
391
  end
328
392
  end
329
393
 
330
394
  def /(other_unit)
331
- self.class.new do |conf|
332
- @derivation.each{|k, v| conf.derivation[k] += v}
333
- other_unit.derivation.each{|k, v| conf.derivation[k] -= v}
395
+ self.class.derive do |derivation|
396
+ @derivation.each{|k, v| derivation[k] += v}
397
+ other_unit.derivation.each{|k, v| derivation[k] -= v}
334
398
  end
335
399
  end
336
400
 
@@ -338,10 +402,10 @@ class NumericWithUnit
338
402
  if num.zero?
339
403
  self.class.new
340
404
  else
341
- self.class.new do |conf|
405
+ self.class.derive do |derivation|
342
406
  # ここto_iでOKか?v*numが整数じゃなければraiseすべき?→すべき→NumericWithUnitでやるべき?
343
407
  # Unitでは整数じゃない次数の単位は許容すべきか否か→していい気がする
344
- @derivation.each{|k, v| conf.derivation[k] = (v*num).to_i}
408
+ @derivation.each{|k, v| derivation[k] = (v*num).to_i}
345
409
  end
346
410
  end
347
411
  end
@@ -107,7 +107,6 @@ class NumericWithUnit
107
107
 
108
108
  # Electriccal Resistance
109
109
  Unit['Ω'] = 'V/A'
110
- Unit['ohm'] = 'Ω'
111
110
 
112
111
  # Electriccal Conductance
113
112
  Unit['S'] = 'A/V'
@@ -131,7 +130,6 @@ class NumericWithUnit
131
130
  conf.from_si{|x| k.from_si(x)-intercept}
132
131
  conf.to_si{|x| k.to_si(x+intercept)}
133
132
  end
134
- Unit['degC'] = '℃'
135
133
 
136
134
  # Luminouse flux
137
135
  Unit['lx'] = 'cd.sr'
@@ -1,6 +1,6 @@
1
1
  # coding: utf-8
2
2
 
3
- require 'numeric_with_unit/base_unit'
3
+ require 'numeric_with_unit/unit_definition/base'
4
4
 
5
5
  Unit['cal'] = "4.184".to_r, 'J'
6
6
 
@@ -4,8 +4,7 @@
4
4
  # 独断と偏見による一般的な単位
5
5
  #
6
6
 
7
- require 'numeric_with_unit/unit'
8
- require 'numeric_with_unit/base_unit'
7
+ require 'numeric_with_unit/unit_definition/base'
9
8
 
10
9
  class NumericWithUnit
11
10
  # Dimensionless
@@ -22,6 +21,9 @@ class NumericWithUnit
22
21
  Unit['ton'] = 1000, 'kg'
23
22
  Unit['oz'] = "28.349523125".to_r, 'g'
24
23
  Unit['lb'] = 16, 'oz'
24
+
25
+ # Electriccal Resistance
26
+ Unit['ohm'] = 'Ω'
25
27
 
26
28
  # Temperature
27
29
  Unit['degC'] = '℃'
@@ -42,6 +44,7 @@ class NumericWithUnit
42
44
  Unit['ft'] = "1/3".to_r, 'yd'
43
45
  Unit['in'] = "1/12".to_r, 'ft'
44
46
  Unit['mi'] = 5280, 'ft'
47
+ Unit['100m'] = 100, 'm' # [kPa/100m]とか
45
48
 
46
49
  # Volume
47
50
  Unit['cc'] = 'cm3'
@@ -1,6 +1,6 @@
1
1
  # coding: utf-8
2
2
 
3
- require 'numeric_with_unit/base_unit'
3
+ require 'numeric_with_unit/unit_definition/base'
4
4
 
5
5
  Unit['yd'] = "0.9144".to_r , 'm'
6
6
  Unit['ft'] = "1/3".to_r, 'yd'
@@ -1,6 +1,6 @@
1
1
  # coding: utf-8
2
2
 
3
- require 'numeric_with_unit/base_unit'
3
+ require 'numeric_with_unit/unit_definition/base'
4
4
 
5
5
  # Naural Units
6
6
  # Speed
@@ -6,9 +6,9 @@
6
6
  require 'numeric_with_unit'
7
7
 
8
8
  class NumericWithUnit
9
- def method_missing(*args)
10
- if args.size == 1
11
- unit_str = args.first.to_s.gsub('_', '/')
9
+ def method_missing(name, *args)
10
+ if args.empty?
11
+ unit_str = name.to_s.gsub('_', '/')
12
12
  unit_chain_util(Unit[unit_str])
13
13
  else
14
14
  raise Unit::NoUnitError
@@ -39,9 +39,9 @@ end
39
39
 
40
40
  class NumericWithUnit
41
41
  module NumUtil
42
- def method_missing(*args)
43
- if args.size == 1
44
- unit_str = args.first.to_s.gsub('_', '/')
42
+ def method_missing(name, *args)
43
+ if args.empty?
44
+ unit_str = name.to_s.gsub('_', '/')
45
45
  self.rationalize.to_nwu(unit_str) # util2は利便性優先なのでratoinalizeしてしまいます
46
46
  else
47
47
  raise Unit::NoUnitError
@@ -12,33 +12,40 @@ class NumericWithUnit
12
12
  @unit = unit.is_a?(Unit) ? unit : Unit[unit]
13
13
  end
14
14
 
15
+ # Return String for inspect
15
16
  def inspect
16
17
  "#{@value.inspect} [#{@unit.symbol}] #{unit.dimension.inspect}"
17
18
  end
18
19
 
20
+ # Return String with value and unit symbol
19
21
  def to_s
20
22
  "#{@value.to_s} #{@unit.symbol}"
21
23
  end
22
24
 
23
- # otherがNumericWithUnitで次元が同じだったらsi単位に変換して比較、そうでなければ比較できない(nil)
25
+ # If ohter is NumericWithUnit and same dimension, comparing value with converting to si.
26
+ # Else return nil.
24
27
  def <=>(other)
25
28
  if other.is_a?(self.class) and @unit.dimension_equal? other.unit
26
29
  @unit.to_si(@value) <=> other.unit.to_si(other.value)
27
30
  end
28
31
  end
29
32
 
33
+ # Return succed value with same unit.
30
34
  def succ
31
35
  self.class.new(@value.succ, @unit)
32
36
  end
33
37
 
38
+ # Return value.to_i
34
39
  def to_i
35
40
  @value.to_i
36
41
  end
37
42
 
43
+ # Return value.to_f
38
44
  def to_f
39
45
  @value.to_f
40
46
  end
41
47
 
48
+ # Return NumericWithUnit with given unit
42
49
  def to_nwu(unit)
43
50
  new_unit = unit.is_a?(Unit) ? unit : Unit[unit]
44
51
 
@@ -181,13 +188,13 @@ end
181
188
  class String
182
189
  def to_nwu(mthd=:to_r)
183
190
  m = self.match /(?<value>.+) (?<unit>.+)/ # 適当
184
- NumericWithUnit[m[:value].__send__(mthd), m[:unit]]
191
+ NumericWithUnit.new(m[:value].__send__(mthd), m[:unit])
185
192
  end
186
193
  end
187
194
 
188
195
 
189
196
 
190
197
  # unit definition
191
- require 'numeric_with_unit/base_unit'
192
- require 'numeric_with_unit/common_unit'
198
+ require 'numeric_with_unit/unit_definition/base'
199
+ require 'numeric_with_unit/unit_definition/common'
193
200
 
metadata CHANGED
@@ -1,28 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: numeric_with_unit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - diaphragm
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-11-18 00:00:00.000000000 Z
11
+ date: 2015-01-31 00:00:00.000000000 Z
12
12
  dependencies: []
13
- description: calclation numeric with unit!!!!
13
+ description: This gem provide NumericWithUnit class to calculate numeric with unit
14
+ of measurement.
14
15
  email:
15
16
  executables: []
16
17
  extensions: []
17
18
  extra_rdoc_files: []
18
19
  files:
19
20
  - lib/numeric_with_unit.rb
20
- - lib/numeric_with_unit/base_unit.rb
21
- - lib/numeric_with_unit/cgs_unit.rb
22
- - lib/numeric_with_unit/common_unit.rb
23
- - lib/numeric_with_unit/imperial_unit.rb
24
- - lib/numeric_with_unit/natural_unit.rb
25
21
  - lib/numeric_with_unit/unit.rb
22
+ - lib/numeric_with_unit/unit_definition/base.rb
23
+ - lib/numeric_with_unit/unit_definition/cgs.rb
24
+ - lib/numeric_with_unit/unit_definition/common.rb
25
+ - lib/numeric_with_unit/unit_definition/imperial.rb
26
+ - lib/numeric_with_unit/unit_definition/natural.rb
26
27
  - lib/numeric_with_unit/util.rb
27
28
  - lib/numeric_with_unit/util2.rb
28
29
  homepage: https://github.com/diaphragm/ruby-numeric-with-unit
@@ -37,7 +38,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
37
38
  requirements:
38
39
  - - ">="
39
40
  - !ruby/object:Gem::Version
40
- version: '0'
41
+ version: 2.0.0
41
42
  required_rubygems_version: !ruby/object:Gem::Requirement
42
43
  requirements:
43
44
  - - ">="
@@ -45,8 +46,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
45
46
  version: '0'
46
47
  requirements: []
47
48
  rubyforge_project:
48
- rubygems_version: 2.2.2
49
+ rubygems_version: 2.4.5
49
50
  signing_key:
50
51
  specification_version: 4
51
- summary: calclation numeric with unit
52
+ summary: Numerical calculation with unit of measurement
52
53
  test_files: []