tastebook_country_select 2.0.2
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.
- data/.gitignore +5 -0
- data/.rspec +2 -0
- data/Gemfile +8 -0
- data/MIT-LICENSE +20 -0
- data/README.md +34 -0
- data/Rakefile +1 -0
- data/VERSION +1 -0
- data/country_select.gemspec +25 -0
- data/init.rb +1 -0
- data/lib/country_select.rb +109 -0
- data/lib/country_select/countries.yml +1476 -0
- data/lib/country_select/country_codes.rb +64 -0
- data/lib/country_select/version.rb +3 -0
- data/spec/country_select_spec.rb +50 -0
- data/spec/spec_helper.rb +17 -0
- metadata +78 -0
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
module CountryCodes # :nodoc:
|
|
2
|
+
def self.method_missing(name, *args)
|
|
3
|
+
if match = /find_([^_]*)_by_([^_]*)/.match(name.to_s)
|
|
4
|
+
raise "1 argument expected, #{args.size} provided." unless args.size == 1
|
|
5
|
+
|
|
6
|
+
required = match[1]
|
|
7
|
+
request = match[2]
|
|
8
|
+
if valid_attributes.include?(request) && valid_attributes.include?(required)
|
|
9
|
+
@countries[request][args[0].to_s.downcase][required.to_sym] || nil rescue nil
|
|
10
|
+
else
|
|
11
|
+
raise "#{request} is not a valid attribute, valid attributes for find_*_by_* are: #{valid_attributes.join(', ')}."
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
elsif match = /find_by_(.*)/.match(name.to_s)
|
|
15
|
+
raise "1 argument expected, #{args.size} provided." unless args.size == 1
|
|
16
|
+
|
|
17
|
+
request = match[1]
|
|
18
|
+
if valid_attributes.include?(request)
|
|
19
|
+
@countries[request][args[0].to_s.downcase] || nil_countries_hash
|
|
20
|
+
else
|
|
21
|
+
raise "#{request} is not a valid attribute, valid attributes for find_by_* are: #{valid_attributes.join(', ')}."
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
else
|
|
25
|
+
raise NoMethodError.new("Method '#{name}' not supported")
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def self.countries_for_select(*args)
|
|
30
|
+
# Ensure that each of the arguments is a valid attribute
|
|
31
|
+
args.each do |arg|
|
|
32
|
+
unless valid_attributes.include?(arg)
|
|
33
|
+
raise "#{arg} is not a valid attribute, valid attributes are: #{valid_attributes.join(', ')}"
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Build and return the desired array
|
|
38
|
+
@countries[@countries.keys.first].map do |index, country|
|
|
39
|
+
args.map { |a| country[a.to_sym] }
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def self.valid_attributes
|
|
44
|
+
@countries.keys
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def self.nil_countries_hash
|
|
48
|
+
hash = {}
|
|
49
|
+
valid_attributes.map { |attribute| hash[attribute.to_sym] = nil }
|
|
50
|
+
hash
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def self.load_countries_from_yaml
|
|
54
|
+
# Load countries
|
|
55
|
+
countries_from_file = YAML::load(File.open(File.expand_path(File.join(File.dirname(__FILE__), 'countries.yml'))))
|
|
56
|
+
|
|
57
|
+
# Build indexes for each attribute
|
|
58
|
+
@countries = {}
|
|
59
|
+
countries_from_file.first.keys.each do |key|
|
|
60
|
+
@countries[key.to_s] = {}
|
|
61
|
+
countries_from_file.each { |country| @countries[key.to_s][country[key].to_s.downcase] = country }
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'country_select'
|
|
3
|
+
|
|
4
|
+
module ActionView
|
|
5
|
+
module Helpers
|
|
6
|
+
describe CountrySelect do
|
|
7
|
+
let!(:walrus) { Walrus.new }
|
|
8
|
+
let!(:template) { ActionView::Base.new }
|
|
9
|
+
|
|
10
|
+
let(:select_tag) do
|
|
11
|
+
"<select id=\"walrus_country_name\" name=\"walrus[country_name]\">"
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
let(:builder) { FormBuilder.new(:walrus, walrus, template, {}, Proc.new { }) }
|
|
15
|
+
|
|
16
|
+
describe "#country_select" do
|
|
17
|
+
let(:tag) { builder.country_select(:country_name) }
|
|
18
|
+
|
|
19
|
+
it "creates a select tag" do
|
|
20
|
+
tag.should include(select_tag)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it "creates option tags of the countries" do
|
|
24
|
+
COUNTRIES.each do |c|
|
|
25
|
+
c.gsub!(/'/,''')
|
|
26
|
+
tag.should include("<option value=\"#{c}\">#{c}</option>")
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it "selects the value of country_name" do
|
|
31
|
+
walrus.country_name = 'United States'
|
|
32
|
+
t = builder.country_select(:country_name)
|
|
33
|
+
t.should include("<option value=\"United States\" selected=\"selected\">United States</option>")
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
describe "#priority_countries" do
|
|
38
|
+
let(:tag) { builder.country_select(:country_name, ['United States']) }
|
|
39
|
+
|
|
40
|
+
it "puts the countries at the top" do
|
|
41
|
+
tag.should include("#{select_tag}<option value=\"United States")
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
it "inserts a divider" do
|
|
45
|
+
tag.should include(">United States</option><option value=\"\" disabled=\"disabled\">-------------</option>")
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
data/spec/spec_helper.rb
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# This file was generated by the `rspec --init` command. Conventionally, all
|
|
2
|
+
# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
|
|
3
|
+
# Require this file using `require "spec_helper"` to ensure that it is only
|
|
4
|
+
# loaded once.
|
|
5
|
+
#
|
|
6
|
+
# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
|
|
7
|
+
RSpec.configure do |config|
|
|
8
|
+
config.treat_symbols_as_metadata_keys_with_true_values = true
|
|
9
|
+
config.run_all_when_everything_filtered = true
|
|
10
|
+
config.filter_run :focus
|
|
11
|
+
|
|
12
|
+
# Run specs in random order to surface order dependencies. If you find an
|
|
13
|
+
# order dependency and want to debug it, you can fix the order by providing
|
|
14
|
+
# the seed, which is printed after each run.
|
|
15
|
+
# --seed 1234
|
|
16
|
+
config.order = 'random'
|
|
17
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: tastebook_country_select
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
prerelease: false
|
|
5
|
+
segments:
|
|
6
|
+
- 2
|
|
7
|
+
- 0
|
|
8
|
+
- 2
|
|
9
|
+
version: 2.0.2
|
|
10
|
+
platform: ruby
|
|
11
|
+
authors:
|
|
12
|
+
- Stefan Penner
|
|
13
|
+
autorequire:
|
|
14
|
+
bindir: bin
|
|
15
|
+
cert_chain: []
|
|
16
|
+
|
|
17
|
+
date: 2013-03-31 00:00:00 +05:30
|
|
18
|
+
default_executable:
|
|
19
|
+
dependencies: []
|
|
20
|
+
|
|
21
|
+
description: Provides a simple helper to get an HTML select list of countries. The list of countries comes from the ISO 3166 standard. While it is a relatively neutral source of country names, it will still offend some users.
|
|
22
|
+
email:
|
|
23
|
+
- stefan.penner@gmail.com
|
|
24
|
+
executables: []
|
|
25
|
+
|
|
26
|
+
extensions: []
|
|
27
|
+
|
|
28
|
+
extra_rdoc_files: []
|
|
29
|
+
|
|
30
|
+
files:
|
|
31
|
+
- .gitignore
|
|
32
|
+
- .rspec
|
|
33
|
+
- Gemfile
|
|
34
|
+
- MIT-LICENSE
|
|
35
|
+
- README.md
|
|
36
|
+
- Rakefile
|
|
37
|
+
- VERSION
|
|
38
|
+
- country_select.gemspec
|
|
39
|
+
- init.rb
|
|
40
|
+
- lib/country_select.rb
|
|
41
|
+
- lib/country_select/countries.yml
|
|
42
|
+
- lib/country_select/country_codes.rb
|
|
43
|
+
- lib/country_select/version.rb
|
|
44
|
+
- spec/country_select_spec.rb
|
|
45
|
+
- spec/spec_helper.rb
|
|
46
|
+
has_rdoc: true
|
|
47
|
+
homepage: ""
|
|
48
|
+
licenses: []
|
|
49
|
+
|
|
50
|
+
post_install_message:
|
|
51
|
+
rdoc_options: []
|
|
52
|
+
|
|
53
|
+
require_paths:
|
|
54
|
+
- lib
|
|
55
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
56
|
+
requirements:
|
|
57
|
+
- - ">="
|
|
58
|
+
- !ruby/object:Gem::Version
|
|
59
|
+
segments:
|
|
60
|
+
- 0
|
|
61
|
+
version: "0"
|
|
62
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
63
|
+
requirements:
|
|
64
|
+
- - ">="
|
|
65
|
+
- !ruby/object:Gem::Version
|
|
66
|
+
segments:
|
|
67
|
+
- 0
|
|
68
|
+
version: "0"
|
|
69
|
+
requirements: []
|
|
70
|
+
|
|
71
|
+
rubyforge_project: country_select
|
|
72
|
+
rubygems_version: 1.3.6
|
|
73
|
+
signing_key:
|
|
74
|
+
specification_version: 3
|
|
75
|
+
summary: Country Select Plugin
|
|
76
|
+
test_files:
|
|
77
|
+
- spec/country_select_spec.rb
|
|
78
|
+
- spec/spec_helper.rb
|