unitwise 0.6.0 → 0.6.1
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.
- checksums.yaml +4 -4
- data/.travis.yml +5 -0
- data/README.md +4 -3
- data/Rakefile +1 -1
- data/lib/unitwise/atom.rb +5 -12
- data/lib/unitwise/base.rb +1 -1
- data/lib/unitwise/expression/composer.rb +1 -1
- data/lib/unitwise/expression/decomposer.rb +1 -1
- data/lib/unitwise/expression/matcher.rb +1 -1
- data/lib/unitwise/expression/transformer.rb +11 -11
- data/lib/unitwise/ext/numeric.rb +1 -1
- data/lib/unitwise/functional.rb +3 -4
- data/lib/unitwise/measurement.rb +2 -2
- data/lib/unitwise/scale.rb +6 -2
- data/lib/unitwise/standard/base_unit.rb +1 -1
- data/lib/unitwise/standard/derived_unit.rb +3 -3
- data/lib/unitwise/standard/function.rb +1 -1
- data/lib/unitwise/standard/prefix.rb +1 -1
- data/lib/unitwise/standard/scale.rb +1 -1
- data/lib/unitwise/term.rb +6 -6
- data/lib/unitwise/unit.rb +10 -10
- data/lib/unitwise/version.rb +1 -1
- data/test/support/scale_tests.rb +8 -7
- data/test/test_helper.rb +4 -2
- data/test/unitwise/expression/parser_test.rb +4 -4
- data/test/unitwise/ext/numeric_test.rb +2 -2
- data/test/unitwise/functional_test.rb +3 -2
- data/test/unitwise/measurement_test.rb +6 -6
- data/test/unitwise/prefix_test.rb +1 -1
- data/test/unitwise/term_test.rb +2 -2
- data/test/unitwise/unit_test.rb +7 -5
- data/unitwise.gemspec +11 -5
- metadata +29 -29
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3f269726294777e995dada36f1169f639de28b5f
|
4
|
+
data.tar.gz: e9bc9e48ee65a4d08539d5ee85c7cb2d14d65573
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e5f8cd371aac1c89b4eeab25f3f5d92fa45029244073deb0515dd9ef4c5347d8b91a96838b71319ec040147fed46a0f4b91656296839c408230f9f823bf14860
|
7
|
+
data.tar.gz: 17cdcce509f3db09c4cb607f8d51c64d0ea5a6ae51653f0a8c56de61756f75d280f677ac6a06c3086058a6f83d8c121a570ef234c6d23be3788038b67a74496e
|
data/.travis.yml
CHANGED
@@ -2,6 +2,9 @@ language: ruby
|
|
2
2
|
cache: bundler
|
3
3
|
bundler_args: --without yard pry
|
4
4
|
rvm:
|
5
|
+
- ree
|
6
|
+
- 1.8.7
|
7
|
+
- 1.9.2
|
5
8
|
- 1.9.3
|
6
9
|
- 2.0.0
|
7
10
|
- 2.1.0
|
@@ -9,6 +12,8 @@ rvm:
|
|
9
12
|
- rbx-2
|
10
13
|
matrix:
|
11
14
|
include:
|
15
|
+
- rvm: jruby-18mode
|
16
|
+
env: JRUBY_OPTS="$JRUBY_OPTS --debug"
|
12
17
|
- rvm: jruby-19mode
|
13
18
|
env: JRUBY_OPTS="$JRUBY_OPTS --debug"
|
14
19
|
- rvm: jruby-head
|
data/README.md
CHANGED
@@ -90,8 +90,7 @@ compatible unit.
|
|
90
90
|
```
|
91
91
|
|
92
92
|
The prettier version of `convert_to(unit)` is appending the unit code, name, etc.
|
93
|
-
to a `to_` message.
|
94
|
-
name.
|
93
|
+
to a `to_` message name.
|
95
94
|
|
96
95
|
```ruby
|
97
96
|
Unitwise(26.2, 'mile').to_kilometer
|
@@ -198,7 +197,6 @@ Regexp.
|
|
198
197
|
```ruby
|
199
198
|
Unitwise.search('fathom')
|
200
199
|
# => [ ... ]
|
201
|
-
|
202
200
|
```
|
203
201
|
|
204
202
|
You can also get the official list from the UCUM website in XML format at
|
@@ -211,11 +209,14 @@ or a YAML version within this repo
|
|
211
209
|
This library aims to support and is tested against the following Ruby
|
212
210
|
implementations:
|
213
211
|
|
212
|
+
* Ruby 1.8.7
|
213
|
+
* Ruby 1.9.2
|
214
214
|
* Ruby 1.9.3
|
215
215
|
* Ruby 2.0.0
|
216
216
|
* Ruby 2.1.0
|
217
217
|
* [JRuby](http://jruby.org/)
|
218
218
|
* [Rubinius](http://rubini.us/)
|
219
|
+
* [Ruby Enterprise Edition](http://www.rubyenterpriseedition.com/)
|
219
220
|
|
220
221
|
If something doesn't work on one of these versions, it's a bug.
|
221
222
|
|
data/Rakefile
CHANGED
data/lib/unitwise/atom.rb
CHANGED
@@ -102,26 +102,19 @@ module Unitwise
|
|
102
102
|
# or operate on. Base units have a scalar of 1.
|
103
103
|
# @return [Numeric]
|
104
104
|
# @api public
|
105
|
-
def scalar(
|
106
|
-
base? ?
|
105
|
+
def scalar(magnitude = 1)
|
106
|
+
base? ? magnitude : scale.scalar(magnitude)
|
107
107
|
end
|
108
108
|
|
109
|
-
def
|
110
|
-
|
109
|
+
def magnitude(scalar = scalar)
|
110
|
+
special? ? scale.magnitude(scalar) : 1
|
111
111
|
end
|
112
112
|
|
113
|
-
# Get a functional value that can be used with other atoms to compare with
|
114
|
-
# or operate on.
|
115
|
-
# @param x [Numeric] The number to convert to or convert from
|
116
|
-
# @param forward [true, false] Convert to or convert from
|
117
|
-
# @return [Numeric] The converted value
|
118
|
-
|
119
|
-
|
120
113
|
# An atom may have a complex scale with several base atoms at various
|
121
114
|
# depths. This method returns all of this atoms base level terms.
|
122
115
|
# @return [Array] An array containing base Unitwise::Term
|
123
116
|
def root_terms
|
124
|
-
base? ? [Term.new(atom_code
|
117
|
+
base? ? [Term.new(:atom_code => primary_code)] : scale.root_terms
|
125
118
|
end
|
126
119
|
end
|
127
120
|
end
|
data/lib/unitwise/base.rb
CHANGED
@@ -2,29 +2,29 @@ module Unitwise
|
|
2
2
|
module Expression
|
3
3
|
class Transformer < Parslet::Transform
|
4
4
|
|
5
|
-
rule(integer
|
6
|
-
rule(fixnum
|
5
|
+
rule(:integer => simple(:i)) { i.to_i }
|
6
|
+
rule(:fixnum => simple(:f)) { f.to_f }
|
7
7
|
|
8
|
-
rule(prefix_code
|
9
|
-
rule(atom_code
|
10
|
-
rule(term
|
8
|
+
rule(:prefix_code => simple(:c)) { |ctx| Prefix.find(ctx[:c], ctx[:key]) }
|
9
|
+
rule(:atom_code => simple(:c)) { |ctx| Atom.find(ctx[:c], ctx[:key]) }
|
10
|
+
rule(:term => subtree(:h)) { Term.new(h) }
|
11
11
|
|
12
|
-
rule(operator
|
12
|
+
rule(:operator => simple(:o), :right => simple(:r)) do
|
13
13
|
o == '/' ? r ** -1 : r
|
14
14
|
end
|
15
15
|
|
16
|
-
rule(left
|
16
|
+
rule(:left => simple(:l), :operator => simple(:o), :right => simple(:r)) do
|
17
17
|
o == '/' ? l / r : l * r
|
18
18
|
end
|
19
19
|
|
20
|
-
rule(left
|
20
|
+
rule(:left => simple(:l)) { l }
|
21
21
|
|
22
|
-
rule(group
|
22
|
+
rule(:group => { :factor => simple(:f) , :nested => simple(:n), :exponent => simple(:e) }) do
|
23
23
|
( n ** e ) * f
|
24
24
|
end
|
25
|
-
rule(group
|
25
|
+
rule(:group => { :nested => simple(:n) , :exponent => simple(:e)}) { n ** e }
|
26
26
|
|
27
|
-
rule(group
|
27
|
+
rule(:group => { :nested => simple(:n) }) { n }
|
28
28
|
end
|
29
29
|
end
|
30
30
|
end
|
data/lib/unitwise/ext/numeric.rb
CHANGED
@@ -16,7 +16,7 @@ class Numeric
|
|
16
16
|
# @api semipublic
|
17
17
|
def method_missing(meth, *args, &block)
|
18
18
|
if args.empty? && !block_given?
|
19
|
-
unit = (match = /\Ato_(\w+)\Z/.match(meth)) ? match[1] : meth
|
19
|
+
unit = (match = /\Ato_(\w+)\Z/.match(meth.to_s)) ? match[1] : meth
|
20
20
|
begin
|
21
21
|
convert_to(unit)
|
22
22
|
rescue Unitwise::ExpressionError
|
data/lib/unitwise/functional.rb
CHANGED
@@ -49,13 +49,13 @@ module Unitwise
|
|
49
49
|
def self.to_ph(x)
|
50
50
|
to_hpX(x)
|
51
51
|
end
|
52
|
-
|
52
|
+
|
53
53
|
def self.from_ph(x)
|
54
54
|
from_hpX(x)
|
55
55
|
end
|
56
56
|
|
57
57
|
def self.to_ld(x)
|
58
|
-
|
58
|
+
Math.log(x) / Math.log(2)
|
59
59
|
end
|
60
60
|
|
61
61
|
def self.from_ld(x)
|
@@ -110,9 +110,8 @@ module Unitwise
|
|
110
110
|
# @param scalar [Numeric] A linear scalar value
|
111
111
|
# @return [Numeric] The equivalent magnitude on this scale
|
112
112
|
# @api public
|
113
|
-
def
|
113
|
+
def magnitude(scalar = scalar)
|
114
114
|
self.class.send(:"to_#{function_name}", scalar)
|
115
115
|
end
|
116
|
-
|
117
116
|
end
|
118
117
|
end
|
data/lib/unitwise/measurement.rb
CHANGED
@@ -130,7 +130,7 @@ module Unitwise
|
|
130
130
|
# measurement.to_foot # => <Unitwise::Measurement 4 foot>
|
131
131
|
# @api semipublic
|
132
132
|
def method_missing(meth, *args, &block)
|
133
|
-
if args.empty? && !block_given? && (match = /\Ato_(\w+)\Z/.match(meth))
|
133
|
+
if args.empty? && !block_given? && (match = /\Ato_(\w+)\Z/.match(meth.to_s))
|
134
134
|
begin
|
135
135
|
convert_to(match[1])
|
136
136
|
rescue ExpressionError
|
@@ -153,7 +153,7 @@ module Unitwise
|
|
153
153
|
# @api private
|
154
154
|
def converted_value(other_unit)
|
155
155
|
if other_unit.special?
|
156
|
-
other_unit.
|
156
|
+
other_unit.magnitude scalar
|
157
157
|
else
|
158
158
|
scalar / other_unit.scalar
|
159
159
|
end
|
data/lib/unitwise/scale.rb
CHANGED
@@ -64,8 +64,12 @@ module Unitwise
|
|
64
64
|
# @param scalar [Numeric] A linear scalar value
|
65
65
|
# @return [Numeric] The equivalent magnitude on this scale
|
66
66
|
# @api public
|
67
|
-
def
|
68
|
-
|
67
|
+
def magnitude(scalar = scalar)
|
68
|
+
if special?
|
69
|
+
unit.magnitude(scalar)
|
70
|
+
else
|
71
|
+
value * unit.magnitude
|
72
|
+
end
|
69
73
|
end
|
70
74
|
|
71
75
|
# The base terms this scale's unit is derived from
|
@@ -40,9 +40,9 @@ module Unitwise::Standard
|
|
40
40
|
def to_hash
|
41
41
|
hash = super()
|
42
42
|
hash[:scale] = (special? ? function.to_hash : scale.to_hash)
|
43
|
-
hash.merge({classification
|
44
|
-
property
|
45
|
-
special
|
43
|
+
hash.merge({:classification => classification,
|
44
|
+
:property => property, :metric => metric?,
|
45
|
+
:special => special?, :arbitrary => arbitrary?})
|
46
46
|
end
|
47
47
|
|
48
48
|
end
|
data/lib/unitwise/term.rb
CHANGED
@@ -74,8 +74,8 @@ module Unitwise
|
|
74
74
|
# @param scalar [Numeric] The scalar for which you want the magnitude
|
75
75
|
# @return [Numeric] The magnitude on this scale.
|
76
76
|
# @api public
|
77
|
-
def
|
78
|
-
calculate(atom ? atom.
|
77
|
+
def magnitude(scalar = scalar)
|
78
|
+
calculate(atom ? atom.magnitude(scalar) : 1)
|
79
79
|
end
|
80
80
|
|
81
81
|
# The base units this term is derived from
|
@@ -86,7 +86,7 @@ module Unitwise
|
|
86
86
|
[self]
|
87
87
|
else
|
88
88
|
atom.scale.root_terms.map do |t|
|
89
|
-
self.class.new(atom
|
89
|
+
self.class.new(:atom => t.atom, :exponent => t.exponent * exponent)
|
90
90
|
end
|
91
91
|
end
|
92
92
|
end
|
@@ -100,7 +100,7 @@ module Unitwise
|
|
100
100
|
elsif other.respond_to?(:atom)
|
101
101
|
Unit.new([self, other])
|
102
102
|
elsif other.is_a?(Numeric)
|
103
|
-
self.class.new(to_hash.merge(factor
|
103
|
+
self.class.new(to_hash.merge(:factor => factor * other))
|
104
104
|
end
|
105
105
|
end
|
106
106
|
|
@@ -113,7 +113,7 @@ module Unitwise
|
|
113
113
|
elsif other.respond_to?(:atom)
|
114
114
|
Unit.new([self, other ** -1])
|
115
115
|
elsif other.is_a?(Numeric)
|
116
|
-
self.class.new(to_hash.merge(factor
|
116
|
+
self.class.new(to_hash.merge(:factor => factor / other))
|
117
117
|
end
|
118
118
|
end
|
119
119
|
|
@@ -122,7 +122,7 @@ module Unitwise
|
|
122
122
|
# @return [Term]
|
123
123
|
def **(other)
|
124
124
|
if other.is_a?(Numeric)
|
125
|
-
self.class.new(to_hash.merge(exponent
|
125
|
+
self.class.new(to_hash.merge(:exponent => exponent * other))
|
126
126
|
else
|
127
127
|
fail TypeError, "Can't raise #{self} to #{other}."
|
128
128
|
end
|
data/lib/unitwise/unit.rb
CHANGED
@@ -10,12 +10,13 @@ module Unitwise
|
|
10
10
|
# @param input [String, Unit, [Term]] A string expression, a unit, or a
|
11
11
|
# collection of tems.
|
12
12
|
def initialize(input)
|
13
|
-
|
13
|
+
case input
|
14
|
+
when Compatible
|
14
15
|
@expression = input.expression
|
15
|
-
|
16
|
-
@terms = input
|
17
|
-
else
|
16
|
+
when String, Symbol
|
18
17
|
@expression = input.to_s
|
18
|
+
else
|
19
|
+
@terms = input
|
19
20
|
end
|
20
21
|
end
|
21
22
|
|
@@ -35,24 +36,23 @@ module Unitwise
|
|
35
36
|
terms.count == 1 && terms.all?(&:special?)
|
36
37
|
end
|
37
38
|
|
38
|
-
|
39
39
|
def depth
|
40
40
|
terms.map(&:depth).max + 1
|
41
41
|
end
|
42
42
|
|
43
43
|
def root_terms
|
44
|
-
terms.
|
44
|
+
terms.map(&:root_terms).flatten
|
45
45
|
end
|
46
46
|
|
47
|
-
def scalar(
|
47
|
+
def scalar(magnitude = 1)
|
48
48
|
terms.reduce(1) do |prod, term|
|
49
|
-
prod * term.scalar(
|
49
|
+
prod * term.scalar(magnitude)
|
50
50
|
end
|
51
51
|
end
|
52
52
|
|
53
|
-
def
|
53
|
+
def magnitude(scalar = scalar)
|
54
54
|
terms.reduce(1) do |prod, term|
|
55
|
-
prod * term.
|
55
|
+
prod * term.magnitude(scalar)
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
data/lib/unitwise/version.rb
CHANGED
data/test/support/scale_tests.rb
CHANGED
@@ -3,7 +3,7 @@ module ScaleTests
|
|
3
3
|
def self.included(base)
|
4
4
|
base.class_eval do
|
5
5
|
subject { described_class.new(4, "J") }
|
6
|
-
|
6
|
+
|
7
7
|
let(:mph) { Unitwise::Measurement.new(60, '[mi_i]/h') }
|
8
8
|
let(:kmh) { Unitwise::Measurement.new(100, 'km/h') }
|
9
9
|
let(:mile) { Unitwise::Measurement.new(3, '[mi_i]') }
|
@@ -32,21 +32,21 @@ module ScaleTests
|
|
32
32
|
it "must be a collection of terms" do
|
33
33
|
subject.must_respond_to(:root_terms)
|
34
34
|
subject.root_terms.must_be_kind_of Enumerable
|
35
|
-
subject.root_terms.
|
35
|
+
subject.root_terms.first.must_be_instance_of(Unitwise::Term)
|
36
36
|
end
|
37
37
|
end
|
38
38
|
|
39
39
|
describe "#terms" do
|
40
40
|
it "must return an array of terms" do
|
41
41
|
subject.terms.must_be_kind_of(Enumerable)
|
42
|
-
subject.terms.
|
42
|
+
subject.terms.first.must_be_kind_of(Unitwise::Term)
|
43
43
|
end
|
44
44
|
end
|
45
|
-
|
45
|
+
|
46
46
|
describe "#atoms" do
|
47
47
|
it "must return an array of atoms" do
|
48
48
|
subject.atoms.must_be_kind_of(Enumerable)
|
49
|
-
subject.atoms.
|
49
|
+
subject.atoms.first.must_be_kind_of(Unitwise::Atom)
|
50
50
|
end
|
51
51
|
end
|
52
52
|
|
@@ -58,9 +58,10 @@ module ScaleTests
|
|
58
58
|
end
|
59
59
|
end
|
60
60
|
|
61
|
-
describe "#
|
61
|
+
describe "#magnitude" do
|
62
62
|
it "must return the magnitude" do
|
63
|
-
|
63
|
+
mph.magnitude.must_equal(60)
|
64
|
+
cel.magnitude.must_equal(22)
|
64
65
|
end
|
65
66
|
end
|
66
67
|
|
data/test/test_helper.rb
CHANGED
@@ -28,19 +28,19 @@ describe Unitwise::Expression::Parser do
|
|
28
28
|
|
29
29
|
describe "#factor" do
|
30
30
|
it "must match positives and fixnums" do
|
31
|
-
subject.factor.parse('3.2')[:factor].must_equal(fixnum
|
31
|
+
subject.factor.parse('3.2')[:factor].must_equal(:fixnum => '3.2')
|
32
32
|
end
|
33
33
|
it "must match negatives and integers" do
|
34
|
-
subject.factor.parse('-5')[:factor].must_equal(integer
|
34
|
+
subject.factor.parse('-5')[:factor].must_equal(:integer => '-5')
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
38
38
|
describe "#exponent" do
|
39
39
|
it "must match positives integers" do
|
40
|
-
subject.exponent.parse('4')[:exponent].must_equal(integer
|
40
|
+
subject.exponent.parse('4')[:exponent].must_equal(:integer => '4')
|
41
41
|
end
|
42
42
|
it "must match negative integers" do
|
43
|
-
subject.exponent.parse('-5')[:exponent].must_equal(integer
|
43
|
+
subject.exponent.parse('-5')[:exponent].must_equal(:integer => '-5')
|
44
44
|
end
|
45
45
|
end
|
46
46
|
|
@@ -38,11 +38,11 @@ describe Numeric do
|
|
38
38
|
end
|
39
39
|
|
40
40
|
it "must not match 'foo'" do
|
41
|
-
|
41
|
+
lambda { 1.foo }.must_raise NoMethodError
|
42
42
|
end
|
43
43
|
|
44
44
|
it "must not match 'to_foo'" do
|
45
|
-
|
45
|
+
lambda { 1.to_foo }.must_raise NoMethodError
|
46
46
|
end
|
47
47
|
|
48
48
|
end
|
@@ -5,10 +5,11 @@ describe Unitwise::Functional do
|
|
5
5
|
%w{cel degf hpX hpC tan100 ph ld ln lg 2lg}.each do |function|
|
6
6
|
describe function do
|
7
7
|
it 'should convert back and forth' do
|
8
|
-
number = rand
|
8
|
+
number = rand(1000) / 1000.0
|
9
9
|
there = subject.send "to_#{function}", number
|
10
10
|
back_again = subject.send "from_#{function}", there
|
11
|
-
back_again.round
|
11
|
+
rounded_result = (back_again * 1000).round / 1000.0
|
12
|
+
rounded_result.must_equal number
|
12
13
|
end
|
13
14
|
end
|
14
15
|
end
|
@@ -7,7 +7,7 @@ describe Unitwise::Measurement do
|
|
7
7
|
|
8
8
|
describe "#new" do
|
9
9
|
it "should raise an error for unknown units" do
|
10
|
-
|
10
|
+
lambda { Unitwise::Measurement.new(1,"funkitron") }.must_raise(Unitwise::ExpressionError)
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
@@ -16,7 +16,7 @@ describe Unitwise::Measurement do
|
|
16
16
|
mph.convert_to('km/h').value.must_equal 96.56063999999999
|
17
17
|
end
|
18
18
|
it "must raise an error if the units aren't similar" do
|
19
|
-
|
19
|
+
lambda { mph.convert_to('N') }.must_raise Unitwise::ConversionError
|
20
20
|
end
|
21
21
|
it "must convert special units to their base units" do
|
22
22
|
cel.convert_to('K').value.must_equal 295.15
|
@@ -110,7 +110,7 @@ describe Unitwise::Measurement do
|
|
110
110
|
exp.unit.to_s.must_equal "1/[mi_i]3"
|
111
111
|
end
|
112
112
|
it "must not raise to a weird power" do
|
113
|
-
|
113
|
+
lambda { mile ** 'weird' }.must_raise TypeError
|
114
114
|
end
|
115
115
|
end
|
116
116
|
|
@@ -120,7 +120,7 @@ describe Unitwise::Measurement do
|
|
120
120
|
meter.coerce(5).must_equal [ Unitwise::Measurement.new(5, '1'), meter ]
|
121
121
|
end
|
122
122
|
it "should raise an error for other crap" do
|
123
|
-
|
123
|
+
lambda { meter.coerce("foo") }.must_raise TypeError
|
124
124
|
end
|
125
125
|
end
|
126
126
|
|
@@ -139,11 +139,11 @@ describe Unitwise::Measurement do
|
|
139
139
|
end
|
140
140
|
|
141
141
|
it "must not convert 'foo'" do
|
142
|
-
|
142
|
+
lambda { meter.foo }.must_raise NoMethodError
|
143
143
|
end
|
144
144
|
|
145
145
|
it "must not convert 'to_foo'" do
|
146
|
-
|
146
|
+
lambda { meter.to_foo }.must_raise NoMethodError
|
147
147
|
end
|
148
148
|
|
149
149
|
end
|
@@ -12,7 +12,7 @@ describe Unitwise::Prefix do
|
|
12
12
|
describe "::all" do
|
13
13
|
it "should be an array of prefixes" do
|
14
14
|
subject.all.must_be_instance_of Array
|
15
|
-
subject.all.
|
15
|
+
subject.all.first.must_be_instance_of Unitwise::Prefix
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
data/test/unitwise/term_test.rb
CHANGED
@@ -2,7 +2,7 @@ require 'test_helper'
|
|
2
2
|
|
3
3
|
describe Unitwise::Term do
|
4
4
|
describe "instance" do
|
5
|
-
subject { Unitwise::Term.new(atom
|
5
|
+
subject { Unitwise::Term.new(:atom => 'J', :prefix => 'k')}
|
6
6
|
describe "#atom" do
|
7
7
|
it "should be an atom" do
|
8
8
|
subject.atom.must_be_instance_of Unitwise::Atom
|
@@ -24,7 +24,7 @@ describe Unitwise::Term do
|
|
24
24
|
describe "#root_terms" do
|
25
25
|
it "should be an array of terms" do
|
26
26
|
subject.root_terms.must_be_kind_of Array
|
27
|
-
subject.root_terms.
|
27
|
+
subject.root_terms.first.must_be_instance_of Unitwise::Term
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
data/test/unitwise/unit_test.rb
CHANGED
@@ -12,7 +12,7 @@ describe Unitwise::Unit do
|
|
12
12
|
it "must be a collection of terms" do
|
13
13
|
ms2.must_respond_to :terms
|
14
14
|
ms2.terms.must_be_kind_of Enumerable
|
15
|
-
ms2.terms.
|
15
|
+
ms2.terms.first.must_be_instance_of Unitwise::Term
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
@@ -20,7 +20,7 @@ describe Unitwise::Unit do
|
|
20
20
|
it "must be an array of Terms" do
|
21
21
|
ms2.must_respond_to :terms
|
22
22
|
ms2.root_terms.must_be_kind_of Array
|
23
|
-
ms2.root_terms.
|
23
|
+
ms2.root_terms.first.must_be_instance_of Unitwise::Term
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
@@ -50,15 +50,17 @@ describe Unitwise::Unit do
|
|
50
50
|
describe "#*" do
|
51
51
|
it "should multiply units" do
|
52
52
|
mult = kg * ms2
|
53
|
-
mult.expression.to_s.
|
53
|
+
mult.expression.to_s.must_match /kg.*\/s2/
|
54
|
+
mult.expression.to_s.must_match /m.*\/s2/
|
54
55
|
end
|
55
56
|
end
|
56
57
|
|
57
58
|
describe "#/" do
|
58
59
|
it "should divide units" do
|
59
60
|
div = kg / ms2
|
60
|
-
div.expression.to_s.
|
61
|
+
div.expression.to_s.must_match /kg.*\/m/
|
62
|
+
div.expression.to_s.must_match /s2.*\/m/
|
61
63
|
end
|
62
64
|
end
|
63
65
|
|
64
|
-
end
|
66
|
+
end
|
data/unitwise.gemspec
CHANGED
@@ -20,13 +20,19 @@ Gem::Specification.new do |gem|
|
|
20
20
|
gem.test_files = gem.files.grep(/^test\//)
|
21
21
|
gem.require_paths = ['lib']
|
22
22
|
|
23
|
-
gem.add_dependency 'liner', '~> 0.2'
|
24
|
-
gem.add_dependency 'signed_multiset', '~> 0.2'
|
25
|
-
|
23
|
+
gem.add_dependency 'liner', '~> 0.2.4'
|
24
|
+
gem.add_dependency 'signed_multiset', '~> 0.2.0'
|
25
|
+
|
26
|
+
if RUBY_VERSION > '1.8.7'
|
27
|
+
gem.add_dependency 'parslet', '~> 1.5'
|
28
|
+
gem.add_development_dependency 'nokogiri', '~> 1.5'
|
29
|
+
gem.add_development_dependency 'coveralls', '~> 0.6'
|
30
|
+
else
|
31
|
+
gem.add_dependency 'parslet', '~> 1.5.0'
|
32
|
+
gem.add_development_dependency 'nokogiri', '~> 1.5.10'
|
33
|
+
end
|
26
34
|
|
27
35
|
gem.add_development_dependency 'minitest', '>= 5.0'
|
28
36
|
gem.add_development_dependency 'rake', '>= 10.0'
|
29
37
|
gem.add_development_dependency 'nori', '~> 2.3'
|
30
|
-
gem.add_development_dependency 'nokogiri', '~> 1.6'
|
31
|
-
gem.add_development_dependency 'coveralls', '~> 0.6'
|
32
38
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: unitwise
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Josh Lewis
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-05-
|
11
|
+
date: 2014-05-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: liner
|
@@ -16,28 +16,28 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 0.2.4
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 0.2.4
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: signed_multiset
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 0.2.0
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: 0.2.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: parslet
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -53,75 +53,75 @@ dependencies:
|
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '1.5'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: nokogiri
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - "
|
59
|
+
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '5
|
61
|
+
version: '1.5'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - "
|
66
|
+
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '5
|
68
|
+
version: '1.5'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: coveralls
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - "
|
73
|
+
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
75
|
+
version: '0.6'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - "
|
80
|
+
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
82
|
+
version: '0.6'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
84
|
+
name: minitest
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- - "
|
87
|
+
- - ">="
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
89
|
+
version: '5.0'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- - "
|
94
|
+
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: '
|
96
|
+
version: '5.0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
98
|
+
name: rake
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- - "
|
101
|
+
- - ">="
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version: '
|
103
|
+
version: '10.0'
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
|
-
- - "
|
108
|
+
- - ">="
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version: '
|
110
|
+
version: '10.0'
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
|
-
name:
|
112
|
+
name: nori
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
115
|
- - "~>"
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version: '
|
117
|
+
version: '2.3'
|
118
118
|
type: :development
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
122
|
- - "~>"
|
123
123
|
- !ruby/object:Gem::Version
|
124
|
-
version: '
|
124
|
+
version: '2.3'
|
125
125
|
description: Ruby implementation of the Unified Code for Units of Measure (UCUM)
|
126
126
|
email:
|
127
127
|
- josh.w.lewis@gmail.com
|