lib/delorean/base.rb in delorean_lang-0.3.16 vs lib/delorean/base.rb in delorean_lang-0.3.17

- old
+ new

@@ -13,12 +13,15 @@ flatten: [Array, [Fixnum, nil]], length: [Enumerable], max: [Array], member: "member?", member?: [Enumerable, [Object]], + empty: "empty?", + empty?: [Enumerable], reverse: [Array], slice: [Array, Fixnum, Fixnum], + each_slice: [Array, Fixnum], sort: [Array], split: [String, String], uniq: [Array], sum: [Array], transpose: [Array], @@ -67,10 +70,12 @@ to_i: [[Numeric, String]], to_f: [[Numeric, String]], to_d: [[Numeric, String]], to_s: [Object], + to_a: [Object], + to_json: [Object], abs: [Numeric], round: [Numeric, [nil, Integer]], ceil: [Numeric], } @@ -82,12 +87,29 @@ # patches NodeCall and modifies params to send _parent_id. # This whole thing needs to be redone. engine.evaluate(node, attr, params.clone) end + def /(args) + raise "non-array/string arg to /" unless + args.is_a?(Array) || args.is_a?(String) + + begin + case args + when Array + engine.eval_to_hash(node, args, params.clone) + when String + engine.evaluate(node, args, params.clone) + end + rescue => exc + Delorean::Engine.grok_runtime_exception(exc) + end + end + + # FIXME: % should also support string as args def %(args) - raise "bad arg to %" unless args.is_a?(Array) + raise "non-array arg to %" unless args.is_a?(Array) # FIXME: params.clone!!!! engine.eval_to_hash(node, args, params.clone) end @@ -131,12 +153,12 @@ return obj.send((attr + POST).to_sym, _e) end begin return _instance_call(obj, attr, [], _e) - rescue + rescue => exc raise InvalidGetAttribute, - "bad attribute lookup '#{attr}' on <#{obj.class}> #{obj}" + "attr lookup failed: '#{attr}' on <#{obj.class}> #{obj} - #{exc}" end end ######################################################################