Class: Moxml::Config
- Inherits:
-
Object
- Object
- Moxml::Config
- Defined in:
- lib/moxml/config.rb
Constant Summary collapse
- LINE_ENDING_LF =
"\n"- LINE_ENDING_CRLF =
"\r\n"- VALID_LINE_ENDINGS =
[LINE_ENDING_LF, LINE_ENDING_CRLF].freeze
- VALID_ADAPTERS =
%i[nokogiri oga rexml ox headed_ox libxml leptris].freeze
- PREFERRED_ADAPTER =
Preferred CRuby default (issue #96): fastest on every measured operation and the cleanest deployment story. Only takes effect when the installed leptris supports programmatic document construction (Leptris::XML::Document.create); otherwise moxml falls back to FALLBACK_ADAPTER so released-gem environments keep working. Under Opal the default is oga only when the vendored pure-Ruby fork was compiled into the bundle — stock oga requires its C extension and cannot load there; otherwise rexml.
:leptris- FALLBACK_ADAPTER =
:nokogiri- OPAL_DEFAULT_ADAPTER =
:oga- OPAL_FALLBACK_ADAPTER =
:rexml- ENTITY_LOAD_MODES =
Entity loading modes:
- :required - Must load entities, raise error if unavailable (default)
- :optional - Try to load, continue silently if unavailable
- :disabled - Don't load entities, use empty registry
- :custom - Use custom entity provider via entity_provider callback
%i[required optional disabled custom].freeze
- NAMESPACE_VALIDATION_MODES =
%i[strict lenient].freeze
- ENTITY_RESTORATION_MODES =
Entity restoration modes:
- :lenient (default) — restore any known entity from the registry
- :strict — only restore DTD-declared entities (falls back to lenient until DTD parsing is implemented)
%i[strict lenient].freeze
Class Attribute Summary collapse
Instance Attribute Summary collapse
-
#adapter_name ⇒ Object
readonly
Returns the value of attribute adapter_name.
-
#default_encoding ⇒ Object
Returns the value of attribute default_encoding.
-
#default_indent ⇒ Object
Returns the value of attribute default_indent.
-
#default_line_ending ⇒ Object
Returns the value of attribute default_line_ending.
-
#entity_load_mode ⇒ Object
Returns the value of attribute entity_load_mode.
-
#entity_provider ⇒ Object
Returns the value of attribute entity_provider.
-
#entity_restoration_mode ⇒ Object
Returns the value of attribute entity_restoration_mode.
-
#namespace_validation_mode ⇒ Object
Returns the value of attribute namespace_validation_mode.
-
#preload_entity_sets ⇒ Object
Returns the value of attribute preload_entity_sets.
-
#restore_entities ⇒ Object
Returns the value of attribute restore_entities.
-
#strict_parsing ⇒ Object
Returns the value of attribute strict_parsing.
Class Method Summary collapse
- .default ⇒ Object
- .detect_loaded_adapter ⇒ Object
-
.leptris_preferred_available? ⇒ Boolean
True when the leptris gem is installed AND new enough for the adapter (it needs programmatic document construction, which released 1.1.x lacks).
-
.opal_runtime_adapter ⇒ Object
Stock oga requires its C extension, so under Opal the oga adapter can only come from the vendored pure-Ruby fork — a repo-only artifact the released gem does not ship.
- .runtime_default_adapter ⇒ Object
Instance Method Summary collapse
- #adapter ⇒ Object
- #adapter=(name) ⇒ Object
- #default_adapter=(name) ⇒ Object
-
#initialize(adapter_name = nil, strict_parsing = nil, default_encoding = nil) ⇒ Config
constructor
A new instance of Config.
- #load_external_entities ⇒ Object
-
#load_external_entities=(value) ⇒ Object
Backward compatibility: convert old boolean to new symbol.
Constructor Details
#initialize(adapter_name = nil, strict_parsing = nil, default_encoding = nil) ⇒ Config
Returns a new instance of Config.
115 116 117 118 119 120 121 122 123 124 125 126 127 128 |
# File 'lib/moxml/config.rb', line 115 def initialize(adapter_name = nil, strict_parsing = nil, default_encoding = nil) self.adapter = adapter_name || Config.default.adapter_name @strict_parsing = strict_parsing || Config.default.strict_parsing @default_encoding = default_encoding || Config.default.default_encoding @default_indent = 2 @default_line_ending = LINE_ENDING_LF @restore_entities = false @preload_entity_sets = [] @entity_load_mode = :required @entity_provider = nil @namespace_validation_mode = :strict @entity_restoration_mode = :lenient end |
Class Attribute Details
.default_adapter ⇒ Object
36 37 38 |
# File 'lib/moxml/config.rb', line 36 def default_adapter @default_adapter || runtime_default_adapter end |
Instance Attribute Details
#adapter_name ⇒ Object (readonly)
Returns the value of attribute adapter_name.
94 95 96 |
# File 'lib/moxml/config.rb', line 94 def adapter_name @adapter_name end |
#default_encoding ⇒ Object
Returns the value of attribute default_encoding.
95 96 97 |
# File 'lib/moxml/config.rb', line 95 def default_encoding @default_encoding end |
#default_indent ⇒ Object
Returns the value of attribute default_indent.
95 96 97 |
# File 'lib/moxml/config.rb', line 95 def default_indent @default_indent end |
#default_line_ending ⇒ Object
Returns the value of attribute default_line_ending.
94 95 96 |
# File 'lib/moxml/config.rb', line 94 def default_line_ending @default_line_ending end |
#entity_load_mode ⇒ Object
Returns the value of attribute entity_load_mode.
95 96 97 |
# File 'lib/moxml/config.rb', line 95 def entity_load_mode @entity_load_mode end |
#entity_provider ⇒ Object
Returns the value of attribute entity_provider.
95 96 97 |
# File 'lib/moxml/config.rb', line 95 def entity_provider @entity_provider end |
#entity_restoration_mode ⇒ Object
Returns the value of attribute entity_restoration_mode.
95 96 97 |
# File 'lib/moxml/config.rb', line 95 def entity_restoration_mode @entity_restoration_mode end |
#namespace_validation_mode ⇒ Object
Returns the value of attribute namespace_validation_mode.
95 96 97 |
# File 'lib/moxml/config.rb', line 95 def namespace_validation_mode @namespace_validation_mode end |
#preload_entity_sets ⇒ Object
Returns the value of attribute preload_entity_sets.
95 96 97 |
# File 'lib/moxml/config.rb', line 95 def preload_entity_sets @preload_entity_sets end |
#restore_entities ⇒ Object
Returns the value of attribute restore_entities.
95 96 97 |
# File 'lib/moxml/config.rb', line 95 def restore_entities @restore_entities end |
#strict_parsing ⇒ Object
Returns the value of attribute strict_parsing.
95 96 97 |
# File 'lib/moxml/config.rb', line 95 def strict_parsing @strict_parsing end |
Class Method Details
.default ⇒ Object
32 33 34 |
# File 'lib/moxml/config.rb', line 32 def default @default ||= new(default_adapter, true, "UTF-8") end |
.detect_loaded_adapter ⇒ Object
78 79 80 81 82 83 84 |
# File 'lib/moxml/config.rb', line 78 def detect_loaded_adapter return :nokogiri if Object.const_defined?(:Nokogiri) return :ox if Object.const_defined?(:Ox) return :oga if Object.const_defined?(:Oga) nil end |
.leptris_preferred_available? ⇒ Boolean
True when the leptris gem is installed AND new enough for the adapter (it needs programmatic document construction, which released 1.1.x lacks). Memoized: the require probe runs once.
64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/moxml/config.rb', line 64 def leptris_preferred_available? return @leptris_preferred_available if defined?(@leptris_preferred_available) @leptris_preferred_available = begin require "leptris" # leptris-ruby 1.9.0 regression (leptris-ruby#53): the XML # autoload manifest is shadowed; load it explicitly. require "leptris/xml" ::Leptris::XML::Document.respond_to?(:create) rescue LoadError, NameError false end end |
.opal_runtime_adapter ⇒ Object
Stock oga requires its C extension, so under Opal the oga
adapter can only come from the vendored pure-Ruby fork — a
repo-only artifact the released gem does not ship. Bundles
that compiled it in (moxml's own harness) keep oga; everyone
else gets the rexml adapter, whose Opal compat ships in-gem.
defined? is safe here: this branch never runs under MRI,
where it would trigger autoload resolution.
55 56 57 58 59 |
# File 'lib/moxml/config.rb', line 55 def opal_runtime_adapter return OPAL_DEFAULT_ADAPTER if defined?(Moxml::Adapter::Oga) OPAL_FALLBACK_ADAPTER end |
.runtime_default_adapter ⇒ Object
40 41 42 43 44 45 46 |
# File 'lib/moxml/config.rb', line 40 def runtime_default_adapter return opal_runtime_adapter if RUBY_ENGINE == "opal" return PREFERRED_ADAPTER if leptris_preferred_available? detect_loaded_adapter || FALLBACK_ADAPTER end |
Instance Method Details
#adapter ⇒ Object
151 152 153 |
# File 'lib/moxml/config.rb', line 151 def adapter @adapter ||= Adapter.load(@adapter_name) end |
#adapter=(name) ⇒ Object
130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 |
# File 'lib/moxml/config.rb', line 130 def adapter=(name) name = name.to_sym @adapter = nil unless VALID_ADAPTERS.include?(name) raise Moxml::AdapterError.new( "Invalid adapter: #{name}", adapter: name, operation: "set_adapter", ) end @adapter_name = name adapter end |
#default_adapter=(name) ⇒ Object
146 147 148 149 |
# File 'lib/moxml/config.rb', line 146 def default_adapter=(name) self.adapter = name self.class.default_adapter = name end |
#load_external_entities ⇒ Object
194 195 196 |
# File 'lib/moxml/config.rb', line 194 def load_external_entities @entity_load_mode == :required end |
#load_external_entities=(value) ⇒ Object
Backward compatibility: convert old boolean to new symbol
186 187 188 189 190 191 192 |
# File 'lib/moxml/config.rb', line 186 def load_external_entities=(value) @entity_load_mode = case value when true then :required when false then :disabled else value end end |