class BomDB::Export::Contents
Public Instance Methods
export_json()
click to toggle source
# File lib/bomdb/export/contents.rb, line 7 def export_json editions_by_id = selected_editions() contents = {} content_query(editions_by_id.keys).each do |r| edition = editions_by_id[ r[:edition_id] ] book = (contents[ r[:book_name] ] ||= {}) chapter = (book[ r[:verse_chapter] ] ||= {}) verse = (chapter[ full_verse_ref(r) ] ||= {}) verse[ edition[:edition_year] ] = r[:content_body] end frame = { editions: editions_legend(editions_by_id), contents: contents } Export::Result.new(success: true, body: JSON.pretty_generate(frame)) end
export_text()
click to toggle source
# File lib/bomdb/export/contents.rb, line 27 def export_text editions_by_id = selected_editions() output = "" editions_by_id.each_pair do |id, edition| title = edition[:edition_name] output << title + "\n" output << ('=' * title.size) + "\n" content_query([id]).each do |r| output << full_verse_ref(r) + "\t" + r[:content_body] + "\n" end output << "\n" end Export::Result.new(success: true, body: output) end
Protected Instance Methods
content_query(edition_ids)
click to toggle source
# File lib/bomdb/export/contents.rb, line 84 def content_query(edition_ids) @db[:verses]. join(:books, :book_id => :book_id). join(:editions). join(:contents, :edition_id => :edition_id, :verse_id => Sequel.qualify("verses", "verse_id")). order(:book_sort, :verse_heading, :verse_chapter, :verse_number). select(Sequel.qualify("editions", "edition_id"), :book_name, :verse_chapter, :verse_number, :content_body). where(Sequel.qualify("editions", "edition_id") => edition_ids). where(:verse_heading => nil) end
edition_query()
click to toggle source
# File lib/bomdb/export/contents.rb, line 75 def edition_query @db[:editions]. left_outer_join(:contents, :edition_id => :edition_id). select_group(Sequel.qualify("editions", "edition_id"), :edition_year, :edition_name). select_append{ Sequel.as(count(:verse_id), :count) }. having{ count > 0 }. order(:edition_name) end
editions_legend(editions_by_id)
click to toggle source
# File lib/bomdb/export/contents.rb, line 48 def editions_legend(editions_by_id) {}.tap do |editions| editions_by_id.each_pair do |id, row| year, name = row[:edition_year], row[:edition_name] editions[ year ] = { year: year, name: name } end end end
full_verse_ref(row)
click to toggle source
# File lib/bomdb/export/contents.rb, line 95 def full_verse_ref(row) "#{row[:book_name]} #{row[:verse_chapter]}:#{row[:verse_number]}" end
selected_editions()
click to toggle source
# File lib/bomdb/export/contents.rb, line 57 def selected_editions {}.tap do |editions_by_id| if opts[:edition_prefixes] == :all # "all" means all editions that actually have content edition_query.each do |e| editions_by_id[ e[:edition_id] ] = e end else # export editions that are mentioned by name-prefix ed_model = Models::Edition.new(@db) opts[:edition_prefixes].split(/\s*,\s*/).each do |epat| e = ed_model.find(epat) editions_by_id[ e[:edition_id] ] = e end end end end