Как лучше всего создать xml карту рекурсивного списка каталогов в rubyonrails? - PullRequest
3 голосов
/ 01 апреля 2009

Я хочу построить карту XML всех каталогов и файлов в моем каталоге public / catalogs rails. (Рекурсивная карта)

Я бы хотел, чтобы он был построен с базовым элементом <directory> <file> с атрибутом name, равным dir или имени файла.

<catalogs>
 <file name="index.html">
 <directory name="foo">
    <file name="file1.html" />
    <directory name="bar">
       <file name="file2.html" />
    </directory>
 </directory>
</catalogs>

Я просто не уверен, какой лучший способ сделать рекурсивную карту в xml - я искал плагин, который мог бы справиться с этим, так как кажется, что это что-то, что кто-то мог бы построить.

Какие-нибудь мысли или указания относительно лучшего способа создать это?

1 Ответ

2 голосов
/ 01 апреля 2009

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

xml = Builder::XmlMarkup.new(:indent => 2,:escape_attrs => true)
xml.instruct!    
xml.catalogs(:version=>2) {list_entries("#{CATALOG_PATH}", xml)}
File.open("#{RAILS_ROOT}/public/catalogs.xml", 'w') {|f| f.write(xml.target!) }

def list_entries(dir,xml)
  Dir.glob("#{dir}/*") do |entry|
    if File::directory?(entry)
      xml.directory(:name=>File.basename(entry)) {
        list_entries(entry, xml)
      }
    else
      xml.file(:name=>File.basename(entry),:sha => Digest::SHA256.hexdigest(entry),
      :url=>entry.gsub("#{CATALOG_PATH}","#{CATALOG_URL}"))
    end
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...