Class: Mondrian::OLAP::Schema::UserDefinedFunction
- Inherits:
-
Mondrian::OLAP::SchemaElement
- Object
- Mondrian::OLAP::SchemaElement
- Mondrian::OLAP::Schema::UserDefinedFunction
- Includes:
- ScriptElements
- Defined in:
- lib/mondrian/olap/schema_udf.rb
Defined Under Namespace
Classes: RubyUdfBase
Instance Attribute Summary
Attributes inherited from Mondrian::OLAP::SchemaElement
Instance Method Summary collapse
Methods included from ScriptElements
Methods inherited from Mondrian::OLAP::SchemaElement
attributes, content, data_dictionary_names, elements, #initialize, #to_xml, #xml
Constructor Details
This class inherits a constructor from Mondrian::OLAP::SchemaElement
Instance Method Details
#coffeescript(text) ⇒ Object
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 |
# File 'lib/mondrian/olap/schema_udf.rb', line 83 def coffeescript(text) coffee_text = "__udf__ = {\n" << text << "}\n" javascript_text = CoffeeScript.compile(coffee_text, :bare => true) javascript_text << <<-JS __udf__.parameters || (__udf__.parameters = []); __udf__.returns || (__udf__.returns = "Scalar"); var __scalarTypes__ = {"Numeric":true,"String":true,"Boolean":true,"DateTime":true,"Decimal":true,"Scalar":true}; function __getType__(type) { if (__scalarTypes__[type]) { return new mondrian.olap.type[type+"Type"]; } else if (type === "Member") { return mondrian.olap.type.MemberType.Unknown; } else { return null; } } function getParameterTypes() { var parameters = __udf__.parameters || [], types = []; for (var i = 0, len = parameters.length; i < len; i++) { types.push(__getType__(parameters[i])) } return types; } function getReturnType(parameterTypes) { var returns = __udf__.returns || "Scalar"; return __getType__(returns); } if (__udf__.syntax) { function getSyntax() { return mondrian.olap.Syntax[__udf__.syntax]; } } function execute(evaluator, args) { var parameters = __udf__.parameters || [], values = [], value; for (var i = 0, len = parameters.length; i < len; i++) { if (__scalarTypes__[parameters[i]]) { value = args[i].evaluateScalar(evaluator); } else { value = args[i].evaluate(evaluator); } values.push(value); } return __udf__.execute.apply(__udf__, values); } JS javascript javascript_text end |
#ruby(*options, &block) ⇒ Object
253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 |
# File 'lib/mondrian/olap/schema_udf.rb', line 253 def ruby(*, &block) udf_class_name = if .include?(:shared) "#{name.capitalize}Udf" end if udf_class_name && self.class.const_defined?(udf_class_name) udf_class = self.class.const_get(udf_class_name) else udf_class = Class.new(RubyUdfBase) self.class.const_set(udf_class_name, udf_class) if udf_class_name end udf_class.function_name = name udf_class.class_eval(&block) udf_java_class = udf_class.become_java!(false) class_name udf_java_class.getName end |