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