Class: Jiraby::Issue
- Inherits:
-
Object
- Object
- Jiraby::Issue
- Defined in:
- lib/jiraby/issue.rb
Instance Attribute Summary collapse
-
#data ⇒ Object
readonly
Returns the value of attribute data.
-
#jira ⇒ Object
readonly
Returns the value of attribute jira.
-
#pending_changes ⇒ Object
readonly
Returns the value of attribute pending_changes.
Instance Method Summary collapse
-
#[](name_or_id) ⇒ Object
Return the value in field
name_or_id. -
#[]=(name_or_id, value) ⇒ Object
Set field
name_or_idequal tovalue. - #editmeta ⇒ Object
-
#field_id(name_or_id) ⇒ Object
Return a field ID, given a name or ID.
-
#field_ids ⇒ Object
Return a sorted list of valid field IDs for this issue.
-
#has_field?(name_or_id) ⇒ Boolean
Return true if this issue has a field with the given name or ID, false otherwise.
-
#initialize(jira_instance, json_data = {}) ⇒ Issue
constructor
A new instance of Issue.
-
#is_assigned? ⇒ Boolean
Return true if this issue is assigned to someone, false otherwise.
-
#is_subtask? ⇒ Boolean
Return true if this issue is a subtask, false otherwise.
-
#key ⇒ Object
Return this issue's
key. -
#parent ⇒ Object
Return this issue's parent key, or nil if this issue has no parent.
-
#pending_changes? ⇒ Boolean
Return true if this issue has been modified since saving.
-
#save! ⇒ Object
Save this issue by sending a PUT request.
-
#subtasks ⇒ Object
Return this issue's subtask keys.
Constructor Details
#initialize(jira_instance, json_data = {}) ⇒ Issue
Returns a new instance of Issue.
6 7 8 9 10 11 |
# File 'lib/jiraby/issue.rb', line 6 def initialize(jira_instance, json_data={}) @jira = jira_instance @data = Entity.new(json_data) # Modifications are stored here until #save is called @pending_changes = Entity.new end |
Instance Attribute Details
#data ⇒ Object (readonly)
Returns the value of attribute data.
13 14 15 |
# File 'lib/jiraby/issue.rb', line 13 def data @data end |
#jira ⇒ Object (readonly)
Returns the value of attribute jira.
13 14 15 |
# File 'lib/jiraby/issue.rb', line 13 def jira @jira end |
#pending_changes ⇒ Object (readonly)
Returns the value of attribute pending_changes.
13 14 15 |
# File 'lib/jiraby/issue.rb', line 13 def pending_changes @pending_changes end |
Instance Method Details
#[](name_or_id) ⇒ Object
Return the value in field name_or_id.
26 27 28 29 |
# File 'lib/jiraby/issue.rb', line 26 def [](name_or_id) _id = self.field_id(name_or_id) return @pending_changes[_id] || @data.fields[_id] end |
#[]=(name_or_id, value) ⇒ Object
Set field name_or_id equal to value.
21 22 23 |
# File 'lib/jiraby/issue.rb', line 21 def []=(name_or_id, value) @pending_changes[self.field_id(name_or_id)] = value end |
#editmeta ⇒ Object
89 90 91 |
# File 'lib/jiraby/issue.rb', line 89 def return @jira.get("issue/#{@data.key}/editmeta") end |
#field_id(name_or_id) ⇒ Object
Return a field ID, given a name or ID. name_or_id may be the field's ID
(like "subtasks" or "customfield_10001"), or it may be the human-readable
field name (like "Sub-Tasks" or "My Custom Field").
TODO: Raise an exception on invalid name_or_id?
36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/jiraby/issue.rb', line 36 def field_id(name_or_id) if @data.fields.include?(name_or_id) return name_or_id else _id = @jira.field_mapping.key(name_or_id) if _id.nil? raise InvalidField.new("Invalid field name or ID: #{name_or_id}") end return _id end end |
#field_ids ⇒ Object
Return a sorted list of valid field IDs for this issue.
85 86 87 |
# File 'lib/jiraby/issue.rb', line 85 def field_ids return @data.fields.keys.sort end |
#has_field?(name_or_id) ⇒ Boolean
Return true if this issue has a field with the given name or ID, false otherwise.
50 51 52 53 54 55 56 57 58 |
# File 'lib/jiraby/issue.rb', line 50 def has_field?(name_or_id) begin self.field_id(name_or_id) rescue InvalidField return false else return true end end |
#is_assigned? ⇒ Boolean
Return true if this issue is assigned to someone, false otherwise.
66 67 68 |
# File 'lib/jiraby/issue.rb', line 66 def is_assigned? return !@data.fields.assignee.nil? end |
#is_subtask? ⇒ Boolean
Return true if this issue is a subtask, false otherwise.
61 62 63 |
# File 'lib/jiraby/issue.rb', line 61 def is_subtask? return @data.fields.issuetype.subtask end |
#key ⇒ Object
Return this issue's key
16 17 18 |
# File 'lib/jiraby/issue.rb', line 16 def key return @data.key end |
#parent ⇒ Object
Return this issue's parent key, or nil if this issue has no parent.
71 72 73 74 75 76 77 |
# File 'lib/jiraby/issue.rb', line 71 def parent if is_subtask? return @data.fields.parent.key else return nil end end |
#pending_changes? ⇒ Boolean
Return true if this issue has been modified since saving.
94 95 96 |
# File 'lib/jiraby/issue.rb', line 94 def pending_changes? return !@pending_changes.empty? end |
#save! ⇒ Object
Save this issue by sending a PUT request. Return true if save was successful.
100 101 102 103 104 105 106 107 |
# File 'lib/jiraby/issue.rb', line 100 def save! json_data = {'fields' => @pending_changes} # TODO: Handle failed save @jira.put("issue/#{@data.key}", json_data) @data.fields.merge!(@pending_changes) @pending_changes = Entity.new return true end |
#subtasks ⇒ Object
Return this issue's subtask keys
80 81 82 |
# File 'lib/jiraby/issue.rb', line 80 def subtasks return @data.fields.subtasks.collect { |st| st.key } end |