masticate 0.1.4 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/attributes.js +13 -38
- package/lib/canonical_url_parser.js +7 -17
- package/lib/data_vocabulary_recipe_parser.js +14 -35
- package/lib/hrecipe_parser.js +14 -47
- package/lib/hrecipe_parser.spec.js +52 -67
- package/lib/html_recipe_parser.js +13 -34
- package/lib/index.js +39 -95
- package/lib/non_standard/all_recipes_parser.js +17 -35
- package/lib/non_standard/all_recipes_parser.spec.js +53 -66
- package/lib/non_standard/chowhound_parser.js +14 -36
- package/lib/non_standard/chowhound_parser.spec.js +53 -64
- package/lib/non_standard/epicurious_parser.js +18 -38
- package/lib/non_standard/epicurious_parser.spec.js +42 -55
- package/lib/recipe.js +7 -15
- package/lib/recipe_parser.js +9 -27
- package/lib/schema_org_json_recipe_parser.js +18 -53
- package/lib/schema_org_json_recipe_parser.spec.js +162 -206
- package/lib/schema_org_recipe_parser.js +14 -47
- package/lib/schema_org_recipe_parser.spec.js +53 -68
- package/package.json +6 -6
package/lib/attributes.js
CHANGED
@@ -4,27 +4,20 @@ Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
5
5
|
});
|
6
6
|
exports.Attributes = exports.AttributeCleaner = void 0;
|
7
|
-
|
8
|
-
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
9
|
-
|
7
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
10
8
|
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
|
11
|
-
|
12
9
|
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
13
|
-
|
14
|
-
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
15
|
-
|
10
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
16
11
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
17
|
-
|
18
|
-
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
|
19
|
-
|
12
|
+
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
|
20
13
|
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
21
|
-
|
22
|
-
var
|
14
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
|
15
|
+
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
16
|
+
var Attributes = exports.Attributes = /*#__PURE__*/function () {
|
23
17
|
function Attributes() {
|
24
18
|
_classCallCheck(this, Attributes);
|
25
19
|
}
|
26
|
-
|
27
|
-
_createClass(Attributes, null, [{
|
20
|
+
return _createClass(Attributes, null, [{
|
28
21
|
key: "RECIPE_ATTRIBUTES",
|
29
22
|
get: function get() {
|
30
23
|
return ["author", "canonical_url", "cook_time", "description", "image_url", "ingredients", "instructions", "name", "nutrition", "prep_time", "published_date", "total_time", "yield"];
|
@@ -35,25 +28,17 @@ var Attributes = /*#__PURE__*/function () {
|
|
35
28
|
return ["calories", "cholesterol", "fiber", "protein", "saturated_fat", "sodium", "sugar", "total_carbohydrates", "total_fat", "trans_fat", "unsaturated_fat"];
|
36
29
|
}
|
37
30
|
}]);
|
38
|
-
|
39
|
-
return Attributes;
|
40
31
|
}();
|
41
|
-
|
42
|
-
exports.Attributes = Attributes;
|
43
|
-
|
44
|
-
var AttributeCleaner = /*#__PURE__*/function () {
|
32
|
+
var AttributeCleaner = exports.AttributeCleaner = /*#__PURE__*/function () {
|
45
33
|
function AttributeCleaner(recipe) {
|
46
34
|
_classCallCheck(this, AttributeCleaner);
|
47
|
-
|
48
35
|
this.recipe = recipe;
|
49
36
|
}
|
50
|
-
|
51
|
-
_createClass(AttributeCleaner, [{
|
37
|
+
return _createClass(AttributeCleaner, [{
|
52
38
|
key: "clean",
|
53
39
|
value: function clean() {
|
54
40
|
var _iterator = _createForOfIteratorHelper(Attributes.RECIPE_ATTRIBUTES),
|
55
|
-
|
56
|
-
|
41
|
+
_step;
|
57
42
|
try {
|
58
43
|
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
59
44
|
var attr = _step.value;
|
@@ -67,23 +52,19 @@ var AttributeCleaner = /*#__PURE__*/function () {
|
|
67
52
|
} finally {
|
68
53
|
_iterator.f();
|
69
54
|
}
|
70
|
-
|
71
55
|
return this.recipe;
|
72
56
|
}
|
73
57
|
}, {
|
74
58
|
key: "clean_value",
|
75
59
|
value: function clean_value(value, options) {
|
76
60
|
var self = this;
|
77
|
-
|
78
61
|
switch (_typeof(value)) {
|
79
62
|
case 'string':
|
80
63
|
return this.clean_string(value, options);
|
81
|
-
|
82
64
|
case 'array':
|
83
65
|
return value.map(function (s) {
|
84
66
|
return self.clean_string(s, options);
|
85
67
|
});
|
86
|
-
|
87
68
|
default:
|
88
69
|
return value;
|
89
70
|
}
|
@@ -93,18 +74,16 @@ var AttributeCleaner = /*#__PURE__*/function () {
|
|
93
74
|
value: function clean_string(value, options) {
|
94
75
|
var opts = Object.assign({
|
95
76
|
"preserve_newlines": false
|
96
|
-
}, options);
|
77
|
+
}, options);
|
97
78
|
|
79
|
+
// Remove leading and trailing spaces
|
98
80
|
var val = value.trim();
|
99
|
-
|
100
81
|
if (opts["preserve_newlines"]) {
|
101
82
|
val = val.replace(/\s*\n\s*/g, "\n"); // replace any whitespace group with a newline with a single newline
|
102
|
-
|
103
83
|
val = val.replace(/[ ]+/g, " "); // consolidate duplicate spaces into a single space
|
104
84
|
} else {
|
105
85
|
val = val.replace(/\s+/g, ' '); // replace all consecutive whitespace with a single space
|
106
86
|
}
|
107
|
-
|
108
87
|
return val;
|
109
88
|
}
|
110
89
|
}], [{
|
@@ -113,8 +92,4 @@ var AttributeCleaner = /*#__PURE__*/function () {
|
|
113
92
|
return ["instructions"];
|
114
93
|
}
|
115
94
|
}]);
|
116
|
-
|
117
|
-
return AttributeCleaner;
|
118
|
-
}();
|
119
|
-
|
120
|
-
exports.AttributeCleaner = AttributeCleaner;
|
95
|
+
}();
|
@@ -4,27 +4,21 @@ Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
5
5
|
});
|
6
6
|
exports.CanonicalUrlParser = void 0;
|
7
|
-
|
8
7
|
var _urijs = _interopRequireDefault(require("urijs"));
|
9
|
-
|
10
8
|
var _cheerio = _interopRequireDefault(require("cheerio"));
|
11
|
-
|
12
9
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
13
|
-
|
10
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
14
11
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
15
|
-
|
16
|
-
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
|
17
|
-
|
12
|
+
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
|
18
13
|
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
19
|
-
|
20
|
-
var
|
14
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
|
15
|
+
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
16
|
+
var CanonicalUrlParser = exports.CanonicalUrlParser = /*#__PURE__*/function () {
|
21
17
|
function CanonicalUrlParser(doc) {
|
22
18
|
_classCallCheck(this, CanonicalUrlParser);
|
23
|
-
|
24
19
|
this.doc = doc;
|
25
20
|
}
|
26
|
-
|
27
|
-
_createClass(CanonicalUrlParser, [{
|
21
|
+
return _createClass(CanonicalUrlParser, [{
|
28
22
|
key: "canonical_domain",
|
29
23
|
get: function get() {
|
30
24
|
var url = this.canonical_url;
|
@@ -45,8 +39,4 @@ var CanonicalUrlParser = /*#__PURE__*/function () {
|
|
45
39
|
return node.length ? node.attr("content") : null;
|
46
40
|
}
|
47
41
|
}]);
|
48
|
-
|
49
|
-
return CanonicalUrlParser;
|
50
|
-
}();
|
51
|
-
|
52
|
-
exports.CanonicalUrlParser = CanonicalUrlParser;
|
42
|
+
}();
|
@@ -1,48 +1,31 @@
|
|
1
1
|
"use strict";
|
2
2
|
|
3
|
-
function _typeof(
|
4
|
-
|
3
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
6
5
|
value: true
|
7
6
|
});
|
8
7
|
exports.DataVocabularyRecipeParser = void 0;
|
9
|
-
|
10
8
|
var _schema_org_recipe_parser = _interopRequireDefault(require("schema_org_recipe_parser"));
|
11
|
-
|
12
9
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
13
|
-
|
14
10
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
15
|
-
|
16
|
-
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
|
17
|
-
|
11
|
+
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
|
18
12
|
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
19
|
-
|
20
|
-
function
|
21
|
-
|
22
|
-
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
23
|
-
|
24
|
-
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
|
25
|
-
|
13
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
|
14
|
+
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
15
|
+
function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
|
26
16
|
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
|
27
|
-
|
28
17
|
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
|
29
|
-
|
30
|
-
function
|
31
|
-
|
32
|
-
function
|
33
|
-
|
34
|
-
var DataVocabularyRecipeParser = /*#__PURE__*/function (_SchemaOrgRecipeParse) {
|
35
|
-
_inherits(DataVocabularyRecipeParser, _SchemaOrgRecipeParse);
|
36
|
-
|
37
|
-
var _super = _createSuper(DataVocabularyRecipeParser);
|
38
|
-
|
18
|
+
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
19
|
+
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
|
20
|
+
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
|
21
|
+
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
22
|
+
var DataVocabularyRecipeParser = exports.DataVocabularyRecipeParser = /*#__PURE__*/function (_SchemaOrgRecipeParse) {
|
39
23
|
function DataVocabularyRecipeParser() {
|
40
24
|
_classCallCheck(this, DataVocabularyRecipeParser);
|
41
|
-
|
42
|
-
return _super.apply(this, arguments);
|
25
|
+
return _callSuper(this, DataVocabularyRecipeParser, arguments);
|
43
26
|
}
|
44
|
-
|
45
|
-
_createClass(DataVocabularyRecipeParser, [{
|
27
|
+
_inherits(DataVocabularyRecipeParser, _SchemaOrgRecipeParse);
|
28
|
+
return _createClass(DataVocabularyRecipeParser, [{
|
46
29
|
key: "parse_description",
|
47
30
|
value: function parse_description() {
|
48
31
|
return this.node_with_itemprop("summary").text();
|
@@ -92,8 +75,4 @@ var DataVocabularyRecipeParser = /*#__PURE__*/function (_SchemaOrgRecipeParse) {
|
|
92
75
|
return "ingredient";
|
93
76
|
}
|
94
77
|
}]);
|
95
|
-
|
96
|
-
return DataVocabularyRecipeParser;
|
97
|
-
}(_schema_org_recipe_parser["default"]);
|
98
|
-
|
99
|
-
exports.DataVocabularyRecipeParser = DataVocabularyRecipeParser;
|
78
|
+
}(_schema_org_recipe_parser["default"]);
|
package/lib/hrecipe_parser.js
CHANGED
@@ -1,52 +1,33 @@
|
|
1
1
|
"use strict";
|
2
2
|
|
3
|
-
function _typeof(
|
4
|
-
|
3
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
6
5
|
value: true
|
7
6
|
});
|
8
7
|
exports.HRecipeParser = void 0;
|
9
|
-
|
10
8
|
var _recipe = require("./recipe");
|
11
|
-
|
12
9
|
var _html_recipe_parser = require("./html_recipe_parser");
|
13
|
-
|
14
10
|
var _cheerio = _interopRequireDefault(require("cheerio"));
|
15
|
-
|
16
11
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
17
|
-
|
18
12
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
19
|
-
|
20
|
-
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
|
21
|
-
|
13
|
+
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
|
22
14
|
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
23
|
-
|
24
|
-
function
|
25
|
-
|
26
|
-
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
27
|
-
|
28
|
-
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
|
29
|
-
|
15
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
|
16
|
+
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
17
|
+
function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
|
30
18
|
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
|
31
|
-
|
32
19
|
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
|
33
|
-
|
34
|
-
function
|
35
|
-
|
36
|
-
function
|
37
|
-
|
38
|
-
var HRecipeParser = /*#__PURE__*/function (_HtmlRecipeParser) {
|
39
|
-
_inherits(HRecipeParser, _HtmlRecipeParser);
|
40
|
-
|
41
|
-
var _super = _createSuper(HRecipeParser);
|
42
|
-
|
20
|
+
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
21
|
+
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
|
22
|
+
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
|
23
|
+
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
24
|
+
var HRecipeParser = exports.HRecipeParser = /*#__PURE__*/function (_HtmlRecipeParser) {
|
43
25
|
function HRecipeParser() {
|
44
26
|
_classCallCheck(this, HRecipeParser);
|
45
|
-
|
46
|
-
return _super.apply(this, arguments);
|
27
|
+
return _callSuper(this, HRecipeParser, arguments);
|
47
28
|
}
|
48
|
-
|
49
|
-
_createClass(HRecipeParser, [{
|
29
|
+
_inherits(HRecipeParser, _HtmlRecipeParser);
|
30
|
+
return _createClass(HRecipeParser, [{
|
50
31
|
key: "nodes_with_class",
|
51
32
|
value: function nodes_with_class(klass) {
|
52
33
|
return this.recipe_node.find(".".concat(klass));
|
@@ -60,12 +41,10 @@ var HRecipeParser = /*#__PURE__*/function (_HtmlRecipeParser) {
|
|
60
41
|
key: "title_value_for_css_class",
|
61
42
|
value: function title_value_for_css_class(klass) {
|
62
43
|
var nodes = this.node_with_class(klass);
|
63
|
-
|
64
44
|
if (nodes.length) {
|
65
45
|
var node = (0, _cheerio["default"])(nodes.find(".value-title").first());
|
66
46
|
return node.attr("title");
|
67
47
|
}
|
68
|
-
|
69
48
|
return null;
|
70
49
|
}
|
71
50
|
}, {
|
@@ -78,11 +57,9 @@ var HRecipeParser = /*#__PURE__*/function (_HtmlRecipeParser) {
|
|
78
57
|
key: "parse_cook_time",
|
79
58
|
value: function parse_cook_time() {
|
80
59
|
var val = this.title_value_for_css_class("cookTime");
|
81
|
-
|
82
60
|
if (!val) {
|
83
61
|
val = this.title_value_for_css_class("cooktime");
|
84
62
|
}
|
85
|
-
|
86
63
|
return this.parse_duration(val);
|
87
64
|
}
|
88
65
|
}, {
|
@@ -114,14 +91,12 @@ var HRecipeParser = /*#__PURE__*/function (_HtmlRecipeParser) {
|
|
114
91
|
value: function parse_instructions() {
|
115
92
|
var inst = "";
|
116
93
|
var nodes = this.nodes_with_class("instructions");
|
117
|
-
|
118
94
|
if (nodes.length) {
|
119
95
|
nodes.each(function (i, node) {
|
120
96
|
var $node = (0, _cheerio["default"])(node);
|
121
97
|
inst += $node.text() + "\n";
|
122
98
|
});
|
123
99
|
}
|
124
|
-
|
125
100
|
return inst ? inst : null;
|
126
101
|
}
|
127
102
|
}, {
|
@@ -140,11 +115,9 @@ var HRecipeParser = /*#__PURE__*/function (_HtmlRecipeParser) {
|
|
140
115
|
key: "parse_prep_time",
|
141
116
|
value: function parse_prep_time() {
|
142
117
|
var val = this.title_value_for_css_class("prepTime");
|
143
|
-
|
144
118
|
if (!val) {
|
145
119
|
val = this.title_value_for_css_class("preptime");
|
146
120
|
}
|
147
|
-
|
148
121
|
return this.parse_duration(val);
|
149
122
|
}
|
150
123
|
}, {
|
@@ -157,11 +130,9 @@ var HRecipeParser = /*#__PURE__*/function (_HtmlRecipeParser) {
|
|
157
130
|
key: "parse_total_time",
|
158
131
|
value: function parse_total_time() {
|
159
132
|
var val = this.title_value_for_css_class("duration");
|
160
|
-
|
161
133
|
if (!val) {
|
162
134
|
val = this.title_value_for_css_class("totalTime");
|
163
135
|
}
|
164
|
-
|
165
136
|
return this.parse_duration(val);
|
166
137
|
}
|
167
138
|
}, {
|
@@ -181,8 +152,4 @@ var HRecipeParser = /*#__PURE__*/function (_HtmlRecipeParser) {
|
|
181
152
|
return ".hrecipe, .hRecipe";
|
182
153
|
}
|
183
154
|
}]);
|
184
|
-
|
185
|
-
return HRecipeParser;
|
186
|
-
}(_html_recipe_parser.HtmlRecipeParser);
|
187
|
-
|
188
|
-
exports.HRecipeParser = HRecipeParser;
|
155
|
+
}(_html_recipe_parser.HtmlRecipeParser);
|
@@ -1,89 +1,74 @@
|
|
1
1
|
"use strict";
|
2
2
|
|
3
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
3
4
|
var _index = require("./index");
|
4
|
-
|
5
5
|
var _hrecipe_parser = require("./hrecipe_parser");
|
6
|
-
|
7
6
|
var _cheerio = _interopRequireDefault(require("cheerio"));
|
8
|
-
|
9
7
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
10
|
-
|
8
|
+
function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator["return"] && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, "catch": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
|
11
9
|
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
12
|
-
|
13
10
|
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
14
|
-
|
15
11
|
var expect = require("chai").expect;
|
16
|
-
|
17
12
|
var html = "<!DOCTYPE html>" + "<html>" + "<body>" + "<div class=\"hrecipe\">" + " <h1 class=\"fn\">Pommes Frites</h1>" + " <p class=\"summary\">" + " Pommes frites originate in outer space. They are served hot.<br />" + " This recipe is only an example. Don't try this at home!" + " </p>" + " <p>" + " Contributed by <span class=\"author\">CJ Tom</span> and the" + " <span class=\"author vcard\"><a class=\"url fn\" href=\"http://example.com\">Cooky Gang</a></span>." + " </p>" + " <p>Published <span class=\"published\"><span class=\"value-title\" title=\"2008-10-14T10:05:37-01:00\"> </span>14. Oct 2008</span></p>" + " <img src=\"/img/pommes.png\" class=\"photo\" width=\"100\" height=\"100\" alt=\"Pommes Frites\"/>" + " <h2>Ingredients</h2>" + " <ul>" + " <li class=\"ingredient\">" + " <span class=\"value\">500</span> " + " <span class=\"type\">gramme</span> potatoes, hard cooking." + " </li>" + " <li class=\"ingredient\">" + " <span class=\"value\">1</span> <span class=\"type\">spoonful</span> of salt" + " </li>" + " <li>" + " You may want to provide some " + " <span class=\"ingredient\">Ketchup and Mayonnaise</span>" + " as well." + " </li>" + " </ul>" + " <h2>Instructions</h2>" + " <ul class=\"instructions\">" + " <li>First wash the potatoes.</li>" + " <li>Then slice and dice them and put them in boiling fat.</li>" + " <li>After a few minutes take them out again.</li>" + " </ul>" + " <h2>Further details</h2>" + " <p>Enough for <span class=\"yield\">12 children</span>.</p>" + " <p>Preparation time is approximately " + " <span class=\"duration\"><span class=\"value-title\" title=\"PT1H30M\"> </span>90 min</span>" + " </p>" + " <p>Add <span class=\"duration\"><span class=\"value-title\" title=\"PT30M\"></span>half an hour</span> to prepare your homemade Ketchup.</p>" + " <p>This recipe is <a href=\"http://www.example.com/tags/difficulty/easy\" rel=\"tag\">easy</a> and <a href=\"http://www.example.com/tags/tastyness/delicious\" rel=\"tag\">delicious</a>.</p>" + " <p>" + " <span class=\"nutrition\">" + " Pommes Frites have more than " + " <span class=\"value\">1000</span> " + " <span class=\"type\">Joule</span>" + " Energy</span>, " + " while Ketchup and Mayonnaise have " + " <span class=\"nutrition\">0 vitamins</span>." + " </p>" + "</div>" + "</body>" + "</html>";
|
18
13
|
describe("HRecipeParser", function () {
|
19
14
|
describe("With no content", function () {
|
20
|
-
it("sets all values to null", /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/
|
15
|
+
it("sets all values to null", /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
|
21
16
|
var parser, rec;
|
22
|
-
return
|
23
|
-
while (1) {
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
case 16:
|
46
|
-
case "end":
|
47
|
-
return _context.stop();
|
48
|
-
}
|
17
|
+
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
18
|
+
while (1) switch (_context.prev = _context.next) {
|
19
|
+
case 0:
|
20
|
+
parser = new _hrecipe_parser.HRecipeParser(_cheerio["default"].load(""));
|
21
|
+
_context.next = 3;
|
22
|
+
return parser.parse();
|
23
|
+
case 3:
|
24
|
+
rec = _context.sent;
|
25
|
+
expect(rec.canonical_url).to.equal(null);
|
26
|
+
expect(rec.cook_time).to.equal(null);
|
27
|
+
expect(rec.description).to.equal(null);
|
28
|
+
expect(rec.image_url).to.equal(null);
|
29
|
+
expect(rec.ingredients).to.be.a("Array");
|
30
|
+
expect(rec.ingredients.length).to.equal(0);
|
31
|
+
expect(rec.instructions).to.equal(null);
|
32
|
+
expect(rec.name).to.equal(null);
|
33
|
+
expect(rec.prep_time).to.equal(null);
|
34
|
+
expect(rec.published_date).to.equal(null);
|
35
|
+
expect(rec.total_time).to.equal(null);
|
36
|
+
expect(rec["yield"]).to.equal(null);
|
37
|
+
case 16:
|
38
|
+
case "end":
|
39
|
+
return _context.stop();
|
49
40
|
}
|
50
41
|
}, _callee);
|
51
42
|
})));
|
52
43
|
});
|
53
44
|
describe("With valid document", function () {
|
54
|
-
it("Sets all values", /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/
|
45
|
+
it("Sets all values", /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {
|
55
46
|
var rec, expected, i;
|
56
|
-
return
|
57
|
-
while (1) {
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
expected
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
expect(rec["yield"]).to.equal("12 children");
|
82
|
-
|
83
|
-
case 16:
|
84
|
-
case "end":
|
85
|
-
return _context2.stop();
|
86
|
-
}
|
47
|
+
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
|
48
|
+
while (1) switch (_context2.prev = _context2.next) {
|
49
|
+
case 0:
|
50
|
+
_context2.next = 2;
|
51
|
+
return _index.Masticate.parse(html);
|
52
|
+
case 2:
|
53
|
+
rec = _context2.sent;
|
54
|
+
expect(rec.author).to.equal("CJ Tom");
|
55
|
+
expect(rec.total_time).to.equal(90);
|
56
|
+
expect(rec.description).to.equal("Pommes frites originate in outer space. They are served hot. This recipe is only an example. Don't try this at home!");
|
57
|
+
expect(rec.image_url).to.equal("/img/pommes.png");
|
58
|
+
expect(rec.ingredients.length).to.equal(3);
|
59
|
+
expected = ["500 gramme potatoes, hard cooking.", "1 spoonful of salt", "Ketchup and Mayonnaise"];
|
60
|
+
for (i = 0; i > rec.ingredients.length; i++) {
|
61
|
+
expect(rec.ingredients[i]).to.equal([expected[i]]);
|
62
|
+
}
|
63
|
+
expect(rec.instructions).to.equal("First wash the potatoes. Then slice and dice them and put them in boiling fat. After a few minutes take them out again.");
|
64
|
+
expect(rec.name).to.equal("Pommes Frites");
|
65
|
+
expect(rec.prep_time).to.equal(null);
|
66
|
+
expect(rec.cook_time).to.equal(null);
|
67
|
+
expect(rec.published_date).to.equal(null);
|
68
|
+
expect(rec["yield"]).to.equal("12 children");
|
69
|
+
case 16:
|
70
|
+
case "end":
|
71
|
+
return _context2.stop();
|
87
72
|
}
|
88
73
|
}, _callee2);
|
89
74
|
})));
|