Module: Roda::RodaPlugins::AutoloadHashBranches::ClassMethods
- Defined in:
- lib/roda/plugins/autoload_hash_branches.rb
Instance Method Summary collapse
-
#autoload_hash_branch(namespace = '', segment, file) ⇒ Object
Autoload the given file when there is request for the hash branch.
-
#autoload_hash_branch_dir(namespace = '', dir) ⇒ Object
For each .rb file in the given directory, add an autoloaded hash branch based on the file name.
-
#freeze ⇒ Object
Eagerly load all hash branches when freezing the application.
Instance Method Details
#autoload_hash_branch(namespace = '', segment, file) ⇒ Object
Autoload the given file when there is request for the hash branch. The given file should configure the hash branch specified.
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/roda/plugins/autoload_hash_branches.rb', line 43 def autoload_hash_branch(namespace='', segment, file) segment = "/#{segment}" file = File.(file) opts[:autoload_hash_branch_files] << file routes = opts[:hash_branches][namespace] ||= {} meth = routes[segment] = define_roda_method(routes[segment] || "hash_branch_#{namespace}_#{segment}", 1) do |r| loc = method(routes[segment]).source_location require file # Avoid infinite loop in case method is not overridden if method(meth).source_location != loc send(meth, r) end end nil end |
#autoload_hash_branch_dir(namespace = '', dir) ⇒ Object
For each .rb file in the given directory, add an autoloaded hash branch based on the file name.
61 62 63 64 65 66 67 |
# File 'lib/roda/plugins/autoload_hash_branches.rb', line 61 def autoload_hash_branch_dir(namespace='', dir) Dir.new(dir).entries.each do |file| if file =~ /\.rb\z/i autoload_hash_branch(namespace, file.sub(/\.rb\z/i, ''), File.join(dir, file)) end end end |
#freeze ⇒ Object
Eagerly load all hash branches when freezing the application.
70 71 72 73 |
# File 'lib/roda/plugins/autoload_hash_branches.rb', line 70 def freeze opts.delete(:autoload_hash_branch_files).each{|file| require file} unless opts.frozen? super end |