mirror of
https://github.com/internetee/registry.git
synced 2025-06-04 03:37:28 +02:00
70 lines
1.5 KiB
Ruby
70 lines
1.5 KiB
Ruby
module Xsd
|
|
class Schema < ApplicationService
|
|
SCHEMA_PATH = 'lib/schemas/'.freeze
|
|
BASE_URL = 'https://epp.tld.ee/schema/'.freeze
|
|
|
|
PREFIXES = %w[
|
|
domain-ee
|
|
domain-eis
|
|
all-ee
|
|
changePoll
|
|
contact
|
|
contact-ee
|
|
contact-eis
|
|
eis
|
|
epp
|
|
epp-ee
|
|
eppcom
|
|
host
|
|
secDNS
|
|
].freeze
|
|
|
|
attr_reader :xsd_schemas, :for_prefix
|
|
|
|
def initialize(params)
|
|
schema_path = params.fetch(:schema_path, SCHEMA_PATH)
|
|
@for_prefix = params.fetch(:for_prefix)
|
|
@xsd_schemas = Dir.entries(schema_path).select { |f| File.file? File.join(schema_path, f) }
|
|
end
|
|
|
|
def self.filename(*args, &block)
|
|
new(*args, &block).call
|
|
end
|
|
|
|
def call
|
|
filename = latest(for_prefix)
|
|
BASE_URL + filename
|
|
end
|
|
|
|
private
|
|
|
|
def latest(prefix)
|
|
schemas_by_name[prefix].last
|
|
end
|
|
|
|
def basename(filename)
|
|
File.basename(filename, '.xsd')
|
|
end
|
|
|
|
def prefix(filename)
|
|
regex = /([a-zA-Z]+-?[a-zA-Z]+)/
|
|
|
|
basename(filename).match(regex)[0]
|
|
end
|
|
|
|
def prefixes
|
|
xsd_schemas.map { |filename| prefix(filename) }.uniq
|
|
end
|
|
|
|
def schemas_by_name
|
|
prefixes.each_with_object({}) do |prefix, hash|
|
|
hash[prefix] = xsd_schemas.select { |filename| prefix_check(prefix, filename) }.uniq.sort
|
|
end
|
|
end
|
|
|
|
def prefix_check(prefix, filename)
|
|
version_regex = /\-\d+\S\d+/
|
|
(filename.include? prefix) && (filename.sub(prefix, '')[0, 4] =~ version_regex)
|
|
end
|
|
end
|
|
end
|