class Dossier::Segment

Attributes

definition[RW]
options[RW]
parent[RW]
report[RW]
segmenter[RW]

Public Class Methods

new(segmenter, definition, options = {}) click to toggle source
# File lib/dossier/segment.rb, line 7
def initialize(segmenter, definition, options = {})
  self.segmenter  = segmenter
  self.report     = segmenter.report
  self.definition = definition
  self.options    = options.symbolize_keys
  extend(definition.chain_module)
end

Public Instance Methods

chain() click to toggle source
# File lib/dossier/segment.rb, line 27
def chain
  @chain ||= [].tap { |collector| parent_chain(self, collector) }
end
display_name() click to toggle source
# File lib/dossier/segment.rb, line 15
def display_name
  if definition.display_name.respond_to?(:call)
    definition.display_name.call(options)
  else
    options.fetch(definition.display_name)
  end
end
group_by() click to toggle source
# File lib/dossier/segment.rb, line 23
def group_by
  options.fetch(definition.group_by)
end
inspect() click to toggle source
# File lib/dossier/segment.rb, line 35
def inspect
  "#<#{self.class.name}:#{key_path}>"
end
key_path() click to toggle source
# File lib/dossier/segment.rb, line 31
def key_path
  chain.map(&:group_by).reverse.join('.')
end

Private Instance Methods

parent_chain(segment, collector) click to toggle source
# File lib/dossier/segment.rb, line 43
def parent_chain(segment, collector)
  collector << segment
  parent_chain(segment.parent, collector) if segment.parent
end