defmodule BibleEx.Verse do @moduledoc """ A Bible verse struct. """ # matt24 = Verse.new(book: "Matt", chapter_number: 2, verse_number: 4) @enforce_keys [:book, :chapter_number, :verse_number] defstruct book: "", book_names: %{}, book_number: nil, reference_type: nil, # The full book name of the reference in Book chapter:verse format reference: nil, # The chapter number this verse is within. chapter_number: nil, # The verse number this verse refers to within a chapter. verse_number: -1, # Whether this verse is found within the bible. is_valid: false @doc """ Make a new `%Verse{}` struct. ## Parameters - *book*: a string that is one of the four possible book name formats - `"GEN"` (abbr) - `"Genesis"` (name) - `"Gen"` (osis) - `"Gn"` (short) - *chapter_number*: an integer that is the chapter number - *verse_number*: an integer that is the verse number ## Examples iex> alias BibleEx.Verse iex> first = Verse(book: "Genesis", chapter_number: 1, verse_number: 1) %BibleEx.Verse{ book: "Genesis", book_names: %{abbr: "GEN", name: "Genesis", osis: "Gen", short: "Gn"}, book_number: 1, reference_type: :verse, reference: "Genesis 1:1", chapter_number: 1, verse_number: 1, is_valid: true } iex> alias BibleEx.Verse iex> matt24 = Verse.new(book: "Matt", chapter_number: 2, verse_number: 4) %BibleEx.Verse{ book: "Matt", book_names: %{abbr: "MAT", name: "Matthew", osis: "Matt", short: "Mt"}, book_number: 40, reference_type: :verse, reference: "Matt 2:4", chapter_number: 2, verse_number: 4, is_valid: true } """ def new(book: book, chapter_number: chapter_number, verse_number: verse_number) do %__MODULE__{ book: book, book_names: BibleEx.Librarian.get_book_names(book: book), book_number: BibleEx.Librarian.find_book_number(book: book), reference_type: :verse, reference: BibleEx.Librarian.create_reference_string( book: book, start_chapter: chapter_number, start_verse: verse_number ), chapter_number: chapter_number, verse_number: verse_number, is_valid: BibleEx.Librarian.verify_reference( book: book, start_chapter: chapter_number, start_verse: verse_number ) } end end