stick 1.3.1 → 1.3.2

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGES CHANGED
@@ -1,6 +1,12 @@
1
1
  = Stick Change History
2
2
 
3
- == 1.3.0 / 2007-12-21
3
+ == 1.3.2 / 2007-12-21
4
+
5
+ * Removed top-level Stick namespace. Stick isn't big enough to warrent it at this point.
6
+ * This means Units and Constants are at the toplevel instead.
7
+ * This can be reconsidered later if Stick grows large enough to necessary.
8
+
9
+ == 1.3.0 / 2007-12-20
4
10
 
5
11
  * Removed times.rb. WE can reconsider this type of functionaility later.
6
12
  * Decided to distribute under the MIT License.
@@ -16,8 +16,7 @@
16
16
 
17
17
  require 'stick/units'
18
18
 
19
- module Stick
20
- module Constants
19
+ module Constants
21
20
 
22
21
  # = Constants in the CGS system (cm, g, s)
23
22
  #
@@ -131,5 +130,6 @@ module Stick
131
130
  JOULE = 1e7.g*cm**2/s**2 # g cm^2 / s^2
132
131
  ERG = 1e0.g*cm**2/s**2 # g cm^2 / s^2
133
132
  end
134
- end
133
+
135
134
  end
135
+
@@ -15,8 +15,7 @@
15
15
  # - Brian Gough
16
16
 
17
17
  #
18
- module Stick
19
- module Constants
18
+ module Constants
20
19
 
21
20
  # = Constants in the MKS system (meters, kg, sec)
22
21
  #
@@ -133,10 +132,10 @@ module Stick
133
132
  JOULE = 1e0.kg*m**2/s**2 # kg m^2 / s^2
134
133
  ERG = 1e-7.kg*m**2/s**2 # kg m^2 / s^2
135
134
  end
136
- end
135
+
137
136
  end
138
137
 
139
138
 
140
139
  module Math
141
- include Stick::Constants::MKS
140
+ include ::Constants::MKS
142
141
  end
@@ -1,5 +1,5 @@
1
- module Stick
2
- module Constants
1
+ module Constants
2
+
3
3
  # = Unit-less constants
4
4
  #
5
5
  # Stick::Contants::Number::FINE_STRUCTURE #=> 7.297352533e-3
@@ -24,10 +24,12 @@ module Stick
24
24
  ZEPTO = 1e-21 # 1
25
25
  YOCTO = 1e-24 # 1
26
26
  end
27
+
27
28
  include Number
28
- end
29
+
29
30
  end
30
31
 
32
+
31
33
  module Math
32
- include Stick::Contants::Number
34
+ include ::Contants::Number
33
35
  end
@@ -15,9 +15,10 @@
15
15
  # - Thomas Sawyer
16
16
 
17
17
  #
18
- module Stick
19
- module Constants
18
+ module Constants
19
+
20
20
  module Typeless
21
+
21
22
  # Unitless Constants in the CGS system (cm, kg, s)
22
23
 
23
24
  module CGS
@@ -120,6 +121,7 @@ module Stick
120
121
  JOULE = 1e7 # g cm^2 / s^2
121
122
  ERG = 1e0 # g cm^2 / s^2
122
123
  end
124
+
123
125
  end
124
- end
126
+
125
127
  end
@@ -15,9 +15,10 @@
15
15
  # - Brian Gough
16
16
 
17
17
  #
18
- module Stick
19
- module Constants
18
+ module Constants
19
+
20
20
  module Typeless
21
+
21
22
  # Unitless constants in the MKS system (meters, kg, sec)
22
23
 
23
24
  module MKS
@@ -121,6 +122,7 @@ module Stick
121
122
  JOULE = 1e0 # kg m^2 / s^2
122
123
  ERG = 1e-7 # kg m^2 / s^2
123
124
  end
125
+
124
126
  end
125
- end
127
+
126
128
  end
@@ -1,10 +1,10 @@
1
1
  require 'stick/units/currency'
2
2
 
3
- module Stick
4
3
  module Units
4
+
5
5
  # Load conversion units.
6
6
  class Converter
7
7
  require("currency-standard")
8
8
  end
9
- end
9
+
10
10
  end
data/lib/stick/units.rb CHANGED
@@ -1,6 +1,5 @@
1
1
  require 'stick/units/units'
2
2
 
3
- module Stick
4
3
  module Units
5
4
 
6
5
  # Load conversion units.
@@ -9,7 +8,6 @@ module Units
9
8
  end
10
9
 
11
10
  end
12
- end
13
11
 
14
12
 
15
13
  # Checkrun
@@ -69,16 +69,15 @@ end
69
69
  # http://en.wikipedia.org/wiki/Conversion_of_units
70
70
  #++
71
71
 
72
- module Stick
73
72
  module Units
74
73
 
