Module: Reclaim::Utils

Defined in:
lib/reclaim/utils.rb

Overview

Utility methods for common operations

Class Method Summary collapse

Class Method Details

.format_datetime_for_api(date_input) ⇒ Object

Format datetime for API (UTC with Z suffix like the Python SDK)



53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/reclaim/utils.rb', line 53

def self.format_datetime_for_api(date_input)
  return nil unless date_input

  case date_input
  when Time
    date_input.utc.iso8601
  when Date
    date_input.to_time.utc.iso8601
  when String
    # Try to parse and convert to UTC ISO format with Z suffix
    Time.parse(date_input).utc.iso8601
  else
    Time.parse(date_input.to_s).utc.iso8601
  end
rescue ArgumentError
  date_input.to_s
end

.format_task(task) ⇒ Object

Format task for display



10
11
12
13
14
15
16
# File 'lib/reclaim/utils.rb', line 10

def self.format_task(task)
  status_icon = task.completed? ? "" : ""
  due_str = task.due_date ? " (due: #{task.due_date_formatted})" : ""

  "#{status_icon} #{task.title}#{due_str}\n" \
  "   ID: #{task.id} | Priority: #{task.priority} | Status: #{task.status}"
end

.format_task_list(tasks, title = "Tasks") ⇒ Object

Format task list for display



19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/reclaim/utils.rb', line 19

def self.format_task_list(tasks, title = "Tasks")
  return "No tasks found." if tasks.empty?

  output = "\n#{title}:\n"
  output += "-" * 50 + "\n"

  tasks.each do |task|
    output += format_task(task) + "\n"
  end

  output += "\nTotal: #{tasks.length} tasks\n"
  output
end

.parse_date(date_input) ⇒ Object

Parse various date formats into ISO string



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/reclaim/utils.rb', line 34

def self.parse_date(date_input)
  return nil unless date_input

  case date_input
  when Time
    date_input.iso8601
  when Date
    date_input.to_time.iso8601
  when String
    # Try to parse and convert to ISO format
    Time.parse(date_input).iso8601
  else
    date_input.to_s
  end
rescue ArgumentError
  date_input.to_s
end

.validate_duration(duration) ⇒ Object

Validate duration value



80
81
82
83
84
85
# File 'lib/reclaim/utils.rb', line 80

def self.validate_duration(duration)
  return 1.0 unless duration

  duration = duration.to_f
  duration.positive? ? duration : 1.0
end

.validate_priority(priority) ⇒ Object

Validate priority value



72
73
74
75
76
77
# File 'lib/reclaim/utils.rb', line 72

def self.validate_priority(priority)
  return :p3 unless priority

  priority = priority.to_s.downcase.to_sym
  Task::PRIORITIES.key?(priority) ? priority : :p3
end