lib/nodo/core.rb in nodo-1.6.2 vs lib/nodo/core.rb in nodo-1.6.3

- old
+ new

@@ -109,17 +109,15 @@ deps = mods.last.is_a?(Hash) ? mods.pop : {} mods = mods.map { |m| [m, m] }.to_h self.dependencies = dependencies + mods.merge(deps).map { |name, package| Dependency.new(name, package) } end - def function(name, _code = nil, timeout: Nodo.timeout, code: nil) + def function(name, _code = nil, timeout: Nodo.timeout, code: nil, &block) raise ArgumentError, "reserved method name #{name.inspect}" if reserved_method_name?(name) - code = (code ||= _code).strip - raise ArgumentError, 'function code is required' if '' == code loc = caller_locations(1, 1)[0] source_location = "#{loc.path}:#{loc.lineno}: in `#{name}'" - self.functions = functions.merge(name => Function.new(name, _code || code, source_location, timeout)) + self.functions = functions.merge(name => Function.new(name, _code || code, source_location, timeout, &block)) define_method(name) { |*args| call_js_method(name, args) } end def class_function(*methods) singleton_class.def_delegators(:instance, *methods) @@ -127,12 +125,12 @@ def const(name, value) self.constants = constants + [Constant.new(name, value)] end - def script(code) - self.scripts = scripts + [Script.new(code)] + def script(code = nil, &block) + self.scripts = scripts + [Script.new(code, &block)] end def nodo_js Pathname.new(__FILE__).dirname.join('nodo.js').to_s.to_json end @@ -244,10 +242,10 @@ object_id end request = Net::HTTP::Post.new("/#{clsid}/#{context_id}/#{method}", 'Content-Type': 'application/json') request.body = JSON.dump(args) client = Client.new("unix://#{socket_path}") - client.read_timeout = function.timeout if function + client.read_timeout = function&.timeout || Nodo.timeout response = client.request(request) if response.is_a?(Net::HTTPOK) parse_response(response) else handle_error(response, function)