Module: ActiveLdap::Persistence

Defined in:
lib/active_ldap/persistence.rb

Instance Method Summary collapse

Instance Method Details

#createObject



53
54
55
56
57
58
59
60
# File 'lib/active_ldap/persistence.rb', line 53

def create
  prepare_data_for_saving do |data, ldap_data|
    attributes = collect_all_attributes(data)
    add_entry(dn, attributes)
    @new_entry = false
    true
  end
end

#create_or_updateObject



49
50
51
# File 'lib/active_ldap/persistence.rb', line 49

def create_or_update
  new_entry? ? create : update
end

#delete(options = {}) ⇒ Object



23
24
25
26
27
28
29
30
31
32
# File 'lib/active_ldap/persistence.rb', line 23

def delete(options={})
  if persisted?
    default_options = {
      :connection => connection,
    }
    self.class.delete_entry(dn, default_options.merge(options))
  end
  @new_entry = true
  freeze
end

#destroyObject

destroy

Delete this entry from LDAP



18
19
20
21
# File 'lib/active_ldap/persistence.rb', line 18

def destroy
  # TODO: support deleting relations
  delete
end

#new_entry?Boolean

new_entry?

Return whether the entry is new entry in LDAP or not

Returns:

  • (Boolean)


6
7
8
# File 'lib/active_ldap/persistence.rb', line 6

def new_entry?
  @new_entry
end

#persisted?Boolean

Return whether the entry is saved entry or not.

Returns:

  • (Boolean)


11
12
13
# File 'lib/active_ldap/persistence.rb', line 11

def persisted?
  not new_entry?
end

#reloadObject



83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# File 'lib/active_ldap/persistence.rb', line 83

def reload
  clear_association_cache
  _, attributes = search(:value => id).find do |_dn, _attributes|
    dn == _dn
  end
  if attributes.nil?
    raise EntryNotFound, _("Can't find DN '%s' to reload") % dn
  end

  @ldap_data.update(attributes)
  classes, attributes = extract_object_class(attributes)
  self.classes = classes
  self.attributes = attributes
  @new_entry = false
  self
end

#saveObject

save

Save and validate this object into LDAP either adding or replacing attributes TODO: Relative DN support



39
40
41
# File 'lib/active_ldap/persistence.rb', line 39

def save(*)
  create_or_update
end

#save!Object



43
44
45
46
47
# File 'lib/active_ldap/persistence.rb', line 43

def save!(*)
  unless create_or_update
    raise EntryNotSaved, _("entry %s can't be saved") % dn
  end
end

#updateObject



62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/active_ldap/persistence.rb', line 62

def update
  prepare_data_for_saving do |data, ldap_data|
    new_dn_value, attributes = collect_modified_attributes(ldap_data, data)
    modify_entry(@original_dn, attributes)
    if new_dn_value
      old_dn_base = DN.parse(@original_dn).parent
      new_dn_base = dn.clone.parent
      if old_dn_base == new_dn_base
        new_superior = nil
      else
        new_superior = new_dn_base
      end
      modify_rdn_entry(@original_dn,
                       "#{dn_attribute}=#{DN.escape_value(new_dn_value)}",
                       true,
                       new_superior)
    end
    true
  end
end