Class: PaperTrail::RelatedChanges::Change

Inherits:
Struct
  • Object
show all
Defined in:
lib/paper_trail/related_changes/change.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(diffs: [], merge_into_root: false, **args) ⇒ Change

Returns a new instance of Change.



14
15
16
# File 'lib/paper_trail/related_changes/change.rb', line 14

def initialize(diffs: [], merge_into_root: false, **args)
  super
end

Instance Attribute Details

#childrenObject

Returns the value of attribute children

Returns:

  • (Object)

    the current value of children



2
3
4
# File 'lib/paper_trail/related_changes/change.rb', line 2

def children
  @children
end

#descriptionObject

Returns the value of attribute description

Returns:

  • (Object)

    the current value of description



2
3
4
# File 'lib/paper_trail/related_changes/change.rb', line 2

def description
  @description
end

#diffsObject

Returns the value of attribute diffs

Returns:

  • (Object)

    the current value of diffs



2
3
4
# File 'lib/paper_trail/related_changes/change.rb', line 2

def diffs
  @diffs
end

#eventObject

Returns the value of attribute event

Returns:

  • (Object)

    the current value of event



2
3
4
# File 'lib/paper_trail/related_changes/change.rb', line 2

def event
  @event
end

#merge_into_rootObject

Returns the value of attribute merge_into_root

Returns:

  • (Object)

    the current value of merge_into_root



2
3
4
# File 'lib/paper_trail/related_changes/change.rb', line 2

def merge_into_root
  @merge_into_root
end

#requested_rootObject

Returns the value of attribute requested_root

Returns:

  • (Object)

    the current value of requested_root



2
3
4
# File 'lib/paper_trail/related_changes/change.rb', line 2

def requested_root
  @requested_root
end

#resourceObject

Returns the value of attribute resource

Returns:

  • (Object)

    the current value of resource



2
3
4
# File 'lib/paper_trail/related_changes/change.rb', line 2

def resource
  @resource
end

#resource_idObject

Returns the value of attribute resource_id

Returns:

  • (Object)

    the current value of resource_id



2
3
4
# File 'lib/paper_trail/related_changes/change.rb', line 2

def resource_id
  @resource_id
end

#timestampObject

Returns the value of attribute timestamp

Returns:

  • (Object)

    the current value of timestamp



2
3
4
# File 'lib/paper_trail/related_changes/change.rb', line 2

def timestamp
  @timestamp
end

#userObject

Returns the value of attribute user

Returns:

  • (Object)

    the current value of user



2
3
4
# File 'lib/paper_trail/related_changes/change.rb', line 2

def user
  @user
end

#version_idObject

Returns the value of attribute version_id

Returns:

  • (Object)

    the current value of version_id



2
3
4
# File 'lib/paper_trail/related_changes/change.rb', line 2

def version_id
  @version_id
end

Instance Method Details

#add_diff(args) ⇒ Object



36
37
38
# File 'lib/paper_trail/related_changes/change.rb', line 36

def add_diff(args)
  diffs << PaperTrail::RelatedChanges::Serializer::Diff.new(**args)
end

#empty?Boolean

Returns:

  • (Boolean)


32
33
34
# File 'lib/paper_trail/related_changes/change.rb', line 32

def empty?
  diffs.count.zero? && children.count.zero?
end

#to_hObject Also known as: as_json



18
19
20
21
22
23
24
25
26
27
28
# File 'lib/paper_trail/related_changes/change.rb', line 18

def to_h(*)
  self.diffs = diffs
               .group_by(&:source)
               .map { |k, g| [k, g.sort_by(&:source_rank)] } # ie. segments can be in display order
               .sort_by { |_, g| g[0].rank } # Direct attributes shown first
               .flat_map(&:last)
               .uniq
  results    = super().except(:merge_into_root).map { |k, v| [k, v.is_a?(Array) ? v.map(&:to_h) : v] }.to_h
  results.delete(:children) if results[:children].nil?
  results
end