module Caracal::Core::ListStyles

This module encapsulates all the functionality related to defining list styles.

Public Class Methods

default_list_styles() click to toggle source
# File lib/caracal/core/list_styles.rb, line 20
def self.default_list_styles
  [
    { type: :ordered,   level: 0, format: 'decimal',     value: '%1.', left: 720,  indent: 360  },
    { type: :ordered,   level: 1, format: 'lowerLetter', value: '%2.', left: 1440, indent: 1080 },
    { type: :ordered,   level: 2, format: 'lowerRoman',  value: '%3.', left: 2160, indent: 1800, align: :right },
    { type: :ordered,   level: 3, format: 'decimal',     value: '%4.', left: 2880, indent: 2520 },
    { type: :ordered,   level: 4, format: 'lowerLetter', value: '%5.', left: 3600, indent: 3240 },
    { type: :ordered,   level: 5, format: 'lowerRoman',  value: '%6.', left: 4320, indent: 3960, align: :right },
    { type: :ordered,   level: 6, format: 'decimal',     value: '%7.', left: 5040, indent: 4680 },
    { type: :ordered,   level: 7, format: 'lowerLetter', value: '%8.', left: 5760, indent: 5400 },
    { type: :ordered,   level: 8, format: 'lowerRoman',  value: '%9.', left: 6480, indent: 6120, align: :right },
                                                                                   
    { type: :unordered, level: 0, format: 'bullet',      value: '●',   left: 720,  indent: 360  },
    { type: :unordered, level: 1, format: 'bullet',      value: '○',   left: 1440, indent: 1080 },
    { type: :unordered, level: 2, format: 'bullet',      value: '■',   left: 2160, indent: 1800 },
    { type: :unordered, level: 3, format: 'bullet',      value: '●',   left: 2880, indent: 2520 },
    { type: :unordered, level: 4, format: 'bullet',      value: '○',   left: 3600, indent: 3240 },
    { type: :unordered, level: 5, format: 'bullet',      value: '■',   left: 4320, indent: 3960 },
    { type: :unordered, level: 6, format: 'bullet',      value: '●',   left: 5040, indent: 4680 },
    { type: :unordered, level: 7, format: 'bullet',      value: '○',   left: 5760, indent: 5400 },
    { type: :unordered, level: 8, format: 'bullet',      value: '■',   left: 6480, indent: 6120 }
  ]           
end
included(base) click to toggle source
# File lib/caracal/core/list_styles.rb, line 13
def self.included(base)
  base.class_eval do
    
    #-------------------------------------------------------------
    # Class Methods
    #-------------------------------------------------------------
    
    def self.default_list_styles
      [
        { type: :ordered,   level: 0, format: 'decimal',     value: '%1.', left: 720,  indent: 360  },
        { type: :ordered,   level: 1, format: 'lowerLetter', value: '%2.', left: 1440, indent: 1080 },
        { type: :ordered,   level: 2, format: 'lowerRoman',  value: '%3.', left: 2160, indent: 1800, align: :right },
        { type: :ordered,   level: 3, format: 'decimal',     value: '%4.', left: 2880, indent: 2520 },
        { type: :ordered,   level: 4, format: 'lowerLetter', value: '%5.', left: 3600, indent: 3240 },
        { type: :ordered,   level: 5, format: 'lowerRoman',  value: '%6.', left: 4320, indent: 3960, align: :right },
        { type: :ordered,   level: 6, format: 'decimal',     value: '%7.', left: 5040, indent: 4680 },
        { type: :ordered,   level: 7, format: 'lowerLetter', value: '%8.', left: 5760, indent: 5400 },
        { type: :ordered,   level: 8, format: 'lowerRoman',  value: '%9.', left: 6480, indent: 6120, align: :right },
                                                                                       
        { type: :unordered, level: 0, format: 'bullet',      value: '●',   left: 720,  indent: 360  },
        { type: :unordered, level: 1, format: 'bullet',      value: '○',   left: 1440, indent: 1080 },
        { type: :unordered, level: 2, format: 'bullet',      value: '■',   left: 2160, indent: 1800 },
        { type: :unordered, level: 3, format: 'bullet',      value: '●',   left: 2880, indent: 2520 },
        { type: :unordered, level: 4, format: 'bullet',      value: '○',   left: 3600, indent: 3240 },
        { type: :unordered, level: 5, format: 'bullet',      value: '■',   left: 4320, indent: 3960 },
        { type: :unordered, level: 6, format: 'bullet',      value: '●',   left: 5040, indent: 4680 },
        { type: :unordered, level: 7, format: 'bullet',      value: '○',   left: 5760, indent: 5400 },
        { type: :unordered, level: 8, format: 'bullet',      value: '■',   left: 6480, indent: 6120 }
      ]           
    end
    
    
    #-------------------------------------------------------------
    # Public Methods
    #-------------------------------------------------------------
    
    #============== ATTRIBUTES ==========================
    
    def list_style(options={}, &block)
      model = Caracal::Core::Models::ListStyleModel.new(options, &block)
      
      if model.valid?
        register_list_style(model)
      else
        raise Caracal::Errors::InvalidModelError, 'list style must define a :type, :level, :format, and :value.'
      end
      model
    end
    
    
    #============== GETTERS =============================
    
    def list_styles
      @list_styles ||= []
    end
    
    def find_list_style(type, level)
      list_styles.find { |s| s.matches?(type, level) }
    end
    
    
    #============== REGISTRATION ========================
    
    def register_list_style(model)
      unregister_list_style(model.style_type, model.style_level)
      list_styles << model
      model
    end
    
    def unregister_list_style(type, level)
      if s = find_list_style(type, level)
        list_styles.delete(s)
      end
    end
    
  end
end

Public Instance Methods

find_list_style(type, level) click to toggle source
# File lib/caracal/core/list_styles.rb, line 69
def find_list_style(type, level)
  list_styles.find { |s| s.matches?(type, level) }
end
list_style(options={}, &block) click to toggle source
ATTRIBUTES ==========================
# File lib/caracal/core/list_styles.rb, line 51
def list_style(options={}, &block)
  model = Caracal::Core::Models::ListStyleModel.new(options, &block)
  
  if model.valid?
    register_list_style(model)
  else
    raise Caracal::Errors::InvalidModelError, 'list style must define a :type, :level, :format, and :value.'
  end
  model
end
list_styles() click to toggle source
GETTERS =============================
# File lib/caracal/core/list_styles.rb, line 65
def list_styles
  @list_styles ||= []
end
register_list_style(model) click to toggle source
REGISTRATION ========================
# File lib/caracal/core/list_styles.rb, line 76
def register_list_style(model)
  unregister_list_style(model.style_type, model.style_level)
  list_styles << model
  model
end
unregister_list_style(type, level) click to toggle source
# File lib/caracal/core/list_styles.rb, line 82
def unregister_list_style(type, level)
  if s = find_list_style(type, level)
    list_styles.delete(s)
  end
end