gimei 1.0.1 → 1.1.0

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.
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