File: helper.rb

package info (click to toggle)
ruby-activeldap 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye
  • size: 1,588 kB
  • sloc: ruby: 18,143; sh: 12; makefile: 5
file content (92 lines) | stat: -rw-r--r-- 2,973 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
module ActiveLdap
  module Helper
    def ldap_attribute_name_gettext(attribute)
      Base.human_attribute_name(attribute)
    end
    alias_method(:la_, :ldap_attribute_name_gettext)

    def ldap_attribute_description_gettext(attribute)
      Base.human_attribute_description(attribute)
    end
    alias_method(:lad_, :ldap_attribute_description_gettext)

    def ldap_object_class_name_gettext(object_class)
      Base.human_object_class_name(object_class)
    end
    alias_method(:loc_, :ldap_object_class_name_gettext)

    def ldap_object_class_description_gettext(object_class)
      Base.human_object_class_description(object_class)
    end
    alias_method(:locd_, :ldap_object_class_description_gettext)

    def ldap_syntax_name_gettext(syntax)
      Base.human_syntax_name(syntax)
    end
    alias_method(:ls_, :ldap_syntax_name_gettext)

    def ldap_syntax_description_gettext(syntax)
      Base.human_syntax_description(syntax)
    end
    alias_method(:lsd_, :ldap_syntax_description_gettext)

    def ldap_field(type, object_name, method, options={})
      case type
      when "radio_button", "check_box", "text_area"
        form_method = type
      else
        form_method = "#{type}_field"
      end

      object = options[:object]
      if object.nil?
        normalized_object_name = object_name.to_s.sub(/\[\](\])?$/, "\\1")
        object = instance_variable_get("@#{normalized_object_name}")
      end
      values = object.nil? ? nil : object[method, true]
      values = [nil] if values.blank?
      required_ldap_options = options.delete(:ldap_options) || []
      required_ldap_options.each do |required_ldap_option|
        found = false
        values.each do |value|
          next unless value.is_a?(Hash)
          if Hash.to_a[0].to_s == required_ldap_option.to_s
            found = true
            break
          end
        end
        values << {required_ldap_option => ""} unless found
      end

      fields = []
      collect_values = Proc.new do |value, ldap_options|
        case value
        when Hash
          value.each do |k, v|
            collect_values.call(v, ldap_options + [k])
          end
        when Array
          value.each do |v|
            collect_values.call(v, ldap_options)
          end
        else
          id = "#{object_name}_#{method}"
          name = "#{object_name}[#{method}][]"
          ldap_options.collect.each do |ldap_option|
            id << "_#{ldap_option}"
            name << "[#{ldap_option}][]"
          end
          ldap_value_options = {:id => id, :name => name, :value => value}
          field = send(form_method, object_name, method,
                       ldap_value_options.merge(options))
           if block_given?
             field = yield(field, {:options => ldap_options, :value => value})
           end
          fields << field unless field.blank?
        end
      end
      collect_values.call(values, [])
      fields.join("\n")
    end
  end
end