module Brice::DSL
Certain global helper methods for use inside IRb extensions. Also available inside the IRb session.
Public Instance Methods
Declare package package. Optionally load given libraries (see below) and configure the package if it has been enabled/included.
package can be a String which already names the library to be loaded or a Hash of the form package => lib or package => [lib, ...].
# File lib/brice/dsl.rb 136 def brice(package) 137 package, libs = case package 138 when Hash 139 names = package.keys 140 141 err = names.size > 1 ? "Too many package names: #{names.join(' ')}" : 142 names.size < 1 ? 'No package name given' : nil 143 144 raise ArgumentError, err if err 145 146 [names.first, Array(package.values.first)] 147 else 148 [package, [package]] 149 end 150 151 if Brice.include?(package) 152 if libs.all? { |lib| !lib || brice_require(lib) { true } } 153 yield Brice.config[package] if block_given? 154 end 155 end 156 end
Kernel#load the file named filename with argument wrap and optionally execute the block in case of success. Doesn't warn about load errors when quiet is true.
Returns either the result of the executed method or of the block.
# File lib/brice/dsl.rb 114 def brice_load(filename, wrap = false, quiet = Brice.quiet, &block) 115 brice_rescue(:load, [filename, wrap], Exception, quiet, &block) 116 end
Kernel#require the library named string and optionally execute the block in case of success. Doesn't warn about load errors when quiet is true.
Returns either the result of the executed method or of the block.
# File lib/brice/dsl.rb 101 def brice_require(string, quiet = Brice.quiet, &block) 102 brice_rescue(:require, [string], LoadError, quiet, &block) 103 end
Call what with args and rescue potential error, optionally executing block in case of success. Gives a nicer error location instead of the full backtrace. Doesn't warn about any errors when quiet is true.
Returns either the result of the executed method or of the block.
# File lib/brice/dsl.rb 71 def brice_rescue(what, args = [], error = Exception, quiet = Brice.quiet) 72 res = send(what, *args) 73 74 block_given? ? yield : res 75 rescue error => err 76 return if quiet 77 78 # ideally, we'd want the __FILE__ and __LINE__ 79 # of the rc file where the error occurred. 80 location = caller.find { |c| 81 c =~ %r{(?:\A|/)lib/brice/rc/} || 82 c !~ %r{(?:\A|/)lib/brice[/.]} 83 } 84 85 warn "#{err.class}: #{err} [#{location}]" 86 87 warn err.backtrace.map { |line| 88 " from #{line}" 89 }.join("\n") if Brice.verbose 90 end
Runs cmd with ENV modified according to env.
# File lib/brice/dsl.rb 122 def brice_run_cmd(cmd, env = {}) 123 ENV.with(env) { %x{#{cmd}} } 124 end
Define a method for use inside the IRb session.
# File lib/brice/dsl.rb 52 def irb_def(symbol, method = nil, &block) 53 irb_rc { 54 IRB::ExtendCommandBundle.class_eval { 55 define_method(symbol, method || block) 56 } 57 } 58 end
Add IRB_RC proc (to be executed whenever a (sub-)session is started).
# File lib/brice/dsl.rb 43 def irb_rc(&block) 44 Brice.irb_rc << block 45 end