75
74
  def method_missing(m, *args, &blk)
76
75
  if args.length == 1
77
- args[0] = (::Stick::Units::Converter.converter(args[0]) rescue nil) if not args[0].is_a? ::Stick::Units::Converter
78
- return ::Stick::Units::Unit.new({m => 1}, args[0]) if args[0] && args[0].registered?(m)
79
- elsif (::Stick::Units::Converter.current.registered?(m) rescue false)
76
+ args[0] = (::Units::Converter.converter(args[0]) rescue nil) if not args[0].is_a? ::Units::Converter
77
+ return ::Units::Unit.new({m => 1}, args[0]) if args[0] && args[0].registered?(m)
78
+ elsif (::Units::Converter.current.registered?(m) rescue false)
80
79
  raise ::ArgumentError, "Wrong number of arguments" if args.length != 0
81
- return ::Stick::Units::Unit.new({m => 1}, ::Stick::Units::Converter.current)
80
+ return ::Units::Unit.new({m => 1}, ::Units::Converter.current)
82
81
  end
83
82
  ::Exception.with_clean_backtrace("method_missing") {
84
83
  super
@@ -86,8 +85,8 @@ module Units
86
85
  end
87
86
 
88
87
  def const_missing(c)
89
- if (::Stick::Units::Converter.current.registered?(c) rescue false)
90
- return ::Stick::Units::Unit.new({c => 1}, ::Stick::Units::Converter.current)
88
+ if (::Units::Converter.current.registered?(c) rescue false)
89
+ return ::Units::Unit.new({c => 1}, ::Units::Converter.current)
91
90
  else
92
91
  ::Exception.with_clean_backtrace("const_missing") {
93
92
  super
@@ -96,7 +95,7 @@ module Units
96
95
  end
97
96
 
98
97
  def self.append_features(m)
99
- m.send(:extend, ::Stick::Units)
98
+ m.send(:extend, ::Units)
100
99
  super
101
100
  end
102
101
 
@@ -117,7 +116,7 @@ module Units
117
116
  #
118
117
  # See also Converter.current.
119
118
  def with_unit_converter(name, &blk) # :yields:
120
- ::Stick::Units::Converter.with_converter(name, &blk)
119
+ ::Units::Converter.with_converter(name, &blk)
121
120
  end
122
121
 
123
122
  module_function :with_unit_converter
@@ -138,7 +137,7 @@ module Units
138
137
 
139
138
  attr_reader :name, :converter
140
139
 
141
- def initialize(name, converter = ::Stick::Units::Converter.current)
140
+ def initialize(name, converter = ::Units::Converter.current)
142
141
  name = name.to_sym
143
142
  raise ::ArgumentError, "unit #{name.to_s.dump} not registered with #{converter}" if not converter.registered? name
144
143
  @name = name
@@ -150,7 +149,7 @@ module Units
150
149
  end
151
150
 
152
151
  def ==(other)
153
- other.is_a?(::Stick::Units::BaseUnit) && other.name == @name && other.converter == @converter
152
+ other.is_a?(::Units::BaseUnit) && other.name == @name && other.converter == @converter
154
153
  end
155
154
 
156
155
  alias eql? ==
@@ -160,7 +159,7 @@ module Units
160
159
  end
161
160
 
162
161
  def to_s
163
- if ::Stick::Units::Converter.current.includes?(converter)
162
+ if ::Units::Converter.current.includes?(converter)
164
163
  @name.to_s
165
164
  else
166
165
  "#{@converter}:#{@name}"
@@ -172,13 +171,13 @@ module Units
172
171
  end
173
172
 
174
173
  # This class represents a Unit. A Unit uses a given Converter with
175
- # a number of registered Stick in which it can be expressed.
176
- # A Unit is the product of the powers of other Stick. In principle, these
174
+ # a number of registered units in which it can be expressed.
175
+ # A Unit is the product of the powers of other units. In principle, these
177
176
  # need not be integer powers, but this may cause problems with rounding.
178
177
  # The following code for example returns +false+:
179
178
  # Unit.new(:m => 0.1) * Unit.new(:m => 0.2) == Unit.new(:m => 0.3)
180
179
  #
181
- # Stick can be multiplied, divided, and raised to a given power.
180
+ # Units can be multiplied, divided, and raised to a given power.
182
181
  # As an extra, 1 can be divided by a Unit.
183
182
  #
184
183
  # Examples:
@@ -203,13 +202,13 @@ module Units
203
202
  #
204
203
  # See also Converter, Converter.converter
205
204
  def initialize(units = {}, converter = nil)
206
- conv = proc { converter ||= ::Stick::Units::Converter.current }
205
+ conv = proc { converter ||= ::Units::Converter.current }
207
206
  if units.is_a? ::String
208
207
  @units = decode_string(units, conv)
209
208
  else
210
209
  @units = {}
211
210
  units.each_pair do |k, v|
212
- k = conv[].base_unit(k.to_sym) if not k.is_a? ::Stick::Units::BaseUnit
211
+ k = conv[].base_unit(k.to_sym) if not k.is_a? ::Units::BaseUnit
213
212
  @units[k] = v
214
213
  end
215
214
  end
@@ -222,7 +221,7 @@ module Units
222
221
  @units.each_pair do |u, e|
223
222
  result[u] = e * p
224
223
  end
225
- ::Stick::Units::Unit.new(result)
224
+ ::Units::Unit.new(result)
226
225
  end
227
226
 
228
227
  # Multiplies with the given Unit.
@@ -241,18 +240,18 @@ module Units
241
240
  end
242
241
 
243
242
  def coerce(other) # :nodoc:
244
- return [::Stick::Units::Unit.new({}), self] if other == 1
245
- ::Stick::Units::Converter.coerce_units(self, other)
243
+ return [::Units::Unit.new({}), self] if other == 1
244
+ ::Units::Converter.coerce_units(self, other)
246
245
  end
247
246
 
248
247
  def simplify
249
- ::Stick::Units::Converter.simplify_unit(self)
248
+ ::Units::Converter.simplify_unit(self)
250
249
  end
251
250
 
252
251
  # Returns +true+ iff the two units are equals, <i>i.e.,</i> iff they have
253
252
  # the same exponent for all units, and they both use the same Converter.
254
253
  def ==(other)
255
- other.is_a?(::Stick::Units::Unit) && other.units == units
254
+ other.is_a?(::Units::Unit) && other.units == units
256
255
  end
257
256
 
258
257
  alias eql? ==
@@ -265,7 +264,7 @@ module Units
265
264
  # Unit. This is less strict than equality because for example hours are
266
265
  # compatible with seconds ("we can add them"), but hours are not seconds.
267
266
  def compatible_with?(other)
268
- conv1, conv2 = ::Stick::Units::Converter.coerce_units(self, other)
267
+ conv1, conv2 = ::Units::Converter.coerce_units(self, other)
269
268
  conv1.units == conv2.units
270
269
  end
271
270
 
@@ -289,11 +288,11 @@ module Units
289
288
 
290
289
  def method_missing(m, *args, &blk)
291
290
  if args.length == 1
292
- args[0] = (::Stick::Units::Converter.converter(args[0]) rescue nil) if not args[0].is_a? ::Stick::Units::Converter
293
- return self * ::Stick::Units::Unit.new({m => 1}, args[0]) if args[0] && args[0].registered?(m)
294
- elsif (::Stick::Units::Converter.current.registered?(m) rescue false)
291
+ args[0] = (::Units::Converter.converter(args[0]) rescue nil) if not args[0].is_a? ::Units::Converter
292
+ return self * ::Units::Unit.new({m => 1}, args[0]) if args[0] && args[0].registered?(m)
293
+ elsif (::Units::Converter.current.registered?(m) rescue false)
295
294
  raise ::ArgumentError, "Wrong number of arguments" if args.length != 0
296
- return self * ::Stick::Units::Unit.new({m => 1}, ::Stick::Units::Converter.current)
295
+ return self * ::Units::Unit.new({m => 1}, ::Units::Converter.current)
297
296
  end
298
297
  ::Exception.with_clean_backtrace("method_missing") {
299
298
  super
@@ -303,7 +302,7 @@ module Units
303
302
  private
304
303
 
305
304
  def decode_string(s, converter)
306
- if ::Stick::Units::Regexps::TOTAL_UNIT_REGEXP =~ s
305
+ if ::Units::Regexps::TOTAL_UNIT_REGEXP =~ s
307
306
  numerator, denominator = $1, $2
308
307
  units = {}
309
308
  decode_multiplicative_string(numerator, 1, converter, units) if numerator
@@ -317,9 +316,9 @@ module Units
317
316
  end
318
317
 
319
318
  def decode_multiplicative_string(s, multiplier, converter, result)
320
- s.scan(::Stick::Units::Regexps::SINGLE_UNIT_REGEXP) do |conv, unit, exp|
319
+ s.scan(::Units::Regexps::SINGLE_UNIT_REGEXP) do |conv, unit, exp|
321
320
  if unit
322
- conv = ::Stick::Units::Converter.converter(conv)
321
+ conv = ::Units::Converter.converter(conv)
323
322
  else
324
323
  conv, unit = converter[], conv
325
324
  end
@@ -337,13 +336,13 @@ module Units
337
336
 
338
337
  def do_op(op, dual_op, other)
339
338
  other = other.to_unit
340
- raise TypeError, "cannot convert to Unit" unless ::Stick::Units::Unit === other
339
+ raise TypeError, "cannot convert to Unit" unless ::Units::Unit === other
341
340
  result = @units.dup
342
341
  other.units.each_pair do |u, e|
343
342
  result[u] = 0 if not result[u]
344
343
  result[u] = result[u].send(dual_op, e)
345
344
  end
346
- ::Stick::Units::Unit.new(result)
345
+ ::Units::Unit.new(result)
347
346
  end
348
347
 
349
348
  end
@@ -414,7 +413,7 @@ module Units
414
413
  %w{ * / }.each do |op|
415
414
  eval %{
416
415
  def #{op}(other)
417
- ::Stick::Units::Value.new(*do_multiplicative_op(:#{op}, other))
416
+ ::Units::Value.new(*do_multiplicative_op(:#{op}, other))
418
417
  end
419
418
  }
420
419
  end
@@ -422,14 +421,14 @@ module Units
422
421
  %w{ + - modulo remainder % }.each do |op|
423
422
  eval %{
424
423
  def #{op}(other)
425
- ::Stick::Units::Value.new(*do_additive_op(:#{op}, other))
424
+ ::Units::Value.new(*do_additive_op(:#{op}, other))
426
425
  end
427
426
  }
428
427
  end
429
428
 
430
429
  def divmod(other)
431
430
  (q, r), unit = *do_additive_op(:divmod, other)
432
- [q, ::Stick::Units::Value.new(r, unit)]
431
+ [q, ::Units::Value.new(r, unit)]
433
432
  end
434
433
 
435
434
  def div(other)
@@ -445,7 +444,7 @@ module Units
445
444
  end
446
445
 
447
446
  def **(other) # :nodoc:
448
- ::Stick::Units::Value.new(@value ** other, @unit ** other)
447
+ ::Units::Value.new(@value ** other, @unit ** other)
449
448
  end
450
449
 
451
450
  def <=>(other) # :nodoc:
@@ -467,7 +466,7 @@ module Units
467
466
  %w{ abs ceil floor next round succ truncate }.each do |op|
468
467
  eval %{
469
468
  def #{op}
470
- ::Stick::Units::Value.new(@value.#{op}, @unit)
469
+ ::Units::Value.new(@value.#{op}, @unit)
471
470
  end
472
471
  }
473
472
  end
@@ -487,16 +486,16 @@ module Units
487
486
  def to(to_unit, converter = nil)
488
487
  raise ArgumentError, "Wrong number of arguments" if converter && !(::String === to_unit)
489
488
  to_unit = to_unit.to_unit(converter)
490
- raise TypeError, "cannot convert to Unit" unless ::Stick::Units::Unit === to_unit
489
+ raise TypeError, "cannot convert to Unit" unless ::Units::Unit === to_unit
491
490
  conv1, conv2 = unit.coerce(to_unit)
492
491
  raise TypeError, "incompatible units for operation" if conv1.units != conv2.units
493
492
  mult = conv1.multiplier / conv2.multiplier
494
- ::Stick::Units::Value.new(value * mult, to_unit)
493
+ ::Units::Value.new(value * mult, to_unit)
495
494
  end
496
495
 
497
496
  def coerce(other) # :nodoc:
498
497
  if ::Numeric === other
499
- [::Stick::Units::Value.new!(other, ::Stick::Units::Unit.new), self]
498
+ [::Units::Value.new!(other, ::Units::Unit.new), self]
500
499
  else
501
500
  super
502
501
  end
@@ -511,7 +510,7 @@ module Units
511
510
  # exception otherwise.
512
511
  def to_f
513
512
  val = simplify
514
- if ::Stick::Units::Value === val
513
+ if ::Units::Value === val
515
514
  raise TypeError, "Cannot convert to float"
516
515
  else
517
516
  val.to_f
@@ -522,7 +521,7 @@ module Units
522
521
  # exception otherwise.
523
522
  def to_i
524
523
  val = simplify
525
- if ::Stick::Units::Value === val
524
+ if ::Units::Value === val
526
525
  raise TypeError, "Cannot convert to integer"
527
526
  else
528
527
  val.to_i
@@ -533,7 +532,7 @@ module Units
533
532
  # exception otherwise.
534
533
  def to_int
535
534
  val = simplify
536
- if ::Stick::Units::Value === val
535
+ if ::Units::Value === val
537
536
  raise TypeError, "Cannot convert to integer"
538
537
  else
539
538
  val.to_int
@@ -547,7 +546,7 @@ module Units
547
546
  if new_unit.unitless?
548
547
  @value * mul
549
548
  else
550
- ::Stick::Units::Value.new(@value * mul, new_unit)
549
+ ::Units::Value.new(@value * mul, new_unit)
551
550
  end
552
551
  end
553
552
 
@@ -560,11 +559,11 @@ module Units
560
559
 
561
560
  def method_missing(m, *args, &blk)
562
561
  if args.length == 1
563
- args[0] = (::Stick::Units::Converter.converter(args[0]) rescue nil) if not args[0].is_a? ::Stick::Units::Converter
564
- return self * ::Stick::Units::Value.new(1, ::Stick::Units::Unit.new({m => 1}, args[0])) if args[0] && args[0].registered?(m)
565
- elsif (::Stick::Units::Converter.current.registered?(m) rescue false)
562
+ args[0] = (::Units::Converter.converter(args[0]) rescue nil) if not args[0].is_a? ::Units::Converter
563
+ return self * ::Units::Value.new(1, ::Units::Unit.new({m => 1}, args[0])) if args[0] && args[0].registered?(m)
564
+ elsif (::Units::Converter.current.registered?(m) rescue false)
566
565
  raise ::ArgumentError, "Wrong number of arguments" if args.length != 0
567
- return self * ::Stick::Units::Value.new(1, ::Stick::Units::Unit.new({m => 1}, ::Stick::Units::Converter.current))
566
+ return self * ::Units::Value.new(1, ::Units::Unit.new({m => 1}, ::Units::Converter.current))
568
567
  end
569
568
  ::Exception.with_clean_backtrace("method_missing") {
570
569
  super
@@ -574,9 +573,9 @@ module Units
574
573
  private
575
574
 
576
575
  def self.decode_string(s, converter)
577
- if m = ::Stick::Units::Regexps::VALUE_REGEXP.match(s)
576
+ if m = ::Units::Regexps::VALUE_REGEXP.match(s)
578
577
  value = m[2].empty? ? Integer(m[1]) : Float(m[1])
579
- unit = ::Stick::Units::Unit.new(m[3], converter)
578
+ unit = ::Units::Unit.new(m[3], converter)
580
579
  [value, unit]
581
580
  else
582
581
  raise ::ArgumentError, "Illegal value string #{s.dump}"
@@ -585,8 +584,8 @@ module Units
585
584
 
586
585
  def do_additive_op(op, other)
587
586
  other = other.to_value
588
- raise TypeError, "cannot convert to Value" unless ::Stick::Units::Value === other
589
- if other.is_a? ::Stick::Units::Value
587
+ raise TypeError, "cannot convert to Value" unless ::Units::Value === other
588
+ if other.is_a? ::Units::Value
590
589
  conv1, conv2 = unit.coerce(other.unit)
591
590
  raise TypeError, "incompatible units for #{op}" if conv1.units != conv2.units
592
591
  mult = conv2.multiplier / conv1.multiplier
@@ -603,18 +602,18 @@ module Units
603
602
 
604
603
  def do_multiplicative_op(op, other)
605
604
  case other
606
- when ::Stick::Units::Value
605
+ when ::Units::Value
607
606
  [value.send(op, other.value), unit.send(op, other.unit)]
608
- when ::Stick::Units::Unit
607
+ when ::Units::Unit
609
608
  [value, unit.send(op, other)]
610
609
  when ::Numeric
611
610
  [value.send(op, other), unit]
612
611
  else
613
- # TODO: How to make this work for Stick as well?
612
+ # TODO: How to make this work for Units as well?
614
613
  # Problem : how check whether to_value failed without
615
614
  # masking all exceptions?
616
615
  other = other.to_value
617
- raise TypeError, "cannot convert to Value" unless ::Stick::Units::Value === other
616
+ raise TypeError, "cannot convert to Value" unless ::Units::Value === other
618
617
  do_multiplicative_op(op, other)
619
618
  end
620
619
  end
@@ -673,7 +672,7 @@ module Units
673
672
  # Included the given converter in the receiver, unless it
674
673
  # was already included.
675
674
  def include(conv)
676
- conv = ::Stick::Units::Converter.converter(conv) if not conv.is_a?(::Stick::Units::Converter)
675
+ conv = ::Units::Converter.converter(conv) if not conv.is_a?(::Units::Converter)
677
676
  raise "Circular include" if conv.includes?(self)
678
677
  @included << conv if not includes? conv
679
678
  self
@@ -682,7 +681,7 @@ module Units
682
681
  # Returns whether the given converter was included in the
683
682
  # receiver.
684
683
  def includes?(conv)
685
- conv = ::Stick::Units::Converter.converter(conv) if not conv.is_a?(::Stick::Units::Converter)
684
+ conv = ::Units::Converter.converter(conv) if not conv.is_a?(::Units::Converter)
686
685
  return true if conv == self
687
686
  @included.each do |c|
688
687
  return true if conv == c || c.includes?(conv)
@@ -714,7 +713,7 @@ module Units
714
713
  # Returns the base unit with this name
715
714
  def base_unit(name)
716
715
  if conv = registered?(name)
717
- return ::Stick::Units::BaseUnit.new(name, conv)
716
+ return ::Units::BaseUnit.new(name, conv)
718
717
  end
719
718
  raise "unit #{name.to_s.dump} not registered with #{self}"
720
719
  end
@@ -728,7 +727,7 @@ module Units
728
727
  def method_missing(m, *args, &blk)
729
728
  if registered?(m)
730
729
  raise ::ArgumentError, "Wrong number of arguments" if args.length != 0
731
- return ::Stick::Units::Unit.new({m => 1}, self)
730
+ return ::Units::Unit.new({m => 1}, self)
732
731
  end
733
732
  ::Exception.with_clean_backtrace("method_missing") {
734
733
  super
@@ -794,12 +793,12 @@ module Units
794
793
  abbrev = info[:abbrev]
795
794
  multiplier = info[:multiplier] || 1
796
795
  power = info[:power] || 1
797
- register_unit(pre + unit, :equals => {:unit => ::Stick::Units::Unit.new({unit_sym => power}, self), :multiplier => multiplier})
796
+ register_unit(pre + unit, :equals => {:unit => ::Units::Unit.new({unit_sym => power}, self), :multiplier => multiplier})
798
797
  aliases.each do |a|
799
- register_unit(pre + a, :equals => {:unit => ::Stick::Units::Unit.new({unit_sym => power}, self), :multiplier => multiplier})
798
+ register_unit(pre + a, :equals => {:unit => ::Units::Unit.new({unit_sym => power}, self), :multiplier => multiplier})
800
799
  end
801
800
  abbrevs.each do |a|
802
- register_unit(abbrev + a, :equals => {:unit => ::Stick::Units::Unit.new({unit_sym => power}, self), :multiplier => multiplier})
801
+ register_unit(abbrev + a, :equals => {:unit => ::Units::Unit.new({unit_sym => power}, self), :multiplier => multiplier})
803
802
  end
804
803
  end
805
804
  end
@@ -820,9 +819,9 @@ module Units
820
819
  :multiplier => data[:multiplier] || data['multiplier']}
821
820
  end
822
821
  if /^\s*1\s*\// =~ data
823
- {:unit => ::Stick::Units::Unit.new(data, self)}
824
- elsif m = /^\s*#{::Stick::Units::Regexps::NUMBER_REGEXP}(?:\s+(\S.*)$|\s*$)/.match(data)
825
- unit = m[3] ? ::Stick::Units::Unit.new(m[3], self) : ::Stick::Units::Unit.new({}, self)
822
+ {:unit => ::Units::Unit.new(data, self)}
823
+ elsif m = /^\s*#{::Units::Regexps::NUMBER_REGEXP}(?:\s+(\S.*)$|\s*$)/.match(data)
824
+ unit = m[3] ? ::Units::Unit.new(m[3], self) : ::Units::Unit.new({}, self)
826
825
  if m[1]
827
826
  multiplier = m[2].empty? ? Integer(m[1]) : Float(m[1])
828
827
  {:unit => unit, :multiplier => multiplier}
@@ -830,7 +829,7 @@ module Units
830
829
  {:unit => unit}
831
830
  end
832
831
  else
833
- {:unit => ::Stick::Units::Unit.new(data, self)}
832
+ {:unit => ::Units::Unit.new(data, self)}
834
833
  end
835
834
  end
836
835
 
@@ -847,20 +846,22 @@ module Units
847
846
 
848
847
  class << self
849
848
 
849
+ THREAD_REFERENCE = 'Units::converter'.to_sym
850
+
850
851
  private :new
851
852
 
852
853
  # Returns the current Converter in the current Thread.
853
854
  # The default converter is the one returned by <code>converter(:default)</code>.
854
- # See also Stick::Units#with_converter and Converter.converter.
855
+ # See also Units#with_converter and Converter.converter.
855
856
  def current
856
- Thread.current[:'Stick::Units::converter'] ||= converter(:default)
857
+ Thread.current[THREAD_REFERENCE] ||= converter(:default)
857
858
  end
858
859
 
859
860
  def with_converter(conv) # :nodoc:
860
- conv = converter(conv) if not conv.is_a? ::Stick::Units::Converter
861
- raise ::ArgumentError, "Converter expected" if not conv.is_a? ::Stick::Units::Converter
861
+ conv = converter(conv) if not conv.is_a? ::Units::Converter
862
+ raise ::ArgumentError, "Converter expected" if not conv.is_a? ::Units::Converter
862
863
  begin
863
- old_conv = Thread.current[:'Stick::Units::converter']
864
+ old_conv = Thread.current[THREAD_REFERENCE]
864
865
  if old_conv
865
866
  new_conv = Converter.send(:new, nil)
866
867
  new_conv.include(old_conv)
@@ -868,10 +869,10 @@ module Units
868
869
  else
869
870
  new_conv = conv
870
871
  end
871
- Thread.current[:'Stick::Units::converter'] = new_conv
872
+ Thread.current[THREAD_REFERENCE] = new_conv
872
873
  yield
873
874
  ensure
874
- Thread.current[:'Stick::Units::converter'] = old_conv
875
+ Thread.current[THREAD_REFERENCE] = old_conv
875
876
  end
876
877
  end
877
878
 
@@ -919,7 +920,7 @@ module Units
919
920
  units.each_pair do |u, e|
920
921
  (u.conversion != :none ? other_units : base_units)[u] = e
921
922
  end
922
- result = Conversion.new(::Stick::Units::Unit.new(base_units, self), multiplier)
923
+ result = Conversion.new(::Units::Unit.new(base_units, self), multiplier)
923
924
  other_units.each_pair do |u, e|
924
925
  result *= (u.conversion ** e)
925
926
  end
@@ -944,17 +945,16 @@ module Units
944
945
  end
945
946
 
946
947
  end
947
- end
948
948
 
949
949
  class Numeric
950
950
  #
951
951
  def method_missing(m, *args, &blk)
952
952
  if args.length == 1
953
- args[0] = (::Stick::Units::Converter.converter(args[0]) rescue nil) if not args[0].is_a? ::Stick::Units::Converter
954
- return ::Stick::Units::Value.new(self, ::Stick::Units::Unit.new({m => 1}, args[0])) if args[0] && args[0].registered?(m)
955
- elsif ::Stick::Units::Converter.current.registered?(m)
953
+ args[0] = (::Units::Converter.converter(args[0]) rescue nil) if not args[0].is_a? ::Units::Converter
954
+ return ::Units::Value.new(self, ::Units::Unit.new({m => 1}, args[0])) if args[0] && args[0].registered?(m)
955
+ elsif ::Units::Converter.current.registered?(m)
956
956
  raise ::ArgumentError, "Wrong number of arguments" if args.length != 0
957
- return ::Stick::Units::Value.new(self, ::Stick::Units::Unit.new({m => 1}, ::Stick::Units::Converter.current))
957
+ return ::Units::Value.new(self, ::Units::Unit.new({m => 1}, ::Units::Converter.current))
958
958
  end
959
959
  ::Exception.with_clean_backtrace("method_missing") {
960
960
  super
@@ -963,7 +963,7 @@ class Numeric
963
963
 
964
964
  #
965
965
  def to_value(unit)
966
- ::Stick::Units::Value.new(self, unit)
966
+ ::Units::Value.new(self, unit)
967
967
  end
968
968
  end
969
969
 
@@ -971,11 +971,11 @@ end
971
971
  class String
972
972
  #
973
973
  def to_unit(converter = nil)
974
- ::Stick::Units::Unit.new(self, converter)
974
+ ::Units::Unit.new(self, converter)
975
975
  end
976
976
 
977
977
  #
978
978
  def to_value(converter = nil)
979
- ::Stick::Units::Value.new(self, converter)
979
+ ::Units::Value.new(self, converter)
980
980
  end
981
981
  end
@@ -1,23 +1,23 @@
1
1
  require 'stick/units/base'
2
2
  require 'soap/wsdlDriver'
3
3
 
4
- module Stick
5
4
  module Units
6
5
 
7
6
  class CurrencyLoader < Loader
7
+ THREAD_REFERENCE = 'Units::ce_service'.to_sym
8
8
 
9
9
  handles 'ce_service', 'currency_unit'
10
10
 
11
11
  def ce_service(converter, name, &blk)
12
- old_service = Thread.current[:'Stick::ce_service']
13
- Thread.current[:'Stick::Units::ce_service'] = ::Stick::Units::Converter::ExchangeRate.const_get(name)
12
+ old_service = Thread.current[THREAD_REFERENCE]
13
+ Thread.current[THREAD_REFERENCE] = ::Units::Converter::ExchangeRate.const_get(name)
14
14
  yield
15
15
  ensure
16
- Thread.current[:'Stick::Units::ce_service'] = old_service
16
+ Thread.current[THREAD_REFERENCE] = old_service
17
17
  end
18
18
 
19
19
  def currency_unit(converter, name)
20
- service = Thread.current[:'Stick::Units::ce_service'] || ::Stick::Units::Config::DEFAULT_CURRENCY_SERVICE
20
+ service = Thread.current[THREAD_REFERENCE] || ::Units::Config::DEFAULT_CURRENCY_SERVICE
21
21
  converter.send(:register_unit, name, :equals => service.create_conversion(name, converter))
22
22
  end
23
23
 
@@ -36,11 +36,11 @@ module Units
36
36
  # The only subclasses provided are currently XMethods and CachedXMethods.
37
37
  #
38
38
  # To be found automatically from YAML files, exchange services should
39
- # be located under Stick::Units::Converter::ExchangeRate.
39
+ # be located under Units::Converter::ExchangeRate.
40
40
  class ExchangeRate
41
41
 
42
42
  def self.create_conversion(curr, converter) # :nodoc:
43
- {:unit => ::Stick::Units::Unit.new({:'--base-currency--' => 1}, converter), :multiplier => self.new(curr)}
43
+ {:unit => ::Units::Unit.new({'--base-currency--'.to_sym => 1}, converter), :multiplier => self.new(curr)}
44
44
  end
45
45
 
46
46
  def initialize(curr) # :nodoc:
@@ -104,7 +104,7 @@ module Units
104
104
  private
105
105
 
106
106
  def data
107
- @@data ||= eval(File.read(File.join(::Stick::Units::Config::CONFIGDIR, 'xmethods', 'mapping.rb')))
107
+ @@data ||= eval(File.read(File.join(::Units::Config::CONFIGDIR, 'xmethods', 'mapping.rb')))
108
108
  end
109
109
 
110
110
  def country_mapping
@@ -133,7 +133,7 @@ module Units
133
133
  private
134
134
 
135
135
  def data
136
- @@data ||= eval(File.read(File.join(::Stick::Units::Config::CONFIGDIR, 'xmethods', 'cached.rb')))
136
+ @@data ||= eval(File.read(File.join(::Units::Config::CONFIGDIR, 'xmethods', 'cached.rb')))
137
137
  end
138
138
 
139
139
  end #class CachedXMethods
@@ -145,7 +145,7 @@ module Units
145
145
  # Trans: What is --base-currency-- all about?
146
146
  #++
147
147
  def conversions(unit)
148
- @conversions[unit] || (unit == :'--base-currency--' ? :none : nil)
148
+ @conversions[unit] || (unit == '--base-currency--'.to_sym ? :none : nil)
149
149
  end
150
150
 
151
151
  end
@@ -153,8 +153,8 @@ module Units
153
153
  # Contains some configuration related constants
154
154
  module Config
155
155
  # The standard service used for looking up currency exchange rates
156
- DEFAULT_CURRENCY_SERVICE = ::Stick::Units::Converter::ExchangeRate::XMethods
156
+ DEFAULT_CURRENCY_SERVICE = ::Units::Converter::ExchangeRate::XMethods
157
157
  end
158
158
 
159
159
  end
160
- end
160
+
@@ -1,4 +1,3 @@
1
- module Stick
2
1
  module Units
3
2
 
4
3
  class Loader
@@ -74,7 +73,7 @@ module Units
74
73
  end
75
74
 
76
75
  def load_config(file, context)
77
- data = File.read(File.join(::Stick::Units::Config::CONFIGDIR, file)) rescue File.read(file)
76
+ data = File.read(File.join(::Units::Config::CONFIGDIR, file)) rescue File.read(file)
78
77
  context.instance_eval { eval data, nil, file }
79
78
  end
80
79
 
@@ -97,4 +96,4 @@ module Units
97
96
  end
98
97
 
99
98
  end
100
- end
99
+
@@ -1,6 +1,5 @@
1
1
  require 'stick/units/base'
2
2
 
3
- module Stick
4
3
  module Units
5
4
 
6
5
  class SILoader < Loader
@@ -108,4 +107,3 @@ module Units
108
107
  end
109
108
 
110
109
  end
111
- end
data/meta/stick.roll CHANGED
@@ -1,2 +1,2 @@
1
- stick 1.3.1 stable 2007-12-21
1
+ stick 1.3.2 stable 2007-12-21
2
2
  lib/stick
@@ -5,7 +5,7 @@ require 'stick/currency'
5
5
 
6
6
  class TestUnits < Test::Unit::TestCase
7
7
 
8
- include ::Stick::Units
8
+ include ::Units
9
9
 
10
10
  def test_typerror
11
11
  assert_raises(TypeError) do
data/test/test_units.rb CHANGED
@@ -9,7 +9,7 @@ class TestUnits < Test::Unit::TestCase
9
9
  assert( v2 * (1 - d) <= v1 && v1 <= v2 * (1 + d), "<#{v1}> expected but was\n<#{v2}>" )
10
10
  end
11
11
 
12
- include ::Stick::Units
12
+ include ::Units
13
13
 
14
14
  def test_bit_and_bytes
15
15
  assert_equal( 65.bit/s, 1.bit/s + 8.bytes/s )
metadata CHANGED
@@ -3,7 +3,7 @@ rubygems_version: 0.9.4.6
3
3
  specification_version: 2
4
4
  name: stick
5
5
  version: !ruby/object:Gem::Version
6
- version: 1.3.1
6
+ version: 1.3.2
7
7
  date: 2007-12-21 00:00:00 -05:00
8
8
  summary: Stick is an comprehensive science library including a units system providing bot
9
9
  require_paths: