class Markdown::Config

Constants

DEFAULTS
DEFAULTS_SERVICE

pandoc-ruby - how to include - gemfile cannot install binary ?? rpeg-markdown - build failure - still active, anyway? rdiscount - # compilation error on heroku; sorry excluded for now

DEFAULT_EXTNAMES

note: only kramdown is listed as a dependency in gem specs (because it's Ruby only and, thus, easy to install)

if you want to use other markdown libs install the required/desired lib e.g.
use  gem install rdiscount for rdiscount and so on

also note for now the first present markdown library gets used

the search order is first come, first serve, that is: rdiscount, rpeg-markdown, maruku, bluecloth, kramdown (fallback, always present)
DEFAULT_FILTERS
DEFAULT_REDCARPET

Public Class Methods

new() click to toggle source
# File lib/markdown/config.rb, line 84
def initialize

  # for an example see ./boot.rb
  if $MARKDOWN_USE_SERVICE_CONFIG == true
    load_props_service
  else
    load_props
  end
  
  @libs   = []
  
  require_markdown_libs()
end

Public Instance Methods

dump() click to toggle source
# File lib/markdown/config.rb, line 98
def dump  # for debugging dump all settings
  puts "Markdown settings:"
  @props_default.dump   if @props_default
  @props_home.dump      if @props_home
  @props_work.dump      if @props_work
  
  puts
  puts "Markdown libs:"
  puts "  #{@libs.length} Markdown #{(@libs.length == 1) ? 'library' : 'libraries'} found: #{@libs.join(', ')}"
end
known_markdown_libs() click to toggle source
# File lib/markdown/config.rb, line 117
def known_markdown_libs
  # returns an array of known markdown engines e.g.
  # [ 'pandoc-ruby', 'rdiscount', 'rpeg-markdown', 'maruku', 'bluecloth', 'kramdown' ]

  ## todo: allow single lib para instead of libs
  ##  todo: allow ENV setting markdown_[select]_lib=xxxx

  ## todo/fix: use lookup with config parent cascade


  ## lookup order
  ## 1)  env variable MARKDOWN_LIB
  ## 2)  lib property (single markdown engine)
  ## 3)  libs property (first-come first-serve markdown engine list)

  user_lib = Env.markdown_lib || @props.fetch( 'lib', nil )

  if user_lib.nil?
    user_libs = @props.fetch( 'libs', nil )
  else
    [ user_lib ]  # return as array (wrap single lib entry)
  end
end
load_props() click to toggle source
# File lib/markdown/config.rb, line 58
def load_props
  @props = @props_default = Props.new( DEFAULTS, 'DEFAULTS' )

  # check for user settings (markdown.yml) in home folder

  ## todo: use .markdown.yml?? or differnt name ??
  props_home_file = File.join( Env.home, 'markdown.yml' )
  if File.exists?( props_home_file )
    puts "Loading home settings from '#{props_home_file}'..."
    @props = @props_home = Props.load_file( props_home_file, @props )
  end
  
  # check for user settings (markdown.yml) in working folder

  props_work_file = File.join( '.', 'markdown.yml' )
  if File.exists?( props_work_file )
    puts "Loading work settings from '#{props_work_file}'..."
    @props = @props_work = Props.load_file( props_work_file, @props )
  end
end
load_props_service() click to toggle source
# File lib/markdown/config.rb, line 79
def load_props_service
  puts "Loading service settings..."
  @props = @props_default = Props.new( DEFAULTS_SERVICE, 'DEFAULTS' )
end
markdown_extnames() click to toggle source
# File lib/markdown/config.rb, line 109
def markdown_extnames
  @props.fetch( 'extnames', nil )
end
markdown_filters() click to toggle source
# File lib/markdown/config.rb, line 113
def markdown_filters
  @props.fetch( 'filters', nil )
end
markdown_lib() click to toggle source
# File lib/markdown/config.rb, line 175
def markdown_lib
  @libs.first
end
markdown_lib=( lib ) click to toggle source
# File lib/markdown/config.rb, line 156
def markdown_lib=( lib )
  
  # fix/todo: check if @libs.first == lib  => do nothing; return
  
  # check if value exists in libs array
  # if yes put it into first position
  # otherwise issue warning/error - better throw exception; engine not found
  
  # try to delete
  obj = @libs.delete( lib )
  if obj.nil?  # nothing deleted; no obj found
    # try to require; will raise load error exception if not found; know what your're doing! no fallback; sorry; better fail fast
    require lib
  end
 
  # add it back; make it first entry
  @libs.unshift( lib )
end
markdown_lib_defaults( lib=nil ) click to toggle source
# File lib/markdown/config.rb, line 183
def markdown_lib_defaults( lib=nil )
  lib = @libs.first   if lib.nil?
  ## todo: return props ? that acts like a hash?? (lets us support section lookup without deep merge???)
  opts = @props.fetch( lib, {} )
end
markdown_libs() click to toggle source
# File lib/markdown/config.rb, line 179
def markdown_libs
  @libs  # NB: return all libs - should we return a clone?
end
markdown_to_html_method( lib=nil ) click to toggle source
# File lib/markdown/config.rb, line 195
def markdown_to_html_method( lib=nil )
  lib  = @libs.first   if lib.nil?
  method = @props.fetch_from_section( lib, 'converter', "#{lib.downcase}_to_html" )  # default to <lib>_to_html if converter prop not found
  method.tr('-','_').to_sym
end
markdown_version_method( lib=nil ) click to toggle source
# File lib/markdown/config.rb, line 189
def markdown_version_method( lib=nil )
  lib  = @libs.first   if lib.nil?
  method = "#{lib.downcase}_version"  # default to <lib>_to_html if converter prop not found
  method.tr('-','_').to_sym
end
require_markdown_libs() click to toggle source
# File lib/markdown/config.rb, line 141
def require_markdown_libs
  # check for available markdown libs/gems
  # try to require each lib and remove any not installed

  known_markdown_libs.each do |lib|
    begin
      require lib
      @libs << lib
    rescue LoadError => ex
      ## todo: use logger.debug  instead of puts
      puts "Markdown library #{lib} not found. Use gem install #{lib} to install."
    end
  end
end