stick 1.3.1 → 1.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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: