Чтобы просмотреть все подкаталоги, измените «views / pages» на «views / pages / **»
Двойные знаки указывают на рекурсивный поиск, вы можете увидеть это в документации на
http://ruby -doc.org / ядро / классов / Dir.html # M002322
Обратите внимание, что я не очень внимательно изучил ваш вариант использования, но предварительно кажется, что у вас могут возникнуть проблемы при создании постоянной ссылки. Когда я проверил результаты, я получил:
[#<View:0x1010440a0 @permalink="hound">,
#<View:0x101044078 @permalink="index">,
#<View:0x101044000 @permalink="hound">,
#<View:0x101043f88 @permalink="index">,
#<View:0x101043f10 @permalink="references">,
#<View:0x101043e98 @permalink="do_find">,
#<View:0x101043e20 @permalink="index">,
#<View:0x101043da8 @permalink="README">]
которые были сгенерированы из этих файлов:
["/Users/josh/deleteme/fileutilstest/views/pages/bar/cheese/rodeo/hound.haml",
"/Users/josh/deleteme/fileutilstest/views/pages/bar/cheese/rodeo/outrageous/index.haml",
"/Users/josh/deleteme/fileutilstest/views/pages/bar/pizza/hound.haml",
"/Users/josh/deleteme/fileutilstest/views/pages/bar/pizza/index.haml",
"/Users/josh/deleteme/fileutilstest/views/pages/bar/pizza/references.haml",
"/Users/josh/deleteme/fileutilstest/views/pages/do_find.haml",
"/Users/josh/deleteme/fileutilstest/views/pages/tutorials/index.haml",
"/Users/josh/deleteme/fileutilstest/views/pages/tutorials/README.haml"]
И похоже, что вы создаете ссылку с:
File.join (static_dir, view.permalink + '. Html')
Итак, вы можете видеть, что в этом случае это создаст три файла, например static_dir/index.html
Довольно очевидным решением является включение относительной части ссылки, чтобы она стала
static_dir/bar/cheese/rodeo/outrageous/index.html
static_dir/bar/pizza/index.html
static_dir/tutorials/index.html
РЕДАКТИРОВАТЬ : Что касается определения того, как найти относительный URL, это похоже на работу
class View
attr_reader :permalink
def initialize( root_path , path )
root_path = File.expand_path(root_path).sub(/\/?$/,'/')
path = File.expand_path path
filename = path.gsub root_path , String.new
raise "#{path} does not appear to be a subdir of #{root_path}" unless root_path + filename == path
@permalink = filename[0..-6]
end
end
view_paths = Dir.glob(File.join(File.dirname(__FILE__), 'views/pages/**', '*.haml'))
ALL_VIEWS = view_paths.map { |path| View.new 'views/pages' , path }
require 'pp'
pp ALL_VIEWS
Я не очень заинтересован в [0 ..- 6], он работает только в том случае, если вы знаете, что ваш файл имеет суффикс и его длина составляет пять символов. Но я собираюсь оставить это в покое, так как я не знаю, как бы вы хотели обрабатывать различные будущие ситуации, которые я мог бы предвидеть (т.е. сгенерировать html из haml и обработать его, теперь у вас есть два файла index.html и index.haml, которые после удаления их расширений являются просто индексами, или styles.css, который теряет часть своего имени файла, когда вы пытаетесь удалить его расширение, вытягивая [0 ..- 6]