Class: Bookflow::AppleBooks::Database

Inherits:
Object
  • Object
show all
Defined in:
lib/bookflow/apple_books/database.rb

Constant Summary collapse

REQUIRED_ANNOTATION_COLUMNS =
%w[
  Z_PK
  ZANNOTATIONASSETID
  ZANNOTATIONDELETED
  ZANNOTATIONTYPE
  ZANNOTATIONSTYLE
  ZANNOTATIONCREATIONDATE
  ZANNOTATIONMODIFICATIONDATE
  ZANNOTATIONNOTE
  ZANNOTATIONREPRESENTATIVETEXT
  ZANNOTATIONSELECTEDTEXT
  ZPLABSOLUTEPHYSICALLOCATION
  ZPLLOCATIONRANGESTART
  ZPLLOCATIONRANGEEND
].freeze
REQUIRED_LIBRARY_COLUMNS =
%w[
  ZASSETID
  ZTITLE
  ZAUTHOR
  ZPATH
].freeze

Instance Method Summary collapse

Constructor Details

#initialize(annotation_db_path:, library_db_path:) ⇒ Database

Returns a new instance of Database.



30
31
32
33
# File 'lib/bookflow/apple_books/database.rb', line 30

def initialize(annotation_db_path:, library_db_path:)
  @annotation_db_path = annotation_db_path.to_s
  @library_db_path = library_db_path.to_s
end

Instance Method Details

#annotation_rowsObject



55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/bookflow/apple_books/database.rb', line 55

def annotation_rows
  open_readonly(@annotation_db_path) do |db|
    db.execute("      SELECT Z_PK, ZANNOTATIONASSETID, ZANNOTATIONDELETED, ZANNOTATIONTYPE, ZANNOTATIONSTYLE,\n             ZANNOTATIONCREATIONDATE, ZANNOTATIONMODIFICATIONDATE, ZANNOTATIONNOTE,\n             ZANNOTATIONREPRESENTATIVETEXT, ZANNOTATIONSELECTEDTEXT, ZPLABSOLUTEPHYSICALLOCATION,\n             ZPLLOCATIONRANGESTART, ZPLLOCATIONRANGEEND\n      FROM ZAEANNOTATION\n      WHERE COALESCE(ZANNOTATIONDELETED, 0) = 0\n    SQL\n  end\nend\n")

#book_rowsObject



68
69
70
71
72
73
74
75
76
# File 'lib/bookflow/apple_books/database.rb', line 68

def book_rows
  open_readonly(@library_db_path) do |db|
    db.execute("      SELECT ZASSETID, ZTITLE, ZAUTHOR, ZPATH\n      FROM ZBKLIBRARYASSET\n      WHERE ZASSETID IS NOT NULL\n    SQL\n  end\nend\n")

#valid_schema?Boolean

Returns:

  • (Boolean)


35
36
37
38
39
40
# File 'lib/bookflow/apple_books/database.rb', line 35

def valid_schema?
  validate_schema!
  true
rescue ArgumentError
  false
end

#validate_schema!Object



42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/bookflow/apple_books/database.rb', line 42

def validate_schema!
  validate_database!(
    path: @annotation_db_path,
    table: "ZAEANNOTATION",
    columns: REQUIRED_ANNOTATION_COLUMNS
  )
  validate_database!(
    path: @library_db_path,
    table: "ZBKLIBRARYASSET",
    columns: REQUIRED_LIBRARY_COLUMNS
  )
end