galaxy_converter 3.0.1 → 3.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/galaxy_converter/detector.rb +2 -2
- data/lib/galaxy_converter/note.rb +18 -10
- data/lib/galaxy_converter/roman_numeral.rb +17 -4
- data/lib/galaxy_converter/version.rb +1 -1
- metadata +1 -2
- data/lib/galaxy_converter/stretcher.rb +0 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 818318a9be3585e70bd5e6bf29377b441325385e41430454421dd0d5f7ad8b05
|
4
|
+
data.tar.gz: 18db9e32c0ffa14551bae511f98d42d9bd841485b3680c4004dd22b1db66d0b2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3403a2ec655b81beb9a216ec394a7fc08a0019f964bc1fd4bbb47b66baf9abc0ccbb08c7830e02dc29b578ea83cec3c667584a0a4609406eec492d4202aaed40
|
7
|
+
data.tar.gz: 5f896f540740558594bb98291378b643391e64660371fb87085a908fe6904a3dbf4dd7e5bbd07f266e351cf2b1f4db30eacb2a3ddcf0fb767def8b98107eb543
|
@@ -10,12 +10,12 @@ module GalaxyConverter
|
|
10
10
|
|
11
11
|
def initialize(notes, converter = Converter)
|
12
12
|
notes = notes.reject(&:question?)
|
13
|
-
@
|
13
|
+
@credits, @assertions = notes.partition { |note| note.instance_of? Credit }
|
14
14
|
@converter = converter.new(mapping)
|
15
15
|
end
|
16
16
|
|
17
17
|
def goods
|
18
|
-
@goods ||= @
|
18
|
+
@goods ||= @credits.reduce({}) do |acc, note|
|
19
19
|
matching = note.body.match(GOODS_RULE)
|
20
20
|
next acc unless matching
|
21
21
|
units, name, credits = matching.captures
|
@@ -5,7 +5,10 @@ module GalaxyConverter
|
|
5
5
|
NO_IDEA = "I have no idea what you are talking about"
|
6
6
|
|
7
7
|
def self.from(notes)
|
8
|
-
Array(notes).map
|
8
|
+
Array(notes).map do |body|
|
9
|
+
klass = body.index(/credits/i) ? Credit : Note
|
10
|
+
klass.new(body)
|
11
|
+
end
|
9
12
|
end
|
10
13
|
|
11
14
|
attr_reader :body, :units, :good
|
@@ -19,10 +22,6 @@ module GalaxyConverter
|
|
19
22
|
@body.end_with?(QUESTION)
|
20
23
|
end
|
21
24
|
|
22
|
-
def commercial?
|
23
|
-
!!@body.index("credits")
|
24
|
-
end
|
25
|
-
|
26
25
|
def answer(total = 0)
|
27
26
|
return NO_IDEA if total.zero?
|
28
27
|
[].tap do |s|
|
@@ -30,19 +29,28 @@ module GalaxyConverter
|
|
30
29
|
s << good.to_s.capitalize
|
31
30
|
s << "is"
|
32
31
|
s << "%g" % total
|
33
|
-
s << "Credits" if commercial?
|
34
32
|
end.reject(&:empty?).join(" ")
|
35
33
|
end
|
36
34
|
|
37
35
|
private def detect
|
38
|
-
|
39
|
-
return [tokens.join(" "), nil] unless commercial?
|
40
|
-
good = tokens.pop
|
41
|
-
[tokens.join(" "), good]
|
36
|
+
return stripped, nil
|
42
37
|
end
|
43
38
|
|
44
39
|
private def stripped
|
45
40
|
@body.sub(/#{PREFIXES.join("|")}/, "").sub(QUESTION, "").strip
|
46
41
|
end
|
47
42
|
end
|
43
|
+
|
44
|
+
class Credit < Note
|
45
|
+
def answer(total = 0)
|
46
|
+
s = super
|
47
|
+
s << " Credits"
|
48
|
+
end
|
49
|
+
|
50
|
+
private def detect
|
51
|
+
tokens = stripped.split
|
52
|
+
good = tokens.pop
|
53
|
+
[tokens.join(" "), good]
|
54
|
+
end
|
55
|
+
end
|
48
56
|
end
|
@@ -1,5 +1,4 @@
|
|
1
1
|
require "galaxy_converter/constraint"
|
2
|
-
require "galaxy_converter/stretcher"
|
3
2
|
|
4
3
|
module GalaxyConverter
|
5
4
|
class RomanNumeral
|
@@ -13,10 +12,18 @@ module GalaxyConverter
|
|
13
12
|
"I" => 1
|
14
13
|
}
|
15
14
|
|
16
|
-
|
15
|
+
STRETCH_MAP = {
|
16
|
+
"DCCCC" => "CM", # 900
|
17
|
+
"CCCC" => "CD", # 400
|
18
|
+
"LXXXX" => "XC", # 90
|
19
|
+
"XXXX" => "XL", # 40
|
20
|
+
"VIIII" => "IX", # 9
|
21
|
+
"IIII" => "IV" # 4
|
22
|
+
}
|
23
|
+
|
24
|
+
def initialize(value, constraint = Constraint)
|
17
25
|
@value = value.to_s.upcase
|
18
26
|
@constraint = constraint
|
19
|
-
@stretcher = stretcher
|
20
27
|
end
|
21
28
|
|
22
29
|
def to_s
|
@@ -25,7 +32,13 @@ module GalaxyConverter
|
|
25
32
|
|
26
33
|
def to_i
|
27
34
|
return 0 unless valid?
|
28
|
-
|
35
|
+
stretched.chars.sum { |symbol| SYMBOLS.fetch(symbol, 0) }
|
36
|
+
end
|
37
|
+
|
38
|
+
private def stretched
|
39
|
+
@stretched ||= STRETCH_MAP.reduce(@value) do |value, (long, short)|
|
40
|
+
value.gsub(short, long)
|
41
|
+
end
|
29
42
|
end
|
30
43
|
|
31
44
|
private def valid?
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: galaxy_converter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- costajob
|
@@ -76,7 +76,6 @@ files:
|
|
76
76
|
- lib/galaxy_converter/note.rb
|
77
77
|
- lib/galaxy_converter/responder.rb
|
78
78
|
- lib/galaxy_converter/roman_numeral.rb
|
79
|
-
- lib/galaxy_converter/stretcher.rb
|
80
79
|
- lib/galaxy_converter/version.rb
|
81
80
|
- notes.txt
|
82
81
|
homepage: https://github.com/costajob/galaxy_converter
|
@@ -1,20 +0,0 @@
|
|
1
|
-
module GalaxyConverter
|
2
|
-
module Stretcher
|
3
|
-
extend self
|
4
|
-
|
5
|
-
LONG_TO_SHORT = {
|
6
|
-
"DCCCC" => "CM", # 900
|
7
|
-
"CCCC" => "CD", # 400
|
8
|
-
"LXXXX" => "XC", # 90
|
9
|
-
"XXXX" => "XL", # 40
|
10
|
-
"VIIII" => "IX", # 9
|
11
|
-
"IIII" => "IV" # 4
|
12
|
-
}
|
13
|
-
|
14
|
-
def call(value)
|
15
|
-
LONG_TO_SHORT.reduce(value) do |to_convert, (long, short)|
|
16
|
-
to_convert.gsub(short, long)
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|