class NSWTopo::Shapefile::Source

def self.===(path)

def self.===(path)
  OS.ogrinfo "-ro", "-so", path
  true
rescue OS::Error
  false
end

def initialize(path)

def initialize(path)
  @path = path
end

def layer(**options)

def layer(**options)
  Layer.new self, **options
end

def layer_info

def layer_info
  OS.ogrinfo("-ro", "-so", @path).scan(/^\w*\d+: (.*?)(?: \(([\w\s]+)\))?$/).sort_by(&:first).map do |name, geom_type|
    geom_type ? "#{name} (#{geom_type.delete(?\s)})" : name
  end
end

def only_layer

def only_layer
  name, *others = OS.ogrinfo("-ro", "-so", @path).scan(/^\w*\d+: (.*?)(?: \([\w\s]+\))?$/).flatten
  return nil if others.any?
  return name if name
  File.basename(@path, File.extname(@path)).tap do |name|
    OS.ogrinfo "-ro", "-so", @path, name
  end
rescue OS::Error
end