hundredth 1.0.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 6eaf0f52c5b9a1cbf8cc6bad979e804886c24fe5
4
+ data.tar.gz: a9c222d9bcefe87b57681532ac76a608c9ef0072
5
+ SHA512:
6
+ metadata.gz: b9f7b26ee50ea7f8ce061cc2d1e763088e3aaa22eb005d38a81514de04483c6542c46d07503c722a653b3934c56231d0ce188642156dd4d72f6f56cfb7eac4b8
7
+ data.tar.gz: 6ab0390c7e1b28a087c044ccf5ccf38b29bc9b9f6cde2d9434dc26e369a4e2251ec51f43e861ca3a355a4daff3b2f7324e590cfb46ea24bbfa25c0ac94bbda67
@@ -0,0 +1,90 @@
1
+ class Hundredth
2
+ require 'hundredth/version'
3
+ require 'i18n'
4
+
5
+ @@gem_root = Gem.loaded_specs['hundredth'].full_gem_path
6
+ I18n.load_path += Dir.glob(File.join(@@gem_root, 'lib/locales/*.yml'))
7
+ I18n.backend.load_translations
8
+ I18n.config.enforce_available_locales = true
9
+ I18n.config.default_locale = :en
10
+
11
+ class << self
12
+ def ordinal(number, locale = Thread.current[:locale] || I18n.config.default_locale)
13
+ begin
14
+ number = number.to_int
15
+ rescue
16
+ raise HundredthError, I18n.t('hundredth.not_an_integer', number)
17
+ end
18
+
19
+ if (number < 1)
20
+ raise HundredthError, I18n.t('hundredth.less_than_one', number)
21
+ end
22
+
23
+ if (number > 100)
24
+ return beyond100(number, locale)
25
+ end
26
+
27
+ I18n.t 'hundredth.num_' + number.to_s, locale: locale
28
+ end
29
+
30
+ def default_locale
31
+ I18n.config.default_locale
32
+ end
33
+
34
+ def default_locale=(value)
35
+ I18n.config.default_locale = value
36
+ end
37
+ end
38
+
39
+ private
40
+ class << self
41
+ def beyond100(number, locale)
42
+ case locale.to_s.split('-').first
43
+ when 'en'
44
+ beyond100_en number
45
+ when 'es'
46
+ raise NotImplementedError
47
+ when 'fr'
48
+ raise NotImplementedError
49
+ else
50
+ raise NotImplementedError
51
+ end
52
+ end
53
+
54
+ # TODO option to just return the ordinal indicator
55
+ def beyond100_en(number)
56
+ # Higher ordinals are not often written in words, unless they are round numbers (thousandth,
57
+ # millionth, billionth). They are written using digits and letters as described below. Here are
58
+ # some rules that should be borne in mind.
59
+ #
60
+ # The suffixes -th, -st, -nd and -rd are occasionally written superscript above the number
61
+ # itself.
62
+ #
63
+ # If the tens digit of a number is 1, then write "th" after the number. For example: 13th, 19th,
64
+ # 112th, 9,311th.
65
+ # If the tens digit is not equal to 1, then use the following table:
66
+ # If the units digit is: 0 1 2 3 4 5 6 7 8 9
67
+ # write this after the number th st nd rd th th th th th th
68
+ # For example: 2nd, 7th, 20th, 23rd, 52nd, 135th, 301st.
69
+
70
+ if (number > 10) && (((number / 10) % 10) == 1)
71
+ return "#{number}th"
72
+ end
73
+
74
+ case number % 10
75
+ when 0, 4, 5, 6, 7, 8, 9
76
+ "#{number}th"
77
+ when 1
78
+ "#{number}st"
79
+ when 2
80
+ "#{number}nd"
81
+ when 3
82
+ "#{number}rd"
83
+ end
84
+ end
85
+ end
86
+ end
87
+
88
+ class HundredthError < StandardError
89
+ # just gives a strong named hundredth error
90
+ end
@@ -0,0 +1 @@
1
+ VERSION = '1.0.0'
@@ -0,0 +1,104 @@
1
+ en:
2
+ hundredth:
3
+ not_an_integer: '%{number} is not an integer and cannot be converted to an ordinal'
4
+ less_than_one: '%{number} must be one or greater'
5
+ num_1: first
6
+ num_2: second
7
+ num_3: third
8
+ num_4: fourth
9
+ num_5: fifth
10
+ num_6: sixth
11
+ num_7: seventh
12
+ num_8: eighth
13
+ num_9: ninth
14
+ num_10: tenth
15
+ num_11: eleventh
16
+ num_12: twelfth
17
+ num_13: thirteenth
18
+ num_14: fourteenth
19
+ num_15: fifteenth
20
+ num_16: sixteenth
21
+ num_17: seventeenth
22
+ num_18: eighteenth
23
+ num_19: nineteenth
24
+ num_20: twentieth
25
+ num_21: twenty first
26
+ num_22: twenty second
27
+ num_23: twenty third
28
+ num_24: twenty fourth
29
+ num_25: twenty fifth
30
+ num_26: twenty sixth
31
+ num_27: twenty seventh
32
+ num_28: twenty eighth
33
+ num_29: twenty ninth
34
+ num_30: thirtieth
35
+ num_31: thirty first
36
+ num_32: thirty second
37
+ num_33: thirty third
38
+ num_34: thirty fourth
39
+ num_35: thirty fifth
40
+ num_36: thirty sixth
41
+ num_37: thirty seventh
42
+ num_38: thirty eighth
43
+ num_39: thirty ninth
44
+ num_40: fortieth
45
+ num_41: forty first
46
+ num_42: forty second
47
+ num_43: forty third
48
+ num_44: forty fourth
49
+ num_45: forty fifth
50
+ num_46: forty sixth
51
+ num_47: forty seventh
52
+ num_48: forty eighth
53
+ num_49: forty ninth
54
+ num_50: fiftieth
55
+ num_51: fifty first
56
+ num_52: fifty second
57
+ num_53: fifty third
58
+ num_54: fifty fourth
59
+ num_55: fifty fifth
60
+ num_56: fifty sixth
61
+ num_57: fifty seventh
62
+ num_58: fifty eighth
63
+ num_59: fifty ninth
64
+ num_60: sixtieth
65
+ num_61: sixty first
66
+ num_62: sixty second
67
+ num_63: sixty third
68
+ num_64: sixty fourth
69
+ num_65: sixty fifth
70
+ num_66: sixty sixth
71
+ num_67: sixty seventh
72
+ num_68: sixty eighth
73
+ num_69: sixty ninth
74
+ num_70: seventieth
75
+ num_71: seventy first
76
+ num_72: seventy second
77
+ num_73: seventy third
78
+ num_74: seventy fourth
79
+ num_75: seventy fifth
80
+ num_76: seventy sixth
81
+ num_77: seventy seventh
82
+ num_78: seventy eighth
83
+ num_79: seventy ninth
84
+ num_80: eightieth
85
+ num_81: eighty first
86
+ num_82: eighty second
87
+ num_83: eighty third
88
+ num_84: eighty fourth
89
+ num_85: eighty fifth
90
+ num_86: eighty sixth
91
+ num_87: eighty seventh
92
+ num_88: eighty eighth
93
+ num_89: eighty ninth
94
+ num_90: ninetieth
95
+ num_91: ninety first
96
+ num_92: ninety second
97
+ num_93: ninety third
98
+ num_94: ninety fourth
99
+ num_95: ninety fifth
100
+ num_96: ninety sixth
101
+ num_97: ninety seventh
102
+ num_98: ninety eighth
103
+ num_99: ninety ninth
104
+ num_100: one hundredth
@@ -0,0 +1,102 @@
1
+ es:
2
+ hundredth:
3
+ num_1: primero
4
+ num_2: segundo
5
+ num_3: tercero
6
+ num_4: cuarto
7
+ num_5: quinto
8
+ num_6: sexto
9
+ num_7: séptimo
10
+ num_8: octavo
11
+ num_9: noveno
12
+ num_10: décimo
13
+ num_11: undécimo
14
+ num_12: duodécimo
15
+ num_13: decimotercero
16
+ num_14: decimocuarto
17
+ num_15: decimoquinto
18
+ num_16: decimosexto
19
+ num_17: decimoséptimo
20
+ num_18: decimoctavo
21
+ num_19: decimonono
22
+ num_20: vigésimo
23
+ num_21: vigésimo primero
24
+ num_22: vigésimo segundo
25
+ num_23: vigésimo tercero
26
+ num_24: vigésimo cuarto
27
+ num_25: vigésimo quinto
28
+ num_26: vigésimo sexto
29
+ num_27: vigésimo séptimo
30
+ num_28: vigésimo octavo
31
+ num_29: vigésimo noveno
32
+ num_30: trigésimo
33
+ num_31: trigésimo primero
34
+ num_32: trigésimo segundo
35
+ num_33: trigésimo tercero
36
+ num_34: trigésimo cuarto
37
+ num_35: trigésimo quinto
38
+ num_36: trigésimo sexto
39
+ num_37: trigésimo séptimo
40
+ num_38: trigésimo octavo
41
+ num_39: trigésimo noveno
42
+ num_40: cuadragésimo
43
+ num_41: cuadragésimo primero
44
+ num_42: cuadragésimo segundo
45
+ num_43: cuadragésimo tercero
46
+ num_44: cuadragésimo cuarto
47
+ num_45: cuadragésimo quinto
48
+ num_46: cuadragésimo sexto
49
+ num_47: cuadragésimo séptimo
50
+ num_48: cuadragésimo octavo
51
+ num_49: cuadragésimo noveno
52
+ num_50: quincuagésimo
53
+ num_51: quincuagésimo primero
54
+ num_52: quincuagésimo segundo
55
+ num_53: quincuagésimo tercero
56
+ num_54: quincuagésimo cuarto
57
+ num_55: quincuagésimo quinto
58
+ num_56: quincuagésimo sexto
59
+ num_57: quincuagésimo séptimo
60
+ num_58: quincuagésimo octavo
61
+ num_59: quincuagésimo noveno
62
+ num_60: sexagésimo
63
+ num_61: sexagésimo primero
64
+ num_62: sexagésimo segundo
65
+ num_63: sexagésimo tercero
66
+ num_64: sexagésimo cuarto
67
+ num_65: sexagésimo quinto
68
+ num_66: sexagésimo sexto
69
+ num_67: sexagésimo séptimo
70
+ num_68: sexagésimo octavo
71
+ num_69: sexagésimo noveno
72
+ num_70: septuagésimo
73
+ num_71: septuagésimo primero
74
+ num_72: septuagésimo segundo
75
+ num_73: septuagésimo tercero
76
+ num_74: septuagésimo cuarto
77
+ num_75: septuagésimo quinto
78
+ num_76: septuagésimo sexto
79
+ num_77: septuagésimo séptimo
80
+ num_78: septuagésimo octavo
81
+ num_79: septuagésimo noveno
82
+ num_80: octogésimo
83
+ num_81: octogésimo primero
84
+ num_82: octogésimo segundo
85
+ num_83: octogésimo tercero
86
+ num_84: octogésimo cuarto
87
+ num_85: octogésimo quinto
88
+ num_86: octogésimo sexto
89
+ num_87: octogésimo séptimo
90
+ num_88: octogésimo octavo
91
+ num_89: octogésimo noveno
92
+ num_90: nonagésimo
93
+ num_91: nonagésimo primero
94
+ num_92: nonagésimo segundo
95
+ num_93: nonagésimo tercero
96
+ num_94: nonagésimo cuarto
97
+ num_95: nonagésimo quinto
98
+ num_96: nonagésimo sexto
99
+ num_97: nonagésimo séptimo
100
+ num_98: nonagésimo octavo
101
+ num_99: nonagésimo noveno
102
+ num_100: centésimo
@@ -0,0 +1,102 @@
1
+ fr:
2
+ hundredth:
3
+ num_1: premier
4
+ num_2: deuxième
5
+ num_3: troisième
6
+ num_4: quatrième
7
+ num_5: cinquième
8
+ num_6: sixième
9
+ num_7: septième
10
+ num_8: huitième
11
+ num_9: neuvième
12
+ num_10: dixième
13
+ num_11: onzième
14
+ num_12: douzième
15
+ num_13: treizième
16
+ num_14: quatorzième
17
+ num_15: quinzième
18
+ num_16: seizième
19
+ num_17: dix-septième
20
+ num_18: dix-huitième
21
+ num_19: dix-neuvième
22
+ num_20: vingtième
23
+ num_21: vingt-et-unième
24
+ num_22: vingt-deuxième
25
+ num_23: vingt-troisième
26
+ num_24: vingt-quatrième
27
+ num_25: vingt-cinquième
28
+ num_26: vingt-sixième
29
+ num_27: vingt-septième
30
+ num_28: vingt-huitième
31
+ num_29: vingt-neuvième
32
+ num_30: trentième
33
+ num_31: trente-et-unième
34
+ num_32: trente-deuxième
35
+ num_33: trente-troisième
36
+ num_34: trente-quatrième
37
+ num_35: trente-cinquième
38
+ num_36: trente-sixième
39
+ num_37: trente-septième
40
+ num_38: trente-huitième
41
+ num_39: trente-neuvième
42
+ num_40: quarantième
43
+ num_41: quarante-et-unième
44
+ num_42: quarante-deuxième
45
+ num_43: quarante-troisième
46
+ num_44: quarante-quatrième
47
+ num_45: quarante-cinquième
48
+ num_46: quarante-sixième
49
+ num_47: quarante-septième
50
+ num_48: quarante-huitième
51
+ num_49: quarante-neuvième
52
+ num_50: cinquantième
53
+ num_51: cinquante-et-unième
54
+ num_52: cinquante-deuxième
55
+ num_53: cinquante-troisième
56
+ num_54: cinquante-quatrième
57
+ num_55: cinquante-cinquième
58
+ num_56: cinquante-sixième
59
+ num_57: cinquante-septième
60
+ num_58: cinquante-huitième
61
+ num_59: cinquante-neuvième
62
+ num_60: soixantième
63
+ num_61: soixante-et-unième
64
+ num_62: soixante-deuxième
65
+ num_63: soixante-troisième
66
+ num_64: soixante-quatrième
67
+ num_65: soixante-cinquième
68
+ num_66: soixante-sixième
69
+ num_67: soixante-septième
70
+ num_68: soixante-huitième
71
+ num_69: soixante-neuvième
72
+ num_70: soixante-dixième
73
+ num_71: soixante-et-onzième
74
+ num_72: soixante-douzième
75
+ num_73: soixante-treizième
76
+ num_74: soixante-quatorzième
77
+ num_75: soixante-quinzième
78
+ num_76: soixante-seizième
79
+ num_77: soixante-dix-septième
80
+ num_78: soixante-dix-huitième
81
+ num_79: soixante-dix-neuvième
82
+ num_80: quatre-vingtième
83
+ num_81: quatre-vingt-unième
84
+ num_82: quatre-vingt-deuxième
85
+ num_83: quatre-vingt-troisième
86
+ num_84: quatre-vingt-quatrième
87
+ num_85: quatre-vingt-cinquième
88
+ num_86: quatre-vingt-sixième
89
+ num_87: quatre-vingt-septième
90
+ num_88: quatre-vingt-huitième
91
+ num_89: quatre-vingt-neuvième
92
+ num_90: quatre-vingt-dixième
93
+ num_91: quatre-vingt-onzième
94
+ num_92: quatre-vingt-douzième
95
+ num_93: quatre-vingt-treizième
96
+ num_94: quatre-vingt-quatorzième
97
+ num_95: quatre-vingt-quinzième
98
+ num_96: quatre-vingt-seizième
99
+ num_97: quatre-vingt-dix-septième
100
+ num_98: quatre-vingt-dix-huitième
101
+ num_99: quatre-vingt-dix-neuvième
102
+ num_100: centième
metadata ADDED
@@ -0,0 +1,112 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: hundredth
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - John Cavalieri
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-01-16 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: i18n
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.6'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.6'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: minitest
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '5.5'
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ version: 5.5.1
65
+ type: :development
66
+ prerelease: false
67
+ version_requirements: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - "~>"
70
+ - !ruby/object:Gem::Version
71
+ version: '5.5'
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: 5.5.1
75
+ description: Writes out 1 to 100 full words. 101 and greater are are written out using
76
+ the number followed by the ordinal indicator, e.g. 'st', 'nd', 'rd'.
77
+ email:
78
+ - john.cavalieri@gmail.com
79
+ executables: []
80
+ extensions: []
81
+ extra_rdoc_files: []
82
+ files:
83
+ - lib/hundredth.rb
84
+ - lib/hundredth/version.rb
85
+ - lib/locales/en.yml
86
+ - lib/locales/es.yml
87
+ - lib/locales/fr.yml
88
+ homepage: http://github.com/jcavalieri/hundredth
89
+ licenses:
90
+ - MIT
91
+ metadata: {}
92
+ post_install_message:
93
+ rdoc_options: []
94
+ require_paths:
95
+ - lib
96
+ required_ruby_version: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - ">="
99
+ - !ruby/object:Gem::Version
100
+ version: '0'
101
+ required_rubygems_version: !ruby/object:Gem::Requirement
102
+ requirements:
103
+ - - ">="
104
+ - !ruby/object:Gem::Version
105
+ version: '0'
106
+ requirements: []
107
+ rubyforge_project:
108
+ rubygems_version: 2.2.2
109
+ signing_key:
110
+ specification_version: 4
111
+ summary: writes out ordinal numbers
112
+ test_files: []