Class: HexaPDF::Configuration
- Inherits:
-
Object
- Object
- HexaPDF::Configuration
- Defined in:
- lib/hexapdf/configuration.rb
Overview
Manages both the global and document specific configuration options for HexaPDF.
Overview
HexaPDF allows detailed control over many aspects of PDF manipulation. If there is a need to use a certain default value somewhere, it is defined as a configuration option so that it can easily be changed.
Some options are defined as global options because they are needed on the class level - see HexaPDF::GlobalConfiguration. Other options can be configured for individual documents as they allow to fine-tune some behavior - see HexaPDF::DefaultDocumentConfiguration.
A configuration option name is dot-separted to provide a hierarchy of option names. For example, io.chunk_size.
Class Method Summary collapse
-
.with_defaults(values = {}) ⇒ Object
Creates a new document specific Configuration object by merging the values into the default configuration object.
Instance Method Summary collapse
-
#[](name) ⇒ Object
Returns the value for the configuration option
name
. -
#[]=(name, value) ⇒ Object
Uses
value
as the value for the configuration optionname
. -
#constantize(name, *keys) ⇒ Object
:call-seq: config.constantize(name, *keys) -> constant config.constantize(name, *keys) {|name| block} -> obj.
-
#initialize(options = {}) ⇒ Configuration
constructor
Creates a new Configuration object using the provided hash argument.
-
#key?(name) ⇒ Boolean
(also: #option?)
Returns
true
if the given option exists. -
#merge(config) ⇒ Object
Returns a new Configuration object containing the options from the given configuration object (or hash) and this configuration object.
Constructor Details
#initialize(options = {}) ⇒ Configuration
Creates a new Configuration object using the provided hash argument.
66 67 68 |
# File 'lib/hexapdf/configuration.rb', line 66 def initialize( = {}) @options = end |
Class Method Details
.with_defaults(values = {}) ⇒ Object
Creates a new document specific Configuration object by merging the values into the default configuration object.
61 62 63 |
# File 'lib/hexapdf/configuration.rb', line 61 def self.with_defaults(values = {}) DefaultDocumentConfiguration.merge(values) end |
Instance Method Details
#[](name) ⇒ Object
Returns the value for the configuration option name
.
77 78 79 |
# File 'lib/hexapdf/configuration.rb', line 77 def [](name) [name] end |
#[]=(name, value) ⇒ Object
Uses value
as the value for the configuration option name
.
82 83 84 |
# File 'lib/hexapdf/configuration.rb', line 82 def []=(name, value) [name] = value end |
#constantize(name, *keys) ⇒ Object
:call-seq:
config.constantize(name, *keys) -> constant
config.constantize(name, *keys) {|name| block} -> obj
Returns the constant the option name
is referring to. If keys
are provided and the value of the option name
responds to #dig, the constant to which the keys refer is returned.
If no constant can be found and no block is provided, an error is raised. If a block is provided it is called with the option name and its result will be returned.
config.constantize('encryption.aes') #=> HexaPDF::Encryption::FastAES
config.constantize('filter.map', :Fl) #=> HexaPDF::Filter::FlateDecode
121 122 123 124 125 126 127 128 129 130 131 132 |
# File 'lib/hexapdf/configuration.rb', line 121 def constantize(name, *keys) data = self[name] data = data.dig(*keys) if data.respond_to?(:dig) (data = ::Object.const_get(data) rescue nil) if data.kind_of?(String) if data.nil? && block_given? data = yield(name) elsif data.nil? raise HexaPDF::Error, "Error getting constant for configuration option '#{name}'" + (keys.empty? ? "" : " and keys '#{keys.join(', ')}'") end data end |
#key?(name) ⇒ Boolean Also known as: option?
Returns true
if the given option exists.
71 72 73 |
# File 'lib/hexapdf/configuration.rb', line 71 def key?(name) .key?(name) end |
#merge(config) ⇒ Object
Returns a new Configuration object containing the options from the given configuration object (or hash) and this configuration object.
If a key already has a value in this object, its value is overwritten by the one from config
. However, hash values are merged instead of being overwritten. Array values are duplicated.
92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
# File 'lib/hexapdf/configuration.rb', line 92 def merge(config) config = (config.kind_of?(self.class) ? config. : config) merged_config = .each_with_object({}) do |(key, old), conf| new = config[key] conf[key] = if old.kind_of?(Hash) && new.kind_of?(Hash) old.merge(new) elsif new.kind_of?(Array) || old.kind_of?(Array) (new || old).dup elsif config.key?(key) new else old end end self.class.new(merged_config) end |