Module: Ace::Task::Atoms::TaskValidationRules

Defined in:
lib/ace/task/atoms/task_validation_rules.rb

Constant Summary collapse

VALID_STATUSES =
%w[pending in-progress done blocked draft skipped cancelled].freeze
TERMINAL_STATUSES =
%w[done skipped cancelled].freeze
REQUIRED_FIELDS =
%w[id status title].freeze
%w[tags created_at].freeze
MAX_TITLE_LENGTH =
80

Class Method Summary collapse

Class Method Details



44
45
46
47
# File 'lib/ace/task/atoms/task_validation_rules.rb', line 44

def self.missing_recommended_fields(frontmatter)
  return RECOMMENDED_FIELDS.dup if frontmatter.nil? || !frontmatter.is_a?(Hash)
  RECOMMENDED_FIELDS.select { |field| frontmatter[field].nil? }
end

.missing_required_fields(frontmatter) ⇒ Object



39
40
41
42
# File 'lib/ace/task/atoms/task_validation_rules.rb', line 39

def self.missing_required_fields(frontmatter)
  return REQUIRED_FIELDS.dup if frontmatter.nil? || !frontmatter.is_a?(Hash)
  REQUIRED_FIELDS.select { |field| frontmatter[field].nil? || frontmatter[field].to_s.strip.empty? }
end

.scope_consistent?(status, special_folder) ⇒ Boolean

Returns:

  • (Boolean)


25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/ace/task/atoms/task_validation_rules.rb', line 25

def self.scope_consistent?(status, special_folder)
  issues = []
  if terminal_status?(status) && special_folder != "_archive"
    issues << {type: :warning, message: "Task with terminal status '#{status}' not in _archive/"}
  end
  if special_folder == "_archive" && !terminal_status?(status) && status
    issues << {type: :warning, message: "Task in _archive/ but status is '#{status}' (expected terminal status)"}
  end
  if special_folder == "_maybe" && terminal_status?(status)
    issues << {type: :warning, message: "Task in _maybe/ with terminal status '#{status}' (should be in _archive/)"}
  end
  issues
end

.terminal_status?(status) ⇒ Boolean

Returns:

  • (Boolean)


17
18
19
# File 'lib/ace/task/atoms/task_validation_rules.rb', line 17

def self.terminal_status?(status)
  TERMINAL_STATUSES.include?(status.to_s)
end

.valid_id?(id) ⇒ Boolean

Returns:

  • (Boolean)


21
22
23
# File 'lib/ace/task/atoms/task_validation_rules.rb', line 21

def self.valid_id?(id)
  id.to_s.match?(/\A[0-9a-z]{3}\.[a-z]\.[0-9a-z]{3}(?:\.[0-9a-z])?\z/)
end

.valid_status?(status) ⇒ Boolean

Returns:

  • (Boolean)


13
14
15
# File 'lib/ace/task/atoms/task_validation_rules.rb', line 13

def self.valid_status?(status)
  VALID_STATUSES.include?(status.to_s)
end