country-select-iso 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/country-select-iso.rb +32 -3
- metadata +1 -1
data/lib/country-select-iso.rb
CHANGED
@@ -8,6 +8,10 @@ module ActionView
|
|
8
8
|
def country_select(object, method, options = {}, html_options = {})
|
9
9
|
InstanceTag.new(object, method, self, options.delete(:object)).to_country_select_tag(options, html_options)
|
10
10
|
end
|
11
|
+
|
12
|
+
def state_select(object, method, options = {}, html_options = {})
|
13
|
+
InstanceTag.new(object, method, self, options.delete(:object)).to_state_select_tag(options, html_options)
|
14
|
+
end
|
11
15
|
# Returns a string of option tags for pretty much any country in the world. Supply a country name as +selected+ to
|
12
16
|
# have it marked as the selected option tag. You can also supply an array of countries as +priority_countries+, so
|
13
17
|
# that they will be listed above the rest of the (long) list.
|
@@ -24,7 +28,7 @@ module ActionView
|
|
24
28
|
|
25
29
|
if priority_countries
|
26
30
|
country_options += options_for_select(countries
|
27
|
-
.select{|c| !priority_countries.index{|pc|
|
31
|
+
.select{|c| !priority_countries.index{|pc| country_matches(c, pc)}.nil?}
|
28
32
|
.map{|c| [c[:name], c[value]]}, selected)
|
29
33
|
country_options += "<option value=\"\" disabled=\"disabled\">-------------</option>\n"
|
30
34
|
end
|
@@ -32,7 +36,16 @@ module ActionView
|
|
32
36
|
country_options + options_for_select(countries.map{|c| [c[:name], c[value]]}, selected)
|
33
37
|
end
|
34
38
|
|
35
|
-
def
|
39
|
+
def state_options_for_select(selected = nil, options = nil)
|
40
|
+
options = options || {}
|
41
|
+
country = options[:country] || "US"
|
42
|
+
value = options[:value] || :full_code
|
43
|
+
name = options[:name] || :localized_name
|
44
|
+
states = ::CountrySelectIso::states.select{|s| s[:country_iso2] == country}.sort{|s1, s2| s1[name] <=> s2[name]}
|
45
|
+
options_for_select(states.map{|s| [s[name], s[value]]})
|
46
|
+
end
|
47
|
+
|
48
|
+
def country_matches country, value
|
36
49
|
country[:name] == value || country[:iso2] == value || country[:iso3] == value
|
37
50
|
end
|
38
51
|
end
|
@@ -49,11 +62,27 @@ module ActionView
|
|
49
62
|
), html_options
|
50
63
|
)
|
51
64
|
end
|
65
|
+
|
66
|
+
def to_state_select_tag(options, html_options)
|
67
|
+
html_options = html_options.stringify_keys
|
68
|
+
add_default_name_and_id(html_options)
|
69
|
+
value = value(object)
|
70
|
+
content_tag("select",
|
71
|
+
add_options(
|
72
|
+
state_options_for_select(value, options).html_safe,
|
73
|
+
options, value
|
74
|
+
), html_options
|
75
|
+
)
|
76
|
+
end
|
52
77
|
end
|
53
78
|
|
54
79
|
class FormBuilder
|
55
80
|
def country_select(method, options = {}, html_options = {})
|
56
|
-
@template.country_select(@object_name, method, options.merge(:
|
81
|
+
@template.country_select(@object_name, method, options.merge(object: @object), html_options)
|
82
|
+
end
|
83
|
+
|
84
|
+
def state_select(method, options = {}, html_options = {})
|
85
|
+
@template.state_select(@object_name, method, options.merge(object: @object), html_options)
|
57
86
|
end
|
58
87
|
end
|
59
88
|
end
|