class Dossier::Segment::Definition

Attributes

display_name[RW]
group_by[RW]
name[RW]
next[RW]
prev[RW]
segment_subclass[R]
segmenter_class[RW]

Public Class Methods

new(segmenter_class, name, options = {}) click to toggle source
# File lib/dossier/segment/definition.rb, line 7
def initialize(segmenter_class, name, options = {})
  self.segmenter_class = segmenter_class
  self.name            = name
  self.group_by        = options.fetch(:group_by, name)
  self.display_name    = options.fetch(:display_name, name)
  define_segment_subclass
end

Public Instance Methods

chain_module() click to toggle source
# File lib/dossier/segment/definition.rb, line 35
def chain_module
  next? ? self.next.segment_module : rows_module
end
columns() click to toggle source
# File lib/dossier/segment/definition.rb, line 23
def columns
  [group_by, display_name_for_column].map(&:to_s).uniq
end
next?() click to toggle source
# File lib/dossier/segment/definition.rb, line 27
def next?
  !!self.next
end
plural_name() click to toggle source
# File lib/dossier/segment/definition.rb, line 19
def plural_name
  name.to_s.pluralize
end
prev?() click to toggle source
# File lib/dossier/segment/definition.rb, line 31
def prev?
  !!prev
end
segment_class_name() click to toggle source
# File lib/dossier/segment/definition.rb, line 15
def segment_class_name
  name.to_s.classify
end
segment_module() click to toggle source
# File lib/dossier/segment/definition.rb, line 39
def segment_module
  definition = self
  Module.new do
    define_method definition.plural_name do
      @segments ||= segmenter.segment_options_for(self).map { |options| 
        definition.segment_subclass.new(segmenter, definition, options).tap do |instance|
          instance.parent = self if is_a?(Dossier::Segment)
        end
      }
    end
  end
end

Private Instance Methods

define_segment_subclass() click to toggle source
# File lib/dossier/segment/definition.rb, line 54
def define_segment_subclass
  @segment_subclass = segmenter_class.const_set(segment_class_name, Class.new(Dossier::Segment))
end
display_name_for_column() click to toggle source
# File lib/dossier/segment/definition.rb, line 58
def display_name_for_column
  display_name.respond_to?(:call) ? group_by : display_name
end
rows_module() click to toggle source
# File lib/dossier/segment/definition.rb, line 62
def rows_module
  definition = self
  Module.new do
    define_method :rows do
      @rows ||= Rows.new(segmenter, self, definition)
    end
  end
end