numerale 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in numerale.gemspec
4
+ gemspec
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
Binary file
@@ -0,0 +1,3 @@
1
+ module Numerale
2
+ VERSION = "0.0.1"
3
+ end
data/lib/numerale.rb ADDED
@@ -0,0 +1,149 @@
1
+ class Numerale
2
+ UNITS = {0 => "zero",
3
+ 1 => "jeden",
4
+ 2 => "dwa",
5
+ 3 => "trzy",
6
+ 4 => "cztery",
7
+ 5 => "pięć",
8
+ 6 => "sześć",
9
+ 7 => "siedem",
10
+ 8 => "osiem",
11
+ 9 => "dziewięć",
12
+ 10 => "dziesięć",
13
+ 11 => "jedenaście",
14
+ 12 => "dwanaście",
15
+ 13 => "trzynaście",
16
+ 14 => "czternaście",
17
+ 15 => "piętnaście",
18
+ 16 => "szesnaście",
19
+ 17 => "siedemnaście",
20
+ 18 => "osiemnaście",
21
+ 19 => "dziewiętnaście",
22
+ 20 => "dwadzieścia",
23
+ 30 => 'trzydzieści',
24
+ 40 => 'czterdzieści',
25
+ 50 => 'pięćdziesiąt',
26
+ 60 => 'sześćdziesiąt',
27
+ 70 => 'siedemdziesiąt',
28
+ 80 => 'osiemdziesiąt',
29
+ 90 => 'dziewięćdziesiąt',
30
+ 100 => "sto",
31
+ 200 => "dwieście",
32
+ 300 => "trzysta",
33
+ 400 => "czterysta",
34
+ 500 => "pięćset",
35
+ 600 => 'sześćset',
36
+ 700 => 'siedemset',
37
+ 800 => 'osiemset',
38
+ 900 => 'dziewięćset',
39
+ 1000 => {1 => 'tysiąc', 2 => 'tysiące', 5 => 'tysięcy'},
40
+ 1000000 => {1 => 'milion', 2 => 'miliony', 5 => 'milionów'},
41
+ 1000000000 => {1 => 'miliard', 2 => 'miliardy', 5 => 'miliardów'}}
42
+
43
+ CURRENCIES = {
44
+ 'PLN' => { 'full' => {1 => 'złoty', 2 => 'złote', 5 => 'złotych'}, 'frac' => {1 => 'grosz', 2 => 'grosze', 5 => 'groszy'} },
45
+ 'USD' => { 'full' => {1 => 'dollar', 2 => 'dollars', 5 => 'dollars'}, 'frac' => {1 => 'cent', 2 => 'cents', 5 => 'cents'}}
46
+ }
47
+
48
+
49
+ def initialize(d)
50
+ number = d
51
+ precision = 10**2
52
+ number = [number.to_i, ((number * precision).round % precision).to_i]
53
+
54
+ decomposition = []
55
+ i = 0
56
+ number.each do |n|
57
+ decomposition[i] = {}
58
+
59
+ if n == 0
60
+ decomposition[i][1] = 0
61
+ else
62
+ pow = 10**9
63
+ count = n
64
+
65
+ while pow > 0 do
66
+ decomposition[i][pow] = count / pow
67
+ count %= pow
68
+ pow /= 10**3
69
+ end
70
+ end
71
+ i += 1
72
+ end
73
+
74
+ @number = decomposition
75
+ end
76
+
77
+ def expand_partial(number, pow)
78
+ result = ""
79
+ @ones = 0
80
+
81
+ if number.include?(pow) && number[pow] > 0
82
+ hundreds = (number[pow] / 10**2) * 10**2
83
+ if (number[pow] % 10**2) < 20 && ((number[pow] % 10**2) > 10)
84
+ tens = (number[pow] % 10**2)
85
+ ones = 0
86
+ else
87
+ tens = ((number[pow] % 10**2) / 10) * 10
88
+ ones = number[pow] % 10
89
+ end
90
+
91
+ result += "#{UNITS[hundreds]} " if hundreds > 0
92
+ result += "#{UNITS[tens]} " if tens > 0
93
+ result += "#{UNITS[ones]} " if ones > 0
94
+
95
+ c = (hundreds > 0 || tens > 0) ? ones > 1 && ones < 5 ? 2 : 5 : ones == 1 ? 1 : ones < 5 ? 2 : 5
96
+ result += "#{UNITS[pow][c]} " if UNITS[pow].class == Hash
97
+
98
+ @hundreds = hundreds
99
+ @tens = tens
100
+ @ones = ones
101
+ end
102
+
103
+ return result
104
+ end
105
+
106
+ def expand(number, currency, ending)
107
+ result = ""
108
+
109
+ pow = 10**9
110
+ ones = 0
111
+
112
+ while pow > 0
113
+ result += expand_partial(number, pow)
114
+ pow /= 10**3
115
+ end
116
+
117
+
118
+ if result.strip == "" && number[1] == 0
119
+ result += "#{UNITS[0]} "
120
+ end
121
+
122
+ c = @hundreds > 0 || @tens > 0 ? @ones > 1 && @ones < 5 ? 2 : 5 : @ones == 1 ? 1 : @ones < 5 ? 2 : 5
123
+ result += "#{CURRENCIES[currency][ending][c]}" if result.strip != ""
124
+ end
125
+
126
+
127
+ def to_text(currency = "PLN")
128
+ result = ""
129
+ result = "#{expand(@number[0], currency, 'full')}"
130
+ result += " " if result.strip != ""
131
+ result += "#{expand(@number[1], currency, 'frac')}"
132
+ puts result
133
+ end
134
+ end
135
+ end
136
+
137
+ class Float
138
+ def to_text(currency = "PLN")
139
+ c = Numerale.new(self)
140
+ c.to_text(currency)
141
+ end
142
+ end
143
+
144
+ class Fixnum
145
+ def to_text(currency = "PLN")
146
+ c = Numerale.new(self)
147
+ c.to_text(currency)
148
+ end
149
+ end
data/numerale.gemspec ADDED
@@ -0,0 +1,22 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "numerale/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "numerale"
7
+ s.version = Numerale::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Piotr Debosz"]
10
+ s.email = ["piotr.debosz@gmail.com"]
11
+ s.homepage = ""
12
+ s.summary = %q{Gem allows change numerals to words}
13
+ s.description = %q{Gem allows change numerals to words (only in Polish, yet)}
14
+
15
+ s.rubyforge_project = "numerale"
16
+ s.add_development_dependency "rspec"
17
+
18
+ s.files = `git ls-files`.split("\n")
19
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
20
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
21
+ s.require_paths = ["lib"]
22
+ end
metadata ADDED
@@ -0,0 +1,87 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: numerale
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ version: 0.0.1
11
+ platform: ruby
12
+ authors:
13
+ - Piotr Debosz
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-05-12 00:00:00 +02:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: rspec
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 3
30
+ segments:
31
+ - 0
32
+ version: "0"
33
+ type: :development
34
+ version_requirements: *id001
35
+ description: Gem allows change numerals to words (only in Polish, yet)
36
+ email:
37
+ - piotr.debosz@gmail.com
38
+ executables: []
39
+
40
+ extensions: []
41
+
42
+ extra_rdoc_files: []
43
+
44
+ files:
45
+ - .gitignore
46
+ - Gemfile
47
+ - Rakefile
48
+ - lib/numerale.rb
49
+ - lib/numerale/.DS_Store
50
+ - lib/numerale/version.rb
51
+ - numerale.gemspec
52
+ has_rdoc: true
53
+ homepage: ""
54
+ licenses: []
55
+
56
+ post_install_message:
57
+ rdoc_options: []
58
+
59
+ require_paths:
60
+ - lib
61
+ required_ruby_version: !ruby/object:Gem::Requirement
62
+ none: false
63
+ requirements:
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ hash: 3
67
+ segments:
68
+ - 0
69
+ version: "0"
70
+ required_rubygems_version: !ruby/object:Gem::Requirement
71
+ none: false
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ hash: 3
76
+ segments:
77
+ - 0
78
+ version: "0"
79
+ requirements: []
80
+
81
+ rubyforge_project: numerale
82
+ rubygems_version: 1.6.2
83
+ signing_key:
84
+ specification_version: 3
85
+ summary: Gem allows change numerals to words
86
+ test_files: []
87
+