2016-05-18 2 views
0

Вопрос относительно ruby-ldap gem. Он возвращает объект LDAP::Entry из поиска. Он имеет метод, называемый to_hash. Проблема в том, что значения в возвращаемом хеше всегда являются массивами - даже если есть только одно значение. Знаете ли вы, можно ли изменить это поведение? Я хотел бы иметь пару key -> String, когда есть только один элемент вместо key -> Array.Ruby LDAP to_hash метод

Обработка этой хэш позже может быть дорогостоящей, особенно, что она очень большая в моем случае.

+1

Я скептически, что замена этих одноэлементных массивов с их элементами поможет значительно с любой проблемой производительности. По крайней мере, вы должны просмотреть его, чтобы увидеть, какие операции фактически занимают большинство процессорных часов. Существует большой недостаток того, что вы предлагаете, а именно, что вам нужно будет каждый раз проверять, является ли элемент, к которому вы обращаетесь, массивом или нет, что не является бесплатным. –

+0

Это правда, но я не хочу использовать массивы, они загрязняют файл JSON без лишних скобок и, как правило, я не вижу смысла иметь их, когда значение должно быть уникальным. Это вызывает много путаницы. Проблема не решена до сегодняшнего дня. – damian

ответ

0

Хммм, это в основном проблема LDAP: значения LDAP хранятся в массивах. Простого решения может быть есть помощник логотипо, т.е.

def to_my_hash() 
    @ldap_entry.attribute_names.each_with_object({}) do |key, hsh| 
    val_arr = @ldap_entry[name] 
    if val_arr.empty? 
     hsh[key] = nil 
    elsif val_arr.size == 1 
     hsh[key] = val_arr.first 
    else 
     hsh[key] = val_arr 
    end 
    end 
end 
+0

Вот что я сделал в конце :) Но спасибо! – damian

Смежные вопросы