# Hanami - The web, with simplicity # # @since 0.1.0 module Hanami require 'hanami/utils/version' require 'hanami/utils/file_list' # Ruby core extentions and Hanami utilities # # @since 0.1.0 module Utils # @since 0.3.1 # @api private HANAMI_JRUBY = 'java'.freeze # @since 0.3.1 # @api private HANAMI_RUBINIUS = 'rbx'.freeze # Checks if the current VM is JRuby # # @return [TrueClass,FalseClass] return if the VM is JRuby or not # # @since 0.3.1 # @api private def self.jruby? RUBY_PLATFORM == HANAMI_JRUBY end # Checks if the current VM is Rubinius # # @return [TrueClass,FalseClass] return if the VM is Rubinius or not # # @since 0.3.1 # @api private def self.rubinius? RUBY_ENGINE == HANAMI_RUBINIUS end # Recursively require Ruby files under the given directory. # # If the directory is relative, it implies it's the path from current directory. # If the directory is absolute, it uses as it is. # # It respects file separator of the current operating system. # A pattern like "path/to/files" will work both on *NIX and Windows machines. # # @param directory [String, Pathname] the directory # # @since 0.9.0 def self.require!(directory) for_each_file_in(directory) { |file| require_relative(file) } end # Recursively reload Ruby files under the given directory. # # If the directory is relative, it implies it's the path from current directory. # If the directory is absolute, it uses as it is. # # It respects file separator of the current operating system. # A pattern like "path/to/files" will work both on *NIX and Windows machines. # # @param directory [String, Pathname] the directory # # @since 1.0.0.beta1 # @api private def self.reload!(directory) for_each_file_in(directory) { |file| load(file) } end # Recursively scans through the given directory and yields the given block # for each Ruby source file. # # If the directory is relative, it implies it's the path from current directory. # If the directory is absolute, it uses as it is. # # It respects file separator of the current operating system. # A pattern like "path/to/files" will work both on *NIX and Windows machines. # # @param directory [String, Pathname] the directory # @param blk [Proc] the block to yield # # @since 1.0.0.beta1 # @api private def self.for_each_file_in(directory, &blk) directory = directory.to_s.gsub(%r{(\/|\\)}, File::SEPARATOR) directory = Pathname.new(Dir.pwd).join(directory).to_s directory = File.join(directory, '**', '*.rb') unless directory =~ /(\*\*)/ FileList[directory].each(&blk) end end end