diff --git a/Gemfile.lock b/Gemfile.lock index efca204..605512e 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,7 +1,7 @@ PATH remote: . specs: - passfaker (0.1.0) + passfaker (0.2.0) faker (~> 2.0) GEM diff --git a/lib/passfaker/generator.rb b/lib/passfaker/generator.rb index dd2a00e..84c94af 100644 --- a/lib/passfaker/generator.rb +++ b/lib/passfaker/generator.rb @@ -12,17 +12,30 @@ module Generator -> { Faker::Creature::Animal.name }, -> { Faker::Food.ingredient }, -> { Faker::Games::Pokemon.name }, - -> { Faker::Music.instrument } + -> { Faker::Music.instrument }, + -> { Faker::Superhero.name }, + -> { Faker::Music.genre } ].freeze def self.generate(word_count:, separator:, include_number:) words = word_count.times.map do generator = CATEGORIES[SecureRandom.random_number(CATEGORIES.size)] - generator.call.downcase.gsub(/\s+/, "-") + word = generator.call.downcase.gsub(/\s+/, "") + random_char_upcase(word) end words << ::SecureRandom.random_number(100).to_s if include_number - words.join(separator) + words.shuffle.join(separator) + end + + # ランダムな文字を大文字に変換する + def self.random_char_upcase(word) + return word if word.empty? + + chars = word.chars + index = SecureRandom.random_number(chars.size) + chars[index] = chars[index].upcase + chars.join end end end diff --git a/lib/passfaker/version.rb b/lib/passfaker/version.rb index 165a7f4..a60b292 100644 --- a/lib/passfaker/version.rb +++ b/lib/passfaker/version.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true module Passfaker - VERSION = "0.1.0" + VERSION = "0.2.0" end diff --git a/spec/passfaker_spec.rb b/spec/passfaker_spec.rb index 2edd00a..f5afaa6 100644 --- a/spec/passfaker_spec.rb +++ b/spec/passfaker_spec.rb @@ -20,7 +20,7 @@ it "includes a number when include_number is true" do password = Passfaker.generate(include_number: true) - expect(password).to match(/\d+$/) + expect(password).to match(/\d+/) end end end