Class: Serialbench::Serializers::Xml::LeptrisSerializer

Inherits:
BaseXmlSerializer show all
Defined in:
lib/serialbench/serializers/xml/leptris_serializer.rb

Defined Under Namespace

Classes: StreamingHandler

Instance Method Summary collapse

Methods inherited from BaseXmlSerializer

#features, format, #generate_xml, #parse_dom, #parse_sax, #supports_generation?, #supports_namespaces?, #supports_validation?

Methods inherited from BaseSerializer

#get_version, #initialize, #require_library, #stream_parse

Constructor Details

This class inherits a constructor from Serialbench::Serializers::BaseSerializer

Instance Method Details

#available?Boolean

The gem's require succeeds even when the libtaurus shared library is missing -- the FFI load happens lazily at first use. Probe with a real parse so "available" means "actually usable".

Returns:

  • (Boolean)


68
69
70
71
72
73
74
75
76
77
78
# File 'lib/serialbench/serializers/xml/leptris_serializer.rb', line 68

def available?
  return @available if defined?(@available)

  @available = begin
    require 'leptris'
    Leptris::XML.parse('<probe/>')
    true
  rescue StandardError, LoadError
    false
  end
end

#generate(data) ⇒ Object



18
19
20
21
22
23
24
25
# File 'lib/serialbench/serializers/xml/leptris_serializer.rb', line 18

def generate(data)
  require 'leptris'
  if data.is_a?(Leptris::XML::Document) || data.is_a?(Leptris::XML::Node)
    data.to_xml(indent: 2)
  else
    build_document_from_data(data).to_xml(indent: 2)
  end
end

#library_require_nameObject



61
62
63
# File 'lib/serialbench/serializers/xml/leptris_serializer.rb', line 61

def library_require_name
  'leptris'
end

#nameObject



9
10
11
# File 'lib/serialbench/serializers/xml/leptris_serializer.rb', line 9

def name
  'leptris'
end

#parse(xml_string) ⇒ Object



13
14
15
16
# File 'lib/serialbench/serializers/xml/leptris_serializer.rb', line 13

def parse(xml_string)
  require 'leptris'
  Leptris::XML.parse(xml_string)
end

#parse_streaming(xml_string, &block) ⇒ Object



27
28
29
30
31
32
33
34
# File 'lib/serialbench/serializers/xml/leptris_serializer.rb', line 27

def parse_streaming(xml_string, &block)
  require 'leptris'

  handler = StreamingHandler.new(&block)
  parser = Leptris::XML::SAX::Parser.new(handler)
  parser.parse_memory(xml_string)
  handler.elements_processed
end

#supports_stax?Boolean

leptris-ruby >= 1.6 exposes Leptris::XML::Pull, a StAX-style cursor (one event per #next). Declared by gem version so the check never triggers the FFI library load.

Returns:

  • (Boolean)


47
48
49
50
51
52
# File 'lib/serialbench/serializers/xml/leptris_serializer.rb', line 47

def supports_stax?
  spec = Gem.loaded_specs['leptris'] || Gem::Specification.find_by_name('leptris')
  !spec.nil? && spec.version >= Gem::Version.new('1.6.0')
rescue Gem::LoadError
  false
end

#supports_streaming?Boolean

Returns:

  • (Boolean)


36
37
38
# File 'lib/serialbench/serializers/xml/leptris_serializer.rb', line 36

def supports_streaming?
  true
end

#supports_xpath?Boolean

Returns:

  • (Boolean)


40
41
42
# File 'lib/serialbench/serializers/xml/leptris_serializer.rb', line 40

def supports_xpath?
  true
end

#versionObject



54
55
56
57
58
59
# File 'lib/serialbench/serializers/xml/leptris_serializer.rb', line 54

def version
  return 'unknown' unless available?

  require 'leptris'
  Leptris::VERSION
end