Module: Lexdrill::Workbooks

Defined in:
lib/lexdrill/workbooks.rb

Overview

Global list of known Google Sheets workbooks (name => spreadsheet id), which one is currently active, and — per workbook — which tab is currently active within it. Lives at ~/.drill/workbooks.json. Names are the spreadsheet's own title (see drill wb add), not chosen by hand.

Constant Summary collapse

PATH =
Lexdrill::Config.path("workbooks.json")
URL_PATTERN =
%r{/spreadsheets/d/([a-zA-Z0-9_-]+)}

Class Method Summary collapse

Class Method Details

.add(name, spreadsheet_id) ⇒ Object



21
22
23
24
25
26
# File 'lib/lexdrill/workbooks.rb', line 21

def self.add(name, spreadsheet_id)
  data = load
  data["workbooks"][name] = { "id" => spreadsheet_id }
  data["current"] ||= name
  save(data)
end

.current_idObject



50
51
52
# File 'lib/lexdrill/workbooks.rb', line 50

def self.current_id
  current_entry&.fetch("id")
end

.current_nameObject



46
47
48
# File 'lib/lexdrill/workbooks.rb', line 46

def self.current_name
  load["current"]
end

.current_sheetObject



77
78
79
# File 'lib/lexdrill/workbooks.rb', line 77

def self.current_sheet
  current_entry&.[]("current_sheet")
end

.current_sheet_idObject



81
82
83
# File 'lib/lexdrill/workbooks.rb', line 81

def self.current_sheet_id
  current_entry&.[]("current_sheet_id")
end

.current_urlObject



59
60
61
62
# File 'lib/lexdrill/workbooks.rb', line 59

def self.current_url
  name = current_name
  name && url_for(name)
end

.extract_id(url) ⇒ Object



13
14
15
# File 'lib/lexdrill/workbooks.rb', line 13

def self.extract_id(url)
  url[URL_PATTERN, 1]
end

.namesObject



17
18
19
# File 'lib/lexdrill/workbooks.rb', line 17

def self.names
  load.fetch("workbooks").keys
end

.remove(name) ⇒ Object



28
29
30
31
32
33
34
35
# File 'lib/lexdrill/workbooks.rb', line 28

def self.remove(name)
  data = load
  return false unless data["workbooks"].delete(name)

  data["current"] = nil if data["current"] == name
  save(data)
  true
end

.set_current_sheet(sheet_name, sheet_id) ⇒ Object



64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/lexdrill/workbooks.rb', line 64

def self.set_current_sheet(sheet_name, sheet_id)
  data = load
  workbooks = data["workbooks"]
  name = data["current"]
  return false unless name && workbooks.key?(name)

  entry = workbooks[name]
  entry["current_sheet"] = sheet_name
  entry["current_sheet_id"] = sheet_id
  save(data)
  true
end

.url_for(name) ⇒ Object



54
55
56
57
# File 'lib/lexdrill/workbooks.rb', line 54

def self.url_for(name)
  entry = load.fetch("workbooks")[name]
  entry && "https://docs.google.com/spreadsheets/d/#{entry.fetch('id')}/edit"
end

.use(name) ⇒ Object



37
38
39
40
41
42
43
44
# File 'lib/lexdrill/workbooks.rb', line 37

def self.use(name)
  data = load
  return false unless data["workbooks"].key?(name)

  data["current"] = name
  save(data)
  true
end