Module: Feedx::Format

Defined in:
lib/feedx/format.rb

Defined Under Namespace

Classes: Abstract, JSON, Parquet, Protobuf

Class Method Summary collapse

Class Method Details

.detect(path) ⇒ Object



24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/feedx/format.rb', line 24

def detect(path)
  base = File.basename(path)
  loop do
    ext = File.extname(base)
    raise ArgumentError, 'unable to detect format' if ext.empty?

    kind = _resolve(ext[1..]) || _resolve(ext[1..-2])
    return kind if kind

    base = base[0..-ext.size - 1]
  end
end

.register(ext, kind) ⇒ Object



16
17
18
# File 'lib/feedx/format.rb', line 16

def register(ext, kind)
  registry[ext.to_s] = validate!(kind)
end

.resolve(name) ⇒ Object



20
21
22
# File 'lib/feedx/format.rb', line 20

def resolve(name)
  _resolve(name) || raise(ArgumentError, "invalid format #{name}")
end

.validate!(kind) ⇒ Object

Raises:

  • (ArgumentError)


9
10
11
12
13
14
# File 'lib/feedx/format.rb', line 9

def validate!(kind)
  raise ArgumentError, "#{kind} does not implement #encoder(io, &block)" unless kind.respond_to?(:encoder)
  raise ArgumentError, "#{kind} does not implement #decoder(io, &block)" unless kind.respond_to?(:decoder)

  kind
end