male_or_female 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. data/.gitignore +18 -0
  2. data/Gemfile +4 -0
  3. data/LICENSE.txt +22 -0
  4. data/README.md +44 -0
  5. data/Rakefile +111 -0
  6. data/doc/logo.png +0 -0
  7. data/doc/logo.psd +0 -0
  8. data/lib/male_or_female/data_compiled/.DS_Store.yaml +20 -0
  9. data/lib/male_or_female/data_compiled/ru.yaml +452 -0
  10. data/lib/male_or_female/data_source/ru//320/260.yaml +14 -0
  11. data/lib/male_or_female/data_source/ru//320/261.yaml +35 -0
  12. data/lib/male_or_female/data_source/ru//320/262.yaml +39 -0
  13. data/lib/male_or_female/data_source/ru//320/263.yaml +24 -0
  14. data/lib/male_or_female/data_source/ru//320/264.yaml +30 -0
  15. data/lib/male_or_female/data_source/ru//320/265.yaml +9 -0
  16. data/lib/male_or_female/data_source/ru//320/266.yaml +13 -0
  17. data/lib/male_or_female/data_source/ru//320/267.yaml +17 -0
  18. data/lib/male_or_female/data_source/ru//320/270.yaml +14 -0
  19. data/lib/male_or_female/data_source/ru//320/272.yaml +24 -0
  20. data/lib/male_or_female/data_source/ru//320/273.yaml +21 -0
  21. data/lib/male_or_female/data_source/ru//320/274.yaml +23 -0
  22. data/lib/male_or_female/data_source/ru//320/275.yaml +19 -0
  23. data/lib/male_or_female/data_source/ru//320/276.yaml +11 -0
  24. data/lib/male_or_female/data_source/ru//320/277.yaml +24 -0
  25. data/lib/male_or_female/data_source/ru//321/200.yaml +19 -0
  26. data/lib/male_or_female/data_source/ru//321/201.yaml +37 -0
  27. data/lib/male_or_female/data_source/ru//321/202.yaml +21 -0
  28. data/lib/male_or_female/data_source/ru//321/203.yaml +13 -0
  29. data/lib/male_or_female/data_source/ru//321/205.yaml +12 -0
  30. data/lib/male_or_female/data_source/ru//321/206.yaml +8 -0
  31. data/lib/male_or_female/data_source/ru//321/207.yaml +12 -0
  32. data/lib/male_or_female/data_source/ru//321/210.yaml +9 -0
  33. data/lib/male_or_female/data_source/ru//321/211.yaml +8 -0
  34. data/lib/male_or_female/data_source/ru//321/215.yaml +11 -0
  35. data/lib/male_or_female/data_source/ru//321/216.yaml +14 -0
  36. data/lib/male_or_female/data_source/ru//321/217.yaml +9 -0
  37. data/lib/male_or_female/version.rb +3 -0
  38. data/lib/male_or_female.rb +83 -0
  39. data/male_or_female.gemspec +26 -0
  40. data/test/test_compiled_male_formal.rb +198 -0
  41. data/test/test_exception.rb +47 -0
  42. data/test/test_female_informal.rb +30 -0
  43. data/test/test_male_informal.rb +31 -0
  44. data/test/test_source_female_formal.rb +198 -0
  45. data/test/test_source_male_formal.rb +205 -0
  46. data/test/test_unisex_formal.rb +16 -0
  47. data/test/test_unisex_informal.rb +23 -0
  48. metadata +171 -0
