Add DataWeave language (#3804)

* Add DataWeave language

* Add Licence

* Update to latest DataWeave revision
This commit is contained in:
Agustin Mendez
2017-09-07 11:28:46 -03:00
committed by Colin Seymour
parent 5d48ccd757
commit fc1404985a
11 changed files with 161 additions and 2 deletions

View File

@@ -0,0 +1,12 @@
fun SQL(literals, parts) = ''
---
[
SQL `SELECT * FROM table WHERE id = $(1) AND name = $('a')`,
SQL `$('p')`,
SQL `$('a')$('b')`,
SQL `$('a')---$('b')`,
SQL `---$('a')---$('b')---`,
SQL `$('p')bbb`,
SQL `aaa$('p')`,
SQL `aaa$('p')bbb`
]

View File

@@ -0,0 +1,9 @@
%dw 2.0
var number = 1234
fun foo(func,name="Mariano") = func(name)
input payload application/test arg="value"
output application/json
---
{
foo: "bar"
}

View File

@@ -0,0 +1,27 @@
%dw 2.0
var x=(param1, param2) -> { "$param1": param2 }
var y=(param1, param2 = "c") -> { "$param1": param2 }
var toUser = (user) -> { name: user.name, lastName: user.lastName }
fun z(param1, param2) = { "$param1": param2 }
var a = { name: "Mariano" , toUser: ((param1, param2) -> { "$param1": param2 }) }
var applyFirst = (array, func) -> (func(array[0]) ++ array[1 to -1])
var nested = (array, func) -> (a) -> (b) -> (c) -> array map func(a ++ b ++ c)
fun f2(a1, a2) = ""
fun f3(a1:String, a2:Number):String = a1
fun f4(a1:String, a2:(a:Number) -> Number):String = a1
---
result: {
a: x("a", "b"),
b: y("a"),
c: y("a", "b"),
users: { (in1 map ((user) -> { user: (toUser(user) ++ user) })) },
d: z("a", "b"),
e: a.toUser("name","Mariano"),
f: a.toUser("name","Mariano").name,
f: applyFirst("mariano", (s) -> upper(s) ),
g: [] map (s) -> upper(s),
h: 1 f2 2
}

View File

@@ -0,0 +1,36 @@
%dw 2.0
---
{
"boolean":{
"true" : true,
"false": false
},
"Number": {
"int": 123,
"decimal": 123.23
},
"string": {
"singleQuote" : 'A String',
"doubleQuote" : "A String"
},
"regex": /foo/,
"date": {
a: |2003-10-01|,
b: |2005-045|,
c: |2003-W14-3|,
d: |23:57:59|,
e: |23:57:30.700|,
f: |23:50:30Z|,
g: |+13:00|,
h: |Z|,
i: |-02:00|,
j: |2005-06-02T15:10:16|,
k: |2005-06-02T15:10:16Z|,
l: |2005-06-02T15:10:16+03:00|,
m: |P12Y7M11D|,
n: |P12Y5M|,
o: |P45DT9H20M8S|,
p: |PT9H20M8S|
}
}

View File

@@ -0,0 +1,33 @@
{
// Regex Pattern Matching (Can be named or unnamed)
a: in0.phones map $ match {
case matches /\+(\d+)\s\((\d+)\)\s(\d+\-\d+)/ -> { country: $[0], area: $[1], number: $[2] }
case matches /\((\d+)\)\s(\d+\-\d+)/ -> { area: $[1], number: $[2] }
case phone matches /\((\d+)\)\s(\d+\-\d+)/ -> { area: phone[1], number: phone[2] }
},
// Type Pattern Matching (Can be named or unnamed)
b: in0.object match {
case is Object -> { object: $ }
case is Number -> { number: $ }
// This is how you name variables if needed
case y is Boolean -> { boolean: y }
},
// Literal Pattern Matching (Can be named or unnamed)
c: in0.value match {
case "Emiliano" -> { string: $ }
case 123 -> { number: $ }
// This is how you name variables if needed
case value: "Mariano" -> { name: value }
},
// Boolean Expression Pattern Matching (Always named)
d: in0.value match {
case x if x > 30 -> { biggerThan30: x }
case x if x == 9 -> { nine: x }
},
// Default matches
e: in0.value match {
case "Emiliano" -> "string"
case 3.14 -> number
else -> "1234"
}
}