fuelator 0.1.4 → 0.1.6
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/Gemfile.lock +1 -1
- data/README.md +5 -0
- data/bin/fuelator +1 -3
- data/lib/fuelator.rb +9 -11
- data/lib/fuelator/parameters.rb +31 -17
- data/lib/fuelator/parameters/pair.rb +30 -0
- data/lib/fuelator/version.rb +1 -1
- metadata +2 -2
- data/lib/fuelator/parameters/error.rb +0 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c0bec4abc5efa33fcc9f79013f97f931ed7c5ab1
|
4
|
+
data.tar.gz: a25945039a85d4bf73065dbad1c869a6efde096e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5fcdc1c966251aeb76a232c7b8f5c182901a72885ab054fc2dbd46fec5490a9f9ce6ce42dc56a344a7aea2dbda1fa291f89a2e87e95a4a10da626de84ba476c9
|
7
|
+
data.tar.gz: d629265f46eb5a8f9f223a8c8079f057f133658674eca2b4d32d534d6b21aa7516ddaab40f1e0ade421d6f47f9c1b48058d8b24ea78ae708fb2e613bcaf1f465
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -31,6 +31,11 @@ require 'fuelator'
|
|
31
31
|
Fuelator.calculate(28801, [[:launch, 9.807], [:land, 1.62], [:launch, 1.62], [:land, 9.807]])
|
32
32
|
# => 51898
|
33
33
|
```
|
34
|
+
Be ready do handle errors:
|
35
|
+
```ruby
|
36
|
+
Fuelator::Parameters::Error
|
37
|
+
```
|
38
|
+
|
34
39
|
## Development
|
35
40
|
|
36
41
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
data/bin/fuelator
CHANGED
@@ -32,9 +32,7 @@ def run(params, verbose)
|
|
32
32
|
end
|
33
33
|
result = Fuelator.calculate(params)
|
34
34
|
log "#{result.to_i} kg"
|
35
|
-
rescue Fuelator::
|
36
|
-
log_error(e, verbose)
|
37
|
-
rescue StandardError => e
|
35
|
+
rescue Fuelator::Parameters::Error, StandardError => e
|
38
36
|
log_error(e, verbose)
|
39
37
|
end
|
40
38
|
|
data/lib/fuelator.rb
CHANGED
@@ -23,7 +23,8 @@ module Fuelator
|
|
23
23
|
}
|
24
24
|
|
25
25
|
# @param [Array] params
|
26
|
-
#
|
26
|
+
# Example:
|
27
|
+
# [123, [[:launch, 123]]] or flatten [123, :launch, 123]
|
27
28
|
# params are validated and validation error may be raised
|
28
29
|
# @return Float - fuel for a flight
|
29
30
|
def self.calculate(*params)
|
@@ -31,26 +32,23 @@ module Fuelator
|
|
31
32
|
|
32
33
|
full_mass = parameters.mass
|
33
34
|
|
34
|
-
parameters.
|
35
|
+
parameters.pairs.reverse.map do |val|
|
35
36
|
full_mass += recursive_calculate(full_mass, val)
|
36
37
|
end.last - parameters.mass
|
37
38
|
end
|
38
39
|
|
39
40
|
private
|
40
41
|
|
41
|
-
def self.recursive_calculate(mass,
|
42
|
-
directive =
|
43
|
-
gravity =
|
42
|
+
def self.recursive_calculate(mass, pair)
|
43
|
+
directive = pair.directive
|
44
|
+
gravity = pair.gravity
|
44
45
|
constants = FLIGHT_CONSTANTS[directive]
|
45
46
|
|
46
|
-
|
47
|
-
|
48
|
-
rescue StandardError => e
|
49
|
-
raise Error.new(e.message)
|
50
|
-
end
|
47
|
+
fuel_mass = (mass * gravity * constants[:theta] - constants[:bias]).to_i # rounded down
|
48
|
+
|
51
49
|
|
52
50
|
return 0 if fuel_mass <= 0
|
53
|
-
result = recursive_calculate(fuel_mass,
|
51
|
+
result = recursive_calculate(fuel_mass, pair)
|
54
52
|
fuel_mass + result
|
55
53
|
end
|
56
54
|
end
|
data/lib/fuelator/parameters.rb
CHANGED
@@ -1,14 +1,18 @@
|
|
1
|
-
require 'fuelator/parameters/
|
1
|
+
require 'fuelator/parameters/pair'
|
2
2
|
# For flight parameters validation purposes
|
3
3
|
|
4
4
|
module Fuelator
|
5
5
|
class Parameters
|
6
|
-
|
6
|
+
class Error < StandardError; end
|
7
|
+
|
8
|
+
attr_reader :mass, :pairs, :directives_sequential
|
7
9
|
|
8
10
|
def initialize(params)
|
9
|
-
params
|
10
|
-
@mass
|
11
|
-
@
|
11
|
+
params = normalize(params)
|
12
|
+
@mass = params[0]
|
13
|
+
@pairs = params[1..-1].each_slice(2).to_a
|
14
|
+
.map { |pair| Pair.new(pair) }
|
15
|
+
@directives_sequential = directives_sequential?
|
12
16
|
|
13
17
|
validate!
|
14
18
|
end
|
@@ -20,22 +24,32 @@ module Fuelator
|
|
20
24
|
end
|
21
25
|
|
22
26
|
def validate!
|
23
|
-
|
24
|
-
|
27
|
+
instance_variables.each do |v|
|
28
|
+
v_name = v.to_s.gsub(/^@/, '')
|
29
|
+
raise Error.new("value for #{v_name} is invalid") unless send("valid_#{v_name}?")
|
30
|
+
end
|
25
31
|
end
|
26
32
|
|
27
|
-
def
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
dir = pair[0]
|
34
|
-
end
|
33
|
+
def valid_mass?
|
34
|
+
!mass.nil? && mass.is_a?(Float)
|
35
|
+
end
|
36
|
+
|
37
|
+
def valid_pairs?
|
38
|
+
!pairs.empty?
|
35
39
|
end
|
36
40
|
|
37
|
-
def
|
38
|
-
|
41
|
+
def valid_directives_sequential?
|
42
|
+
!directives_sequential
|
43
|
+
end
|
44
|
+
|
45
|
+
def directives_sequential?
|
46
|
+
directive = nil
|
47
|
+
pairs.map do |pair|
|
48
|
+
return true if directive == pair.directive
|
49
|
+
|
50
|
+
directive = pair.directive
|
51
|
+
end
|
52
|
+
false
|
39
53
|
end
|
40
54
|
end
|
41
55
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Fuelator
|
2
|
+
class Parameters
|
3
|
+
class Pair
|
4
|
+
DIRECTIVES = [:launch, :land]
|
5
|
+
attr_reader :directive, :gravity
|
6
|
+
|
7
|
+
def initialize(pair)
|
8
|
+
@directive = pair[0]
|
9
|
+
@gravity = pair[1]
|
10
|
+
|
11
|
+
validate!
|
12
|
+
end
|
13
|
+
|
14
|
+
def validate!
|
15
|
+
instance_variables.each do |v|
|
16
|
+
v_name = v.to_s.gsub(/^@/, '')
|
17
|
+
raise Error.new("value for #{v_name} is invalid") unless send("valid_#{v_name}?")
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def valid_directive?
|
22
|
+
Pair::DIRECTIVES.include?(directive) && directive.is_a?(Symbol)
|
23
|
+
end
|
24
|
+
|
25
|
+
def valid_gravity?
|
26
|
+
!gravity.nil? && gravity.is_a?(Float)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
data/lib/fuelator/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fuelator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sergii Brytiuk
|
@@ -38,7 +38,7 @@ files:
|
|
38
38
|
- fuelator.gemspec
|
39
39
|
- lib/fuelator.rb
|
40
40
|
- lib/fuelator/parameters.rb
|
41
|
-
- lib/fuelator/parameters/
|
41
|
+
- lib/fuelator/parameters/pair.rb
|
42
42
|
- lib/fuelator/version.rb
|
43
43
|
homepage: https://github.com/645383/fuelator
|
44
44
|
licenses:
|
@@ -1,15 +0,0 @@
|
|
1
|
-
# Flight parameters validation error,
|
2
|
-
# Add error descriptive message to map of messages when new validation case added
|
3
|
-
|
4
|
-
module Fuelator
|
5
|
-
class Parameters
|
6
|
-
class Error < StandardError
|
7
|
-
MESSAGES = {
|
8
|
-
format: "directive/gravity pairs should be in format string/float: directive: %s, gravity: %s",
|
9
|
-
sequence: "you can not pass 2 same directives in a sequence: %s => %s",
|
10
|
-
mass: "mass should be float: %s",
|
11
|
-
pairs: "provide pairs for directive/gravity: %s elements"
|
12
|
-
}
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|