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
- RECOMMENDED_FIELDS =
%w[tags created_at].freeze
- MAX_TITLE_LENGTH =
80
Class Method Summary collapse
- .missing_recommended_fields(frontmatter) ⇒ Object
- .missing_required_fields(frontmatter) ⇒ Object
- .scope_consistent?(status, special_folder) ⇒ Boolean
- .terminal_status?(status) ⇒ Boolean
- .valid_id?(id) ⇒ Boolean
- .valid_status?(status) ⇒ Boolean
Class Method Details
.missing_recommended_fields(frontmatter) ⇒ Object
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
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
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
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
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 |