Class: Zm::Client::DistributionList

Inherits:
Base::AdminObject show all
Defined in:
lib/zm/client/distributionlist/distributionlist.rb

Overview

objectClass: zimbraDistributionList

Instance Attribute Summary collapse

Attributes inherited from Base::Object

#grantee_type, #id, #name, #parent, #token

Instance Method Summary collapse

Methods inherited from Base::AdminObject

#soap_account_connector, #soap_admin_connector, #to_h

Methods inherited from Base::Object

#arrow_name, #clone, #concat, #convert_json_string_value, #disable_builder, #enable_builder, #instance_variables_array, #instance_variables_hash, #logger, #recorded?, #save!, #to_s, #use_builder?

Constructor Details

#initialize(parent) ⇒ DistributionList

Returns a new instance of DistributionList.



11
12
13
14
15
16
17
18
# File 'lib/zm/client/distributionlist/distributionlist.rb', line 11

def initialize(parent)
  extend(DistributionListCommon)
  super(parent)
  @members = []
  @owners = []
  @aces = []
  @grantee_type = 'grp'.freeze
end

Instance Attribute Details

#acesObject (readonly)

Returns the value of attribute aces.



9
10
11
# File 'lib/zm/client/distributionlist/distributionlist.rb', line 9

def aces
  @aces
end

#membersObject

Returns the value of attribute members.



8
9
10
# File 'lib/zm/client/distributionlist/distributionlist.rb', line 8

def members
  @members
end

#ownersObject (readonly)

Returns the value of attribute owners.



9
10
11
# File 'lib/zm/client/distributionlist/distributionlist.rb', line 9

def owners
  @owners
end

Instance Method Details

#add_alias!(email) ⇒ Object



73
74
75
76
# File 'lib/zm/client/distributionlist/distributionlist.rb', line 73

def add_alias!(email)
  sac.add_distribution_list_alias(@id, email)
  aliases.push(email)
end

#add_members!(*emails) ⇒ Object



92
93
94
95
# File 'lib/zm/client/distributionlist/distributionlist.rb', line 92

def add_members!(*emails)
  sac.add_distribution_list_members(@id, emails)
  @members += emails
end

#add_owners!(*emails) ⇒ Object



102
103
104
105
106
107
108
109
110
111
112
113
114
115
# File 'lib/zm/client/distributionlist/distributionlist.rb', line 102

def add_owners!(*emails)
  sac.distribution_list_action(
    @id,
    :id,
    {
      op: 'addOwners',
      owner: emails.map do |email|
        { by: :name, type: :usr, _content: email }
      end
    }
  )

  @owners += emails
end

#aliasesObject



69
70
71
# File 'lib/zm/client/distributionlist/distributionlist.rb', line 69

def aliases
  @aliases ||= []
end

#all_instance_variable_keysObject



24
25
26
# File 'lib/zm/client/distributionlist/distributionlist.rb', line 24

def all_instance_variable_keys
  DistributionListCommon::ALL_ATTRS
end

#create!Object



40
41
42
43
44
45
46
# File 'lib/zm/client/distributionlist/distributionlist.rb', line 40

def create!
  rep = sac.create_distribution_list(
    @name,
    instance_variables_array(attrs_write)
  )
  @id = rep[:Body][:CreateDistributionListResponse][:dl].first[:id]
end

#delete!Object



88
89
90
# File 'lib/zm/client/distributionlist/distributionlist.rb', line 88

def delete!
  sac.delete_distribution_list(@id)
end

#domain_nameObject



20
21
22
# File 'lib/zm/client/distributionlist/distributionlist.rb', line 20

def domain_name
  @domain_name ||= @name.split('@').last
end

#group?Boolean

Returns:

  • (Boolean)


162
163
164
# File 'lib/zm/client/distributionlist/distributionlist.rb', line 162

def group?
  zimbraMailStatus == 'disabled'
end

#hide_in_gal?Boolean

Returns:

  • (Boolean)


158
159
160
# File 'lib/zm/client/distributionlist/distributionlist.rb', line 158

def hide_in_gal?
  zimbraHideInGal == 'TRUE'
end

#init_from_json(json) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
# File 'lib/zm/client/distributionlist/distributionlist.rb', line 28

