Class: Dennis::Group

Inherits:
Object
  • Object
show all
Defined in:
lib/dennis/group.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(client, hash) ⇒ Group

Returns a new instance of Group.



46
47
48
49
# File 'lib/dennis/group.rb', line 46

def initialize(client, hash)
  @client = client
  @hash = hash
end

Class Method Details

.all(client, page: nil, per_page: nil) ⇒ Object



12
13
14
15
16
17
18
19
# File 'lib/dennis/group.rb', line 12

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, nameservers: nil) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/dennis/group.rb', line 29

def create(client, name:, external_reference: nil, nameservers: nil)
  request = client.api.create_request(:post, 'groups')
  request.arguments[:properties] = {
    name: name,
    external_reference: external_reference,
    nameservers: nameservers
  }
  Group.new(client, request.perform.hash['group'])
rescue ApiaClient::RequestError => e
  raise NameserverNotFoundError, e.detail['errors'] if e.code == 'nameserver_not_found'
  raise ValidationError, e.detail['errors'] if e.code == 'validation_error'

  raise
end

.find_by(client, field, value) ⇒ Object



21
22
23
24
25
26
27
# File 'lib/dennis/group.rb', line 21

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

Instance Method Details

#create_or_update_zone(**properties) ⇒ Object



87
88
89
# File 'lib/dennis/group.rb', line 87

def create_or_update_zone(**properties)
  Zone.create_or_update(@client, group: { id: id }, **properties)
end

#create_zone(**properties) ⇒ Object



83
84
85
# File 'lib/dennis/group.rb', line 83

def create_zone(**properties)
  Zone.create(@client, group: { id: id }, **properties)
end

#created_atObject



63
64
65
66
67
68
# File 'lib/dennis/group.rb', line 63

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

#deleteObject



119
120
121
122
123
124
# File 'lib/dennis/group.rb', line 119

def delete
  req = @client.api.create_request(:delete, 'groups/:group')
  req.arguments['group'] = { id: id }
  req.perform
  true
end

#external_referenceObject



59
60
61
# File 'lib/dennis/group.rb', line 59

def external_reference
  @hash['external_reference']
end

#idObject



51
52
53
# File 'lib/dennis/group.rb', line 51

def id
  @hash['id']
end

#nameObject



55
56
57
# File 'lib/dennis/group.rb', line 55

def name
  @hash['name']
end

#nameserversObject



77
78
79
80
81
# File 'lib/dennis/group.rb', line 77

def nameservers
  @nameservers ||= @hash['nameservers'].map do |hash|
    Nameserver.new(@client, hash)
  end
end

#tagged_records(tags) ⇒ Object



103
104
105
# File 'lib/dennis/group.rb', line 103

def tagged_records(tags)
  Record.all_by_tag(@client, tags, group: { id: id })
end

#update(properties) ⇒ Object



107
108
109
110
111
112
113
114
115
116
117
# File 'lib/dennis/group.rb', line 107

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_atObject



70
71
72
73
74
75
# File 'lib/dennis/group.rb', line 70

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) ⇒ Object



95
96
97
98
99
100
101
# File 'lib/dennis/group.rb', line 95

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) ⇒ Object



91
92
93
# File 'lib/dennis/group.rb', line 91

def zones(**options)
  Zone.all_for_group(@client, { id: id }, **options)
end