ordinalize_full 1.3.0 → 1.4.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.
- checksums.yaml +4 -4
- data/.rubocop.yml +26 -0
- data/.travis.yml +2 -8
- data/Gemfile +1 -1
- data/LICENSE.txt +1 -1
- data/README.md +8 -1
- data/Rakefile +12 -2
- data/lib/ordinalize_full/integer.rb +0 -1
- data/lib/ordinalize_full/locales/es.yml +30 -0
- data/lib/ordinalize_full.rb +50 -15
- data/ordinalize_full.gemspec +5 -3
- data/spec/ordinalize_full_spec.rb +26 -1
- metadata +19 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c671e187d1a069f4174f286018ed9d8cf6209cca
|
4
|
+
data.tar.gz: bd49581d94bbb514031b2314ad50b1e6ada48edd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4886677f120a33543b12a4a8060677827ae2e5a19792c1a0fb961cb299576443d6f7e00cfdb0eacec8d0e2dbafae331027989e7227022228283e0cfd197f8115
|
7
|
+
data.tar.gz: 2717cc55b05711c180c8c45ef2b9998258239d825e7055955c2ee8dc34de141df02a0b596443aab367bd1eb2749d5529a378753bed4d8ea5467c32ea3502c954
|
data/.rubocop.yml
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
Metrics:
|
2
|
+
Enabled: false
|
3
|
+
|
4
|
+
Layout/AccessModifierIndentation:
|
5
|
+
EnforcedStyle: outdent
|
6
|
+
|
7
|
+
Layout/AlignParameters:
|
8
|
+
Enabled: false
|
9
|
+
|
10
|
+
Layout/CaseIndentation:
|
11
|
+
Enabled: false
|
12
|
+
|
13
|
+
Lint/EndAlignment:
|
14
|
+
Enabled: false
|
15
|
+
|
16
|
+
Style/Alias:
|
17
|
+
EnforcedStyle: prefer_alias_method
|
18
|
+
|
19
|
+
Style/Documentation:
|
20
|
+
Enabled: false
|
21
|
+
|
22
|
+
Style/StringLiterals:
|
23
|
+
EnforcedStyle: double_quotes
|
24
|
+
|
25
|
+
Style/SpecialGlobalVars:
|
26
|
+
Enabled: false
|
data/.travis.yml
CHANGED
@@ -1,16 +1,10 @@
|
|
1
1
|
language: ruby
|
2
|
-
after_script:
|
3
|
-
- cane --no-doc
|
4
2
|
rvm:
|
5
|
-
- 2.
|
6
|
-
- 2.
|
3
|
+
- 2.3.4
|
4
|
+
- 2.4.1
|
7
5
|
- ruby-head
|
8
6
|
- rbx
|
9
7
|
matrix:
|
10
8
|
allow_failures:
|
11
9
|
- rvm: ruby-head
|
12
10
|
- rvm: rbx
|
13
|
-
notifications:
|
14
|
-
email:
|
15
|
-
on_success: always
|
16
|
-
on_failure: always
|
data/Gemfile
CHANGED
data/LICENSE.txt
CHANGED
data/README.md
CHANGED
@@ -24,6 +24,13 @@ require "ordinalize_full/integer"
|
|
24
24
|
I18n.locale = :fr
|
25
25
|
42.ordinalize_in_full #=> "quarante-deuxième"
|
26
26
|
42.ordinalize #=> "42ème"
|
27
|
+
|
28
|
+
I18n.locale = :es
|
29
|
+
14.ordinalize_in_full(gender: :feminine, plurality: :plural) #=> decimocuartas
|
30
|
+
1.ordinalize_in_full #=> primer // default masculine, singular
|
31
|
+
22.ordinalize_in_full(gender: :feminine) #=> vigésima segunda // default singular
|
32
|
+
1.ordinalize #=> 1.ᵉʳ
|
33
|
+
55.ordinalize #=> 55.ᵒ
|
27
34
|
```
|
28
35
|
|
29
36
|
### Without monkey-patching
|
@@ -40,5 +47,5 @@ MyIntegerLikeClass.new.ordinalize_in_full #=> "forty second"
|
|
40
47
|
## Limitations
|
41
48
|
|
42
49
|
- only works up to 100 (for now)
|
43
|
-
- locales only available in English, French, Italian and Dutch (pull requests welcome!)
|
50
|
+
- locales only available in English, French, Italian, Spanish, and Dutch (pull requests welcome!)
|
44
51
|
|
data/Rakefile
CHANGED
@@ -1,8 +1,18 @@
|
|
1
1
|
require "bundler/gem_tasks"
|
2
|
-
require "rspec/core/rake_task"
|
3
2
|
|
3
|
+
require "rspec/core/rake_task"
|
4
4
|
RSpec::Core::RakeTask.new(:spec) do |t|
|
5
5
|
t.ruby_opts = "-w"
|
6
6
|
end
|
7
7
|
|
8
|
-
|
8
|
+
require "rubocop/rake_task"
|
9
|
+
RuboCop::RakeTask.new
|
10
|
+
|
11
|
+
require "cane/rake_task"
|
12
|
+
Cane::RakeTask.new do |t|
|
13
|
+
t.no_doc = true
|
14
|
+
t.style_measure = 120
|
15
|
+
t.abc_max = 20
|
16
|
+
end
|
17
|
+
|
18
|
+
task default: %i[spec rubocop cane]
|
@@ -0,0 +1,30 @@
|
|
1
|
+
es:
|
2
|
+
ordinalize_full:
|
3
|
+
n_1: primero
|
4
|
+
n_2: segundo
|
5
|
+
n_3: tercero
|
6
|
+
n_4: cuarto
|
7
|
+
n_5: quinto
|
8
|
+
n_6: sexto
|
9
|
+
n_7: séptimo
|
10
|
+
n_8: octavo
|
11
|
+
n_9: noveno
|
12
|
+
n_10: décimo
|
13
|
+
n_11: undécimo
|
14
|
+
n_12: duodécimo
|
15
|
+
n_13: decimotercero
|
16
|
+
n_14: decimocuarto
|
17
|
+
n_15: decimoquinto
|
18
|
+
n_16: decimosexto
|
19
|
+
n_17: decimoséptimo
|
20
|
+
n_18: decimoctavo
|
21
|
+
n_19: decimonoveno
|
22
|
+
n_20: vigésimo
|
23
|
+
n_30: trigésimo
|
24
|
+
n_40: cuadragésimo
|
25
|
+
n_50: quincuagésimo
|
26
|
+
n_60: sexagésimo
|
27
|
+
n_70: septuagésimo
|
28
|
+
n_80: octogésimo
|
29
|
+
n_90: nonagésimo
|
30
|
+
n_100: centésimo
|
data/lib/ordinalize_full.rb
CHANGED
@@ -3,34 +3,56 @@ require "i18n"
|
|
3
3
|
module OrdinalizeFull
|
4
4
|
I18n.load_path += Dir[File.join(__dir__, "ordinalize_full/locales/*.yml")]
|
5
5
|
|
6
|
-
def ordinalize(in_full: false)
|
7
|
-
in_full
|
6
|
+
def ordinalize(in_full: false, gender: :masculine, plurality: :singular)
|
7
|
+
if in_full
|
8
|
+
ordinalize_in_full(gender: gender, plurality: plurality)
|
9
|
+
else
|
10
|
+
ordinalize_in_short(gender: gender, plurality: plurality)
|
11
|
+
end
|
8
12
|
end
|
9
13
|
|
10
14
|
alias_method :ordinalize_full, \
|
11
|
-
def ordinalize_in_full
|
12
|
-
|
15
|
+
def ordinalize_in_full(gender: :masculine, plurality: :singular)
|
16
|
+
case I18n.locale
|
17
|
+
when :es
|
18
|
+
value = I18n.t("ordinalize_full.n_#{self}", throw: false, default: "")
|
19
|
+
|
20
|
+
if value.empty?
|
21
|
+
value = [
|
22
|
+
I18n.t("ordinalize_full.n_#{(self / 10) * 10}", throw: true),
|
23
|
+
I18n.t("ordinalize_full.n_#{self % 10}", throw: true)
|
24
|
+
].join(" ")
|
25
|
+
end
|
26
|
+
|
27
|
+
if gender == :feminine
|
28
|
+
value = value.split.map { |part| part.chop << "a" }.join(" ")
|
29
|
+
end
|
30
|
+
|
31
|
+
value << "s" if plurality == :plural
|
32
|
+
value = value.chop if value.end_with?("ero")
|
33
|
+
|
34
|
+
value
|
35
|
+
else
|
13
36
|
I18n.t("ordinalize_full.n_#{self}", throw: true)
|
14
|
-
rescue ArgumentError
|
15
|
-
raise NotImplementedError, "Unknown locale #{I18n.locale}"
|
16
37
|
end
|
38
|
+
rescue ArgumentError
|
39
|
+
raise NotImplementedError, "Unknown locale #{I18n.locale}"
|
17
40
|
end
|
18
41
|
|
19
42
|
private
|
20
43
|
|
21
|
-
def ordinalize_in_short
|
22
|
-
abs_number =
|
23
|
-
|
44
|
+
def ordinalize_in_short(gender: :masculine, plurality: :singular)
|
45
|
+
abs_number = to_i.abs
|
24
46
|
suffix = case I18n.locale
|
25
47
|
when :en
|
26
|
-
if (11..13).
|
48
|
+
if (11..13).cover?(abs_number % 100)
|
27
49
|
"th"
|
28
50
|
else
|
29
51
|
case abs_number % 10
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
52
|
+
when 1 then "st"
|
53
|
+
when 2 then "nd"
|
54
|
+
when 3 then "rd"
|
55
|
+
else "th"
|
34
56
|
end
|
35
57
|
end
|
36
58
|
when :fr
|
@@ -39,9 +61,22 @@ private
|
|
39
61
|
"°"
|
40
62
|
when :nl
|
41
63
|
[8, 1, 0].include?(self % 100) || self % 100 > 19 ? "ste" : "de"
|
64
|
+
when :es
|
65
|
+
value = ordinalize_in_full(gender: gender, plurality: plurality)
|
66
|
+
|
67
|
+
if value.end_with?("er")
|
68
|
+
".ᵉʳ"
|
69
|
+
elsif value.end_with?("a")
|
70
|
+
".ᵃ"
|
71
|
+
elsif value.end_with?("o")
|
72
|
+
".ᵒ"
|
73
|
+
elsif value.end_with?("os")
|
74
|
+
".ᵒˢ"
|
75
|
+
elsif value.end_with?("as")
|
76
|
+
".ᵃˢ"
|
77
|
+
end
|
42
78
|
end
|
43
79
|
|
44
80
|
[self, suffix].join
|
45
81
|
end
|
46
82
|
end
|
47
|
-
|
data/ordinalize_full.gemspec
CHANGED
@@ -1,13 +1,14 @@
|
|
1
1
|
# coding: utf-8
|
2
|
-
|
2
|
+
|
3
|
+
lib = File.expand_path("../lib", __FILE__)
|
3
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
5
|
|
5
6
|
Gem::Specification.new do |spec|
|
6
7
|
spec.name = "ordinalize_full"
|
7
|
-
spec.version = "1.
|
8
|
+
spec.version = "1.4.0"
|
8
9
|
spec.authors = ["Cédric Félizard"]
|
9
10
|
spec.email = ["cedric@felizard.fr"]
|
10
|
-
spec.summary =
|
11
|
+
spec.summary = "Turns a number into an ordinal string such as first, second, third or 1st, 2nd, 3rd."
|
11
12
|
spec.description = spec.summary
|
12
13
|
spec.homepage = "https://github.com/infertux/ordinalize_full"
|
13
14
|
spec.license = "MIT"
|
@@ -23,4 +24,5 @@ Gem::Specification.new do |spec|
|
|
23
24
|
spec.add_development_dependency "rake"
|
24
25
|
spec.add_development_dependency "rspec", "~> 3"
|
25
26
|
spec.add_development_dependency "cane"
|
27
|
+
spec.add_development_dependency "rubocop"
|
26
28
|
end
|
@@ -26,6 +26,20 @@ describe OrdinalizeFull do
|
|
26
26
|
specify { expect(1.ordinalize_in_full).to eq("eerste") }
|
27
27
|
specify { expect(22.ordinalize_in_full).to eq("tweeëntwintigste") }
|
28
28
|
end
|
29
|
+
|
30
|
+
context "with locale = :es" do
|
31
|
+
before { I18n.locale = :es }
|
32
|
+
|
33
|
+
specify { expect(1.ordinalize_in_full(gender: :feminine, plurality: :plural)).to eq("primeras") }
|
34
|
+
specify { expect(1.ordinalize_in_full).to eq("primer") }
|
35
|
+
specify { expect(13.ordinalize_in_full(gender: :feminine, plurality: :plural)).to eq("decimoterceras") }
|
36
|
+
specify { expect(13.ordinalize_in_full).to eq("decimotercer") }
|
37
|
+
specify { expect(14.ordinalize_in_full(gender: :feminine, plurality: :plural)).to eq("decimocuartas") }
|
38
|
+
specify { expect(55.ordinalize_in_full).to eq("quincuagésimo quinto") }
|
39
|
+
specify { expect(22.ordinalize_in_full(gender: :feminine, plurality: :plural)).to eq("vigésima segundas") }
|
40
|
+
specify { expect(22.ordinalize_in_full(gender: :feminine)).to eq("vigésima segunda") }
|
41
|
+
specify { expect(22.ordinalize_in_full(gender: :feminine, plurality: :singular)).to eq("vigésima segunda") }
|
42
|
+
end
|
29
43
|
end
|
30
44
|
|
31
45
|
describe "#ordinalize_full" do
|
@@ -60,6 +74,17 @@ describe OrdinalizeFull do
|
|
60
74
|
specify { expect(1.ordinalize(in_full: true)).to eq("eerste") }
|
61
75
|
specify { expect(1.ordinalize(in_full: false)).to eq("1ste") }
|
62
76
|
end
|
77
|
+
|
78
|
+
context "with locale = :es" do
|
79
|
+
before { I18n.locale = :es }
|
80
|
+
|
81
|
+
specify { expect(1.ordinalize(gender: :feminine, plurality: :plural)).to eq("1.ᵃˢ") }
|
82
|
+
specify { expect(1.ordinalize).to eq("1.ᵉʳ") }
|
83
|
+
specify { expect(13.ordinalize(gender: :feminine, plurality: :plural)).to eq("13.ᵃˢ") }
|
84
|
+
specify { expect(13.ordinalize).to eq("13.ᵉʳ") }
|
85
|
+
specify { expect(14.ordinalize(gender: :feminine, plurality: :plural)).to eq("14.ᵃˢ") }
|
86
|
+
specify { expect(55.ordinalize).to eq("55.ᵒ") }
|
87
|
+
specify { expect(22.ordinalize(gender: :feminine, plurality: :plural)).to eq("22.ᵃˢ") }
|
88
|
+
end
|
63
89
|
end
|
64
90
|
end
|
65
|
-
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ordinalize_full
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Cédric Félizard
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-06-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: i18n
|
@@ -80,6 +80,20 @@ dependencies:
|
|
80
80
|
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rubocop
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
83
97
|
description: Turns a number into an ordinal string such as first, second, third or
|
84
98
|
1st, 2nd, 3rd.
|
85
99
|
email:
|
@@ -89,6 +103,7 @@ extensions: []
|
|
89
103
|
extra_rdoc_files: []
|
90
104
|
files:
|
91
105
|
- ".gitignore"
|
106
|
+
- ".rubocop.yml"
|
92
107
|
- ".travis.yml"
|
93
108
|
- Gemfile
|
94
109
|
- LICENSE.txt
|
@@ -97,6 +112,7 @@ files:
|
|
97
112
|
- lib/ordinalize_full.rb
|
98
113
|
- lib/ordinalize_full/integer.rb
|
99
114
|
- lib/ordinalize_full/locales/en.yml
|
115
|
+
- lib/ordinalize_full/locales/es.yml
|
100
116
|
- lib/ordinalize_full/locales/fr.yml
|
101
117
|
- lib/ordinalize_full/locales/it.yml
|
102
118
|
- lib/ordinalize_full/locales/nl.yml
|
@@ -122,7 +138,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
122
138
|
version: '0'
|
123
139
|
requirements: []
|
124
140
|
rubyforge_project:
|
125
|
-
rubygems_version: 2.
|
141
|
+
rubygems_version: 2.6.8
|
126
142
|
signing_key:
|
127
143
|
specification_version: 4
|
128
144
|
summary: Turns a number into an ordinal string such as first, second, third or 1st,
|