def init_from_json(json)
  # puts json
  # @members = json[:a].select { |a| a[:n] == 'zimbraMailForwardingAddress' }.map { |a| a[:_content] }.compact
  @members = json[:dlm].map { |a| a[:_content] }.compact if json[:dlm].is_a?(Array)
  @owners = json[:owners].first[:owner].map { |a| a[:name] }.compact if json[:owners].is_a?(Array)
  super(json)
  @zimbraMailAlias = [@zimbraMailAlias].compact unless @zimbraMailAlias.is_a?(Array)
  @zimbraMailAlias.delete(@name)
  @aliases = @zimbraMailAlias
  set_aces_from_json
end

#is_external_transport?Boolean

Returns:

  • (Boolean)


148
149
150
151
152
# File 'lib/zm/client/distributionlist/distributionlist.rb', line 148

def is_external_transport?
  return nil unless zimbraMailTransport

  zimbraMailTransport.start_with?('smtp')
end

#is_local_transport?Boolean

Returns:

  • (Boolean)


142
143
144
145
146
# File 'lib/zm/client/distributionlist/distributionlist.rb', line 142

def is_local_transport?
  return nil unless zimbraMailTransport

  zimbraMailTransport.start_with?('lmtp')
end

#local_transportObject



132
133
134
135
136
# File 'lib/zm/client/distributionlist/distributionlist.rb', line 132

def local_transport
  raise Zm::Client::SoapError, 'zimbraMailHost is null' if zimbraMailHost.nil?

  "lmtp:#{zimbraMailHost}:7025"
end

#local_transport!Object



138
139
140
# File 'lib/zm/client/distributionlist/distributionlist.rb', line 138

def local_transport!
  update!(zimbraMailTransport: local_transport)
end

#mailing_list?Boolean

Returns:

  • (Boolean)


166
167
168
# File 'lib/zm/client/distributionlist/distributionlist.rb', line 166

def mailing_list?
  zimbraMailStatus == 'enabled'
end

#membershipsObject



154
155
156
# File 'lib/zm/client/distributionlist/distributionlist.rb', line 154

def memberships
  @memberships ||= DlsMembershipCollection.new(self)
end

#modify!Object



48
49
50
51
52
53
# File 'lib/zm/client/distributionlist/distributionlist.rb', line 48

def modify!
  attrs_to_modify = instance_variables_array(attrs_write)
  return if attrs_to_modify.empty?

  sac.modify_distribution_list(@id, attrs_to_modify)
end

#remove_alias!(email) ⇒ Object



78
79
80
81
# File 'lib/zm/client/distributionlist/distributionlist.rb', line 78

def remove_alias!(email)
  sac.remove_distribution_list_alias(@id, email)
  aliases.delete(email)
end

#remove_members!(*emails) ⇒ Object



97
98
99
100
# File 'lib/zm/client/distributionlist/distributionlist.rb', line 97

def remove_members!(*emails)
  sac.remove_distribution_list_members(@id, emails)
  @members -= emails
end

#remove_owners!(*emails) ⇒ Object



117
118
119
120
121
122
123
124
125
126
127
128
129
130
# File 'lib/zm/client/distributionlist/distributionlist.rb', line 117

def remove_owners!(*emails)
  sac.distribution_list_action(
    @id,
    :id,
    {
      op: 'removeOwners',
      owner: emails.map do |email|
        { by: :name, type: :usr, _content: email }
      end
    }
  )

  @owners -= emails
end

#rename!(email) ⇒ Object



83
84
85
86
# File 'lib/zm/client/distributionlist/distributionlist.rb', line 83

def rename!(email)
  sac.rename_distribution_list(@id, email)
  @name = email
end

#set_aces_from_jsonObject



170
171
172
173
174
175
176
177
178
# File 'lib/zm/client/distributionlist/distributionlist.rb', line 170

def set_aces_from_json
  return if @zimbraACE.nil?

  zimbra_aces = @zimbraACE.is_a?(Array) ? @zimbraACE : [@zimbraACE]
  @aces = zimbra_aces.map do |str|
    parts = str.split(/\s+/)
    { zimbra_id: parts[0], type: parts[1], right: parts[2] }
  end
end

#update!(hash) ⇒ Object



55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/zm/client/distributionlist/distributionlist.rb', line 55

def update!(hash)
  sac.modify_distribution_list(@id, hash)

  hash.each do |k, v|
    arrow_attr_sym = "@#{k}".to_sym

    if v.respond_to?(:empty?) && v.empty?
      self.remove_instance_variable(arrow_attr_sym) if self.instance_variable_get(arrow_attr_sym)
    else
      self.instance_variable_set(arrow_attr_sym, v)
    end
  end
end