arrabiata 0.1.0 → 0.3.0
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.
- data/README.md +3 -3
- data/Rakefile +8 -2
- data/VERSION +1 -1
- data/arrabiata.gemspec +6 -6
- data/lib/arrabiata.rb +34 -14
- data/spec/{arrabiata_to_arabian_spec.rb → arrabiata_to_arabic_spec.rb} +8 -8
- data/spec/arrabiata_to_roman_spec.rb +16 -0
- metadata +8 -8
data/README.md
CHANGED
@@ -1,9 +1,9 @@
|
|
1
|
-
##
|
1
|
+
## Arrabiata - dead simple conversion of roman letters <> arabic numerals
|
2
2
|
|
3
3
|
### Example
|
4
4
|
|
5
|
-
>>
|
5
|
+
>> Arrabiata.to_arabic("MC")
|
6
6
|
=> 1100
|
7
7
|
|
8
|
-
>>
|
8
|
+
>> Arrabiata.to_roman(1100)
|
9
9
|
=> "MC"
|
data/Rakefile
CHANGED
@@ -1,14 +1,16 @@
|
|
1
1
|
require 'rake/testtask'
|
2
2
|
require 'rspec/core/rake_task'
|
3
3
|
require 'rake/gempackagetask'
|
4
|
+
require "yard"
|
5
|
+
require "yard/rake/yardoc_task"
|
4
6
|
|
5
7
|
require 'jeweler'
|
6
8
|
Jeweler::Tasks.new do |gem|
|
7
9
|
gem.name = "arrabiata"
|
8
10
|
gem.homepage = "http://github.com/invadersmustdie/arrabiata"
|
9
11
|
gem.license = "MIT"
|
10
|
-
gem.summary = %Q{dead simple conversion of roman <>
|
11
|
-
gem.description = %Q{dead simple conversion of roman <>
|
12
|
+
gem.summary = %Q{dead simple conversion of roman <> arabic numerals}
|
13
|
+
gem.description = %Q{dead simple conversion of roman <> arabic numerals}
|
12
14
|
gem.email = "rugek@dirtyhack.net"
|
13
15
|
gem.authors = ["invadersmustdie"]
|
14
16
|
end
|
@@ -19,4 +21,8 @@ RSpec::Core::RakeTask.new(:spec) do |spec|
|
|
19
21
|
spec.rspec_opts = ['--colour', '-f documentation', '--backtrace']
|
20
22
|
end
|
21
23
|
|
24
|
+
YARD::Rake::YardocTask.new do |t|
|
25
|
+
t.files = FileList[ "lib/**/*.rb", "README.md"]
|
26
|
+
end
|
27
|
+
|
22
28
|
task :default => [:spec]
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.3.0
|
data/arrabiata.gemspec
CHANGED
@@ -5,12 +5,12 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{arrabiata}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.3.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["invadersmustdie"]
|
12
|
-
s.date = %q{2011-
|
13
|
-
s.description = %q{dead simple conversion of roman <>
|
12
|
+
s.date = %q{2011-12-26}
|
13
|
+
s.description = %q{dead simple conversion of roman <> arabic numerals}
|
14
14
|
s.email = %q{rugek@dirtyhack.net}
|
15
15
|
s.extra_rdoc_files = [
|
16
16
|
"LICENSE.txt",
|
@@ -23,7 +23,7 @@ Gem::Specification.new do |s|
|
|
23
23
|
"VERSION",
|
24
24
|
"arrabiata.gemspec",
|
25
25
|
"lib/arrabiata.rb",
|
26
|
-
"spec/
|
26
|
+
"spec/arrabiata_to_arabic_spec.rb",
|
27
27
|
"spec/arrabiata_to_roman_spec.rb",
|
28
28
|
"spec/spec_helper.rb"
|
29
29
|
]
|
@@ -31,9 +31,9 @@ Gem::Specification.new do |s|
|
|
31
31
|
s.licenses = ["MIT"]
|
32
32
|
s.require_paths = ["lib"]
|
33
33
|
s.rubygems_version = %q{1.3.7}
|
34
|
-
s.summary = %q{dead simple conversion of roman <>
|
34
|
+
s.summary = %q{dead simple conversion of roman <> arabic numerals}
|
35
35
|
s.test_files = [
|
36
|
-
"spec/
|
36
|
+
"spec/arrabiata_to_arabic_spec.rb",
|
37
37
|
"spec/arrabiata_to_roman_spec.rb",
|
38
38
|
"spec/spec_helper.rb"
|
39
39
|
]
|
data/lib/arrabiata.rb
CHANGED
@@ -4,34 +4,48 @@ class Arrabiata
|
|
4
4
|
class UnknownRomanNumberError < ArrabiataError; end
|
5
5
|
|
6
6
|
CONVERSION = {
|
7
|
-
"M"
|
8
|
-
"
|
9
|
-
"
|
10
|
-
"
|
11
|
-
"
|
12
|
-
"
|
13
|
-
"
|
7
|
+
"M" => 1000,
|
8
|
+
"CM" => 900,
|
9
|
+
"D" => 500,
|
10
|
+
"CD" => 400,
|
11
|
+
"C" => 100,
|
12
|
+
"XC" => 90,
|
13
|
+
"L" => 50,
|
14
|
+
"XL" => 40,
|
15
|
+
"X" => 10,
|
16
|
+
"IX" => 9,
|
17
|
+
"V" => 5,
|
18
|
+
"IV" => 4,
|
19
|
+
"I" => 1
|
14
20
|
}
|
15
21
|
|
22
|
+
# Converts arabic number to roman letters.
|
23
|
+
#
|
24
|
+
# @param [Fixnum] arabic number
|
25
|
+
# @return [String] roman letters
|
26
|
+
#
|
16
27
|
def self.to_roman(n)
|
17
28
|
raise ArgumentError, "first argument is not a Fixnum" if !n.is_a?(Fixnum)
|
18
29
|
raise NoZeroInRomanNumbers, "roman numeral system doesn't include 0" if n == 0
|
19
30
|
|
20
31
|
result = ""
|
21
32
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
result << k.first * x
|
27
|
-
n = n - x * k.last
|
33
|
+
CONVERSION.sort_by { |d| d.last }.reverse.each do |roman, arabic|
|
34
|
+
while(n >= arabic) do
|
35
|
+
result << roman
|
36
|
+
n -= arabic
|
28
37
|
end
|
29
38
|
end
|
30
39
|
|
31
40
|
result
|
32
41
|
end
|
33
42
|
|
34
|
-
|
43
|
+
# Converts roman letters to arabic number.
|
44
|
+
#
|
45
|
+
# @param [String] roman letters
|
46
|
+
# @return [Fixnum] arabic number
|
47
|
+
#
|
48
|
+
def self.to_arabic(str)
|
35
49
|
raise ArgumentError, "first argument is not a String" if !str.is_a?(String)
|
36
50
|
|
37
51
|
result = 0
|
@@ -43,4 +57,10 @@ class Arrabiata
|
|
43
57
|
|
44
58
|
result
|
45
59
|
end
|
60
|
+
|
61
|
+
# @deprecated
|
62
|
+
# Use .to_arabic instead.
|
63
|
+
def self.to_arabian(str)
|
64
|
+
to_arabic(str)
|
65
|
+
end
|
46
66
|
end
|
@@ -1,35 +1,35 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
|
-
describe "Arrabiata ->
|
3
|
+
describe "Arrabiata -> to_arabic" do
|
4
4
|
it "should fail on characters not defined in roman numerals" do
|
5
5
|
lambda {
|
6
|
-
Arrabiata.
|
6
|
+
Arrabiata.to_arabic("MVVa")
|
7
7
|
}.should raise_error(Arrabiata::UnknownRomanNumberError, "'a' is not defined in roman numbers")
|
8
8
|
end
|
9
9
|
|
10
10
|
it "should fail on invalid argument passed" do
|
11
11
|
lambda {
|
12
|
-
Arrabiata.
|
12
|
+
Arrabiata.to_arabic(4.2)
|
13
13
|
}.should raise_error(ArgumentError, "first argument is not a String")
|
14
14
|
end
|
15
15
|
|
16
16
|
it "should convert III to 3" do
|
17
|
-
Arrabiata.
|
17
|
+
Arrabiata.to_arabic("III").should == 3
|
18
18
|
end
|
19
19
|
|
20
20
|
it "should convert VIII to 8" do
|
21
|
-
Arrabiata.
|
21
|
+
Arrabiata.to_arabic("VIII").should == 8
|
22
22
|
end
|
23
23
|
|
24
24
|
it "should convert M to 1000" do
|
25
|
-
Arrabiata.
|
25
|
+
Arrabiata.to_arabic("M").should == 1000
|
26
26
|
end
|
27
27
|
|
28
28
|
it "should convert MIII to 1003" do
|
29
|
-
Arrabiata.
|
29
|
+
Arrabiata.to_arabic("MIII").should == 1003
|
30
30
|
end
|
31
31
|
|
32
32
|
it "should convert MMDCCCLV to 2855 " do
|
33
|
-
Arrabiata.
|
33
|
+
Arrabiata.to_arabic("MMDCCCLV").should == 2855
|
34
34
|
end
|
35
35
|
end
|
@@ -32,4 +32,20 @@ describe "Arrabiata -> to_roman" do
|
|
32
32
|
it "should convert 2855 to MMDCCCLV" do
|
33
33
|
Arrabiata.to_roman(2855).should == "MMDCCCLV"
|
34
34
|
end
|
35
|
+
|
36
|
+
it "should convert 79 to LXXIX" do
|
37
|
+
Arrabiata.to_roman(79).should == "LXXIX"
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should convert 4 to IV" do
|
41
|
+
Arrabiata.to_roman(4).should == "IV"
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should convert 19 to XIX" do
|
45
|
+
Arrabiata.to_roman(19).should == "XIX"
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should convert 8759 to MMMMMMMMDCCLIX" do
|
49
|
+
Arrabiata.to_roman(8759).should == "MMMMMMMMDCCLIX"
|
50
|
+
end
|
35
51
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: arrabiata
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 19
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
8
|
+
- 3
|
9
9
|
- 0
|
10
|
-
version: 0.
|
10
|
+
version: 0.3.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- invadersmustdie
|
@@ -15,11 +15,11 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
18
|
+
date: 2011-12-26 00:00:00 +01:00
|
19
19
|
default_executable:
|
20
20
|
dependencies: []
|
21
21
|
|
22
|
-
description: dead simple conversion of roman <>
|
22
|
+
description: dead simple conversion of roman <> arabic numerals
|
23
23
|
email: rugek@dirtyhack.net
|
24
24
|
executables: []
|
25
25
|
|
@@ -35,7 +35,7 @@ files:
|
|
35
35
|
- VERSION
|
36
36
|
- arrabiata.gemspec
|
37
37
|
- lib/arrabiata.rb
|
38
|
-
- spec/
|
38
|
+
- spec/arrabiata_to_arabic_spec.rb
|
39
39
|
- spec/arrabiata_to_roman_spec.rb
|
40
40
|
- spec/spec_helper.rb
|
41
41
|
has_rdoc: true
|
@@ -71,8 +71,8 @@ rubyforge_project:
|
|
71
71
|
rubygems_version: 1.3.7
|
72
72
|
signing_key:
|
73
73
|
specification_version: 3
|
74
|
-
summary: dead simple conversion of roman <>
|
74
|
+
summary: dead simple conversion of roman <> arabic numerals
|
75
75
|
test_files:
|
76
|
-
- spec/
|
76
|
+
- spec/arrabiata_to_arabic_spec.rb
|
77
77
|
- spec/arrabiata_to_roman_spec.rb
|
78
78
|
- spec/spec_helper.rb
|