module Kramdown::Options
This module defines all options that are used by parsers and/or converters as well as providing methods to deal with the options.
Option Definitions
↑ topConstants
- SMART_QUOTES_ENTITIES
- SMART_QUOTES_STR
- TOC_LEVELS_ARRAY
- TOC_LEVELS_RANGE
Option Validators
↑ topPublic Class Methods
Source
# File lib/kramdown/options.rb, line 141 def self.simple_array_validator(val, name, size = nil) if String === val val = val.split(",") elsif !(Array === val) raise Kramdown::Error, "Invalid type #{val.class} for option #{name}" end if size && val.size != size raise Kramdown::Error, "Option #{name} needs exactly #{size} values" end val end
Ensures that the option value val
for the option called name
is a valid array. The parameter val
can be
-
a comma separated string which is split into an array of values
-
or an array.
Optionally, the array is checked for the correct size.
Source
# File lib/kramdown/options.rb, line 158 def self.simple_hash_validator(val, name) if String === val begin val = YAML.safe_load(val) rescue RuntimeError, ArgumentError, SyntaxError raise Kramdown::Error, "Invalid YAML value for option #{name}" end end raise Kramdown::Error, "Invalid type #{val.class} for option #{name}" unless Hash === val val end
Ensures that the option value val
for the option called name
is a valid hash. The parameter val
can be
-
a hash in YAML format
-
or a Ruby Hash object.
Option definitions
↑ topConstants
- ALLOWED_TYPES
-
Allowed option types.
- Definition
-
Struct class for storing the definition of an option.
Public Class Methods
Source
# File lib/kramdown/options.rb, line 71 def self.defaults @defaults ||= begin temp = {} @options.each {|_n, o| temp[o.name] = o.default } temp.freeze end end
Return a Hash with the default values for all options.
Source
# File lib/kramdown/options.rb, line 50 def self.define(name, type, default, desc, &block) name = name.to_sym raise ArgumentError, "Option name #{name} is already used" if @options.key?(name) raise ArgumentError, "Invalid option type #{type} specified" unless ALLOWED_TYPES.include?(type) raise ArgumentError, "Invalid type for default value" if !(type === default) && !default.nil? raise ArgumentError, "Missing validator block" if type == Object && block.nil? @options[name] = Definition.new(name, type, default, desc, block) @defaults = nil end
Define a new option called name
(a Symbol) with the given type
(String, Integer, Float, Symbol, Boolean
, Object), default value default
and the description desc
. If a block is specified, it should validate the value and either raise an error or return a valid value.
The type ‘Object’ should only be used for complex types for which none of the other types suffices. A block needs to be specified when using type ‘Object’ and it has to cope with a value given as string and as the opaque type.
Source
# File lib/kramdown/options.rb, line 66 def self.defined?(name) @options.key?(name.to_sym) end
Return true
if an option called name
is defined.
Source
# File lib/kramdown/options.rb, line 61 def self.definitions @options end
Return all option definitions.
Source
# File lib/kramdown/options.rb, line 82 def self.merge(hash) temp = defaults.dup hash.each do |k, v| k = k.to_sym temp[k] = @options.key?(k) ? parse(k, v) : v end temp end
Merge the defaults Hash with the parsed options from the given Hash, i.e. only valid option names are considered and their value is run through the parse method.
Source
# File lib/kramdown/options.rb, line 96 def self.parse(name, data) name = name.to_sym raise ArgumentError, "No option named #{name} defined" unless @options.key?(name) unless @options[name].type === data data = data.to_s data = if @options[name].type == String data elsif @options[name].type == Integer Integer(data) rescue raise Kramdown::Error, "Invalid integer value for option '#{name}': '#{data}'" elsif @options[name].type == Float Float(data) rescue raise Kramdown::Error, "Invalid float value for option '#{name}': '#{data}'" elsif @options[name].type == Symbol str_to_sym(data) elsif @options[name].type == Boolean data.downcase.strip != 'false' && !data.empty? end end data = @options[name].validator[data] if @options[name].validator data end
Parse the given value data
as if it was a value for the option name
and return the parsed value with the correct type.
If data
already has the correct type, it is just returned. Otherwise it is converted to a String and then to the correct type.
Source
# File lib/kramdown/options.rb, line 122 def self.str_to_sym(data) data = data.strip data = data[1..-1] if data[0] == ':' (data.empty? || data == 'nil' ? nil : data.to_sym) end
Converts the given String data
into a Symbol or nil
with the following provisions:
-
A leading colon is stripped from the string.
-
An empty value or a value equal to “nil” results in
nil
.