module Sinatra::Drumkit
Constants
- VERSION
Public Instance Methods
rhythm(app_dir: nil, model_dir: nil, controller_dir: nil, namespace: Sinatra::Drumkit)
click to toggle source
# File lib/sinatra/drumkit.rb, line 7 def rhythm(app_dir: nil, model_dir: nil, controller_dir: nil, namespace: Sinatra::Drumkit) app_dir ||= File.join(root, 'app') model_dir ||= File.join(app_dir, 'models') controller_dir ||= File.join(app_dir, 'controllers') model_module = model_autoloader(model_dir) namespace.const_set(:Model, model_module) load_controllers(controller_dir) end
Private Instance Methods
load_controllers(load_dir)
click to toggle source
# File lib/sinatra/drumkit.rb, line 43 def load_controllers(load_dir) Dir[::File.join(load_dir, '**/*.rb')].each do |file| instance_eval(File.read(file), file) end end
model_autoloader(load_dir)
click to toggle source
# File lib/sinatra/drumkit.rb, line 22 def model_autoloader(load_dir) Module.new do define_singleton_method( :const_missing, lambda { |const| @searched ||= {} raise "Class not found: #{const}" if @searched[const] filename = const.to_s .gsub('::', '/') .gsub(/([A-Z\d]+)([A-Z][a-z])/, '\1_\2') .gsub(/([a-z\d])([A-Z])/, '\1_\2') .downcase filepath = File.join(load_dir, "#{filename}.rb") raise("Class file \"#{filepath}\" for #{const}") unless File.readable?(filepath) require filepath @searched[const] = true const_get(const) || raise("Class not found: #{const}") } ) end end