Ruby gem for creating tons of sample trivia/test questions. Intended for use in specs or apps that need questions. Think of it as Faker for trivia questions + answers. It should be able to create thousands of unique questions.
Originally part of a sports trivia app I had that was somewhat popular (Hat Trick), this gem uses tables of data (in CSV form) to create random questions.
gem install trivia_factory
If you're using Bundler and/or Rails, add the following to your Gemfile:
gem 'trivia_factory'
question = TriviaFactory::Question.random
This will return a TriviaFactory::Question
object. Use the to_h
helper to get it as a hash.
question.to_h
{
:label => "Sacramento is the capital of what US state?",
:question_type => :multiple_choice,
:choices => [
"Oklahoma",
"Delaware",
"California",
"Oregon"
],
:answer => 2,
:answer_type => :choice_index
}
Question objects have the following attributes (which are also available as keys in the hash):
label: this is the actual question being asked
question_type: a symbol denoting the type of question. Will be one of the following:
- :true_false
- :multiple_choice
- :fill_in_the_blank
choices: an array of choices for multiple choice questions. Will be an empty array (not nil
) for other question types.
answer: the correct answer for the question. Its type/class may vary (see below).
answer_type: specifies the type of answer. Will be one of the following: [:choice_index, :boolean, :string, :integer]
. Note: when :choice_index
, the correct answer corresponds to the correct choice in the choices
array.
Currently the following question categories exist as subclasses of TriviaFactory::Question
:
TriviaFactory::MathQuestion
: generates a basic integer addition, subtraction, multiplication, or division problem (fill in the blank).
TriviaFactory::SportsQuestion
: generates a sports trivia question (multiple choice).
TriviaFactory::UsStateCapitalsQuestion
: generates a question about US state capitals (multiple choice).
TriviaFactory::CapitalCitiesQuestion
: generates a question about worldwide capital cities (fill in the blank)
TriviaFactory::AcademyAwardsQuestion
: generates a question about academy award winners (multiple choice)
TriviaFactory::VocabularyQuestion
: generates a vocabulary word <-> definition question. From a list of 1,000 vocabulary study words. (multiple choice)
TriviaFactory::CompanyQuestion
: generates a question about public companies on the S&P 500 and their ticker symbols (multiple choice)
TriviaFactory::GrammyAwardsQuestion
: generates a question about grammy award for album of the year (multiple choice)
To create a question from any of these types, simply call the .generate()
method on any of the classes.
q = TriviaFactory::MathQuestion.generate
q.to_h
=> {
:label => "5 + 5 = _____?",
:question_type => :fill_in_the_blank,
:choices => [],
:answer => 10,
:answer_type => :integer
}
q = TriviaFactory::SportsQuestion.generate
q.to_h
=> {
:label => "In 1987 who defeated the St. Louis Cardinals to win the World Series?",
:question_type => :multiple_choice,
:choices => ["Detroit Tigers", "Minnesota Twins", "Anaheim Angels", "New York Yankees"],
:answer => 1,
:answer_type => :choice_index
}
Contributions welcome. Add a CSV to the data/ folder, create a subclass, write a test, and submit a PR.