class Dennis::Group

Public Class Methods

all(client, page: nil, per_page: nil) click to toggle source
# File lib/dennis/group.rb, line 11
def all(client, page: nil, per_page: nil)
  request = client.api.create_request(:get, 'groups')
  request.arguments[:page] = page if page
  request.arguments[:per_page] = per_page if per_page
  PaginatedArray.create(request.perform.hash, 'groups') do |hash|
    new(client, hash)
  end
end
create(client, name:, external_reference: nil) click to toggle source
# File lib/dennis/group.rb, line 28
def create(client, name:, external_reference: nil)
  request = client.api.create_request(:post, 'groups')
  request.arguments[:properties] = { name: name, external_reference: external_reference }
  Group.new(client, request.perform.hash['group'])
rescue ApiaClient::RequestError => e
  raise ValidationError, e.detail['errors'] if e.code == 'validation_error'

  raise
end
find_by(client, field, value) click to toggle source
# File lib/dennis/group.rb, line 20
def find_by(client, field, value)
  request = client.api.create_request(:get, 'groups/:group')
  request.arguments[:group] = { field => value }
  Group.new(client, request.perform.hash['group'])
rescue ApiaClient::RequestError => e
  e.code == 'group_not_found' ? nil : raise
end
new(client, hash) click to toggle source
# File lib/dennis/group.rb, line 40
def initialize(client, hash)
  @client = client
  @hash = hash
end

Public Instance Methods

create_or_update_zone(**properties) click to toggle source
# File lib/dennis/group.rb, line 81
def create_or_update_zone(**properties)
  Zone.create_or_update(@client, group: { id: id }, **properties)
end
create_zone(**properties) click to toggle source
# File lib/dennis/group.rb, line 77
def create_zone(**properties)
  Zone.create(@client, group: { id: id }, **properties)
end
created_at() click to toggle source
# File lib/dennis/group.rb, line 57
def created_at
  return nil if @hash['created_at'].nil?
  return @hash['created_at'] if @hash['created_at'].is_a?(Time)

  Time.at(@hash['created_at'])
end
delete() click to toggle source
# File lib/dennis/group.rb, line 113
def delete
  req = @client.api.create_request(:delete, 'groups/:group')
  req.arguments['group'] = { id: id }
  req.perform
  true
end
external_reference() click to toggle source
# File lib/dennis/group.rb, line 53
def external_reference
  @hash['external_reference']
end
id() click to toggle source
# File lib/dennis/group.rb, line 45
def id
  @hash['id']
end
name() click to toggle source
# File lib/dennis/group.rb, line 49
def name
  @hash['name']
end
nameservers() click to toggle source
# File lib/dennis/group.rb, line 71
def nameservers
  @nameservers ||= @hash['nameservers'].map do |hash|
    Nameserver.new(@client, hash)
  end
end
tagged_records(tags) click to toggle source
# File lib/dennis/group.rb, line 97
def tagged_records(tags)
  Record.all_by_tag(@client, tags, group: { id: id })
end
update(properties) click to toggle source
# File lib/dennis/group.rb, line 101
def update(properties)
  req = @client.api.create_request(:patch, 'groups/:group')
  req.arguments['group'] = { id: id }
  req.arguments['properties'] = properties
  @hash = req.perform.hash['group']
  true
rescue ApiaClient::RequestError => e
  raise ValidationError, e.detail['errors'] if e.code == 'validation_error'

  raise
end
updated_at() click to toggle source
# File lib/dennis/group.rb, line 64
def updated_at
  return nil if @hash['updated_at'].nil?
  return @hash['updated_at'] if @hash['updated_at'].is_a?(Time)

  Time.at(@hash['updated_at'])
end
zone(id, field: :id) click to toggle source
# File lib/dennis/group.rb, line 89
def zone(id, field: :id)
  zone = Zone.find_by(@client, field, id)
  return nil if zone.nil?
  return nil if zone.group.id != self.id

  zone
end
zones(**options) click to toggle source
# File lib/dennis/group.rb, line 85
def zones(**options)
  Zone.all_for_group(@client, { id: id }, **options)
end