如何在Lambda DSL for Pact(pact-jvm-consumer)中为命名数组和对象建模

时间:2018-01-02 12:40:35

标签: lambda pact pact-jvm

下面的Json包含三件我不知道如何在基于lambda的DSL中为Pact建模的东西(而且我无法通过阅读https://github.com/DiUS/pact-jvm/tree/master/pact-jvm-consumer-java8上提供的示例来弄清楚)。

Json对象由3个属性组成; “Inventory”包含一个数组(只有一个元素长)和两个简单​​的键值对。

1)如何使用基于lambda的DSL声明命名数组?

Inventory-array中的第一个(也是唯一一个)对象包含两个命名对象“Car”和“Camera”。

2)如何使用基于lambda的DSL声明命名对象?

在“Camera”对象中有一个名为“Conditions”的数组,它包含两个字符串值。

3)如何使用基于lambda的DSL在命名数组中声明两个示例字符串值?

 {
   "Inventory":[
      {
         "Car":{
            "gearbox":"automatic",
            "ProductId":30212
         },
         "Camera":{
            "EndPrice":1235,
            "Conditions":[
               "FaultyButtons",
               "FaultyCasing"
            ],
            "ModelId":"650"
         }
      }
   ],
   "IsSuccess":true,
   "Info":"Ok"
}

1 个答案:

答案 0 :(得分:1)

我没有机会使用新的Lambda DSL,因为我经常使用Node,但我会给它一个解决方案:

....

   vm.authentication = Authentication;
vm.build = build;
vm.error = null;
vm.form = {};
vm.remove = remove;
vm.save = save;

$scope.classList = [{
  'classid': 1,
  'name': 'Marauder',
  'ascendancies': [{
    'ascendancyid': 1,
    'name': 'Berserker'
    }, {
    'ascendancyid': 2,
    'name': 'Chieftain'
    }, {
    'ascendancyid': 3,
    'name': 'Juggernaut'
  }]
}, {
  'classid': 2,
  'name': 'Ranger',
  'ascendancies':[{
    'ascendancyid': 1,
    'name': 'Deadeye'
  }, {
    'ascendancyid': 2,
    'name': 'Raider'
  }, {
    'ascendancyid': 3,
    'name': 'Pathfinder'
  }],
}, {
  'classid': 3,
  'name': 'Shadow',
  'ascendancies':[{
    'ascendancyid': 1,
    'name': 'Assassin'
  }, {
    'ascendancyid': 2,
    'name': 'Saboteur'
  }, {
    'ascendancyid': 3,
    'name': 'Trickster'
  }]
}, {
  'classid': 4,
  'name': 'Witch',
  'ascendancies':[{
    'ascendancyid': 1,
    'name': 'Necromancer'
  }, {
    'ascendancyid': 2,
    'name': 'Elementalist'
  }, {
    'ascendancyid': 3,
    'name': 'Occultist'
  }]
}, {
  'classid': 5,
  'name': 'Templar',
  'ascendancies':[{
    'ascendancyid': 1,
    'name': 'Inquisitor'
  }, {
    'ascendancyid': 2,
    'name': 'Hierophant'
  }, {
    'ascendancyid': 3,
    'name': 'Guardian'
  }]
}, {
  'classid': 6,
  'name': 'Duelist',
  'ascendancies': [{
    'ascendancyid': 1,
    'name': 'Slayer'
  }, {
    'ascendancyid': 2,
    'name': 'Gladiator'
  }, {
    'ascendancyid': 3,
    'name': 'Champion'
  }]
}, {
  'classid': 7,
  'name': 'Scion',
  'ascendancies':[{
    'ascendancyid': 1,
    'name': 'Ascendant'
  }]
}];

$scope.getAscendancies = function () {
  if ($scope.classSelected.classid > '0')
    $scope.showAscendancy = true;
}
....

我不确定这是否100%正常工作,因为我实际上并没有使用IDE来验证它,但我认为这会让你对我的内容有所了解。试图完成。

正如您所看到的,您可以将多个函数相互链接,因为它一直引用起始对象,使得逐个添加许多值变得简单,或者如果您更喜欢更易读的结构,则可以创建换行符每个引用范围变量的函数;它真的取决于你。 Lambda DSL尝试利用范围来创建更复杂的对象,其方式几乎与JSON最终出现的方式相同。

我知道目前的文档略显缺乏如何使用这种强大的新方法来进行DSL,但you might want to take a gander at the code that powers it for further reference因为它易于阅读并帮助您破译您所追求的内容。< / p>