unitwise-193 1.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +17 -0
  3. data/.ruby-version +1 -0
  4. data/.travis.yml +21 -0
  5. data/CHANGELOG.md +44 -0
  6. data/Gemfile +10 -0
  7. data/LICENSE.txt +22 -0
  8. data/README.md +297 -0
  9. data/Rakefile +21 -0
  10. data/data/base_unit.yaml +43 -0
  11. data/data/derived_unit.yaml +3542 -0
  12. data/data/prefix.yaml +121 -0
  13. data/lib/unitwise.rb +70 -0
  14. data/lib/unitwise/atom.rb +121 -0
  15. data/lib/unitwise/base.rb +58 -0
  16. data/lib/unitwise/compatible.rb +60 -0
  17. data/lib/unitwise/errors.rb +7 -0
  18. data/lib/unitwise/expression.rb +35 -0
  19. data/lib/unitwise/expression/composer.rb +41 -0
  20. data/lib/unitwise/expression/decomposer.rb +68 -0
  21. data/lib/unitwise/expression/matcher.rb +47 -0
  22. data/lib/unitwise/expression/parser.rb +58 -0
  23. data/lib/unitwise/expression/transformer.rb +37 -0
  24. data/lib/unitwise/ext.rb +2 -0
  25. data/lib/unitwise/ext/numeric.rb +45 -0
  26. data/lib/unitwise/functional.rb +117 -0
  27. data/lib/unitwise/measurement.rb +198 -0
  28. data/lib/unitwise/prefix.rb +24 -0
  29. data/lib/unitwise/scale.rb +139 -0
  30. data/lib/unitwise/search.rb +46 -0
  31. data/lib/unitwise/standard.rb +29 -0
  32. data/lib/unitwise/standard/base.rb +73 -0
  33. data/lib/unitwise/standard/base_unit.rb +21 -0
  34. data/lib/unitwise/standard/derived_unit.rb +49 -0
  35. data/lib/unitwise/standard/extras.rb +17 -0
  36. data/lib/unitwise/standard/function.rb +35 -0
  37. data/lib/unitwise/standard/prefix.rb +17 -0
  38. data/lib/unitwise/standard/scale.rb +25 -0
  39. data/lib/unitwise/term.rb +142 -0
  40. data/lib/unitwise/unit.rb +181 -0
  41. data/lib/unitwise/version.rb +3 -0
  42. data/test/support/scale_tests.rb +117 -0
  43. data/test/test_helper.rb +19 -0
  44. data/test/unitwise/atom_test.rb +129 -0
  45. data/test/unitwise/base_test.rb +6 -0
  46. data/test/unitwise/expression/decomposer_test.rb +45 -0
  47. data/test/unitwise/expression/matcher_test.rb +42 -0
  48. data/test/unitwise/expression/parser_test.rb +109 -0
  49. data/test/unitwise/ext/numeric_test.rb +54 -0
  50. data/test/unitwise/functional_test.rb +17 -0
  51. data/test/unitwise/measurement_test.rb +233 -0
  52. data/test/unitwise/prefix_test.rb +25 -0
  53. data/test/unitwise/scale_test.rb +7 -0
  54. data/test/unitwise/search_test.rb +18 -0
  55. data/test/unitwise/term_test.rb +55 -0
  56. data/test/unitwise/unit_test.rb +87 -0
  57. data/test/unitwise_test.rb +35 -0
  58. data/unitwise.gemspec +33 -0
  59. metadata +246 -0
