Class: Database

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeDatabase

Returns a new instance of Database.



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/minder/database/database.rb', line 9

def initialize
  FileUtils.mkdir_p(File.dirname(Minder::DATABASE_LOCATION))
  ROM.use :auto_registration
  ROM.setup(:sql, "sqlite://#{Minder::DATABASE_LOCATION}")

  require 'minder/tasks/task'
  require 'minder/database/task_mapper'
  require 'minder/database/tasks'
  require 'minder/database/period_mapper'
  require 'minder/database/periods'

  ROM.commands(:tasks) do
    define(:delete)
    define(:update)
  end

  ROM.commands(:periods) do
    define(:update)
  end

  @rom = ROM.finalize.env
  rom.gateways[:default].use_logger(Logger.new(Minder::LOG_LOCATION))
end

Instance Attribute Details

#romObject (readonly)

Returns the value of attribute rom.



7
8
9
# File 'lib/minder/database/database.rb', line 7

def rom
  @rom
end

Instance Method Details

#add_period(period) ⇒ Object



69
70
71
72
73
# File 'lib/minder/database/database.rb', line 69

def add_period(period)
  rom.relations.periods.insert(started_at: period.started_at,
                               duration_in_seconds: period.duration_in_seconds,
                               type: period.type)
end

#add_task(description) ⇒ Object



41
42
43
# File 'lib/minder/database/database.rb', line 41

def add_task(description)
  rom.relations.tasks.insert(description: description)
end

#complete_period(task) ⇒ Object



65
66
67
# File 'lib/minder/database/database.rb', line 65

def complete_period(task)
  update_period(task, ended_at: Time.now)
end

#complete_task(task) ⇒ Object



49
50
51
# File 'lib/minder/database/database.rb', line 49

def complete_task(task)
  update_task(task, completed_at: Time.now)
end

#delete_task(task) ⇒ Object



45
46
47
# File 'lib/minder/database/database.rb', line 45

def delete_task(task)
  rom.command(:tasks).delete.by_id(task.id).call
end

#last_periodObject



75
76
77
78
79
80
81
82
83
84
85
86
87
# File 'lib/minder/database/database.rb', line 75

def last_period
  require 'minder/pomodoro/work_period'
  require 'minder/pomodoro/break_period'
  require 'minder/pomodoro/idle_period'
  data = rom.relations.periods.order(:id).last
  if data[:type] == 'work'
    Minder::WorkPeriod.new(data)
  elsif data[:type] == 'break'
    Minder::BreakPeriod.new(data)
  else
    Minder::IdlePeriod.new(data)
  end
end

#periodsObject



93
94
95
# File 'lib/minder/database/database.rb', line 93

def periods
  rom.relation(:periods).as(:entity).to_a
end

#pomodoros_todayObject



97
98
99
# File 'lib/minder/database/database.rb', line 97

def pomodoros_today
  rom.relation(:periods).pomodoros_today.as(:entity).to_a
end

#start_task(task) ⇒ Object



53
54
55
# File 'lib/minder/database/database.rb', line 53

def start_task(task)
  update_task(task, started_at: Time.now)
end

#tasksObject



33
34
35
# File 'lib/minder/database/database.rb', line 33

def tasks
  rom.relation(:tasks).active.as(:entity).to_a
end

#tasks_filtered_by(text) ⇒ Object



37
38
39
# File 'lib/minder/database/database.rb', line 37

def tasks_filtered_by(text)
  rom.relation(:tasks).active.as(:entity).filtered_by(text).to_a
end

#unstart_task(task) ⇒ Object



57
58
59
# File 'lib/minder/database/database.rb', line 57

def unstart_task(task)
  update_task(task, started_at: nil)
end

#update_period(period, options = {}) ⇒ Object



89
90
91
# File 'lib/minder/database/database.rb', line 89

def update_period(period, options = {})
  rom.command(:periods).update.by_id(period.id).call(options)
end

#update_task(task, options = {}) ⇒ Object



61
62
63
# File 'lib/minder/database/database.rb', line 61

def update_task(task, options = {})
  rom.command(:tasks).update.by_id(task.id).call(options)
end