Skip to content

Commit

Permalink
データの読み込みを遅延させた
Browse files Browse the repository at this point in the history
Fix #39

bundle exec derailed bundle:mem の結果

## before

```
TOP: 18.4063 MiB
  gimei: 18.3828 MiB
    yaml: 0.5508 MiB
      psych: 0.543 MiB
        psych/visitors: 0.3164 MiB
    gimei/name: 0.4531 MiB
      romaji: 0.418 MiB
```

## after

```
TOP: 1.7852 MiB
  gimei: 1.7656 MiB
    yaml: 1.0742 MiB
      psych: 1.0625 MiB
        psych/visitors: 0.5352 MiB
    gimei/name: 0.4727 MiB
      romaji: 0.3867 MiB
```
  • Loading branch information
willnet committed Apr 11, 2021
1 parent 9bd4c03 commit 064325e
Show file tree
Hide file tree
Showing 6 changed files with 40 additions and 36 deletions.
1 change: 0 additions & 1 deletion gimei.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,5 @@ Gem::Specification.new do |gem|
gem.add_dependency('romaji')
gem.add_development_dependency('rake')
gem.add_development_dependency('minitest')
gem.add_development_dependency('minitest-stub-const')
gem.add_development_dependency('coveralls')
end
10 changes: 8 additions & 2 deletions lib/gimei.rb
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,6 @@
class Gimei
extend Forwardable

NAMES = YAML.load_file(File.expand_path(File.join('..', 'data', 'names.yml'), __FILE__))
ADDRESSES = YAML.load_file(File.expand_path(File.join('..', 'data', 'addresses.yml'), __FILE__))
GENDERS = [:male, :female].freeze

def_delegators :@name, :gender, :kanji, :hiragana, :katakana, :first, :last, :male?, :female?, :romaji
Expand All @@ -29,6 +27,14 @@ def name(gender = nil)
Name.new(gender)
end

def names
@names ||= YAML.load_file(File.expand_path(File.join('..', 'data', 'names.yml'), __FILE__))
end

def addresses
@addresses ||= YAML.load_file(File.expand_path(File.join('..', 'data', 'addresses.yml'), __FILE__))
end

%i[kanji hiragana katakana romaji first last].each do |method_name|
define_method(method_name) do |gender = nil|
name(gender).public_send(method_name)
Expand Down
6 changes: 3 additions & 3 deletions lib/gimei/address.rb
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ def romaji
end

def initialize
@prefectures = Gimei::ADDRESSES['addresses']['prefecture'].sample(random: Gimei.config.rng)
@prefectures = Gimei.addresses['addresses']['prefecture'].sample(random: Gimei.config.rng)
end

alias_method :to_s, :kanji
Expand All @@ -67,7 +67,7 @@ def romaji
end

def initialize
@cities = Gimei::ADDRESSES['addresses']['city'].sample(random: Gimei.config.rng)
@cities = Gimei.addresses['addresses']['city'].sample(random: Gimei.config.rng)
end

alias_method :to_s, :kanji
Expand All @@ -91,7 +91,7 @@ def romaji
end

def initialize
@towns = Gimei::ADDRESSES['addresses']['town'].sample(random: Gimei.config.rng)
@towns = Gimei.addresses['addresses']['town'].sample(random: Gimei.config.rng)
end

alias_method :to_s, :kanji
Expand Down
4 changes: 2 additions & 2 deletions lib/gimei/name.rb
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ def female

def initialize(gender = nil)
@gender = gender || Gimei::GENDERS.sample(random: Gimei.config.rng)
@name = NameWord.new(Gimei::NAMES['first_name'][@gender.to_s].sample(random: Gimei.config.rng))
@name = NameWord.new(Gimei.names['first_name'][@gender.to_s].sample(random: Gimei.config.rng))
end

def male?
Expand All @@ -86,7 +86,7 @@ class Last
def_delegators :@name, :kanji, :hiragana, :katakana, :to_s, :romaji