@@ -0,0 +1,25 @@
1
+ require 'test_helper'
2
+
3
+ describe Unitwise::Prefix do
4
+ subject { Unitwise::Prefix }
5
+ let(:m) { Unitwise::Prefix.find('m')}
6
+ describe "::data" do
7
+ it "should be an Array" do
8
+ subject.data.must_be_instance_of Array
9
+ end
10
+ end
11
+
12
+ describe "::all" do
13
+ it "should be an array of prefixes" do
14
+ subject.all.must_be_instance_of Array
15
+ subject.all.first.must_be_instance_of Unitwise::Prefix
16
+ end
17
+ end
18
+
19
+ describe "#scalar" do
20
+ it "should be a number" do
21
+ m.scalar.must_equal 0.001
22
+ end
23
+ end
24
+
25
+ end
@@ -0,0 +1,7 @@
1
+ require 'test_helper'
2
+ require 'support/scale_tests'
3
+
4
+ describe Unitwise::Scale do
5
+ let(:described_class) { Unitwise::Scale }
6
+ include ScaleTests
7
+ end
@@ -0,0 +1,18 @@
1
+ require 'test_helper'
2
+
3
+ describe Unitwise::Search do
4
+ describe :class_methods do
5
+ describe :all do
6
+ subject { Unitwise::Search.all }
7
+ it { subject.must_be_kind_of Enumerable }
8
+ it { subject.first.must_be_instance_of Unitwise::Unit }
9
+ end
10
+ describe :search do
11
+ it "should return a list of units" do
12
+ search = Unitwise::Search.search('foo')
13
+ search.must_be_kind_of Enumerable
14
+ search.first.must_be_instance_of Unitwise::Unit
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,55 @@
1
+ require 'test_helper'
2
+
3
+ describe Unitwise::Term do
4
+ describe "instance" do
5
+ subject { Unitwise::Term.new(:atom => 'J', :prefix => 'k')}
6
+ describe "#atom" do
7
+ it "should be an atom" do
8
+ subject.atom.must_be_instance_of Unitwise::Atom
9
+ end
10
+ end
11
+
12
+ describe "#prefix" do
13
+ it "should be a prefix" do
14
+ subject.prefix.must_be_instance_of Unitwise::Prefix
15
+ end
16
+ end
17
+
18
+ describe "#exponent" do
19
+ it "should be an integer" do
20
+ subject.exponent.must_equal 1
21
+ end
22
+ end
23
+
24
+ describe "#root_terms" do
25
+ it "should be an array of terms" do
26
+ subject.root_terms.must_be_kind_of Array
27
+ subject.root_terms.first.must_be_instance_of Unitwise::Term
28
+ end
29
+ end
30
+
31
+ describe "#composition" do
32
+ it "should be a Multiset" do
33
+ subject.composition.must_be_instance_of SignedMultiset
34
+ end
35
+ end
36
+
37
+ describe "#scale" do
38
+ it "should return value relative to terminal atoms" do
39
+ subject.scalar.must_equal 1000000.0
40
+ end
41
+ end
42
+
43
+ describe "#frozen?" do
44
+ it "should be frozen" do
45
+ subject.frozen?.must_equal true
46
+ end
47
+ end
48
+
49
+ describe "#to_s" do
50
+ it "should return the UCUM code" do
51
+ subject.to_s.must_equal "kJ"
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,87 @@
1
+ # encoding: UTF-8
2
+ require 'test_helper'
3
+
4
+ describe Unitwise::Unit do
5
+
6
+ let(:ms2) { Unitwise::Unit.new("m/s2") }
7
+ let(:kg) { Unitwise::Unit.new("kg") }
8
+ let(:psi) { Unitwise::Unit.new("[psi]")}
9
+ let(:deg) { Unitwise::Unit.new("deg")}
10
+
11
+
12
+ describe "#terms" do
13
+ it "must be a collection of terms" do
14
+ ms2.must_respond_to :terms
15
+ ms2.terms.must_be_kind_of Enumerable
16
+ ms2.terms.first.must_be_instance_of Unitwise::Term
17
+ end
18
+ end
19
+
20
+ describe "#root_terms" do
21
+ it "must be an array of Terms" do
22
+ ms2.must_respond_to :terms
23
+ ms2.root_terms.must_be_kind_of Array
24
+ ms2.root_terms.first.must_be_instance_of Unitwise::Term
25
+ end
26
+ end
27
+
28
+ describe "#scalar" do
29
+ it "must return value relative to terminal atoms" do
30
+ ms2.must_respond_to :scalar
31
+ ms2.scalar.must_equal 1
32
+ psi.scalar.must_almost_equal 6894757.293168361
33
+ deg.scalar.must_almost_equal 0.0174532925199433
34
+ end
35
+ end
36
+
37
+ describe "#composition" do
38
+ it "must be a multiset" do
39
+ ms2.must_respond_to :terms
40
+ ms2.composition.must_be_instance_of SignedMultiset
41
+ end
42
+ end
43
+
44
+ describe "#dim" do
45
+ it "must be a string representing it's dimensional makeup" do
46
+ ms2.dim.must_equal 'L.T-2'
47
+ psi.dim.must_equal 'L-1.M.T-2'
48
+ end
49
+ end
50
+
51
+ describe "#*" do
52
+ it "should multiply units" do
53
+ mult = kg * ms2
54
+ mult.expression.to_s.must_match(/kg.*\/s2/)
55
+ mult.expression.to_s.must_match(/m.*\/s2/)
56
+ end
57
+ end
58
+
59
+ describe "#/" do
60
+ it "should divide units" do
61
+ div = kg / ms2
62
+ div.expression.to_s.must_match(/kg.*\/m/)
63
+ div.expression.to_s.must_match(/s2.*\/m/)
64
+ end
65
+ end
66
+
67
+ describe "#frozen?" do
68
+ it "should be frozen" do
69
+ kg.scalar
70
+ kg.frozen?.must_equal true
71
+ end
72
+ end
73
+
74
+ describe "#to_s" do
75
+ it "should return an expression in the same mode it was initialized with" do
76
+ ['meter','m', 'mm', '%'].each do |name|
77
+ Unitwise::Unit.new(name).to_s.must_equal(name)
78
+ end
79
+ end
80
+ it "should accept an optional mode to build the expression with" do
81
+ temp_change = Unitwise::Unit.new("degree Celsius/hour")
82
+ temp_change.to_s(:primary_code).must_equal("Cel/h")
83
+ temp_change.to_s(:symbol).must_equal("°C/h")
84
+ end
85
+ end
86
+
87
+ end
@@ -0,0 +1,35 @@
1
+ require 'test_helper'
2
+
3
+ describe Unitwise do
4
+ describe '()' do
5
+ it "should accept a number and string" do
6
+ Unitwise(2, 'm/s').must_be_instance_of Unitwise::Measurement
7
+ end
8
+ it "should accept a measurement and a string" do
9
+ mass = Unitwise(1, "lb")
10
+ new_mass = Unitwise(mass, "kg")
11
+ new_mass.value.must_equal(0.45359237)
12
+ new_mass.unit.to_s.must_equal("kg")
13
+ end
14
+ end
15
+
16
+ describe 'search' do
17
+ it "must return results" do
18
+ Unitwise.search('foo').must_be_instance_of(Array)
19
+ end
20
+ end
21
+
22
+ describe 'valid?' do
23
+ it 'should reutrn true for valid unit strings' do
24
+ Unitwise.valid?('millimeter').must_equal true
25
+ end
26
+ it 'should return false for invalid unit strings' do
27
+ Unitwise.valid?('foo').must_equal false
28
+ end
29
+ end
30
+
31
+ it "should have a path" do
32
+ Unitwise.path.must_match(/unitwise$/)
33
+ end
34
+
35
+ end
@@ -0,0 +1,33 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'unitwise/version'
5
+
6
+ Gem::Specification.new do |gem|
7
+ gem.name = 'unitwise-193'
8
+ gem.version = Unitwise::VERSION
9
+ gem.authors = ['Josh Lewis', 'Francis Gulotta']
10
+ gem.email = ['francis@wizarddevelopment.com']
11
+ gem.description = 'Physical quantity and units of measure conversion ' \
12
+ 'and math library'
13
+ gem.summary = 'Fork of Unitwise to upgrade gems. Convert between and perform mathematical operations ' \
14
+ 'on physical quantities and units of measure defined ' \
15
+ 'by the Unified Code for Units of Measure.'
16
+ gem.homepage = 'http://github.com/joshwlewis/unitwise'
17
+ gem.license = 'MIT'
18
+
19
+ gem.files = `git ls-files`.split($RS)
20
+ gem.test_files = gem.files.grep(/^test\//)
21
+ gem.require_paths = ['lib']
22
+
23
+ gem.add_dependency 'liner', '~> 0.2'
24
+ gem.add_dependency 'signed_multiset', '~> 0.2'
25
+ gem.add_dependency 'memoizable', '~> 0.4'
26
+ gem.add_dependency 'parslet', '~> 1.5'
27
+
28
+ gem.add_development_dependency 'nokogiri', '~> 1.5.10'
29
+ gem.add_development_dependency 'pry', '~> 0.9'
30
+ gem.add_development_dependency 'minitest', '~> 5.0'
31
+ gem.add_development_dependency 'rake', '~> 10.0'
32
+ gem.add_development_dependency 'nori', '~> 2.3'
33
+ end
metadata ADDED
@@ -0,0 +1,246 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: unitwise-193
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.4
5
+ platform: ruby
6
+ authors:
7
+ - Josh Lewis
8
+ - Francis Gulotta
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2015-07-21 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: liner
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - "~>"
19
+ - !ruby/object:Gem::Version
20
+ version: '0.2'
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "~>"
26
+ - !ruby/object:Gem::Version
27
+ version: '0.2'
28
+ - !ruby/object:Gem::Dependency
29
+ name: signed_multiset
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - "~>"
33
+ - !ruby/object:Gem::Version
34
+ version: '0.2'
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: '0.2'
42
+ - !ruby/object:Gem::Dependency
43
+ name: memoizable
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - "~>"
47
+ - !ruby/object:Gem::Version
48
+ version: '0.4'
49
+ type: :runtime
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - "~>"
54
+ - !ruby/object:Gem::Version
55
+ version: '0.4'
56
+ - !ruby/object:Gem::Dependency
57
+ name: parslet
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - "~>"
61
+ - !ruby/object:Gem::Version
62
+ version: '1.5'
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '1.5'
70
+ - !ruby/object:Gem::Dependency
71
+ name: nokogiri
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - "~>"
75
+ - !ruby/object:Gem::Version
76
+ version: 1.5.10
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - "~>"
82
+ - !ruby/object:Gem::Version
83
+ version: 1.5.10
84
+ - !ruby/object:Gem::Dependency
85
+ name: pry
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - "~>"
89
+ - !ruby/object:Gem::Version
90
+ version: '0.9'
91
+ type: :development
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - "~>"
96
+ - !ruby/object:Gem::Version
97
+ version: '0.9'
98
+ - !ruby/object:Gem::Dependency
99
+ name: minitest
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - "~>"
103
+ - !ruby/object:Gem::Version
104
+ version: '5.0'
105
+ type: :development
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - "~>"
110
+ - !ruby/object:Gem::Version
111
+ version: '5.0'
112
+ - !ruby/object:Gem::Dependency
113
+ name: rake
114
+ requirement: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - "~>"
117
+ - !ruby/object:Gem::Version
118
+ version: '10.0'
119
+ type: :development
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - "~>"
124
+ - !ruby/object:Gem::Version
125
+ version: '10.0'
126
+ - !ruby/object:Gem::Dependency
127
+ name: nori
128
+ requirement: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - "~>"
131
+ - !ruby/object:Gem::Version
132
+ version: '2.3'
133
+ type: :development
134
+ prerelease: false
135
+ version_requirements: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - "~>"
138
+ - !ruby/object:Gem::Version
139
+ version: '2.3'
140
+ description: Physical quantity and units of measure conversion and math library
141
+ email:
142
+ - francis@wizarddevelopment.com
143
+ executables: []
144
+ extensions: []
145
+ extra_rdoc_files: []
146
+ files:
147
+ - ".gitignore"
148
+ - ".ruby-version"
149
+ - ".travis.yml"
150
+ - CHANGELOG.md
151
+ - Gemfile
152
+ - LICENSE.txt
153
+ - README.md
154
+ - Rakefile
155
+ - data/base_unit.yaml
156
+ - data/derived_unit.yaml
157
+ - data/prefix.yaml
158
+ - lib/unitwise.rb
159
+ - lib/unitwise/atom.rb
160
+ - lib/unitwise/base.rb
161
+ - lib/unitwise/compatible.rb
162
+ - lib/unitwise/errors.rb
163
+ - lib/unitwise/expression.rb
164
+ - lib/unitwise/expression/composer.rb
165
+ - lib/unitwise/expression/decomposer.rb
166
+ - lib/unitwise/expression/matcher.rb
167
+ - lib/unitwise/expression/parser.rb
168
+ - lib/unitwise/expression/transformer.rb
169
+ - lib/unitwise/ext.rb
170
+ - lib/unitwise/ext/numeric.rb
171
+ - lib/unitwise/functional.rb
172
+ - lib/unitwise/measurement.rb
173
+ - lib/unitwise/prefix.rb
174
+ - lib/unitwise/scale.rb
175
+ - lib/unitwise/search.rb
176
+ - lib/unitwise/standard.rb
177
+ - lib/unitwise/standard/base.rb
178
+ - lib/unitwise/standard/base_unit.rb
179
+ - lib/unitwise/standard/derived_unit.rb
180
+ - lib/unitwise/standard/extras.rb
181
+ - lib/unitwise/standard/function.rb
182
+ - lib/unitwise/standard/prefix.rb
183
+ - lib/unitwise/standard/scale.rb
184
+ - lib/unitwise/term.rb
185
+ - lib/unitwise/unit.rb
186
+ - lib/unitwise/version.rb
187
+ - test/support/scale_tests.rb
188
+ - test/test_helper.rb
189
+ - test/unitwise/atom_test.rb
190
+ - test/unitwise/base_test.rb
191
+ - test/unitwise/expression/decomposer_test.rb
192
+ - test/unitwise/expression/matcher_test.rb
193
+ - test/unitwise/expression/parser_test.rb
194
+ - test/unitwise/ext/numeric_test.rb
195
+ - test/unitwise/functional_test.rb
196
+ - test/unitwise/measurement_test.rb
197
+ - test/unitwise/prefix_test.rb
198
+ - test/unitwise/scale_test.rb
199
+ - test/unitwise/search_test.rb
200
+ - test/unitwise/term_test.rb
201
+ - test/unitwise/unit_test.rb
202
+ - test/unitwise_test.rb
203
+ - unitwise.gemspec
204
+ homepage: http://github.com/joshwlewis/unitwise
205
+ licenses:
206
+ - MIT
207
+ metadata: {}
208
+ post_install_message:
209
+ rdoc_options: []
210
+ require_paths:
211
+ - lib
212
+ required_ruby_version: !ruby/object:Gem::Requirement
213
+ requirements:
214
+ - - ">="
215
+ - !ruby/object:Gem::Version
216
+ version: '0'
217
+ required_rubygems_version: !ruby/object:Gem::Requirement
218
+ requirements:
219
+ - - ">="
220
+ - !ruby/object:Gem::Version
221
+ version: '0'
222
+ requirements: []
223
+ rubyforge_project:
224
+ rubygems_version: 2.4.5
225
+ signing_key:
226
+ specification_version: 4
227
+ summary: Fork of Unitwise to upgrade gems. Convert between and perform mathematical
228
+ operations on physical quantities and units of measure defined by the Unified Code
229
+ for Units of Measure.
230
+ test_files:
231
+ - test/support/scale_tests.rb
232
+ - test/test_helper.rb
233
+ - test/unitwise/atom_test.rb
234
+ - test/unitwise/base_test.rb
235
+ - test/unitwise/expression/decomposer_test.rb
236
+ - test/unitwise/expression/matcher_test.rb
237
+ - test/unitwise/expression/parser_test.rb
238
+ - test/unitwise/ext/numeric_test.rb
239
+ - test/unitwise/functional_test.rb
240
+ - test/unitwise/measurement_test.rb
241
+ - test/unitwise/prefix_test.rb
242
+ - test/unitwise/scale_test.rb
243
+ - test/unitwise/search_test.rb
244
+ - test/unitwise/term_test.rb
245
+ - test/unitwise/unit_test.rb
246
+ - test/unitwise_test.rb