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 +4 -4
- data/CHANGELOG.md +5 -0
- data/README.md +27 -0
- data/lib/gimei/name.rb +4 -1
- data/lib/gimei/version.rb +1 -1
- data/lib/gimei.rb +9 -2
- data/spec/gimei_spec.rb +26 -2
- data/spec/name_spec.rb +39 -3
- data/spec/unique_spec.rb +54 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bab55c81d075ac091f92fe6dd07a17aec5e05778d30f130d947fedde41fb8736
|
4
|
+
data.tar.gz: 05bef7aad6981ed3a968ff757aa2231de6a123f66fedbc50957728a606cb8363
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
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,
|
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::
|
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::
|
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 '
|
99
|
-
it '
|
100
|
-
_(Gimei::Name.new.
|
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
|
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-
|
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.
|
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
|