internetee-registry/app/models/retained_domains.rb
2020-05-14 14:59:17 +03:00

49 lines
1.1 KiB
Ruby

# Hiding the queries behind its own class will allow us to include disputed or
# auctioned domains without meddling up with controller logic.
class RetainedDomains
RESERVED = 'reserved'.freeze
BLOCKED = 'blocked'.freeze
attr_reader :domains
def initialize
@domains = gather_domains
end
def gather_domains
blocked_domains = BlockedDomain.order(name: :desc).all
reserved_domains = ReservedDomain.order(name: :desc).all
domains = blocked_domains.to_a.union(reserved_domains.to_a)
domains.sort_by(&:name)
end
def to_jsonable
domains.map { |el| domain_to_json(el) }
end
def domain_to_json(domain)
# Smelly, but ActiveRecord objects are weird and do not respond
# to usual syntax:
# case a
# when Array then "foo"
# when Hash then "bar"
# else "baz"
# end
status = case domain.class.to_s
when 'ReservedDomain' then RESERVED
when 'BlockedDomain' then BLOCKED
end
punycode = SimpleIDN.to_ascii(domain.name)
{
name: domain.name,
status: status,
punycode_name: punycode,
}
end
delegate :count, to: :domains
end