gimei 1.0.1 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8b901f4ad99a870c4fccfe3c2b45d091efb1419db562b59b8a21ee28b789110d
4
- data.tar.gz: 37857e0546c84936dab79d8731c0cf2dd5462819138a8bc038107632c11b76dc
3
+ metadata.gz: bab55c81d075ac091f92fe6dd07a17aec5e05778d30f130d947fedde41fb8736
4
+ data.tar.gz: 05bef7aad6981ed3a968ff757aa2231de6a123f66fedbc50957728a606cb8363
5
5
  SHA512:
6
- metadata.gz: bf30c05cf967c15a0eba2713428baa490e0ffe2b0034286db8079f9a39a669685e74a6449b7d65bfe9c52418abfa6dfe85f242d3e69ec5c784b9ce47e6a198b4
7
- data.tar.gz: fdbace6cac90a3cbab0d93edb084fbff7babfa729efcb2b2e31da9eba3663b0d611d79abdc3861c98b3200c620a95ba50e91ed5e5ab9e8d4927173f3df601722
6
+ metadata.gz: d56e36b028af21d23fd52a4cc296c00bc0e5742a678be15cca002e70269f3778fd4a081a78059504d748705307ee6f145ad290d0408bc6ce5d78eddc52e7a664
7
+ data.tar.gz: 1a922ee6c3ea7309382da24f41525da6a0f3b44bfbec45a6cce97757b61eac80ae5c8b2157f8aa4e853691f295c99aaf7db661d6c14b735745cc6ccdcf95fcb6
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ ## 1.1.0
2
+
3
+ - Gimei::Name#family, #given を追加 [@nard-tech](https://github.com/nard-tech) (https://github.com/willnet/gimei/pull/50)
4
+ - テストケースの修正 [@nard-tech](https://github.com/nard-tech) https://github.com/willnet/gimei/pull/49
5
+
1
6
  ## 1.0.1
2
7
 
3
8
  - Ruby 3.1のサポート[@willnet](https://github.com/willnet) (https://github.com/willnet/gimei/pull/48)
data/README.md CHANGED
@@ -33,6 +33,20 @@ gimei.first.katakana #=> "ハルナ"
33
33
  gimei.first.romaji #=> "Haruna"
34
34
  ```
35
35
 
36
+ `gimei.last`, `gimei.first` の代わりに、`gimei.family`, `gimei.given` を用いることもできます。
37
+
38
+ ```ruby
39
+ gimei.family.kanji #=> "斎藤"
40
+ gimei.family.hiragana #=> "さいとう"
41
+ gimei.family.katakana #=> "サイトウ"
42
+ gimei.family.romaji #=> "Saitou"
43
+
44
+ gimei.given.kanji #=> "陽菜"
45
+ gimei.given.hiragana #=> "はるな"
46
+ gimei.given.katakana #=> "ハルナ"
47
+ gimei.given.romaji #=> "Haruna"
48
+ ```
49
+
36
50
  下記のように男性/女性の名前を返すことを明示的に指定できます。`Gimei.name` の場合は男女の名前を等確率で返します。
37
51
 
38
52
  ```ruby
@@ -64,6 +78,16 @@ Gimei.first.kanji #=> "結菜"
64
78
  Gimei.first.hiragana #=> "ここあ"
65
79
  Gimei.first.katakana #=> "ヤマト"
66
80
  Gimei.first.romaji #=> "Noriyuki"
81
+
82
+ Gimei.family.kanji #=> "黒沢"
83
+ Gimei.family.hiragana #=> "いずみ"
84
+ Gimei.family.katakana #=> "エノモト"
85
+ Gimei.family.romaji #=> "Okada"
86
+
87
+ Gimei.given.kanji #=> "航"
88
+ Gimei.given.hiragana #=> "まさみつ"
89
+ Gimei.given.katakana #=> "ユカ"
90
+ Gimei.given.romaji #=> "Haruto"
67
91
  ```
68
92
 
69
93
  同じ名前を二度取得したくない場合には、以下のように`unique`を挟みます。次のようにすると、利用した名前をGimei内で保持することで必ず一意な名前を返すようにできます。
@@ -110,6 +134,9 @@ Gimei.unique.clear(:first) # Gimei.unique.first の結果を消去
110
134
  - `Gimei.unique.female`
111
135
  - `Gimei.unique.kanji`
112
136
 
137
+ `Gimei.unique.family` で生成された名前は `Gimei.unique.clear(:last)` で消去します。
138
+ また、`Gimei.unique.given` で生成された名前は `Gimei.unique.clear(:first)` で消去します。
139
+
113
140
  出力される名前の候補となるデータは `lib/data/names.yml` にあるので、必要であればファイルを修正してください。
114
141
 
115
142
  ### 住所をランダムで返す
data/lib/gimei/name.rb CHANGED
@@ -14,7 +14,7 @@ class Gimei::Name
14
14
  new(:female)
15
15
  end
16
16
 
17
- %i[kanji hiragana katakana romaji first last].each do |method_name|
17
+ %i[kanji hiragana katakana romaji first last family given].each do |method_name|
18
18
  define_method(method_name) do |gender = nil|
19
19
  new(gender).public_send(method_name)
20
20
  end
@@ -53,6 +53,9 @@ class Gimei::Name
53
53
 
54
54
  alias_method :to_s, :kanji
55
55
 
56
+ alias_method :family, :last
57
+ alias_method :given, :first
58
+
56
59
  class First
57
60
  class << self
58
61
  def male
data/lib/gimei/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  class Gimei
2
- VERSION = "1.0.1"
2
+ VERSION = "1.1.0"
3
3
  end
data/lib/gimei.rb CHANGED
@@ -11,7 +11,11 @@ class Gimei
11
11
 
12
12
  GENDERS = [:male, :female].freeze
13
13
 
14
- def_delegators :@name, :gender, :kanji, :hiragana, :katakana, :first, :last, :male?, :female?, :romaji
14
+ def_delegators :@name,
15
+ :first, :last, :gender,
16
+ :kanji, :hiragana, :katakana, :romaji,
17
+ :male?, :female?,
18
+ :family, :given
15
19
  def_delegators :@address, :prefecture, :city, :town
16
20
  alias_method :to_s, :kanji
17
21
 
@@ -35,7 +39,7 @@ class Gimei
35
39
  @addresses ||= YAML.load_file(File.expand_path(File.join('..', 'data', 'addresses.yml'), __FILE__))
36
40
  end
37
41
 
38
- %i[kanji hiragana katakana romaji first last].each do |method_name|
42
+ %i[kanji hiragana katakana romaji first last family given].each do |method_name|
39
43
  define_method(method_name) do |gender = nil|
40
44
  name(gender).public_send(method_name)
41
45
  end
@@ -54,6 +58,9 @@ class Gimei
54
58
  @unique.define_unique_method(method_name)
55
59
  end
56
60
 
61
+ @unique.define_unique_method(:family, :last)
62
+ @unique.define_unique_method(:given, :first)
63
+
57
64
  %i[male female kanji].each do |method_name|
58
65
  @unique.define_unique_method(method_name, :name)
59
66
  end
data/spec/gimei_spec.rb CHANGED
@@ -108,17 +108,41 @@ describe Gimei do
108
108
  end
109
109
 
110
110
  describe '.last' do
111
- it 'Gimei::Name::First オブジェクトが返ること' do
111
+ it 'Gimei::Name::Last オブジェクトが返ること' do
112
112
  _(Gimei.last).must_be_instance_of Gimei::Name::Last
113
113
  end
114
114
  end
115
115
 
116
116
  describe '#last' do
117
- it 'Gimei::Name::First オブジェクトが返ること' do
117
+ it 'Gimei::Name::Last オブジェクトが返ること' do
118
118
  _(Gimei.new.last).must_be_instance_of Gimei::Name::Last
119
119
  end
120
120
  end
121
121
 
122
+ describe '.family' do
123
+ it 'Gimei::Name::Last オブジェクトが返ること' do
124
+ _(Gimei.family).must_be_instance_of Gimei::Name::Last
125
+ end
126
+ end
127
+
128
+ describe '#family' do
129
+ it 'Gimei::Name::Last オブジェクトが返ること' do
130
+ _(Gimei.new.family).must_be_instance_of Gimei::Name::Last
131
+ end
132
+ end
133
+
134
+ describe '.given' do
135
+ it 'Gimei::Name::First オブジェクトが返ること' do
136
+ _(Gimei.given).must_be_instance_of Gimei::Name::First
137
+ end
138
+ end
139
+
140
+ describe '#given' do
141
+ it 'Gimei::Name::First オブジェクトが返ること' do
142
+ _(Gimei.new.given).must_be_instance_of Gimei::Name::First
143
+ end
144
+ end
145
+
122
146
  describe '.romaji' do
123
147
  it 'ローマ字とスペースが返ること' do
124
148
  _(Gimei.romaji).must_match(/\A[a-zA-Z\s]+\z/)
data/spec/name_spec.rb CHANGED
@@ -58,6 +58,30 @@ describe Gimei::Name do
58
58
  end
59
59
  end
60
60
 
61
+ describe '.first' do
62
+ it 'Gimei::Name::First オブジェクトが返ること' do
63
+ _(Gimei::Name.first).must_be_instance_of Gimei::Name::First
64
+ end
65
+ end
66
+
67
+ describe '.last' do
68
+ it 'Gimei::Name::Last オブジェクトが返ること' do
69
+ _(Gimei::Name.last).must_be_instance_of Gimei::Name::Last
70
+ end
71
+ end
72
+
73
+ describe '.family' do
74
+ it 'Gimei::Name::Last オブジェクトが返ること' do
75
+ _(Gimei::Name.family).must_be_instance_of Gimei::Name::Last
76
+ end
77
+ end
78
+
79
+ describe '.given' do
80
+ it 'Gimei::Name::First オブジェクトが返ること' do
81
+ _(Gimei::Name.given).must_be_instance_of Gimei::Name::First
82
+ end
83
+ end
84
+
61
85
  describe '#gender' do
62
86
  it ':male または :female が返ること' do
63
87
  _(Gimei::Name.new.gender).must_be_instance_of(Symbol)
@@ -83,6 +107,12 @@ describe Gimei::Name do
83
107
  end
84
108
  end
85
109
 
110
+ describe '#romaji' do
111
+ it 'ローマ字とスペースが返ること' do
112
+ _(Gimei::Name.new.romaji).must_match(/\A[a-zA-Z\s]+\z/)
113
+ end
114
+ end
115
+
86
116
  describe '#first' do
87
117
  it 'Gimei::Name::First オブジェクトが返ること' do
88
118
  _(Gimei::Name.new.first).must_be_instance_of Gimei::Name::First
@@ -95,9 +125,15 @@ describe Gimei::Name do
95
125
  end
96
126
  end
97
127
 
98
- describe '.romaji' do
99
- it 'ローマ字とスペースが返ること' do
100
- _(Gimei::Name.new.romaji).must_match(/\A[a-zA-Z\s]+\z/)
128
+ describe '#family' do
129
+ it 'Gimei::Name::Last オブジェクトが返ること' do
130
+ _(Gimei::Name.new.family).must_be_instance_of Gimei::Name::Last
131
+ end
132
+ end
133
+
134
+ describe '#given' do
135
+ it 'Gimei::Name::First オブジェクトが返ること' do
136
+ _(Gimei::Name.new.given).must_be_instance_of Gimei::Name::First
101
137
  end
102
138
  end
103
139
  end
data/spec/unique_spec.rb CHANGED
@@ -157,6 +157,60 @@ describe 'Gimei.unique' do
157
157
  end
158
158
  end
159
159
 
160
+ describe '#family' do
161
+ describe '姓が枯渇していないとき' do
162
+ it '一意な姓(漢字単位)が返ること' do
163
+ Gimei.stub(:names, {
164
+ 'first_name' => { 'male' => [], 'female' => [] },
165
+ 'last_name' => [%w[前島 まえしま マエシマ], %w[神谷 かみや カミヤ]]
166
+ }) do
167
+ _([Gimei.unique.family.kanji, Gimei.unique.family.kanji].sort).must_equal %w[前島 神谷]
168
+ end
169
+ end
170
+ end
171
+
172
+ describe '姓が枯渇したとき' do
173
+ it 'Gimei::RetryLimitExceeded例外が発生すること' do
174
+ Gimei.stub(:names, {
175
+ 'first_name' => { 'male' => [], 'female' => [] },
176
+ 'last_name' => [%w[前島 まえしま マエシマ]]
177
+ }) do
178
+ assert_raises Gimei::RetryLimitExceeded do
179
+ Gimei.unique.family
180
+ Gimei.unique.family
181
+ end
182
+ end
183
+ end
184
+ end
185
+ end
186
+
187
+ describe '#given' do
188
+ describe '名が枯渇していないとき' do
189
+ it '一意な名(漢字単位)が返ること' do
190
+ Gimei.stub(:names, {
191
+ 'first_name' => { 'male' => [%w[真一 しんいち シンイチ], %w[真二 しんじ シンジ]] },
192
+ 'last_name' => %w[]
193
+ }) do
194
+ _([Gimei.unique.given(:male).kanji, Gimei.unique.given(:male).kanji].sort).must_equal %w[真一 真二]
195
+ end
196
+ end
197
+ end
198
+
199
+ describe '名が枯渇したとき' do
200
+ it 'Gimei::RetryLimitExceeded例外が発生すること' do
201
+ Gimei.stub(:names, {
202
+ 'first_name' => { 'male' => [%w[真一 しんいち シンイチ]] },
203
+ 'last_name' => []
204
+ }) do
205
+ assert_raises Gimei::RetryLimitExceeded do
206
+ Gimei.unique.given(:male)
207
+ Gimei.unique.given(:male)
208
+ end
209
+ end
210
+ end
211
+ end
212
+ end
213
+
160
214
  describe '#kanji' do
161
215
  describe '名前が枯渇していないとき' do
162
216
  it '一意な名前(フルネームの漢字単位)が返ること' do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gimei
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - willnet
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-01-07 00:00:00.000000000 Z
11
+ date: 2022-06-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: romaji
@@ -115,7 +115,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
115
115
  - !ruby/object:Gem::Version
116
116
  version: '0'
117
117
  requirements: []
118
- rubygems_version: 3.2.33
118
+ rubygems_version: 3.3.3
119
119
  signing_key:
120
120
  specification_version: 4
121
121
  summary: random Japanese name and address generator. support kanji, hiragana, and