Sha256: 85e1569b41986c018a7686db1e67a68eeadba652a68220a6f350ca27da0de923

Contents?: true

Size: 1.41 KB

Versions: 1

Compression:

Stored size: 1.41 KB

Contents

module Glare
  class CfDnsRecord
    def initialize(id:, name:, type:, content:)
      @id = id
      @name = name
      @type = type
      @content = content
    end
    attr_reader :id, :name, :type, :content
  end

  class CfDnsRecords
    class << self
      def from_result(api_response)
        result = api_response.result

        records = result.map do |item|
          CfDnsRecord.new(
            id: item['id'],
            name: item['name'],
            type: item['type'],
            content: item['content']
          )
        end

        new(records)
      end

      def empty
        new([])
      end
    end

    def initialize(records)
      @records = records
    end

    def to_update(desired_records)
      records_to_update = @records - desired_records
      records_to_update.first(desired_records.count)
    end

    def -(records)
      @records.reject { |record| records.any? { |r| r.content == record.content } }
    end

    def to_a
      @records.dup
    end

    def count
      @records.count
    end

    def contents
      @records.map(&:content)
    end

    def each
      @records.each { |record| yield(record) }
    end

    def to_delete(target_number)
      records_to_delete = count - target_number
      return CfDnsRecords.empty if records_to_delete < 0

      @records.last(records_to_delete)
    end

    def to_create(desired_records)
      desired_records.drop(count)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
glare-0.2.2 lib/glare/cf_dns_records.rb