Class: ChangeItem

Inherits:
Object
  • Object
show all
Defined in:
lib/jirametrics/change_item.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(raw:, author_raw:, time:, artificial: false) ⇒ ChangeItem

Returns a new instance of ChangeItem.



7
8
9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/jirametrics/change_item.rb', line 7

def initialize raw:, author_raw:, time:, artificial: false
  @raw = raw
  @author_raw = author_raw
  @time = time
  raise 'ChangeItem.new() time cannot be nil' if time.nil?
  raise "Time must be an object of type Time in the correct timezone: #{@time.inspect}" unless @time.is_a? Time

  @field = @raw['field']
  @value = @raw['toString']
  @value_id = @raw['to'].to_i
  @old_value = @raw['fromString']
  @old_value_id = @raw['from']&.to_i
  @artificial = artificial
end

Instance Attribute Details

#author_rawObject (readonly)

Returns the value of attribute author_raw.



4
5
6
# File 'lib/jirametrics/change_item.rb', line 4

def author_raw
  @author_raw
end

#fieldObject (readonly)

Returns the value of attribute field.



4
5
6
# File 'lib/jirametrics/change_item.rb', line 4

def field
  @field
end

#old_valueObject

Returns the value of attribute old_value.



5
6
7
# File 'lib/jirametrics/change_item.rb', line 5

def old_value
  @old_value
end

#old_value_idObject (readonly)

Returns the value of attribute old_value_id.



4
5
6
# File 'lib/jirametrics/change_item.rb', line 4

def old_value_id
  @old_value_id
end

#rawObject (readonly)

Returns the value of attribute raw.



4
5
6
# File 'lib/jirametrics/change_item.rb', line 4

def raw
  @raw
end

#timeObject

Returns the value of attribute time.



5
6
7
# File 'lib/jirametrics/change_item.rb', line 5

def time
  @time
end

#valueObject

Returns the value of attribute value.



5
6
7
# File 'lib/jirametrics/change_item.rb', line 5

def value
  @value
end

#value_idObject (readonly)

Returns the value of attribute value_id.



4
5
6
# File 'lib/jirametrics/change_item.rb', line 4

def value_id
  @value_id
end

Instance Method Details

#==(other) ⇒ Object



64
65
66
# File 'lib/jirametrics/change_item.rb', line 64

def == other
  field.eql?(other.field) && value.eql?(other.value) && time_to_s(time).eql?(time_to_s(other.time))
end

#artificial?Boolean

Returns:

  • (Boolean)


30
# File 'lib/jirametrics/change_item.rb', line 30

def artificial? = @artificial

#assignee?Boolean

Returns:

  • (Boolean)


31
# File 'lib/jirametrics/change_item.rb', line 31

def assignee? = (field == 'assignee')

#authorObject



22
23
24
# File 'lib/jirametrics/change_item.rb', line 22

def author
  @author_raw&.[]('displayName') || @author_raw&.[]('name') || 'Unknown author'
end

#author_icon_urlObject



26
27
28
# File 'lib/jirametrics/change_item.rb', line 26

def author_icon_url
  @author_raw&.[]('avatarUrls')&.[]('16x16')
end

#comment?Boolean

Returns:

  • (Boolean)


32
# File 'lib/jirametrics/change_item.rb', line 32

def comment? = (field == 'comment')

#current_status_matches(*status_names_or_ids) ⇒ Object



68
69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/jirametrics/change_item.rb', line 68

def current_status_matches *status_names_or_ids
  return false unless status?

  status_names_or_ids.any? do |name_or_id|
    case name_or_id
    when Status
      name_or_id.id == @value_id
    when String
      name_or_id == @value
    else
      name_or_id == @value_id
    end
  end
end

#description?Boolean

Returns:

  • (Boolean)


33
# File 'lib/jirametrics/change_item.rb', line 33

def description? = (field == 'description')

#due_date?Boolean

Returns:

  • (Boolean)


34
# File 'lib/jirametrics/change_item.rb', line 34

def due_date? = (field == 'duedate')

#field_as_human_readableObject



98
99
100
101
102
103
104
105
106
107
# File 'lib/jirametrics/change_item.rb', line 98

def field_as_human_readable
  case @field
  when 'duedate' then 'Due date'
  when 'timeestimate' then 'Time estimate'
  when 'timeoriginalestimate' then 'Time original estimate'
  when 'issuetype' then 'Issue type'
  when 'IssueParentAssociation' then 'Issue parent association'
  else @field.capitalize
  end
end

#flagged?Boolean

Returns:

  • (Boolean)


35
# File 'lib/jirametrics/change_item.rb', line 35

def flagged? = (field == 'Flagged')

#inspectObject



62
# File 'lib/jirametrics/change_item.rb', line 62

def inspect = to_s

#issue_type?Boolean

Returns:

  • (Boolean)


36
# File 'lib/jirametrics/change_item.rb', line 36

def issue_type? = field == 'issuetype'

#labels?Boolean

Returns:

  • (Boolean)


37
# File 'lib/jirametrics/change_item.rb', line 37

def labels? = (field == 'labels')

#link?Boolean

Returns:

  • (Boolean)


38
# File 'lib/jirametrics/change_item.rb', line 38

def link? = (field == 'Link')

#old_status_matches(*status_names_or_ids) ⇒ Object



83
84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/jirametrics/change_item.rb', line 83

def old_status_matches *status_names_or_ids
  return false unless status?

  status_names_or_ids.any? do |name_or_id|
    case name_or_id
    when Status
      name_or_id.id == @old_value_id
    when String
      name_or_id == @old_value
    else
      name_or_id == @old_value_id
    end
  end
end

#priority?Boolean

Returns:

  • (Boolean)


39
# File 'lib/jirametrics/change_item.rb', line 39

def priority? = (field == 'priority')

#resolution?Boolean

Returns:

  • (Boolean)


40
# File 'lib/jirametrics/change_item.rb', line 40

def resolution? = (field == 'resolution')

#sprint?Boolean

Returns:

  • (Boolean)


41
# File 'lib/jirametrics/change_item.rb', line 41

def sprint? = (field == 'Sprint')

#status?Boolean

Returns:

  • (Boolean)


42
# File 'lib/jirametrics/change_item.rb', line 42

def status? = (field == 'status')

#to_sObject



47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/jirametrics/change_item.rb', line 47

def to_s
  message = +''
  message << "ChangeItem(field: #{field.inspect}"
  message << ", value: #{value.inspect}"
  message << ':' << value_id.inspect if status?
  if old_value
    message << ", old_value: #{old_value.inspect}"
    message << ':' << old_value_id.inspect if status?
  end
  message << ", time: #{time_to_s(@time).inspect}"
  message << ', artificial' if artificial?
  message << ')'
  message
end

#to_timeObject

An alias for time so that logic accepting a Time, Date, or ChangeItem can all respond to :to_time



45
# File 'lib/jirametrics/change_item.rb', line 45

def to_time = @time