data/.gitignore ADDED
@@ -0,0 +1,18 @@
1
+ .DS_Store
2
+ *.gem
3
+ *.rbc
4
+ .bundle
5
+ .config
6
+ .yardoc
7
+ .idea/
8
+ Gemfile.lock
9
+ InstalledFiles
10
+ _yardoc
11
+ coverage
12
+ lib/bundler/man
13
+ pkg
14
+ rdoc
15
+ spec/reports
16
+ test/tmp
17
+ test/version_tmp
18
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in male_or_female.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 Alex
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,44 @@
1
+ ![MaleOrFemale](https://raw.github.com/shlima/MaleOrFemale/master/doc/logo.png)
2
+
3
+ MaleOrFemale - gem для определения пола человека (male, female, unisex) по его имени. Гем также определяет тип имени (официальное или неформальное).
4
+
5
+ Демонстрация работы: http://typograf.herokuapp.com/gender
6
+
7
+ ## Использование
8
+
9
+ require 'male_or_female'
10
+ name = MaleOrFemale::Detector.new('Дима')
11
+ name.gender # => :male
12
+ name.format # => :informal
13
+
14
+ ## Параметры
15
+
16
+ Гем может принимать параметр *source* при создании экземпляра класса. Он указывает на источник данных (один скомпилированный файл или множество файлов по букве алфавита).
17
+
18
+ MaleOrFemale::Detector.new('Саша', source: :compiled)
19
+
20
+ MaleOrFemale::Detector.new('Олег', source: :source)
21
+
22
+ Режим 'source' включен по-умолчанию. В данном режиме данные берутся из файлов по первой букве имени. Данный режим выгодно использовать при небольшом количестве запросов.
23
+
24
+ ## Installation
25
+
26
+ Add this line to your application's Gemfile:
27
+
28
+ gem 'male_or_female'
29
+
30
+ And then execute:
31
+
32
+ $ bundle
33
+
34
+ Or install it yourself as:
35
+
36
+ $ gem install male_or_female
37
+
38
+ ## Contributing
39
+
40
+ 1. Fork it
41
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
42
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
43
+ 4. Push to the branch (`git push origin my-new-feature`)
44
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,111 @@
1
+ # encoding: UTF-8
2
+
3
+ # >>>>>>>>>>> TEST RAKE <<<<<<<<<<<<<<<
4
+
5
+ require 'rake/testtask'
6
+ Bundler::GemHelper.install_tasks
7
+
8
+ Rake::TestTask.new do |t|
9
+ t.libs << 'test'
10
+ end
11
+
12
+ desc 'Run tests'
13
+ task default: :test
14
+
15
+ # >>>>>>>>>>> TEST RAKE <<<<<<<<<<<<<<<
16
+
17
+
18
+ # >>>>>>>>>>> DATA:BUILD <<<<<<<<<<<<<<<
19
+
20
+ require 'bundler/gem_tasks'
21
+ require 'yaml'
22
+ require 'unicode_utils'
23
+ require 'colorize'
24
+ require 'male_or_female/version'
25
+
26
+ SOURCE_DIR = './lib/male_or_female/data_source'
27
+ COMPILED_DIR = './lib/male_or_female/data_compiled'
28
+
29
+ COPYRIGHT = \
30
+ <<COPY
31
+ # Copyright (c) #{Time.now.year} «Shilov Alexander».
32
+ # Licence: MIT License.
33
+
34
+ # |-------------------------------------|
35
+ # | DO NOT MODIFY THIS FILE! |
36
+ # |=====================================|
37
+ # | This file was created automatically |
38
+ # | by running a rake task. |
39
+ # | |
40
+ # | If you wish to modify data, please |
41
+ # | fork the gem, make changes in a |
42
+ # | data_source directory and make a |
43
+ # | pull request. Thanks. |
44
+ # |-------------------------------------|
45
+
46
+ # ---
47
+ # This File was build at: #{Time.now}
48
+ # Was build with Gem Version: #{MaleOrFemale::VERSION}
49
+ # ---
50
+
51
+ COPY
52
+
53
+ # Собирет один текстовый файл с данными об именах.
54
+ # Запускать перед публикацией гема.
55
+ #
56
+ # Структура каталога data_source:
57
+ # -data_source
58
+ # -ru (language)
59
+ # -а.yaml (буквы алфавита с которого начинается имя)
60
+ # -б.yaml
61
+
62
+ namespace :data do
63
+ desc 'Build data dictionaries into the one file'
64
+ task :build do
65
+
66
+ # Находим все поддиректории с языками
67
+ # В этой переменной образуется хеш следующего вида:
68
+ # "ru"=>["./lib/male_or_female/data_source/ru/a.yaml", ".../б.yaml"]
69
+ language_folders = {}
70
+
71
+ Dir.foreach(SOURCE_DIR) do |lang_folder|
72
+ next if lang_folder == '.' || lang_folder == '..'
73
+ language_folders[lang_folder] = []
74
+ Dir["#{SOURCE_DIR}/#{lang_folder}/*.yaml"].each { |file| language_folders[lang_folder] << file }
75
+ puts "Language '#{lang_folder}' was detected"
76
+ end
77
+
78
+ language_folders.each_key do |lang|
79
+ data_file = "#{COMPILED_DIR}/#{lang}.yaml"
80
+ puts "Compiling '#{data_file}'..."
81
+
82
+ # Если в папке уже есть скомпилированный файл,
83
+ # удалить его, создать пустой и записать копирайт.
84
+ FileUtils.rm(data_file) if File.exist?(data_file)
85
+ File.open(data_file, 'w+') do |f|
86
+ f.write COPYRIGHT
87
+
88
+ # ./lib/male_or_female/data_source/ru/a.yaml
89
+ language_folders[lang].each do |char_file|
90
+ source = YAML.load_file( File.expand_path(char_file) )
91
+
92
+ # Extract the letter from the file name
93
+ file_name = File.basename(char_file)
94
+ letter = UnicodeUtils.simple_upcase(file_name[0])
95
+
96
+ # Check if the source yaml file has a correct markup
97
+ if source[letter].nil?
98
+ puts "!!! Wrong data format at the #{char_file} !!!".red
99
+ break
100
+ end
101
+
102
+ # gsub removes all '---' chars (Yaml' start a new document syntax)
103
+ f.write source.to_yaml.gsub(/^(---)/, "# from #{char_file}")
104
+ puts "#{file_name} was successfully compiled".green
105
+ end
106
+ end
107
+ end
108
+ end
109
+ end
110
+
111
+ # >>>>>>>>>>> DATA:BUILD <<<<<<<<<<<<<<<
data/doc/logo.png ADDED
Binary file
data/doc/logo.psd ADDED
Binary file
@@ -0,0 +1,20 @@
1
+ # Copyright (c) 2013 «Shilov Alexander».
2
+ # Licence: MIT License.
3
+
4
+ # |-------------------------------------|
5
+ # | DO NOT MODIFY THIS FILE! |
6
+ # |=====================================|
7
+ # | This file was created automatically |
8
+ # | by running a rake task. |
9
+ # | |
10
+ # | If you wish to modify data, please |
11
+ # | fork the gem, make changes in a |
12
+ # | data_source directory and make a |
13
+ # | pull request. Thanks. |
14
+ # |-------------------------------------|
15
+
16
+ # ---
17
+ # This File was build at: 2013-04-24 22:11:37 +0300
18
+ # Was build with Gem Version: 1.0.0
19
+ # ---
20
+