diff --git a/lib/faker.rb b/lib/faker.rb index a5d7d472b9..497b080078 100644 --- a/lib/faker.rb +++ b/lib/faker.rb @@ -121,7 +121,7 @@ def regexify(reg) # with an array of values and selecting one of them. def fetch(key) fetched = sample(translate("faker.#{key}")) - if fetched&.match(%r{^/}) && fetched.match(%r{/$}) # A regex + if fetched.is_a?(::String) && fetched.start_with?('/') && fetched.end_with?('/') # A regex regexify(fetched) else fetched @@ -133,7 +133,7 @@ def fetch(key) def fetch_all(key) fetched = translate("faker.#{key}") fetched = fetched.last if fetched.size <= 1 - if !fetched.respond_to?(:sample) && fetched.match(%r{^/}) && fetched.match(%r{/$}) # A regex + if !fetched.respond_to?(:sample) && fetched.is_a?(::String) && fetched.start_with?('/') && fetched.end_with?('/') # A regex regexify(fetched) else fetched @@ -146,6 +146,9 @@ def fetch_all(key) def parse(key) fetched = fetch(key) + # A plain value cannot contain any tokens, so skip scanning for them + return numerify(fetched) unless fetched.include?('#{') + parts = fetched.scan(/(\(?)#\{([A-Za-z]+\.)?([^}]+)\}([^#]++)?/).map do |prefix, kls, meth, etc| # If the token had a class Prefix (e.g., Name.first_name) # grab the constant, otherwise use self diff --git a/lib/faker/default/name.rb b/lib/faker/default/name.rb index 7c3f886a49..fc30c1722f 100644 --- a/lib/faker/default/name.rb +++ b/lib/faker/default/name.rb @@ -41,11 +41,8 @@ def name_with_middle # # @faker.version 0.9.0 def first_name - if parse('name.first_name').empty? - fetch('name.first_name') - else - parse('name.first_name') - end + parsed = parse('name.first_name') + parsed.empty? ? fetch('name.first_name') : parsed end ##