distances 0.0.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: b817fbb854d963a4689ef5f3e12d13f1a2ab43a4
4
+ data.tar.gz: 6b5ba6f3f545874758d8ab2f19c48d4bbe82c6e0
5
+ SHA512:
6
+ metadata.gz: 14d2539b5bea03632baf144efe20111e98c15f15234bee353e195cbd010cab0a5c369cf640c7654aa58f778aad320dac95671d95145d5e54dcc500abc0a1ed6a
7
+ data.tar.gz: dcb38b83b8a7d4151ff535072571a9ced7d3a4d50e3748a7806d11398f9450d2ea8f5bfe5e5cf90de4383ef0f73bc6f9ef4f2c3b3fd75143206ab9eb6a2afe16
data/.gitignore ADDED
@@ -0,0 +1,14 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ *.bundle
11
+ *.so
12
+ *.o
13
+ *.a
14
+ mkmf.log
data/.idea/.name ADDED
@@ -0,0 +1 @@
1
+ distances
@@ -0,0 +1,134 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <module type="RUBY_MODULE" version="4">
3
+ <component name="FacetManager">
4
+ <facet type="gem" name="Ruby Gem">
5
+ <configuration>
6
+ <option name="GEM_APP_ROOT_PATH" value="$MODULE_DIR$" />
7
+ <option name="GEM_APP_TEST_PATH" value="$MODULE_DIR$/test" />
8
+ <option name="GEM_APP_LIB_PATH" value="$MODULE_DIR$/lib" />
9
+ </configuration>
10
+ </facet>
11
+ </component>
12
+ <component name="ModuleRunConfigurationManager">
13
+ <configuration default="false" name="gem install" type="CommandRunConfigurationType" factoryName="Gem Command">
14
+ <module name="distances" />
15
+ <COMMAND_RUN_CONFIGURATION NAME="RUBY_ARGS" VALUE="-e $stdout.sync=true;$stderr.sync=true;load($0=ARGV.shift)" />
16
+ <COMMAND_RUN_CONFIGURATION NAME="WORK DIR" VALUE="$MODULE_DIR$" />
17
+ <COMMAND_RUN_CONFIGURATION NAME="SHOULD_USE_SDK" VALUE="false" />
18
+ <COMMAND_RUN_CONFIGURATION NAME="ALTERN_SDK_NAME" VALUE="" />
19
+ <COMMAND_RUN_CONFIGURATION NAME="myPassParentEnvs" VALUE="true" />
20
+ <envs />
21
+ <EXTENSION ID="BundlerRunConfigurationExtension" bundleExecEnabled="false" />
22
+ <EXTENSION ID="JRubyRunConfigurationExtension" NailgunExecEnabled="false" />
23
+ <EXTENSION ID="RubyCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" track_test_folders="true" runner="rcov" />
24
+ <EXTENSION ID="org.jetbrains.plugins.ruby.motion.run.MotionSimulatorRunExtension" />
25
+ <COMMAND_CONFIG_SETTINGS_ID NAME="GEM_NAME" VALUE="bundler" />
26
+ <COMMAND_CONFIG_SETTINGS_ID NAME="EXECUTABLE_NAME" VALUE="gem" />
27
+ <COMMAND_CONFIG_SETTINGS_ID NAME="EXECUTABLE_ARGS" VALUE="install ./distances*.gem" />
28
+ <COMMAND_CONFIG_SETTINGS_ID NAME="WORKING_DIR" VALUE="install ./distances*.gem" />
29
+ <RunnerSettings RunnerId="RubyRunner" />
30
+ <ConfigurationWrapper RunnerId="RubyRunner" />
31
+ <method />
32
+ </configuration>
33
+ <configuration default="false" name="test-metric" type="RubyRunConfigurationType" factoryName="Ruby" temporary="true">
34
+ <module name="distances" />
35
+ <RUBY_RUN_CONFIG NAME="RUBY_ARGS" VALUE="-e $stdout.sync=true;$stderr.sync=true;load($0=ARGV.shift)" />
36
+ <RUBY_RUN_CONFIG NAME="WORK DIR" VALUE="$MODULE_DIR$/test" />
37
+ <RUBY_RUN_CONFIG NAME="SHOULD_USE_SDK" VALUE="false" />
38
+ <RUBY_RUN_CONFIG NAME="ALTERN_SDK_NAME" VALUE="" />
39
+ <RUBY_RUN_CONFIG NAME="myPassParentEnvs" VALUE="true" />
40
+ <envs />
41
+ <EXTENSION ID="BundlerRunConfigurationExtension" bundleExecEnabled="true" />
42
+ <EXTENSION ID="JRubyRunConfigurationExtension" NailgunExecEnabled="false" />
43
+ <EXTENSION ID="RubyCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" track_test_folders="true" runner="rcov" />
44
+ <EXTENSION ID="org.jetbrains.plugins.ruby.motion.run.MotionSimulatorRunExtension" />
45
+ <RUBY_RUN_CONFIG NAME="SCRIPT_PATH" VALUE="C:\Users\Gregory\RubymineProjects\distances\test\test-metric.rb" />
46
+ <RUBY_RUN_CONFIG NAME="SCRIPT_ARGS" VALUE="" />
47
+ <RunnerSettings RunnerId="RubyRunner" />
48
+ <ConfigurationWrapper RunnerId="RubyRunner" />
49
+ <method />
50
+ </configuration>
51
+ <configuration default="false" name="test-metric (1)" type="RubyRunConfigurationType" factoryName="Ruby" temporary="true">
52
+ <module name="distances" />
53
+ <RUBY_RUN_CONFIG NAME="RUBY_ARGS" VALUE="-e $stdout.sync=true;$stderr.sync=true;load($0=ARGV.shift)" />
54
+ <RUBY_RUN_CONFIG NAME="WORK DIR" VALUE="$MODULE_DIR$/test" />
55
+ <RUBY_RUN_CONFIG NAME="SHOULD_USE_SDK" VALUE="false" />
56
+ <RUBY_RUN_CONFIG NAME="ALTERN_SDK_NAME" VALUE="" />
57
+ <RUBY_RUN_CONFIG NAME="myPassParentEnvs" VALUE="true" />
58
+ <envs />
59
+ <EXTENSION ID="BundlerRunConfigurationExtension" bundleExecEnabled="true" />
60
+ <EXTENSION ID="JRubyRunConfigurationExtension" NailgunExecEnabled="false" />
61
+ <EXTENSION ID="RubyCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" track_test_folders="true" runner="rcov" />
62
+ <EXTENSION ID="org.jetbrains.plugins.ruby.motion.run.MotionSimulatorRunExtension" />
63
+ <RUBY_RUN_CONFIG NAME="SCRIPT_PATH" VALUE="$MODULE_DIR$/test/test-metric.rb" />
64
+ <RUBY_RUN_CONFIG NAME="SCRIPT_ARGS" VALUE="" />
65
+ <RunnerSettings RunnerId="RubyRunner" />
66
+ <ConfigurationWrapper RunnerId="RubyRunner" />
67
+ <method />
68
+ </configuration>
69
+ <configuration default="false" name="test-imperial" type="RubyRunConfigurationType" factoryName="Ruby" temporary="true">
70
+ <module name="distances" />
71
+ <RUBY_RUN_CONFIG NAME="RUBY_ARGS" VALUE="-e $stdout.sync=true;$stderr.sync=true;load($0=ARGV.shift)" />
72
+ <RUBY_RUN_CONFIG NAME="WORK DIR" VALUE="$MODULE_DIR$/test" />
73
+ <RUBY_RUN_CONFIG NAME="SHOULD_USE_SDK" VALUE="false" />
74
+ <RUBY_RUN_CONFIG NAME="ALTERN_SDK_NAME" VALUE="" />
75
+ <RUBY_RUN_CONFIG NAME="myPassParentEnvs" VALUE="true" />
76
+ <envs />
77
+ <EXTENSION ID="BundlerRunConfigurationExtension" bundleExecEnabled="true" />
78
+ <EXTENSION ID="JRubyRunConfigurationExtension" NailgunExecEnabled="false" />
79
+ <EXTENSION ID="RubyCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" track_test_folders="true" runner="rcov" />
80
+ <EXTENSION ID="org.jetbrains.plugins.ruby.motion.run.MotionSimulatorRunExtension" />
81
+ <RUBY_RUN_CONFIG NAME="SCRIPT_PATH" VALUE="$MODULE_DIR$/test/test-imperial.rb" />
82
+ <RUBY_RUN_CONFIG NAME="SCRIPT_ARGS" VALUE="" />
83
+ <RunnerSettings RunnerId="RubyRunner" />
84
+ <ConfigurationWrapper RunnerId="RubyRunner" />
85
+ <method />
86
+ </configuration>
87
+ <configuration default="false" name="test-astronomical" type="RubyRunConfigurationType" factoryName="Ruby" temporary="true">
88
+ <module name="distances" />
89
+ <RUBY_RUN_CONFIG NAME="RUBY_ARGS" VALUE="-e $stdout.sync=true;$stderr.sync=true;load($0=ARGV.shift)" />
90
+ <RUBY_RUN_CONFIG NAME="WORK DIR" VALUE="$MODULE_DIR$/test" />
91
+ <RUBY_RUN_CONFIG NAME="SHOULD_USE_SDK" VALUE="false" />
92
+ <RUBY_RUN_CONFIG NAME="ALTERN_SDK_NAME" VALUE="" />
93
+ <RUBY_RUN_CONFIG NAME="myPassParentEnvs" VALUE="true" />
94
+ <envs />
95
+ <EXTENSION ID="BundlerRunConfigurationExtension" bundleExecEnabled="true" />
96
+ <EXTENSION ID="JRubyRunConfigurationExtension" NailgunExecEnabled="false" />
97
+ <EXTENSION ID="RubyCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" track_test_folders="true" runner="rcov" />
98
+ <EXTENSION ID="org.jetbrains.plugins.ruby.motion.run.MotionSimulatorRunExtension" />
99
+ <RUBY_RUN_CONFIG NAME="SCRIPT_PATH" VALUE="$MODULE_DIR$/test/test-astronomical.rb" />
100
+ <RUBY_RUN_CONFIG NAME="SCRIPT_ARGS" VALUE="" />
101
+ <RunnerSettings RunnerId="RubyRunner" />
102
+ <ConfigurationWrapper RunnerId="RubyRunner" />
103
+ <method />
104
+ </configuration>
105
+ <configuration default="false" name="IRB console: distances" type="IrbRunConfigurationType" factoryName="IRB console" temporary="true">
106
+ <module name="distances" />
107
+ <IRB_RUN_CONFIG NAME="RUBY_ARGS" VALUE="-e $stdout.sync=true;$stderr.sync=true;load($0=ARGV.shift)" />
108
+ <IRB_RUN_CONFIG NAME="WORK DIR" VALUE="$MODULE_DIR$" />
109
+ <IRB_RUN_CONFIG NAME="SHOULD_USE_SDK" VALUE="false" />
110
+ <IRB_RUN_CONFIG NAME="ALTERN_SDK_NAME" VALUE="" />
111
+ <IRB_RUN_CONFIG NAME="myPassParentEnvs" VALUE="true" />
112
+ <envs />
113
+ <EXTENSION ID="BundlerRunConfigurationExtension" bundleExecEnabled="false" />
114
+ <EXTENSION ID="JRubyRunConfigurationExtension" NailgunExecEnabled="false" />
115
+ <EXTENSION ID="RubyCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" track_test_folders="true" runner="rcov" />
116
+ <EXTENSION ID="org.jetbrains.plugins.ruby.motion.run.MotionSimulatorRunExtension" />
117
+ <IRB_RUN_CONFIG NAME="SCRIPT_PATH" VALUE="C:/RailsInstaller/Ruby1.9.3/bin/irb" />
118
+ <IRB_RUN_CONFIG NAME="SCRIPT_ARGS" VALUE="--prompt simple" />
119
+ <IRB_RUN_CONFIG NAME="IS_RAILS_CONSOLE" VALUE="false" />
120
+ <RunnerSettings RunnerId="RubyRunner" />
121
+ <ConfigurationWrapper RunnerId="RubyRunner" />
122
+ <method />
123
+ </configuration>
124
+ </component>
125
+ <component name="NewModuleRootManager">
126
+ <content url="file://$MODULE_DIR$">
127
+ <sourceFolder url="file://$MODULE_DIR$/test" isTestSource="true" />
128
+ </content>
129
+ <orderEntry type="jdk" jdkName="ruby-2.0.0-p598" jdkType="RUBY_SDK" />
130
+ <orderEntry type="sourceFolder" forTests="false" />
131
+ <orderEntry type="library" scope="PROVIDED" name="bundler (v1.8.4, ruby-2.0.0-p598) [gem]" level="application" />
132
+ <orderEntry type="library" scope="PROVIDED" name="rake (v10.3.2, ruby-2.0.0-p598) [gem]" level="application" />
133
+ </component>
134
+ </module>
@@ -0,0 +1,4 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="Encoding" useUTFGuessing="true" native2AsciiForPropertiesFiles="false" />
4
+ </project>
data/.idea/misc.xml ADDED
@@ -0,0 +1,27 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="DaemonCodeAnalyzer">
4
+ <disable_hints />
5
+ </component>
6
+ <component name="DependencyValidationManager">
7
+ <option name="SKIP_IMPORT_STATEMENTS" value="false" />
8
+ </component>
9
+ <component name="Encoding" useUTFGuessing="true" native2AsciiForPropertiesFiles="false" />
10
+ <component name="ProjectLevelVcsManager" settingsEditedManually="false">
11
+ <OptionsSetting value="true" id="Add" />
12
+ <OptionsSetting value="true" id="Remove" />
13
+ <OptionsSetting value="true" id="Checkout" />
14
+ <OptionsSetting value="true" id="Update" />
15
+ <OptionsSetting value="true" id="Status" />
16
+ <OptionsSetting value="true" id="Edit" />
17
+ <ConfirmationsSetting value="0" id="Add" />
18
+ <ConfirmationsSetting value="0" id="Remove" />
19
+ </component>
20
+ <component name="ProjectModuleManager">
21
+ <modules />
22
+ </component>
23
+ <component name="ProjectRootManager" version="2" project-jdk-name="ruby-1.9.3-p545" project-jdk-type="RUBY_SDK" />
24
+ <component name="RunManager">
25
+ <list size="0" />
26
+ </component>
27
+ </project>
data/.idea/modules.xml ADDED
@@ -0,0 +1,8 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="ProjectModuleManager">
4
+ <modules>
5
+ <module fileurl="file://$PROJECT_DIR$/.idea/distances.iml" filepath="$PROJECT_DIR$/.idea/distances.iml" />
6
+ </modules>
7
+ </component>
8
+ </project>
@@ -0,0 +1,5 @@
1
+ <component name="DependencyValidationManager">
2
+ <state>
3
+ <option name="SKIP_IMPORT_STATEMENTS" value="false" />
4
+ </state>
5
+ </component>
data/.idea/vcs.xml ADDED
@@ -0,0 +1,6 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="VcsDirectoryMappings">
4
+ <mapping directory="$PROJECT_DIR$" vcs="Git" />
5
+ </component>
6
+ </project>
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in distances.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2015 Gregory H. Halverson
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,31 @@
1
+ # Distances
2
+
3
+ TODO: Write a gem description
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ ```ruby
10
+ gem 'distances'
11
+ ```
12
+
13
+ And then execute:
14
+
15
+ $ bundle
16
+
17
+ Or install it yourself as:
18
+
19
+ $ gem install distances
20
+
21
+ ## Usage
22
+
23
+ TODO: Write usage instructions here
24
+
25
+ ## Contributing
26
+
27
+ 1. Fork it ( https://github.com/[my-github-username]/distances/fork )
28
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
29
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
30
+ 4. Push to the branch (`git push origin my-new-feature`)
31
+ 5. Create a new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require "bundler/gem_tasks"
2
+
Binary file
data/distances.gemspec ADDED
@@ -0,0 +1,23 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'distances/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "distances"
8
+ spec.version = Distances::VERSION
9
+ spec.authors = ["Gregory H. Halverson"]
10
+ spec.email = ["gregory.halverson@gmail.com"]
11
+ spec.summary = %q{Distances}
12
+ spec.description = %q{Convert between metric, imperial, and astronomical distances.}
13
+ spec.homepage = "https://github.com/gregory-halverson/distances"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.7"
22
+ spec.add_development_dependency "rake", "~> 10.0"
23
+ end
@@ -0,0 +1,3 @@
1
+ module Distances
2
+ VERSION = "0.0.1"
3
+ end
data/lib/distances.rb ADDED
@@ -0,0 +1,322 @@
1
+ require "distances/version"
2
+
3
+ module Math
4
+ def self.sigdig(number)
5
+ Math.log10(number).floor
6
+ end
7
+ end
8
+
9
+ class Distance
10
+ attr_reader :distance
11
+ attr_accessor :mode, :readable
12
+
13
+ @@ROUND = 13
14
+ @@DECIMAL_PLACES = 2
15
+ @@METERS_TO_FEET = 3.28084
16
+ @@FEET_TO_METERS = 0.3048
17
+ @@AU_TO_METERS = 149597870691.0
18
+
19
+ def initialize(distance=0, mode=:metric, display=:readable)
20
+ case mode
21
+ when :metric
22
+ self.from_meters distance
23
+ when :imperial
24
+ self.from_feet distance
25
+ when :astronomical
26
+ self.from_au distance
27
+ end
28
+
29
+ @mode = mode
30
+ @display = display
31
+ end
32
+
33
+ def from_meters(meters)
34
+ @distance = meters
35
+ self
36
+ end
37
+
38
+ def from_feet(feet)
39
+ from_meters(Distance.feet_to_meters(feet))
40
+ end
41
+
42
+ def from_au(au)
43
+ from_meters(Distance.au_to_meters(au))
44
+ end
45
+
46
+ def self.meters_to_feet(meters)
47
+ meters * @@METERS_TO_FEET
48
+ end
49
+
50
+ def self.feet_to_meters(feet)
51
+ feet * @@FEET_TO_METERS
52
+ end
53
+
54
+ def self.meters_to_au(meters)
55
+ meters / @@AU_TO_METERS
56
+ end
57
+
58
+ def self.au_to_meters(au)
59
+ au * @@AU_TO_METERS
60
+ end
61
+
62
+ def meters
63
+ self.distance
64
+ end
65
+
66
+ def decameters
67
+ (self.meters / 10.0).round(@@ROUND)
68
+ end
69
+
70
+ def hectometers
71
+ (self.meters / 100.0).round(@@ROUND)
72
+ end
73
+
74
+ def kilometers
75
+ (self.meters / 1000.0).round(@@ROUND)
76
+ end
77
+
78
+ def megameters
79
+ (self.meters / (10.0 ** 6)).round(@@ROUND)
80
+ end
81
+
82
+ def gigameters
83
+ (self.meters / (10.0 ** 9)).round(@@ROUND)
84
+ end
85
+
86
+ def terameters
87
+ (self.meters / (10.0 ** 12)).round(@@ROUND)
88
+ end
89
+
90
+ def petameters
91
+ (self.meters / (10.0 ** 15)).round(@@ROUND)
92
+ end
93
+
94
+ def exameters
95
+ (self.meters / (10.0 ** 18)).round(@@ROUND)
96
+ end
97
+
98
+ def zettameters
99
+ (self.meters / (10.0 ** 21)).round(@@ROUND)
100
+ end
101
+
102
+ def yottameters
103
+ (self.meters / (10.0 ** 24)).round(@@ROUND)
104
+ end
105
+
106
+ def decimeters
107
+ (self.meters * 10.0).round(@@ROUND)
108
+ end
109
+
110
+ def centimeters
111
+ (self.meters * 100.0).round(@@ROUND)
112
+ end
113
+
114
+ def millimeters
115
+ (self.meters * 1000.0).round(@@ROUND)
116
+ end
117
+
118
+ def micrometers
119
+ (self.meters * (10.0 ** 6)).round(@@ROUND)
120
+ end
121
+
122
+ def nanometers
123
+ (self.meters * (10.0 ** 9)).round(@@ROUND)
124
+ end
125
+
126
+ def picometers
127
+ (self.meters * (10.0 ** 12)).round(@@ROUND)
128
+ end
129
+
130
+ def femtometers
131
+ (self.meters * (10.0 ** 15)).round(@@ROUND)
132
+ end
133
+
134
+ def attometers
135
+ (self.meters * (10.0 ** 18)).round(@@ROUND)
136
+ end
137
+
138
+ def zeptometers
139
+ (self.meters * (10.0 ** 21)).round(@@ROUND)
140
+ end
141
+
142
+ def yoctometers
143
+ (self.meters * (10.0 ** 24)).round(@@ROUND)
144
+ end
145
+
146
+ def feet
147
+ self.meters * @@METERS_TO_FEET
148
+ end
149
+
150
+ def inches
151
+ self.feet * 12
152
+ end
153
+
154
+ def thous
155
+ self.inches * 1000
156
+ end
157
+
158
+ def yards
159
+ self.feet / 3.0
160
+ end
161
+
162
+ def chains
163
+ self.feet / 66.0
164
+ end
165
+
166
+ def furlongs
167
+ self.feet / 660.0
168
+ end
169
+
170
+ def miles
171
+ self.feet / 5280.0
172
+ end
173
+
174
+ def leagues
175
+ self.feet / 15840.0
176
+ end
177
+
178
+ def fathoms
179
+ self.feet / 6.0
180
+ end
181
+
182
+ def cables
183
+ self.feet / 608.0
184
+ end
185
+
186
+ def nautical_miles
187
+ self.feet / 6080.0
188
+ end
189
+
190
+ def au
191
+ self.meters / @@AU_TO_METERS
192
+ end
193
+
194
+ def to_metric
195
+ new_distance = self.clone
196
+ new_distance.mode = :metric
197
+ new_distance
198
+ end
199
+
200
+ def to_imperial
201
+ new_distance = self.clone
202
+ new_distance.mode = :imperial
203
+ new_distance
204
+ end
205
+
206
+ def to_astronomical
207
+ new_distance = self.clone
208
+ new_distance.mode = :astronomical
209
+ new_distance
210
+ end
211
+
212
+ def to_s_metric
213
+ sigdig = Math.sigdig(self.meters)
214
+
215
+ return "#{self.yottameters} Ym" if sigdig >= 24
216
+
217
+ return "#{self.yoctometers} ym" if sigdig <= -24
218
+
219
+ case sigdig
220
+ when -23..-21
221
+ return "#{self.zeptometers.round(@@DECIMAL_PLACES)} zm"
222
+ when -20..-18
223
+ return "#{self.attometers.round(@@DECIMAL_PLACES)} am"
224
+ when -17..-15
225
+ return "#{self.femtometers.round(@@DECIMAL_PLACES)} fm"
226
+ when -14..-12
227
+ return "#{self.picometers.round(@@DECIMAL_PLACES)} pm"
228
+ when -11..-9
229
+ return "#{self.nanometers.round(@@DECIMAL_PLACES)} nm"
230
+ when -8..-6
231
+ return "#{self.micrometers.round(@@DECIMAL_PLACES)} \u03bcm"
232
+ when -5..-3
233
+ return "#{self.millimeters.round(@@DECIMAL_PLACES)} mm"
234
+ when -2
235
+ return "#{self.centimeters.round(@@DECIMAL_PLACES)} cm"
236
+ when -1
237
+ return "#{self.decimeters.round(@@DECIMAL_PLACES)} dm"
238
+ when 0
239
+ return "#{self.meters.round(@@DECIMAL_PLACES)} m"
240
+ when 1
241
+ return "#{self.decameters.round(@@DECIMAL_PLACES)} dam"
242
+ when 2
243
+ return "#{self.hectometers.round(@@DECIMAL_PLACES)} hm"
244
+ when 3..5
245
+ return "#{self.kilometers.round(@@DECIMAL_PLACES)} km"
246
+ when 6..8
247
+ return "#{self.megameters.round(@@DECIMAL_PLACES)} Mm"
248
+ when 9..11
249
+ return "#{self.gigameters.round(@@DECIMAL_PLACES)} Gm"
250
+ when 12..14
251
+ return "#{self.terameters.round(@@DECIMAL_PLACES)} Tm"
252
+ when 15..17
253
+ return "#{self.petameters.round(@@DECIMAL_PLACES)} Pm"
254
+ when 18..20
255
+ return "#{self.exameters.round(@@DECIMAL_PLACES)} Em"
256
+ when 21..23
257
+ return "#{self.zettameters.round(@@DECIMAL_PLACES)} Zm"
258
+ else
259
+ return "#{self.meters.round(@@DECIMAL_PLACES)} m"
260
+ end
261
+ end
262
+
263
+ def to_s_imperial
264
+ feet = self.feet
265
+
266
+ return "#{self.inches.round(@@DECIMAL_PLACES)} in" if feet < 1
267
+
268
+ return "#{self.miles.round(@@DECIMAL_PLACES)} mi" if feet >= 5280 / 2
269
+
270
+ "#{feet.round(@@DECIMAL_PLACES)} ft"
271
+ end
272
+
273
+ def to_s_astronomical
274
+ "#{self.au} AU"
275
+ end
276
+
277
+ def to_f
278
+ case mode
279
+ when :metric
280
+ self.meters.to_f
281
+ when :imperial
282
+ self.feet.to_f
283
+ when :astronomical
284
+ self.au.to_f
285
+ else
286
+ self.to_f.to_s
287
+ end
288
+ end
289
+
290
+ def to_s
291
+ case mode
292
+ when :metric
293
+ self.to_s_metric
294
+ when :imperial
295
+ self.to_s_imperial
296
+ when :astronomical
297
+ self.to_s_astronomical
298
+ else
299
+ self.to_f.to_s
300
+ end
301
+ end
302
+ end
303
+
304
+ def meters(meters)
305
+ Distance.new meters, mode=:metric
306
+ end
307
+
308
+ def feet(feet)
309
+ Distance.new feet, mode=:imperial
310
+ end
311
+
312
+ def inches(inches)
313
+ Distance.new(inches / 12.0, mode=:imperial)
314
+ end
315
+
316
+ def miles(miles)
317
+ Distance.new(miles * 5280, mode=:imperial)
318
+ end
319
+
320
+ def au(au)
321
+ Distance.new au, mode=:astronomical
322
+ end
metadata ADDED
@@ -0,0 +1,88 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: distances
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Gregory H. Halverson
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-03-08 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.7'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.7'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ description: Convert between metric, imperial, and astronomical distances.
42
+ email:
43
+ - gregory.halverson@gmail.com
44
+ executables: []
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - .gitignore
49
+ - .idea/.name
50
+ - .idea/distances.iml
51
+ - .idea/encodings.xml
52
+ - .idea/misc.xml
53
+ - .idea/modules.xml
54
+ - .idea/scopes/scope_settings.xml
55
+ - .idea/vcs.xml
56
+ - Gemfile
57
+ - LICENSE.txt
58
+ - README.md
59
+ - Rakefile
60
+ - distances-0.0.1.gem
61
+ - distances.gemspec
62
+ - lib/distances.rb
63
+ - lib/distances/version.rb
64
+ homepage: https://github.com/gregory-halverson/distances
65
+ licenses:
66
+ - MIT
67
+ metadata: {}
68
+ post_install_message:
69
+ rdoc_options: []
70
+ require_paths:
71
+ - lib
72
+ required_ruby_version: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ required_rubygems_version: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - '>='
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ requirements: []
83
+ rubyforge_project:
84
+ rubygems_version: 2.0.15
85
+ signing_key:
86
+ specification_version: 4
87
+ summary: Distances
88
+ test_files: []