1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154
|
# frozen_string_literal: true
module Faker
class Science < Base
class << self
BRANCHES = {
empirical: %i[empirical_natural_basic empirical_natural_applied empirical_social_basic empirical_social_applied],
formal: %i[formal_basic formal_applied],
natural: %i[empirical_natural_basic empirical_natural_applied],
social: %i[empirical_social_basic empirical_social_applied],
basic: %i[empirical_natural_basic empirical_social_basic formal_basic],
applied: %i[empirical_natural_applied empirical_social_applied formal_applied]
}.freeze
##
# Produces a name of a science
# You can optionally filter by specifying one or more of the following:
# `:empirical, :formal, :natural, :social, :basic, :applied`
# @see https://en.wikipedia.org/wiki/Science#Branches_of_science
# @see Faker::Educator.subject
#
# @param branches [Array<Symbol>]
# @return [String]
#
# @example
# Faker::Science.science #=> "Space science"
# Faker::Science.science(:natural, :applied) #=> "Engineering"
# Faker::Science.science(:formal, :applied) #=> "Computer Science"
#
# @faker.version next
def science(*branches)
selected = BRANCHES.values.flatten.uniq
branches.each do |branch|
selected &= BRANCHES[branch] if BRANCHES.key? branch
end
raise ArgumentError, 'Filters do not match any sciences' if selected.empty?
sciences = []
selected.each do |branch|
sciences += translate("faker.science.branch.#{branch}")
end
sample(sciences)
end
##
# Produces the name of a element.
#
# @return [String]
#
# @example
# Faker::Science.element #=> "Carbon"
#
# @faker.version 1.8.5
def element
fetch('science.element')
end
##
# Produces the symbol of an element.
#
# @return [String]
#
# @example
# Faker::Science.element_symbol #=> "Pb"
#
# @faker.version 1.9.0
def element_symbol
fetch('science.element_symbol')
end
##
# Produces the state of an element.
#
# @return [String]
#
# @example
# Faker::Science.element_state #=> "Liquid"
#
# @faker.version next
def element_state
fetch('science.element_state')
end
##
# Produces the subcategory of an element.
#
# @return [String]
#
# @example
# Faker::Science.element_subcategory #=> "Reactive nonmetal"
#
# @faker.version next
def element_subcategory
fetch('science.element_subcategory')
end
##
# Produces the name of a scientist.
#
# @return [String]
#
# @example
# Faker::Science.scientist #=> "Isaac Newton"
#
# @faker.version 1.8.5
def scientist
fetch('science.scientist')
end
##
# Produces a scientifically sounding word
#
# @return [String]
#
# @example
# Faker::Science.modifier #=> "Quantum"
# Faker::Science.modifier #=> "Superconductive"
#
# @faker.version next
def modifier
fetch('science.modifier')
end
##
# Produces the name of a scientific tool.
# By default it uses a science word modifier to generate more diverse data, which can be disabled.
#
# @param simple [Boolean] Whether to generate simple realistic tool names, (no Q-word).
# @return [String]
#
# @example
# Faker::Science.tool #=> "Superconductive Microcentrifuge"
# Faker::Science.tool #=> "Portable Cryostat"
# Faker::Science.tool #=> "Quantum Spectrophotometer"
# Faker::Science.tool(simple: true) #=> "Microcentrifuge"
#
# @faker.version next
def tool(simple: false)
tool = fetch('science.tool')
return tool if simple
# Makes sure the modifier are different
loop do
modifier = self.modifier
break unless tool.start_with?(modifier)
end
"#{modifier} #{tool}"
end
end
end
end
|