Fix for JRUBY-2164. Add appropriate waitReadable and waitWritable to important places.
[jruby.git] / samples / scripting.rb
blob17bfd36ea420ecdc7f46b983a366acac1f324cb2
1 # scripting.rb
2 # March 30, 2007
5 require 'jruby'
7 module Scriptable
8   alias :pre_scripting_method_missing :method_missing
10   def method_missing(sym, *args, &b)
11     @engines ||= {}
12     @engine_manager ||= javax.script.ScriptEngineManager.new(JRuby.runtime.getJRubyClassLoader)
13     
14     engine = @engines[sym] ||= @engine_manager.getEngineByName(sym.to_s)
15     if engine
16       if args.length < 1
17         raise ArgumentError.new("expected script for argument zero")
18       end
20       if args.length >= 1
21         script = args[0]
22       end
24       bindings = engine.createBindings
26       local_variablator =<<-'LOCAL'
27       _local_values = {}
28       local_variables.each do |_local_variable|
29         _local_values[_local_variable] = eval(_local_variable)
30       end
31       _local_values
32       LOCAL
34       eval(local_variablator, Binding.of_caller).each_pair {|k,v| bindings.put(k,v) if v}
35       
36       engine.eval(script, bindings)
37     else
38       pre_scripting_method_missing(sym, *args, &b)
39     end
40   end
41   
42   def eval_script(sym, *args)
43     send sym, *args
44   end
45 end