Class: Serialbench::Serializers::BaseSerializer

Inherits:
Object
  • Object
show all
Includes:
Singleton
Defined in:
lib/serialbench/serializers/base_serializer.rb

Instance Method Summary collapse

Constructor Details

#initializeBaseSerializer

Returns a new instance of BaseSerializer.



12
13
14
# File 'lib/serialbench/serializers/base_serializer.rb', line 12

def initialize
  # Override in subclasses
end

Instance Method Details

#capabilitiesObject

Capabilities: a Set of symbols declaring what this adapter can do. Subclasses override to add symbols; the base handles every query. This replaces the 12+ individual supports_X? predicates.



41
42
43
# File 'lib/serialbench/serializers/base_serializer.rb', line 41

def capabilities
  Set.new(%i[dom parse generate])
end

#generate(object) ⇒ Object

Raises:

  • (NotImplementedError)


26
27
28
# File 'lib/serialbench/serializers/base_serializer.rb', line 26

def generate(object)
  raise NotImplementedError, 'Subclasses must implement #generate'
end

#get_version(constant_path) ⇒ Object



56
57
58
59
60
# File 'lib/serialbench/serializers/base_serializer.rb', line 56

def get_version(constant_path)
  constant_path.split('::').reduce(Object) { |obj, const| obj.const_get(const) }
rescue NameError
  'unknown'
end

#parse(data) ⇒ Object

Raises:

  • (NotImplementedError)


22
23
24
# File 'lib/serialbench/serializers/base_serializer.rb', line 22

def parse(data)
  raise NotImplementedError, 'Subclasses must implement #parse'
end

#require_library(library_name) ⇒ Object



49
50
51
52
53
54
# File 'lib/serialbench/serializers/base_serializer.rb', line 49

def require_library(library_name)
  require library_name
  true
rescue LoadError
  false
end

#stream_parse(data) {|:document, result| ... } ⇒ Object

Yields:

  • (:document, result)


30
31
32
33
34
35
36
# File 'lib/serialbench/serializers/base_serializer.rb', line 30

def stream_parse(data)
  # Default implementation falls back to regular parsing
  # Override in subclasses that support streaming
  result = parse(data)
  yield(:document, result) if block_given?
  result
end

#supports?(capability) ⇒ Boolean

Returns:

  • (Boolean)


45
46
47
# File 'lib/serialbench/serializers/base_serializer.rb', line 45

def supports?(capability)
  capabilities.include?(capability)
end