Class: Ditz::Project

Inherits:
ModelObject show all
Defined in:
lib/model-objects.rb

Defined Under Namespace

Classes: Error

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from ModelObject

#after_deserialize, #before_serialize, #changed!, #changed?, changes_are_logged, create_interactively, #each_modelobject, field, fields, from, inherited, #log, #save!, #to_yaml_properties, #to_yaml_type, yaml_domain, yaml_other_thing

Instance Attribute Details

#issuesObject

issues are not model fields proper, so we build up their interface here.



45
46
47
# File 'lib/model-objects.rb', line 45

def issues
  @issues
end

Instance Method Details

#add_issue(issue) ⇒ Object



46
# File 'lib/model-objects.rb', line 46

def add_issue issue; added_issues << issue; issues << issue end

#added_issuesObject



48
# File 'lib/model-objects.rb', line 48

def added_issues; @added_issues ||= [] end

#assign_issue_names!Object



86
87
88
89
90
91
92
# File 'lib/model-objects.rb', line 86

def assign_issue_names!
  prefixes = components.map { |c| [c.name, c.name.gsub(/^\s+/, "-").downcase] }.to_h
  ids = components.map { |c| [c.name, 0] }.to_h
  issues.sort_by { |i| i.creation_time }.each do |i|
    i.name = "#{prefixes[i.component]}-#{ids[i.component] += 1}"
  end
end

#component_for(component_name) ⇒ Object



66
67
68
# File 'lib/model-objects.rb', line 66

def component_for component_name
  components.find { |i| i.name == component_name }
end

#deleted_issuesObject



49
# File 'lib/model-objects.rb', line 49

def deleted_issues; @deleted_issues ||= [] end

#drop_issue(issue) ⇒ Object



47
# File 'lib/model-objects.rb', line 47

def drop_issue issue; deleted_issues << issue if issues.delete issue end

#get_componentsObject



51
52
53
54
55
56
57
58
59
60
# File 'lib/model-objects.rb', line 51

def get_components
  puts <<EOS
Issues can be tracked across the project as a whole, or the project can be
split into components, and issues tracked separately for each component.
EOS
  use_components = ask_yon "Track issues separately for different components?"
  comp_names = use_components ? ask_for_many("components") : []

  ([name] + comp_names).uniq.map { |n| Component.create_interactively :with => { :name => n } }
end

#issue_for(issue_name) ⇒ Object



62
63
64
# File 'lib/model-objects.rb', line 62

def issue_for issue_name
  issues.find { |i| i.name == issue_name }
end

#issues_for_component(component) ⇒ Object



78
79
80
# File 'lib/model-objects.rb', line 78

def issues_for_component component
  issues.select { |i| i.component == component.name }
end

#issues_for_release(release) ⇒ Object



74
75
76
# File 'lib/model-objects.rb', line 74

def issues_for_release release
  issues.select { |i| i.release == release.name }
end

#release_for(release_name) ⇒ Object



70
71
72
# File 'lib/model-objects.rb', line 70

def release_for release_name
  releases.find { |i| i.name == release_name }
end

#unassigned_issuesObject



82
83
84
# File 'lib/model-objects.rb', line 82

def unassigned_issues
  issues.select { |i| i.release.nil? }
end

#validate!Object



94
95
96
97
98
99
100
# File 'lib/model-objects.rb', line 94

def validate!
  if(dup = components.map { |c| c.name }.first_duplicate)
    raise Error, "more than one component named #{dup.inspect}"
  elsif(dup = releases.map { |r| r.name }.first_duplicate)
    raise Error, "more than one release named #{dup.inspect}"
  end
end