icu_tournament 1.2.2 → 1.2.3
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/icu_tournament/federation.rb +8 -3
- data/lib/icu_tournament/version.rb +1 -1
- data/spec/federation_spec.rb +37 -22
- metadata +3 -3
@@ -56,7 +56,7 @@ module ICU
|
|
56
56
|
#
|
57
57
|
# ICU::Federation.menu(:none => 'None') # => [['None', ''], ['Afghanistan', 'AFG], ...]
|
58
58
|
#
|
59
|
-
# The "None" option's code is the empty string and it
|
59
|
+
# The "None" option's code is the empty string and it comes above the "top" option if both are specified.
|
60
60
|
#
|
61
61
|
class Federation
|
62
62
|
attr_reader :code, :name
|
@@ -68,7 +68,7 @@ module ICU
|
|
68
68
|
return nil unless str
|
69
69
|
str = str.to_s
|
70
70
|
return nil if str.length < 3
|
71
|
-
compile
|
71
|
+
compile
|
72
72
|
str = str.strip.squeeze(' ').downcase
|
73
73
|
return @@codes[str] if str.length == 3
|
74
74
|
return @@names[str] if @@names[str]
|
@@ -82,7 +82,7 @@ module ICU
|
|
82
82
|
end
|
83
83
|
|
84
84
|
def self.menu(opts = {})
|
85
|
-
compile
|
85
|
+
compile
|
86
86
|
top, menu = nil, []
|
87
87
|
@@objects.each {|o| opts[:top] == o.code ? top = [o.name, o.code] : menu.push([o.name, o.code]) }
|
88
88
|
opts[:order] == 'code' ? menu.sort!{|a,b| a.last <=> b.last} : menu.sort!{|a,b| a.first <=> b.first}
|
@@ -90,6 +90,11 @@ module ICU
|
|
90
90
|
menu.unshift([opts[:none], '']) if opts[:none]
|
91
91
|
menu
|
92
92
|
end
|
93
|
+
|
94
|
+
def self.codes
|
95
|
+
compile
|
96
|
+
@@objects.map(&:code).sort
|
97
|
+
end
|
93
98
|
|
94
99
|
def initialize(code, name) # :nodoc: because new is private
|
95
100
|
@code = code
|
data/spec/federation_spec.rb
CHANGED
@@ -8,70 +8,70 @@ module ICU
|
|
8
8
|
fed.code.should == 'IRL'
|
9
9
|
fed.name.should == 'Ireland'
|
10
10
|
end
|
11
|
-
|
11
|
+
|
12
12
|
it "should find a federation from code case insensitively" do
|
13
13
|
fed = Federation.find('rUs')
|
14
14
|
fed.code.should == 'RUS'
|
15
15
|
fed.name.should == 'Russia'
|
16
16
|
end
|
17
|
-
|
17
|
+
|
18
18
|
it "should find a federation despite irrelevant whitespace" do
|
19
19
|
fed = Federation.find(' mex ')
|
20
20
|
fed.code.should == 'MEX'
|
21
21
|
fed.name.should == 'Mexico'
|
22
22
|
end
|
23
|
-
|
23
|
+
|
24
24
|
it "should return nil for an invalid code" do
|
25
25
|
Federation.find('XYZ').should be_nil
|
26
26
|
end
|
27
27
|
end
|
28
|
-
|
28
|
+
|
29
29
|
context "#find using names" do
|
30
30
|
it "should find a federation given a valid name" do
|
31
31
|
fed = Federation.find('England')
|
32
32
|
fed.code.should == 'ENG'
|
33
33
|
fed.name.should == 'England'
|
34
34
|
end
|
35
|
-
|
35
|
+
|
36
36
|
it "should find a federation from name case insensitively" do
|
37
37
|
fed = Federation.find('franCE')
|
38
38
|
fed.code.should == 'FRA'
|
39
39
|
fed.name.should == 'France'
|
40
40
|
end
|
41
|
-
|
41
|
+
|
42
42
|
it "should not be fooled by irrelevant whitespace" do
|
43
43
|
fed = Federation.find(' united states of america ')
|
44
44
|
fed.code.should == 'USA'
|
45
45
|
fed.name.should == 'United States of America'
|
46
46
|
end
|
47
|
-
|
47
|
+
|
48
48
|
it "should return nil for an invalid name" do
|
49
49
|
Federation.find('Mordor').should be_nil
|
50
50
|
end
|
51
51
|
end
|
52
|
-
|
52
|
+
|
53
53
|
context "#find using parts of names" do
|
54
54
|
it "should find a federation given a substring which is unique and at least 4 characters" do
|
55
55
|
fed = Federation.find('bosni')
|
56
56
|
fed.code.should == 'BIH'
|
57
57
|
fed.name.should == 'Bosnia and Herzegovina'
|
58
58
|
end
|
59
|
-
|
59
|
+
|
60
60
|
it "should not be fooled by irrelevant whitespace" do
|
61
61
|
fed = Federation.find(' arab EMIRATES ')
|
62
62
|
fed.code.should == 'UAE'
|
63
63
|
fed.name.should == 'United Arab Emirates'
|
64
64
|
end
|
65
|
-
|
65
|
+
|
66
66
|
it "should not find a federation if the substring matches more than one" do
|
67
67
|
Federation.find('land').should be_nil
|
68
68
|
end
|
69
|
-
|
69
|
+
|
70
70
|
it "should return nil for any string smaller in length than 3" do
|
71
71
|
Federation.find('ze').should be_nil
|
72
72
|
end
|
73
73
|
end
|
74
|
-
|
74
|
+
|
75
75
|
context "#find federations with alternative names" do
|
76
76
|
it "should find Macedonia multiple ways" do
|
77
77
|
Federation.find('MKD').name.should == 'Macedonia'
|
@@ -83,7 +83,7 @@ module ICU
|
|
83
83
|
Federation.find('former yugoslav republic').name.should == 'Macedonia'
|
84
84
|
end
|
85
85
|
end
|
86
|
-
|
86
|
+
|
87
87
|
context "#find with alternative inputs" do
|
88
88
|
it "should behave robustly with completely invalid inputs" do
|
89
89
|
Federation.find().should be_nil
|
@@ -92,13 +92,13 @@ module ICU
|
|
92
92
|
Federation.find(1).should be_nil
|
93
93
|
end
|
94
94
|
end
|
95
|
-
|
95
|
+
|
96
96
|
context "#new is private" do
|
97
97
|
it "#new cannot be called directly" do
|
98
98
|
lambda { Federation.new('IRL', 'Ireland') }.should raise_error(/private method/)
|
99
99
|
end
|
100
100
|
end
|
101
|
-
|
101
|
+
|
102
102
|
context "documentation examples" do
|
103
103
|
it "should all be correct for valid input" do
|
104
104
|
Federation.find('IRL').name.should == 'Ireland'
|
@@ -107,18 +107,18 @@ module ICU
|
|
107
107
|
Federation.find('ongoli').name.should == 'Mongolia'
|
108
108
|
Federation.find(' united states ').code.should == 'USA'
|
109
109
|
end
|
110
|
-
|
110
|
+
|
111
111
|
it "should return nil for invalid input" do
|
112
112
|
Federation.find('ZYX').should be_nil
|
113
113
|
Federation.find('land').should be_nil
|
114
114
|
end
|
115
115
|
end
|
116
|
-
|
116
|
+
|
117
117
|
context "#menu" do
|
118
118
|
before(:all) do
|
119
119
|
@total = 173
|
120
120
|
end
|
121
|
-
|
121
|
+
|
122
122
|
it "should return array of name-code pairs in order of name by default" do
|
123
123
|
menu = Federation.menu
|
124
124
|
menu.should have(@total).items
|
@@ -129,7 +129,7 @@ module ICU
|
|
129
129
|
codes.index('AFG').should == 0
|
130
130
|
codes.index('IRQ,IRL,ISR').should_not be_nil
|
131
131
|
end
|
132
|
-
|
132
|
+
|
133
133
|
it "should be configuarble to order the list by codes" do
|
134
134
|
menu = Federation.menu(:order => "code")
|
135
135
|
menu.should have(@total).items
|
@@ -140,7 +140,7 @@ module ICU
|
|
140
140
|
codes.index('AFG').should == 0
|
141
141
|
codes.index('IRL,IRQ,ISL').should_not be_nil
|
142
142
|
end
|
143
|
-
|
143
|
+
|
144
144
|
it "should be configuarble to have a selected country at the top" do
|
145
145
|
menu = Federation.menu(:top => 'IRL')
|
146
146
|
menu.should have(@total).items
|
@@ -151,7 +151,7 @@ module ICU
|
|
151
151
|
codes.index('IRL,AFG').should == 0
|
152
152
|
codes.index('IRQ,ISR').should_not be_nil
|
153
153
|
end
|
154
|
-
|
154
|
+
|
155
155
|
it "should be configuarble to have 'None' entry at the top" do
|
156
156
|
menu = Federation.menu(:none => 'None')
|
157
157
|
menu.should have(@total + 1).items
|
@@ -160,7 +160,7 @@ module ICU
|
|
160
160
|
names.index('None,Afghanistan').should == 0
|
161
161
|
codes.index(',AFG').should == 0
|
162
162
|
end
|
163
|
-
|
163
|
+
|
164
164
|
it "should be able to handle multiple configuarations" do
|
165
165
|
menu = Federation.menu(:top => 'IRL', :order => 'code', :none => 'None')
|
166
166
|
menu.should have(@total + 1).items
|
@@ -172,5 +172,20 @@ module ICU
|
|
172
172
|
codes.index('IRQ,ISL').should_not be_nil
|
173
173
|
end
|
174
174
|
end
|
175
|
+
|
176
|
+
context "#codes" do
|
177
|
+
before(:all) do
|
178
|
+
@total = 173
|
179
|
+
end
|
180
|
+
|
181
|
+
it "should return array of codes ordered alphabetically" do
|
182
|
+
codes = Federation.codes
|
183
|
+
codes.should have(@total).items
|
184
|
+
all = codes.join(',')
|
185
|
+
puts all
|
186
|
+
all.index('AFG').should == 0
|
187
|
+
all.index('INA,IND,IRI,IRL,IRQ,ISL,ISR,ISV,ITA,IVB').should_not be_nil
|
188
|
+
end
|
189
|
+
end
|
175
190
|
end
|
176
191
|
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 1
|
7
7
|
- 2
|
8
|
-
-
|
9
|
-
version: 1.2.
|
8
|
+
- 3
|
9
|
+
version: 1.2.3
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Mark Orr
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2011-01-
|
17
|
+
date: 2011-01-09 00:00:00 +00:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|