md_metadata_extractor 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/md_metadata_extractor.rb +32 -20
- data/test/md_metadata_extractor_test.rb +29 -7
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a9f0b91416a5b9ae2f53c23a870285a0a2a9866558cbf84b4203c413084b32b4
|
4
|
+
data.tar.gz: dde346391a2ad7a160a8c710b16aa68b625f55e76e084e90e426623389dfa9d7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 14c93f64ddbd586b8517910a6b8dbf0b34a6e6a9033c37425cb36066d9e7be5fd75627a5e8f4d31cef87adbfec07cb97c73013aeef67dbcd67e1c8c68adc84f8
|
7
|
+
data.tar.gz: 69be39484b1196899e19bdfa805cdaa5c7de644ecd90acad95b1baeedb0c660867acd0f680b54cc3ee53e73782e1de33e4c23be381a9439dd29cd9ed6eb35957
|
@@ -2,40 +2,52 @@ require "pp"
|
|
2
2
|
module MdMetadata
|
3
3
|
class Extractor
|
4
4
|
attr_accessor :mode
|
5
|
-
def initialize
|
5
|
+
def initialize(mode = :hugo)
|
6
6
|
# Define input data
|
7
7
|
@input = ""
|
8
|
-
@result = {}
|
9
|
-
@mode =
|
8
|
+
@result = { :metadata => {} , :content => ""}
|
9
|
+
@mode = mode
|
10
|
+
end
|
11
|
+
def metadata_regex
|
12
|
+
/#{Regexp.quote(delimiter)}(.*)#{Regexp.quote(delimiter)}/m
|
13
|
+
end
|
14
|
+
def content_regex
|
15
|
+
/#{Regexp.quote(delimiter)}.*#{Regexp.quote(delimiter)}(.*)\z/m
|
16
|
+
end
|
17
|
+
def delimiter
|
18
|
+
case @mode
|
19
|
+
when :hugo
|
20
|
+
"+++"
|
21
|
+
when :jekyll
|
22
|
+
"---"
|
23
|
+
end
|
10
24
|
end
|
11
25
|
|
12
|
-
|
13
|
-
# Loads an input string for processing, returns a hash of values
|
14
|
-
# based on said metadata
|
15
|
-
def load_md(input)
|
16
|
-
@input = input
|
17
|
-
@metadata = ""
|
26
|
+
def separator
|
18
27
|
case @mode
|
19
28
|
when :hugo
|
20
|
-
|
29
|
+
"="
|
21
30
|
when :jekyll
|
22
|
-
|
31
|
+
":"
|
23
32
|
end
|
33
|
+
end
|
34
|
+
|
35
|
+
##
|
36
|
+
# Loads an input string for processing, returns a hash of values
|
37
|
+
# based on said metadata
|
38
|
+
def extract(input)
|
39
|
+
raise "Malformed input file" unless metadata_regex.match?(input)
|
40
|
+
@metadata = metadata_regex.match(input).to_s.delete(delimiter)
|
24
41
|
@metadata.each_line do |line|
|
25
|
-
|
26
|
-
when :hugo
|
27
|
-
meta = line.split("=")
|
28
|
-
when :jekyll
|
29
|
-
meta = line.split(":")
|
30
|
-
end
|
42
|
+
meta = line.split(separator)
|
31
43
|
unless meta[1].nil?
|
32
44
|
meta[0].strip!
|
33
|
-
meta[1].
|
34
|
-
@result[meta[0]] = meta[1]
|
45
|
+
meta[1].gsub!( '"', ' ').strip!
|
46
|
+
@result[:metadata][meta[0]] = meta[1]
|
35
47
|
end
|
36
48
|
end
|
49
|
+
@result[:content] = content_regex.match(input)[-1].to_s.strip!
|
37
50
|
@result
|
38
51
|
end
|
39
|
-
|
40
52
|
end
|
41
53
|
end
|
@@ -8,8 +8,10 @@ class TestExtractor < Minitest::Test
|
|
8
8
|
---
|
9
9
|
title : "My Title"
|
10
10
|
date : "2014-11-17 19:38:31 +0000 UTC"
|
11
|
+
|
11
12
|
description : "here goes the post description"
|
12
13
|
keywords : "here goes the metadata"
|
14
|
+
|
13
15
|
---
|
14
16
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
15
17
|
MD
|
@@ -22,18 +24,38 @@ class TestExtractor < Minitest::Test
|
|
22
24
|
+++
|
23
25
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
24
26
|
MD
|
27
|
+
@testCaseBroken = <<-MD
|
28
|
+
+-+
|
29
|
+
title = "My Title"
|
30
|
+
date "2014-11-17 19:38:31 +0000 UTC" =
|
31
|
+
description = "here goes the post description"
|
32
|
+
keywords = "here goes the metadata"
|
33
|
+
+++
|
34
|
+
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
35
|
+
MD
|
25
36
|
end
|
26
|
-
def
|
27
|
-
output = @importer.
|
37
|
+
def test_extract
|
38
|
+
output = @importer.extract @testCaseHugo
|
28
39
|
assert_instance_of Hash, output
|
29
40
|
end
|
30
41
|
def test_extracts_title_from_hugo_metadata
|
31
|
-
output = @importer.
|
32
|
-
assert_equal "My Title", output["title"]
|
42
|
+
output = @importer.extract @testCaseHugo
|
43
|
+
assert_equal "My Title", output[:metadata]["title"]
|
33
44
|
end
|
34
45
|
def test_extracts_title_from_jekyll_metadata
|
35
46
|
@importer.mode = :jekyll
|
36
|
-
output = @importer.
|
37
|
-
assert_equal "My Title", output["title"]
|
38
|
-
end
|
47
|
+
output = @importer.extract @testCaseJekyll
|
48
|
+
assert_equal "My Title", output[:metadata]["title"]
|
49
|
+
end
|
50
|
+
def test_extracts_content_from_hugo_md
|
51
|
+
output = @importer.extract @testCaseHugo
|
52
|
+
assert_equal "Lorem ipsum dolor sit amet, consectetur adipiscing elit.", output[:content]
|
53
|
+
end
|
54
|
+
|
55
|
+
|
56
|
+
def test_raises_exception_on_malformed_file
|
57
|
+
assert_raises RuntimeError do
|
58
|
+
output = @importer.extract @testCaseBroken
|
59
|
+
end
|
60
|
+
end
|
39
61
|
end
|