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



75
76
77
78
# File 'lib/zm/client/distributionlist/distributionlist.rb', line 75

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

#add_members!(*emails) ⇒ Object



94
95
96
97
# File 'lib/zm/client/distributionlist/distributionlist.rb', line 94

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

#add_owners!(*emails) ⇒ Object



104
105
106
107
# File 'lib/zm/client/distributionlist/distributionlist.rb', line 104

def add_owners!(*emails)
  # todo à tester
  sac.distribution_list_action(@id, :id, { op: 'addOwners', owner: { by: :name, type: :usr, _content: emails } })
end

#aliasesObject



71
72
73
# File 'lib/zm/client/distributionlist/distributionlist.rb', line 71

def aliases
  @aliases ||= []
end

#all_instance_variable_keysObject

def to_h

hashmap = Hash[all_instance_variable_keys.map { |key| [key, instance_variable_get(arrow_name(key))] }]
hashmap.delete_if { |_, v| v.nil? }
hashmap

end



26
27
28
# File 'lib/zm/client/distributionlist/distributionlist.rb', line 26

def all_instance_variable_keys
  DistributionListCommon::ALL_ATTRS
end

#create!Object



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

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

#delete!Object



90
91
92
# File 'lib/zm/client/distributionlist/distributionlist.rb', line 90

def delete!
  sac.delete_distribution_list(@id)
end

#group?Boolean

Returns:

  • (Boolean)


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

def group?
  zimbraMailStatus == 'disabled'
end

#hide_in_gal?Boolean

Returns:

  • (Boolean)


140
141
142
# File 'lib/zm/client/distributionlist/distributionlist.rb', line 140

def hide_in_gal?
  zimbraHideInGal == 'TRUE'
end

#init_from_json(json) ⇒ Object



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

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)


130
131
132
133
134
# File 'lib/zm/client/distributionlist/distributionlist.rb', line 130

def is_external_transport?
  return nil unless zimbraMailTransport

  zimbraMailTransport.start_with?('smtp')
end

#is_local_transport?Boolean

Returns:

  • (Boolean)


124
125
126
127
128
# File 'lib/zm/client/distributionlist/distributionlist.rb', line 124

def is_local_transport?
  return nil unless zimbraMailTransport

  zimbraMailTransport.start_with?('lmtp')
end

#local_transportObject



114
115
116
117
118
# File 'lib/zm/client/distributionlist/distributionlist.rb', line 114

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

  "lmtp:#{zimbraMailHost}:7025"
end

#local_transport!Object



120
121
122
# File 'lib/zm/client/distributionlist/distributionlist.rb', line 120

def local_transport!
  update!(zimbraMailTransport: local_transport)
end

#mailing_list?Boolean

Returns:

  • (Boolean)


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

def mailing_list?
  zimbraMailStatus == 'enabled'
end

#membershipsObject



136
137
138
# File 'lib/zm/client/distributionlist/distributionlist.rb', line 136

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

#modify!Object



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

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



80
81
82
83
# File 'lib/zm/client/distributionlist/distributionlist.rb', line 80

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

#remove_members!(*emails) ⇒ Object



99
100
101
102
# File 'lib/zm/client/distributionlist/distributionlist.rb', line 99

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

#remove_owners!(*emails) ⇒ Object



109
110
111
112
# File 'lib/zm/client/distributionlist/distributionlist.rb', line 109

def remove_owners!(*emails)
  # todo à tester
  sac.distribution_list_action(@id, :id, { op: 'removeOwners', owner: { by: :name, type: :usr, _content: emails } })
end

#rename!(email) ⇒ Object



85
86
87
88
# File 'lib/zm/client/distributionlist/distributionlist.rb', line 85

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

#set_aces_from_jsonObject



152
153
154
155
156
157
158
159
160
# File 'lib/zm/client/distributionlist/distributionlist.rb', line 152

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



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

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