ruscountrylist 0.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 +14 -0
- data/.travis.yml +2 -0
- data/CHANGELOG.md +8 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +87 -0
- data/Rakefile +2 -0
- data/lib/generators/ruscountrylist/ruscountrylist_generator.rb +46 -0
- data/lib/generators/ruscountrylist/templates/migration.rb +25 -0
- data/lib/ruscountrylist/railtie.rb +11 -0
- data/lib/ruscountrylist/tasks.rb +33 -0
- data/lib/ruscountrylist/version.rb +4 -0
- data/lib/ruscountrylist.rb +49 -0
- data/ruscountrylist.gemspec +24 -0
- data/source/country-list.xml +2786 -0
- metadata +82 -0
data/.gitignore
ADDED
data/.travis.yml
ADDED
data/CHANGELOG.md
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
Copyright (c) 2012 vasche
|
|
2
|
+
|
|
3
|
+
MIT License
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
6
|
+
a copy of this software and associated documentation files (the
|
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
|
11
|
+
the following conditions:
|
|
12
|
+
|
|
13
|
+
The above copyright notice and this permission notice shall be
|
|
14
|
+
included in all copies or substantial portions of the Software.
|
|
15
|
+
|
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# Ruscountrylist
|
|
2
|
+
|
|
3
|
+
Список стран на русском языке.
|
|
4
|
+
Russian country list.
|
|
5
|
+
|
|
6
|
+
## Требования
|
|
7
|
+
* Ruby 1.9.3 (возможо, подойдет версия старше)
|
|
8
|
+
* Rails 3.2 (возможо, подойдет версия старше)
|
|
9
|
+
|
|
10
|
+
## Установка
|
|
11
|
+
|
|
12
|
+
Add this line to your application's Gemfile:
|
|
13
|
+
|
|
14
|
+
gem 'ruscountrylist'
|
|
15
|
+
|
|
16
|
+
And then execute:
|
|
17
|
+
|
|
18
|
+
$ bundle
|
|
19
|
+
|
|
20
|
+
Or install it yourself as:
|
|
21
|
+
|
|
22
|
+
$ gem install ruscountrylist
|
|
23
|
+
|
|
24
|
+
## Как использовать
|
|
25
|
+
|
|
26
|
+
### Список стран без генерации модели
|
|
27
|
+
|
|
28
|
+
В переменной содержится список стран
|
|
29
|
+
|
|
30
|
+
Ruscountrylist::RUS_COUNTRIES
|
|
31
|
+
|
|
32
|
+
Вывести список в select можно вот так:
|
|
33
|
+
|
|
34
|
+
select_tag "countries", options_for_select(Ruscountrylist::RUS_COUNTRIES)
|
|
35
|
+
|
|
36
|
+
Получаем:
|
|
37
|
+
|
|
38
|
+
<select id="countries" name="countries"><option value="Абхазия">Абхазия</option><option value="Австралия">Австралия</option>...</select>
|
|
39
|
+
|
|
40
|
+
###Установка с моделью по умолчанию: Country
|
|
41
|
+
|
|
42
|
+
Генерация модели и миграции
|
|
43
|
+
|
|
44
|
+
$ rails generate ruscountrylist
|
|
45
|
+
|
|
46
|
+
Выполнение миграции
|
|
47
|
+
|
|
48
|
+
$ rake db:migrate
|
|
49
|
+
|
|
50
|
+
Заполнение таблицы countries
|
|
51
|
+
|
|
52
|
+
$ rake ruscountrylist:install
|
|
53
|
+
|
|
54
|
+
### Модель с другим именем
|
|
55
|
+
Генерируем модель с именем "mymodel":
|
|
56
|
+
|
|
57
|
+
$ rails generate ruscountrylist --model=mymodel
|
|
58
|
+
|
|
59
|
+
Миграция:
|
|
60
|
+
|
|
61
|
+
$ rake db:migrate
|
|
62
|
+
|
|
63
|
+
Заполняем таблицу mymodels значениями:
|
|
64
|
+
|
|
65
|
+
$ rake ruscountrylist:install[mymodel]
|
|
66
|
+
|
|
67
|
+
### Использование после миграции
|
|
68
|
+
|
|
69
|
+
В контроллер добавляем:
|
|
70
|
+
|
|
71
|
+
@countries = Country.all
|
|
72
|
+
|
|
73
|
+
В шаблоне (на примере slim)
|
|
74
|
+
|
|
75
|
+
select_tag 'countries', options_from_collection_for_select(@countries, 'id', 'name')
|
|
76
|
+
|
|
77
|
+
## Contributing
|
|
78
|
+
|
|
79
|
+
1. Fork it
|
|
80
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
|
81
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
|
82
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
|
83
|
+
5. Create new Pull Request
|
|
84
|
+
|
|
85
|
+
## Авторы
|
|
86
|
+
|
|
87
|
+
* vasche
|
data/Rakefile
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
require 'rails/generators/migration'
|
|
4
|
+
|
|
5
|
+
module Ruscountrylist
|
|
6
|
+
module Generators
|
|
7
|
+
class RuscountrylistGenerator < Rails::Generators::Base
|
|
8
|
+
include Rails::Generators::Migration
|
|
9
|
+
|
|
10
|
+
namespace "ruscountrylist"
|
|
11
|
+
source_root File.expand_path(File.join(File.dirname(__FILE__), 'templates'))
|
|
12
|
+
|
|
13
|
+
class_option :model, :optional => true, :type => :string, :banner => "model",
|
|
14
|
+
:desc => "Specify the model class name if you will use anything other than 'Country'"
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
#generate model file
|
|
18
|
+
def create_model
|
|
19
|
+
generate("model #{model_class_name} --skip-migration")
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
#copy migration file
|
|
24
|
+
def copy_migration_file
|
|
25
|
+
migration_template "migration.rb", "db/migrate/create_#{model_class_name.pluralize.underscore}.rb"
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def self.next_migration_number(dirname) #:nodoc:
|
|
29
|
+
next_migration_number = current_migration_number(dirname) + 1
|
|
30
|
+
if ActiveRecord::Base.timestamped_migrations
|
|
31
|
+
[Time.now.strftime("%Y%m%d%H%M%S"), "%.14d" % next_migration_number].max
|
|
32
|
+
else
|
|
33
|
+
"%.3d" % next_migration_number
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
private
|
|
39
|
+
|
|
40
|
+
def model_class_name
|
|
41
|
+
options[:model] ? options[:model].classify : "Country"
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
class Create<%= model_class_name.pluralize %> < ActiveRecord::Migration
|
|
3
|
+
def self.up
|
|
4
|
+
create_table :<%= model_class_name.pluralize.underscore %> do |t|
|
|
5
|
+
t.string :name, null: false #Наименование
|
|
6
|
+
t.string :fullname #Полное наименование
|
|
7
|
+
t.string :english #На английском
|
|
8
|
+
t.string :alpha2 #Alpha2
|
|
9
|
+
t.string :alpha3 #Alpha3
|
|
10
|
+
t.string :iso #ISO
|
|
11
|
+
t.string :location #Часть света
|
|
12
|
+
t.string :location_precise #Расположение
|
|
13
|
+
t.boolean :enabled, :default => true
|
|
14
|
+
t.integer :show_order, :default => 0
|
|
15
|
+
|
|
16
|
+
t.timestamps
|
|
17
|
+
end
|
|
18
|
+
add_index :<%= model_class_name.pluralize.underscore %> , :name, :unique => true
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def self.down
|
|
22
|
+
drop_table :<%= model_class_name.pluralize.underscore %>
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
namespace :ruscountrylist do
|
|
3
|
+
desc "Populate country list"
|
|
4
|
+
task :install, [:model] => :environment do |t, args|
|
|
5
|
+
args.with_defaults(:model => "Country")
|
|
6
|
+
model_name_for_country = args[:model].camelize
|
|
7
|
+
|
|
8
|
+
require "rexml/document"
|
|
9
|
+
|
|
10
|
+
begin
|
|
11
|
+
model_name_for_country.constantize.first
|
|
12
|
+
rescue ActiveRecord::StatementInvalid => e
|
|
13
|
+
raise "Please run migration first"
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
xml = File.open(File.expand_path('../../../source', __FILE__) +'/country-list.xml')
|
|
17
|
+
doc = REXML::Document.new(xml)
|
|
18
|
+
h = REXML::XPath.each( doc, "//country" )
|
|
19
|
+
h.each do |pars|
|
|
20
|
+
country = model_name_for_country.constantize.new
|
|
21
|
+
country.name = pars.elements[1].text
|
|
22
|
+
country.fullname = pars.elements[2].text
|
|
23
|
+
country.english = pars.elements[3].text
|
|
24
|
+
country.alpha2 = pars.elements[4].text
|
|
25
|
+
country.alpha3 = pars.elements[5].text
|
|
26
|
+
country.iso = pars.elements[6].text
|
|
27
|
+
country.location = pars.elements[7].text
|
|
28
|
+
country.location_precise = pars.elements[8].text
|
|
29
|
+
country.save
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
require "ruscountrylist/version"
|
|
3
|
+
require 'ruscountrylist/railtie' if defined?(Rails)
|
|
4
|
+
|
|
5
|
+
module Ruscountrylist
|
|
6
|
+
RUS_COUNTRIES = ["Абхазия", "Австралия", "Австрия", "Азербайджан", "Албания", "Алжир", "Американское Самоа",\
|
|
7
|
+
"Ангилья", "Ангола", "Андорра", "Антарктида", "Антигуа и Барбуда", "Аргентина", "Армения", "Аруба", \
|
|
8
|
+
"Афганистан", "Багамы", "Бангладеш", "Барбадос", "Бахрейн", "Беларусь", "Белиз", "Бельгия", "Бенин", \
|
|
9
|
+
"Бермуды", "Болгария", "Боливия, Многонациональное Государство", "Бонайре, Саба и Синт-Эстатиус", \
|
|
10
|
+
"Босния и Герцеговина", "Ботсвана", "Бразилия", "Британская территория в Индийском океане", \
|
|
11
|
+
"Бруней-Даруссалам", "Буркина-Фасо", "Бурунди", "Бутан", "Вануату", "Венгрия", \
|
|
12
|
+
"Венесуэла Боливарианская Республика", "Виргинские острова, Британские", "Виргинские острова, США", \
|
|
13
|
+
"Вьетнам", "Габон", "Гаити", "Гайана", "Гамбия", "Гана", "Гваделупа", "Гватемала", "Гвинея", "Гвинея-Бисау", \
|
|
14
|
+
"Германия", "Гернси", "Гибралтар", "Гондурас", "Гонконг", "Гренада", "Гренландия", "Греция", "Грузия", \
|
|
15
|
+
"Гуам", "Дания", "Джерси", "Джибути", "Доминика", "Доминиканская Республика", "Египет", "Замбия", "Западная Сахара", \
|
|
16
|
+
"Зимбабве", "Израиль", "Индия", "Индонезия", "Иордания", "Ирак", "Иран, Исламская Республика", "Ирландия", \
|
|
17
|
+
"Исландия", "Испания", "Италия", "Йемен", "Кабо-Верде", "Казахстан", "Камбоджа", "Камерун", "Канада", "Катар", \
|
|
18
|
+
"Кения", "Кипр", "Киргизия", "Кирибати", "Китай", "Кокосовые (Килинг) острова", "Колумбия", "Коморы", "Конго", \
|
|
19
|
+
"Конго, Демократическая Республика", "Корея, Народно-Демократическая Республика", "Корея, Республика", "Коста-Рика", \
|
|
20
|
+
"Кот д'Ивуар", "Куба", "Кувейт", "Кюрасао", "Лаос", "Латвия", "Лесото", "Ливан", "Ливийская Арабская Джамахирия", \
|
|
21
|
+
"Либерия", "Лихтенштейн", "Литва", "Люксембург", "Маврикий", "Мавритания", "Мадагаскар", "Майотта", "Макао", "Малави", \
|
|
22
|
+
"Малайзия", "Мали", "Малые Тихоокеанские отдаленные острова Соединенных Штатов", "Мальдивы", "Мальта", "Марокко", \
|
|
23
|
+
"Мартиника", "Маршалловы острова", "Мексика", "Микронезия, Федеративные Штаты", "Мозамбик", "Молдова, Республика", \
|
|
24
|
+
"Монако", "Монголия", "Монтсеррат", "Мьянма", "Намибия", "Науру", "Непал", "Нигер", "Нигерия", "Нидерланды", "Никарагуа", \
|
|
25
|
+
"Ниуэ", "Новая Зеландия", "Новая Каледония", "Норвегия", "Объединенные Арабские Эмираты", "Оман", "Остров Буве", \
|
|
26
|
+
"Остров Мэн", "Остров Норфолк", "Остров Рождества", "Остров Херд и острова Макдональд", "Острова Кайман", "Острова Кука", \
|
|
27
|
+
"Острова Теркс и Кайкос", "Пакистан", "Палау", "Палестинская территория, оккупированная", "Панама", \
|
|
28
|
+
"Папский Престол (Государство - город Ватикан)", "Папуа-Новая Гвинея", "Парагвай", "Перу", "Питкерн", \
|
|
29
|
+
"Польша", "Португалия", "Пуэрто-Рико", "Республика Македония", "Реюньон", "Россия", "Руанда", "Румыния", \
|
|
30
|
+
"Самоа", "Сан-Марино", "Сан-Томе и Принсипи", "Саудовская Аравия", "Свазиленд", "Святая Елена, Остров вознесения, Тристан-да-Кунья", \
|
|
31
|
+
"Северные Марианские острова", "Сен-Бартельми", "Сен-Мартен", "Сенегал", "Сент-Винсент и Гренадины", \
|
|
32
|
+
"Сент-Китс и Невис", "Сент-Люсия", "Сент-Пьер и Микелон", "Сербия", "Сейшелы", "Сингапур", "Синт-Мартен", \
|
|
33
|
+
"Сирийская Арабская Республика", "Словакия", "Словения", "Соединенное Королевство", "Соединенные Штаты", \
|
|
34
|
+
"Соломоновы острова", "Сомали", "Судан", "Суринам", "Сьерра-Леоне", "Таджикистан", "Таиланд", "Тайвань (Китай)", \
|
|
35
|
+
"Танзания, Объединенная Республика", "Тимор-Лесте", "Того", "Токелау", "Тонга", "Тринидад и Тобаго", "Тувалу", \
|
|
36
|
+
"Тунис", "Туркмения", "Турция", "Уганда", "Узбекистан", "Украина", "Уоллис и Футуна", "Уругвай", "Фарерские острова", \
|
|
37
|
+
"Фиджи", "Филиппины", "Финляндия", "Фолклендские острова (Мальвинские)", "Франция", "Французская Гвиана", \
|
|
38
|
+
"Французская Полинезия", "Французские Южные территории", "Хорватия", "Центрально-Африканская Республика", "Чад", \
|
|
39
|
+
"Черногория", "Чешская Республика", "Чили", "Швейцария", "Швеция", "Шпицберген и Ян Майен", "Шри-Ланка", "Эквадор", \
|
|
40
|
+
"Экваториальная Гвинея", "Эландские острова", "Эль-Сальвадор", "Эритрея", "Эстония", "Эфиопия", "Южная Африка", \
|
|
41
|
+
"Южная Джорджия и Южные Сандвичевы острова", "Южная Осетия", "Южный Судан", "Ямайка", "Япония"] unless const_defined?("RUS_COUNTRIES")
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
begin
|
|
45
|
+
require 'rails'
|
|
46
|
+
rescue LoadError
|
|
47
|
+
#do nothing
|
|
48
|
+
end
|
|
49
|
+
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
|
+
require 'ruscountrylist/version'
|
|
5
|
+
|
|
6
|
+
Gem::Specification.new do |gem|
|
|
7
|
+
gem.name = "ruscountrylist"
|
|
8
|
+
gem.version = Ruscountrylist::VERSION
|
|
9
|
+
gem.platform = Gem::Platform::RUBY
|
|
10
|
+
gem.authors = ["vasche"]
|
|
11
|
+
gem.email = ["cho.vasche@gmail.com"]
|
|
12
|
+
gem.description = %q{Create russian country list table}
|
|
13
|
+
gem.summary = %q{Create russian country list table}
|
|
14
|
+
gem.homepage = "https://github.com/vasche"
|
|
15
|
+
|
|
16
|
+
gem.files = `git ls-files`.split($/)
|
|
17
|
+
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
|
18
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
|
19
|
+
gem.require_paths = ["lib"]
|
|
20
|
+
|
|
21
|
+
gem.rubyforge_project = "ruscountrylist"
|
|
22
|
+
|
|
23
|
+
gem.add_development_dependency 'rake'
|
|
24
|
+
end
|