def initialize
@name = NameWord.new(Gimei::NAMES['last_name'].sample(random: Gimei.config.rng))
@name = NameWord.new(Gimei.names['last_name'].sample(random: Gimei.config.rng))
end
end

Expand Down
1 change: 0 additions & 1 deletion spec/spec_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@

require 'gimei'
require 'minitest/autorun'
require 'minitest/stub_const'

def zenkaku_regexp
/\p{Hiragana}|\p{Katakana}|[一-龠々]/
Expand Down
54 changes: 27 additions & 27 deletions spec/unique_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
describe '#clear' do
describe '名前が枯渇してからclearを実行し、再度名前を取得しようとしたとき' do
it 'Gimei::RetryLimitExceededed例外が発生しないこと' do
Gimei.stub_const(:NAMES, {
Gimei.stub(:names, {
'first_name' => { 'male' => [%w[真一 しんいち シンイチ]] },
'last_name' => [%w[前島 まえしま マエシマ]]
}) do
Expand All @@ -22,7 +22,7 @@

describe '名前が枯渇してからclear(:name)を実行し再度名前を取得しようとしたとき' do
it 'Gimei::RetryLimitExceededed例外が発生しないこと' do
Gimei.stub_const(:NAMES, {
Gimei.stub(:names, {
'first_name' => {'male' => [%w[真一 しんいち シンイチ]]},
'last_name' => [%w[前島 まえしま マエシマ]]
}) do
Expand All @@ -35,7 +35,7 @@

describe '名前が枯渇してからclear(:address)を実行し再度名前を取得しようとしたとき' do
it 'Gimei::RetryLimitExceededed例外が発生すること' do
Gimei.stub_const(:NAMES, {
Gimei.stub(:names, {
'first_name' => {'male' => [%w[真一 しんいち シンイチ]]},
'last_name' => [%w[前島 まえしま マエシマ]]
}) do
Expand All @@ -52,7 +52,7 @@
describe '#male' do
describe '名前が枯渇していないとき' do
it '一意な名前(フルネームの漢字単位)が返ること' do
Gimei.stub_const(:NAMES, {
Gimei.stub(:names, {
'first_name' => { 'male' => [%w[真一 しんいち シンイチ]] },
'last_name' => [%w[前島 まえしま マエシマ], %w[神谷 かみや カミヤ]]
}) do
Expand All @@ -63,7 +63,7 @@

describe '名前が枯渇したとき' do
it 'Gimei::RetryLimitExceededed例外が発生すること' do
Gimei.stub_const(:NAMES, {
Gimei.stub(:names, {
'first_name' => { 'male' => [%w[真一 しんいち シンイチ]] },
'last_name' => [%w[前島 まえしま マエシマ]]
}) do
Expand All @@ -79,7 +79,7 @@
describe '#female' do
describe '名前が枯渇していないとき' do
it '一意な名前(フルネームの漢字単位)が返ること' do
Gimei.stub_const(:NAMES, {
Gimei.stub(:names, {
'first_name' => { 'female' => [%w[花子 はなこ ハナコ]] },
'last_name' => [%w[前島 まえしま マエシマ], %w[神谷 かみや カミヤ]]
}) do
Expand All @@ -90,7 +90,7 @@

describe '名前が枯渇したとき' do
it 'Gimei::RetryLimitExceededed例外が発生すること' do
Gimei.stub_const(:NAMES, {
Gimei.stub(:names, {
'first_name' => { 'female' => [%w[花子 はなこ ハナコ]] },
'last_name' => [%w[前島 まえしま マエシマ]]
}) do
Expand All @@ -106,7 +106,7 @@
describe '#first' do
describe '名が枯渇していないとき' do
it '一意な名(漢字単位)が返ること' do
Gimei.stub_const(:NAMES, {
Gimei.stub(:names, {
'first_name' => { 'male' => [%w[真一 しんいち シンイチ], %w[真二 しんじ シンジ]] },
'last_name' => %w[]
}) do
Expand All @@ -117,7 +117,7 @@

describe '名が枯渇したとき' do
it 'Gimei::RetryLimitExceeded例外が発生すること' do
Gimei.stub_const(:NAMES, {
Gimei.stub(:names, {
'first_name' => { 'male' => [%w[真一 しんいち シンイチ]] },
'last_name' => []
}) do
Expand All @@ -133,7 +133,7 @@
describe '#last' do
describe '姓が枯渇していないとき' do
it '一意な姓(漢字単位)が返ること' do
Gimei.stub_const(:NAMES, {
Gimei.stub(:names, {
'first_name' => { 'male' => [], 'female' => [] },
'last_name' => [%w[前島 まえしま マエシマ], %w[神谷 かみや カミヤ]]
}) do
Expand All @@ -144,7 +144,7 @@

describe '姓が枯渇したとき' do
it 'Gimei::RetryLimitExceeded例外が発生すること' do
Gimei.stub_const(:NAMES, {
Gimei.stub(:names, {
'first_name' => { 'male' => [], 'female' => [] },
'last_name' => [%w[前島 まえしま マエシマ]]
}) do
Expand All @@ -160,7 +160,7 @@
describe '#kanji' do
describe '名前が枯渇していないとき' do
it '一意な名前(フルネームの漢字単位)が返ること' do
Gimei.stub_const(:NAMES, {
Gimei.stub(:names, {
'first_name' => { 'male' => [%w[真一 しんいち シンイチ]] },
'last_name' => [%w[前島 まえしま マエシマ], %w[神谷 かみや カミヤ]]
}) do
Expand All @@ -171,7 +171,7 @@

describe '名前が枯渇したとき' do
it 'Gimei::RetryLimitExceededed例外が発生すること' do
Gimei.stub_const(:NAMES, {
Gimei.stub(:names, {
'first_name' => { 'male' => [%w[真一 しんいち シンイチ]] },
'last_name' => [%w[前島 まえしま マエシマ]]
}) do
Expand All @@ -187,7 +187,7 @@
describe '#hiragana' do
describe '名前が枯渇していないとき' do
it '一意な名前(フルネームの漢字単位)が返ること' do
Gimei.stub_const(:NAMES, {
Gimei.stub(:names, {
'first_name' => { 'male' => [%w[真一 しんいち シンイチ]] },
'last_name' => [%w[前島 まえしま マエシマ], %w[神谷 かみや カミヤ]]
}) do
Expand All @@ -198,7 +198,7 @@

describe '名前が枯渇したとき' do
it 'Gimei::RetryLimitExceededed例外が発生すること' do
Gimei.stub_const(:NAMES, {
Gimei.stub(:names, {
'first_name' => { 'male' => [%w[真一 しんいち シンイチ]] },
'last_name' => [%w[前島 まえしま マエシマ]]
}) do
Expand All @@ -214,7 +214,7 @@
describe '#katakana' do
describe '名前が枯渇していないとき' do
it '一意な名前(フルネームの漢字単位)が返ること' do
Gimei.stub_const(:NAMES, {
Gimei.stub(:names, {
'first_name' => { 'male' => [%w[真一 しんいち シンイチ]] },
'last_name' => [%w[前島 まえしま マエシマ], %w[神谷 かみや カミヤ]]
}) do
Expand All @@ -225,7 +225,7 @@

describe '名前が枯渇したとき' do
it 'Gimei::RetryLimitExceededed例外が発生すること' do
Gimei.stub_const(:NAMES, {
Gimei.stub(:names, {
'first_name' => { 'male' => [%w[真一 しんいち シンイチ]] },
'last_name' => [%w[前島 まえしま マエシマ]]
}) do
Expand All @@ -241,7 +241,7 @@
describe '#romaji' do
describe '名前が枯渇していないとき' do
it '一意な名前(フルネームの漢字単位)が返ること' do
Gimei.stub_const(:NAMES, {
Gimei.stub(:names, {
'first_name' => { 'male' => [%w[真一 しんいち シンイチ]] },
'last_name' => [%w[前島 まえしま マエシマ], %w[神谷 かみや カミヤ]]
}) do
Expand All @@ -252,7 +252,7 @@

describe '名前が枯渇したとき' do
it 'Gimei::RetryLimitExceededed例外が発生すること' do
Gimei.stub_const(:NAMES, {
Gimei.stub(:names, {
'first_name' => { 'male' => [%w[真一 しんいち シンイチ]] },
'last_name' => [%w[前島 まえしま マエシマ]]
}) do
Expand All @@ -268,7 +268,7 @@
describe '#address' do
describe '住所が枯渇していないとき' do
it '一意な住所(漢字単位)が返ること' do
Gimei.stub_const(:ADDRESSES, {
Gimei.stub(:addresses, {
'addresses' => {
'prefecture' => [%w[東京都 とうきょうと トウキョウト]],
'city' => [%w[渋谷区 しぶやく シブヤク]],
Expand All @@ -282,7 +282,7 @@

describe '住所が枯渇したとき' do
it 'Gimei::RetryLimitExceeded例外が発生すること' do
Gimei.stub_const(:ADDRESSES, {
Gimei.stub(:addresses, {
'addresses' => {
'prefecture' => [%w[東京都 とうきょうと トウキョウト]],
'city' => [%w[渋谷区 しぶやく シブヤク]],
Expand All @@ -301,7 +301,7 @@
describe '#prefecture' do
describe '県が枯渇していないとき' do
it '一意な県が返ること' do
Gimei.stub_const(:ADDRESSES, {
Gimei.stub(:addresses, {
'addresses' => {
'prefecture' => [%w[東京都 とうきょうと トウキョウト], %w[静岡県 しずおかけん シズオカケン]],
'city' => [],
Expand All @@ -315,7 +315,7 @@

describe '県が枯渇したとき' do
it 'Gimei::RetryLimitExceeded例外が発生すること' do
Gimei.stub_const(:ADDRESSES, {
Gimei.stub(:addresses, {
'addresses' => {
'prefecture' => [%w[東京都 とうきょうと トウキョウト]],
'city' => [],
Expand All @@ -334,7 +334,7 @@
describe '#city' do
describe '市区町村が枯渇していないとき' do
it '一意な市区町村が返ること' do
Gimei.stub_const(:ADDRESSES, {
Gimei.stub(:addresses, {
'addresses' => {
'prefecture' => [],
'city' => [%w[渋谷区 しぶやく シブヤク], %w[新宿区 しんじゅくく シンジュクク]],
Expand All @@ -348,7 +348,7 @@

describe '市区町村が枯渇したとき' do
it 'Gimei::RetryLimitExceeded例外が発生すること' do
Gimei.stub_const(:ADDRESSES, {
Gimei.stub(:addresses, {
'addresses' => {
'prefecture' => [],
'city' => [%w[渋谷区 しぶやく シブヤク]],
Expand All @@ -367,7 +367,7 @@
describe '#town' do
describe 'その他住所が枯渇していないとき' do
it '一意なその他住所が返ること' do
Gimei.stub_const(:ADDRESSES, {
Gimei.stub(:addresses, {
'addresses' => {
'prefecture' => [],
'city' => [],
Expand All @@ -381,7 +381,7 @@

describe 'その他住所が枯渇したとき' do
it 'Gimei::RetryLimitExceeded例外が発生すること' do
Gimei.stub_const(:ADDRESSES, {
Gimei.stub(:addresses, {
'addresses' => {
'prefecture' => [],
'city' => [],
Expand Down

0 comments on commit 064325e

Please sign in to comment.