cooklang 0.1.0 → 1.0.0
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.
- checksums.yaml +4 -4
- data/{LICENSE → LICENSE.txt} +6 -6
- data/README.md +102 -13
- data/lib/cooklang/cookware.rb +43 -0
- data/lib/cooklang/formatter.rb +61 -0
- data/lib/cooklang/formatters/text.rb +18 -0
- data/lib/cooklang/ingredient.rb +60 -0
- data/lib/cooklang/lexer.rb +291 -0
- data/lib/cooklang/metadata.rb +98 -0
- data/lib/cooklang/note.rb +27 -0
- data/lib/cooklang/parser.rb +670 -0
- data/lib/cooklang/recipe.rb +62 -0
- data/lib/cooklang/section.rb +33 -0
- data/lib/cooklang/step.rb +89 -0
- data/lib/cooklang/timer.rb +63 -0
- data/lib/cooklang/version.rb +1 -1
- data/lib/cooklang.rb +22 -1
- metadata +27 -66
- data/.rubocop.yml +0 -126
- data/.ruby-version +0 -1
- data/CHANGELOG.md +0 -5
- data/Gemfile +0 -6
- data/Gemfile.lock +0 -45
- data/Rakefile +0 -8
- data/bin/console +0 -15
- data/bin/setup +0 -8
@@ -0,0 +1,98 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Cooklang
|
4
|
+
class Metadata < Hash
|
5
|
+
def initialize(data = {})
|
6
|
+
super()
|
7
|
+
data.each { |key, value| self[key.to_s] = value }
|
8
|
+
end
|
9
|
+
|
10
|
+
def []=(key, value)
|
11
|
+
super(key.to_s, value)
|
12
|
+
end
|
13
|
+
|
14
|
+
def [](key)
|
15
|
+
super(key.to_s)
|
16
|
+
end
|
17
|
+
|
18
|
+
def key?(key)
|
19
|
+
super(key.to_s)
|
20
|
+
end
|
21
|
+
|
22
|
+
def delete(key)
|
23
|
+
super(key.to_s)
|
24
|
+
end
|
25
|
+
|
26
|
+
def fetch(key, *)
|
27
|
+
super(key.to_s, *)
|
28
|
+
end
|
29
|
+
|
30
|
+
def to_h
|
31
|
+
super
|
32
|
+
end
|
33
|
+
|
34
|
+
def servings
|
35
|
+
self["servings"]&.to_i
|
36
|
+
end
|
37
|
+
|
38
|
+
def servings=(value)
|
39
|
+
self["servings"] = value
|
40
|
+
end
|
41
|
+
|
42
|
+
def prep_time
|
43
|
+
self["prep_time"] || self["prep-time"]
|
44
|
+
end
|
45
|
+
|
46
|
+
def prep_time=(value)
|
47
|
+
self["prep_time"] = value
|
48
|
+
end
|
49
|
+
|
50
|
+
def cook_time
|
51
|
+
self["cook_time"] || self["cook-time"]
|
52
|
+
end
|
53
|
+
|
54
|
+
def cook_time=(value)
|
55
|
+
self["cook_time"] = value
|
56
|
+
end
|
57
|
+
|
58
|
+
def total_time
|
59
|
+
self["total_time"] || self["total-time"]
|
60
|
+
end
|
61
|
+
|
62
|
+
def total_time=(value)
|
63
|
+
self["total_time"] = value
|
64
|
+
end
|
65
|
+
|
66
|
+
def title
|
67
|
+
self["title"]
|
68
|
+
end
|
69
|
+
|
70
|
+
def title=(value)
|
71
|
+
self["title"] = value
|
72
|
+
end
|
73
|
+
|
74
|
+
def source
|
75
|
+
self["source"]
|
76
|
+
end
|
77
|
+
|
78
|
+
def source=(value)
|
79
|
+
self["source"] = value
|
80
|
+
end
|
81
|
+
|
82
|
+
def tags
|
83
|
+
value = self["tags"]
|
84
|
+
case value
|
85
|
+
when Array
|
86
|
+
value
|
87
|
+
when String
|
88
|
+
value.split(",").map(&:strip)
|
89
|
+
else
|
90
|
+
[]
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
def tags=(value)
|
95
|
+
self["tags"] = value
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Cooklang
|
4
|
+
class Note
|
5
|
+
attr_reader :content
|
6
|
+
|
7
|
+
def initialize(content:)
|
8
|
+
@content = content.to_s.freeze
|
9
|
+
end
|
10
|
+
|
11
|
+
def to_s
|
12
|
+
content
|
13
|
+
end
|
14
|
+
|
15
|
+
def to_h
|
16
|
+
{ content: content }
|
17
|
+
end
|
18
|
+
|
19
|
+
def ==(other)
|
20
|
+
other.is_a?(Note) && content == other.content
|
21
|
+
end
|
22
|
+
|
23
|
+
def hash
|
24
|
+
content.hash
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|