faker_japanese 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: aa2074e5823b55f9f022b3616355a86926894d16
4
+ data.tar.gz: d509aa2f6ee814097be04c75ed5c89537e984efb
5
+ SHA512:
6
+ metadata.gz: fa07b8360b40aeae4f10e0dbde615a34617daeca9b4a0e71f8827462048774094d502e78ade28569ff35aa20c7c70403b513f116198d58e051d766848541e7fd
7
+ data.tar.gz: 8638f7ebb2b7f2d3006e714ceccada9ad6078b1fc8ec70eb21558de254b8ef536dec9a3d16f4a59caf744c8abedebdcafc5fdf5600867934373f96af755c2c2d
data/.gitignore ADDED
@@ -0,0 +1,41 @@
1
+ # System generic ignores
2
+ .DS_Store
3
+ .AppleDouble
4
+ .LSOverride
5
+
6
+ # Icon must end with two \r
7
+ Icon
8
+
9
+ # Thumbnails
10
+ ._*
11
+
12
+ # Files that might appear on external disk
13
+ .Spotlight-V100
14
+ .Trashes
15
+
16
+ # Directories potentially created on remote AFP share
17
+ .AppleDB
18
+ .AppleDesktop
19
+ Network Trash Folder
20
+ Temporary Items
21
+ .apdisk
22
+
23
+ # Gem specific ignores
24
+ *.gem
25
+ *.rbc
26
+ .bundle
27
+ .bin
28
+ .config
29
+ .yardoc
30
+ Gemfile.lock
31
+ InstalledFiles
32
+ _yardoc
33
+ coverage
34
+ doc/
35
+ lib/bundler/man
36
+ pkg
37
+ rdoc
38
+ spec/reports
39
+ test/tmp
40
+ test/version_tmp
41
+ tmp
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format Fuubar
2
+ --color
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in faker_japanese.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Denis Vazhenin
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,122 @@
1
+ # faker_japanese
2
+
3
+ Faker extension to generate Japanese names.
4
+ Provides fake first and last name in kanji,hiragana, katakana
5
+ and romaji(name written with latin alphabet).
6
+
7
+ ## Installation
8
+
9
+ Add this line to your application's Gemfile:
10
+
11
+ gem 'faker_japanese'
12
+
13
+ And then execute:
14
+
15
+ $ bundle
16
+
17
+ Or install it yourself as:
18
+
19
+ $ gem install faker_japanese
20
+
21
+ ## Usage
22
+
23
+ To enable faker_japanese manually use
24
+
25
+ ```
26
+ require 'faker/japanese'
27
+ ```
28
+
29
+ Before using, set locale to `ja`
30
+
31
+ ```
32
+ Faker::Config.locale = "ja"
33
+ ```
34
+
35
+ Then use `Faker::Name` as you would normally do
36
+
37
+ ```
38
+ n = Faker::Name.name
39
+ => "吉田 順"
40
+ ```
41
+
42
+ ```
43
+ ln = Faker::Name.last_name
44
+ => "山本"
45
+ ```
46
+
47
+ ```
48
+ fn = Faker::Name.first_name
49
+ => "吉"
50
+ ```
51
+
52
+ Along with name in kanji it is possible to get
53
+ same values in hiragana, katakana and romaji
54
+
55
+ ```
56
+ n.yomi
57
+ => "よしだ じゅん"
58
+ n.kana
59
+ => "ヨシダ ジュン"
60
+ n.romaji
61
+ => "Yoshida Jun"
62
+
63
+ ln.yomi
64
+ => "やまもと"
65
+ ln.kana
66
+ => "ヤマモト"
67
+ ln.romaji
68
+ => "Yamamoto"
69
+
70
+ fn.yomi
71
+ => "よし"
72
+ fn.kana
73
+ => "ヨシ"
74
+ fn.romaji
75
+ => "Yoshi"
76
+ ```
77
+
78
+ ## When is it useful?
79
+
80
+ Currently, using only methods and localization provide by Faker
81
+ it is not possible to reuse they values to generate other `fake` data.
82
+
83
+ For example
84
+
85
+ ```
86
+ Faker::Config.locale = "ja"
87
+ ln = Faker::Name.last_name
88
+ p ln
89
+ => "伊藤"
90
+ ml = Faker::Internet.email(ln)
91
+ p ml
92
+ =>"@.name"
93
+ ```
94
+
95
+ On the other hand, using `faker_japanese` it is possible to pass
96
+ name in romaji to generate valid value:
97
+
98
+ ```
99
+ nickname = Faker::Name.name.romaji.split.join.downcase
100
+ => "hayashiyori"
101
+ freeemail = Faker::Internet.free_email(nickname)
102
+ => "hayashiyori@gmail.com"
103
+ ```
104
+
105
+ ## Contributing
106
+
107
+ 1. Fork it
108
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
109
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
110
+ 4. Push to the branch (`git push origin my-new-feature`)
111
+ 5. Create new Pull Request
112
+
113
+ ## Acknowledgements
114
+
115
+ Idea for this work was heavily inspired by the following projects:
116
+ - [Faker main project](https://github.com/stympy/faker)
117
+ - [faker-ja by xiaotuanzi](https://github.com/xiaotuanzi/faker-ja)
118
+ - [ruby-faker-japanese by tily](https://github.com/tily/ruby-faker-japanese)
119
+
120
+ ## License
121
+
122
+ MIT License (see LICENSE.txt)
data/Rakefile ADDED
@@ -0,0 +1,15 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+ require "yard"
4
+
5
+ RSpec::Core::RakeTask.new
6
+ task :default => :spec
7
+ task :test => :spec
8
+
9
+ # Documentation
10
+ YARD::Rake::YardocTask.new do |t|
11
+ t.files = ['lib/**/*.rb'] # optional
12
+ end
13
+
14
+ # desc "Generate gem documentation (same as running 'rake yard')"
15
+ task :doc => :yard
@@ -0,0 +1,27 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'faker_japanese/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "faker_japanese"
8
+ spec.version = Faker::Japanese::VERSION
9
+ spec.authors = ["Denis Vazhenin"]
10
+ spec.email = ["denis.vazhenin@me.com"]
11
+ spec.description = %q{Faker extension providing japanese names}
12
+ spec.summary = %q{Faker extension for japanese names}
13
+ spec.license = "MIT"
14
+
15
+ spec.files = `git ls-files`.split($/)
16
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
17
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
+ spec.require_paths = ["lib"]
19
+
20
+ spec.add_runtime_dependency "faker"
21
+ spec.add_development_dependency "bundler", "~> 1.3"
22
+ spec.add_development_dependency "rake"
23
+ spec.add_development_dependency "rspec"
24
+ spec.add_development_dependency "rspec-expectations"
25
+ spec.add_development_dependency "fuubar"
26
+ spec.add_development_dependency "yard"
27
+ end
@@ -0,0 +1,69 @@
1
+ require 'faker'
2
+
3
+ module Faker
4
+ module Japanese
5
+ SELFDIR = File.expand_path(File.dirname(__FILE__))
6
+
7
+ class Kanji < String
8
+ attr_reader :yomi, :kana, :romaji
9
+
10
+ def initialize(kanji, yomi, kana, romaji)
11
+ super(kanji)
12
+ @yomi = yomi
13
+ @kana = kana
14
+ @romaji = romaji
15
+ end
16
+ end
17
+
18
+ class Base
19
+ class << self
20
+
21
+ # Using callback to store loaded data when subclass is created
22
+ def inherited(klass)
23
+ klass.class_variable_set "@@data", load_data(klass)
24
+ end
25
+
26
+ # Load fake data from yml file
27
+ def load_data(klass)
28
+ datafile = File.join(SELFDIR, 'faker_japanese',
29
+ 'data', "#{klass.to_s.split('::').last.downcase}.yml")
30
+ if datafile && File.readable?(datafile)
31
+ data = YAML.load_file(datafile).each_with_object({}){|(k,v), h| h[k.to_sym] = v}
32
+ data.inject({}) do |res, item|
33
+ key, values, = item
34
+ res.update(key => values.map! { |v| Kanji.new(*v) })
35
+ end
36
+ else
37
+ nil
38
+ end
39
+ end
40
+
41
+ # Search
42
+ def fetch(key)
43
+ val = self.class_variable_get("@@data")[key]
44
+ ret = val[rand(val.size)]
45
+ end
46
+
47
+ # Swap method if block was evaluated to true
48
+ def swap_method(klass, name)
49
+ original_method =klass.method(name)
50
+ new_method =method(name)
51
+ klass.singleton_class.send :define_method, name, proc {
52
+ yield ? new_method.call : original_method.call
53
+ }
54
+ end
55
+
56
+ # Decide which method to use based on value of Faker::Config.locale
57
+ def use_japanese_method(klass, name)
58
+ swap_method(klass, name) do
59
+ Faker::Config.locale == "ja"
60
+ end
61
+ end
62
+
63
+ end # << self
64
+ end # Base
65
+ end # Japanese
66
+ end # Faker
67
+
68
+ require 'faker_japanese/version'
69
+ require 'faker_japanese/name'
@@ -0,0 +1,32 @@
1
+ last_name:
2
+ - ["藤井","ふじい", "フジイ", "Fujii"]
3
+ - ["林", "はやし", "ハヤシ", "Hayashi"]
4
+ - ["伊藤", "いとう", "イトウ", "Ito"]
5
+ - ["加藤", "かとう", "カトウ", "Kato"]
6
+ - ["小林", "こばやし", "コバヤシ", "Kobayashi"]
7
+ - ["黒木", "くろき", "クロキ", "Kuroki"]
8
+ - ["佐藤", "さとう", "サトウ", "Sato"]
9
+ - ["鈴木", "すずき", "スズキ", "Suzuki"]
10
+ - ["高橋", "たかはし", "タカハシ", "Takahashi"]
11
+ - ["田中", "たなか", "タナカ", "Tanaka"]
12
+ - ["渡辺", "わたなべ", "ワタナベ", "Watanabe"]
13
+ - ["山田", "やまだ", "ヤマダ", "Yamada"]
14
+ - ["山本", "やまもと", "ヤマモト", "Yamamoto"]
15
+ - ["吉田", "よしだ", "ヨシダ", "Yoshida"]
16
+
17
+ first_name:
18
+ - ["秋", "あき", "アキ", "Aki"]
19
+ - ["明", "あきら", "アキラ", "Akira"]
20
+ - ["輝", "ひかる", "ヒカル", "Hikaru"]
21
+ - ["裕", "ひろ", "ヒロ", "Hiro"]
22
+ - ["密", "ひそか", "ヒソカ", "Hisoka"]
23
+ - ["順", "じゅん", "ジュン", "Jun"]
24
+ - ["楓", "かえで", "カエデ", "Kaede"]
25
+ - ["琥珀", "こはく", "コハク", "Kohaku"]
26
+ - ["雅", "まさ", "マサ", "Masa"]
27
+ - ["真澄", "ますみ", "マサミ", "Masumi"]
28
+ - ["直樹", "なおき", "ナオキ", "Naoki"]
29
+ - ["亮", "りょう", "リョウ", "Ryou"]
30
+ - ["より", "より", "ヨリ", "Yori"]
31
+ - ["吉", "よし", "ヨシ", "Yoshi"]
32
+ - ["雪", "ゆき", "ユキ", "Yuki"]
@@ -0,0 +1,33 @@
1
+ module Faker
2
+ module Japanese
3
+ class Name < Base
4
+ class << self
5
+
6
+ # Return fake first name
7
+ def first_name
8
+ fetch(:first_name)
9
+ end
10
+
11
+ # Return fake last name
12
+ def last_name
13
+ fetch(:last_name)
14
+ end
15
+
16
+ # Return fake name, which is a string combining last and first name
17
+ def name
18
+ first_name =fetch(:first_name)
19
+ last_name =fetch(:last_name)
20
+ name_kanji ="#{last_name} #{first_name}"
21
+ name_yomi ="#{last_name.yomi} #{first_name.yomi}"
22
+ name_kana ="#{last_name.kana} #{first_name.kana}"
23
+ name_romaji ="#{last_name.romaji} #{first_name.romaji}"
24
+ Kanji.new(name_kanji, name_yomi, name_kana, name_romaji)
25
+ end
26
+ end
27
+
28
+ use_japanese_method Faker::Name, :first_name
29
+ use_japanese_method Faker::Name, :last_name
30
+ use_japanese_method Faker::Name, :name
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,5 @@
1
+ module Faker
2
+ module Japanese
3
+ VERSION = "0.1.2"
4
+ end
5
+ end
@@ -0,0 +1,48 @@
1
+ require 'spec_helper'
2
+
3
+ describe Faker::Japanese do
4
+
5
+ it "should use native methods when locale is not set to ja" do
6
+ if (Faker::Config.locale != 'ja')
7
+ name = Faker::Name.name
8
+ name.should_not be_nil
9
+ name.contains_cjk?.should == false
10
+ first_name = Faker::Name.first_name
11
+ first_name.should_not be_nil
12
+ first_name.contains_cjk?.should == false
13
+ last_name = Faker::Name.first_name
14
+ last_name.should_not be_nil
15
+ last_name.contains_cjk?.should == false
16
+ else
17
+ fail
18
+ end
19
+ end
20
+
21
+ it "should not use japanese method when locale is not set to ja" do
22
+ name = Faker::Name.name
23
+ expect { name.yomi }.to raise_error NoMethodError
24
+ expect { name.kana }.to raise_error NoMethodError
25
+ expect { name.romaji }.to raise_error NoMethodError
26
+ end
27
+
28
+ it "should use japanese method when locale is set to ja" do
29
+ Faker::Config.locale = 'ja'
30
+ if (Faker::Config.locale == 'ja')
31
+ first_name = Faker::Name.first_name
32
+ first_name.should_not be_nil
33
+ first_name.contains_cjk?.should == true
34
+ last_name = Faker::Name.last_name
35
+ last_name.should_not be_nil
36
+ last_name.contains_cjk?.should == true
37
+ name = Faker::Name.name
38
+ name.should_not be_nil
39
+ name.contains_cjk?.should == true
40
+ name.yomi.contains_cjk?.should == true
41
+ name.kana.contains_cjk?.should == true
42
+ name.romaji.contains_cjk?.should == false
43
+ else
44
+ fail
45
+ end
46
+ end
47
+
48
+ end
@@ -0,0 +1,15 @@
1
+ require 'faker_japanese'
2
+
3
+ class String
4
+ # Method to check if string contains cjk characters
5
+ def contains_cjk?
6
+ !!(self =~ /\p{Han}|\p{Katakana}|\p{Hiragana}|\p{Hangul}/)
7
+ end
8
+ end
9
+
10
+ I18n.enforce_available_locales = true
11
+
12
+ RSpec.configure do |config|
13
+ config.failure_color = :magenta
14
+ config.tty = true
15
+ end
metadata ADDED
@@ -0,0 +1,158 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: faker_japanese
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.2
5
+ platform: ruby
6
+ authors:
7
+ - Denis Vazhenin
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-04-28 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: faker
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.3'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.3'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec-expectations
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: fuubar
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: yard
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ description: Faker extension providing japanese names
112
+ email:
113
+ - denis.vazhenin@me.com
114
+ executables: []
115
+ extensions: []
116
+ extra_rdoc_files: []
117
+ files:
118
+ - ".gitignore"
119
+ - ".rspec"
120
+ - Gemfile
121
+ - LICENSE.txt
122
+ - README.md
123
+ - Rakefile
124
+ - faker_japanese.gemspec
125
+ - lib/faker_japanese.rb
126
+ - lib/faker_japanese/data/name.yml
127
+ - lib/faker_japanese/name.rb
128
+ - lib/faker_japanese/version.rb
129
+ - spec/lib/faker_japanese_spec.rb
130
+ - spec/spec_helper.rb
131
+ homepage:
132
+ licenses:
133
+ - MIT
134
+ metadata: {}
135
+ post_install_message:
136
+ rdoc_options: []
137
+ require_paths:
138
+ - lib
139
+ required_ruby_version: !ruby/object:Gem::Requirement
140
+ requirements:
141
+ - - ">="
142
+ - !ruby/object:Gem::Version
143
+ version: '0'
144
+ required_rubygems_version: !ruby/object:Gem::Requirement
145
+ requirements:
146
+ - - ">="
147
+ - !ruby/object:Gem::Version
148
+ version: '0'
149
+ requirements: []
150
+ rubyforge_project:
151
+ rubygems_version: 2.2.2
152
+ signing_key:
153
+ specification_version: 4
154
+ summary: Faker extension for japanese names
155
+ test_files:
156
+ - spec/lib/faker_japanese_spec.rb
157
+ - spec/spec_helper.rb
158
+ has_rdoc: