front_matter_parser 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,192 @@
1
+ require 'spec_helper'
2
+
3
+ describe FrontMatterParser do
4
+ let(:sample) { {'title' => 'hello'} }
5
+
6
+ it 'has a version number' do
7
+ expect(FrontMatterParser::VERSION).to_not be_nil
8
+ end
9
+
10
+ describe "#parse" do
11
+ context "when the string has both front matter and content" do
12
+ let(:string) { %Q(
13
+ ---
14
+ title: hello
15
+ ---
16
+ Content) }
17
+ let(:parsed) { FrontMatterParser.parse(string) }
18
+
19
+ it "parses the front matter as a hash" do
20
+ expect(parsed.front_matter).to eq(sample)
21
+ end
22
+
23
+ it "parses the content as a string" do
24
+ expect(parsed.content).to eq("Content")
25
+ end
26
+ end
27
+
28
+ context "when the string only has front matter" do
29
+ let(:string) { %Q(
30
+ ---
31
+ title: hello
32
+ ---
33
+ ) }
34
+ let(:parsed) { FrontMatterParser.parse(string) }
35
+
36
+ it "parses the front matter as a hash" do
37
+ expect(parsed.front_matter).to eq(sample)
38
+ end
39
+
40
+ it "parses the content as an empty string" do
41
+ expect(parsed.content).to eq('')
42
+ end
43
+ end
44
+
45
+ context "when an empty front matter is supplied" do
46
+ let(:string) { %Q(Hello) }
47
+ let(:parsed) { FrontMatterParser.parse(string) }
48
+
49
+ it "parses the front matter as an empty hash" do
50
+ expect(parsed.front_matter).to eq({})
51
+ end
52
+
53
+ it "parses the content as the whole string" do
54
+ expect(parsed.content).to eq(string)
55
+ end
56
+ end
57
+
58
+ context "when an empty string is supplied" do
59
+ let(:parsed) { FrontMatterParser.parse('') }
60
+
61
+ it "parses the front matter as an empty hash" do
62
+ expect(parsed.front_matter).to eq({})
63
+ end
64
+
65
+ it "parses the content as an empty string" do
66
+ expect(parsed.content).to eq('')
67
+ end
68
+ end
69
+
70
+ context "when the end multiline comment delimiter is provided but not the start one" do
71
+ it "raises an ArgumentError" do
72
+ string = %Q(
73
+ <!--
74
+ ---
75
+ title: hello
76
+ ---
77
+ -->
78
+ Content)
79
+ expect {FrontMatterParser.parse(string, end_comment: '-->')}.to raise_error(ArgumentError)
80
+ end
81
+ end
82
+ end
83
+
84
+ describe "#parse_file" do
85
+ context "when autodetect is true" do
86
+ {
87
+ slim: ['slim', nil, '/', nil],
88
+ coffee: ['coffee', '#', nil, nil],
89
+ html: ['html', nil, '<!--', '-->'],
90
+ haml: ['haml', nil, '-#', nil],
91
+ liquid: ['liquid', nil, '<% comment %>', '<% endcomment %>'],
92
+ sass: ['sass', '//', nil, nil],
93
+ scss: ['scss', '//', nil, nil],
94
+ md: ['md', nil, nil, nil],
95
+ }.each_pair do |format, prop|
96
+ it "can detect a #{format} file" do
97
+ expect(FrontMatterParser).to receive(:parse).with(File.read(File.expand_path("../fixtures/example.#{prop[0]}", __FILE__)), comment: prop[1], start_comment: prop[2], end_comment: prop[3])
98
+ FrontMatterParser.parse_file(File.expand_path("../fixtures/example.#{prop[0]}", __FILE__), autodetct: true)
99
+ end
100
+ end
101
+
102
+ context "when the file extension is unknown" do
103
+ it "raises a RuntimeError" do
104
+ expect {FrontMatterParser.parse_file(File.expand_path('../fixtures/example.foo', __FILE__), autodetect: true)}.to raise_error(RuntimeError)
105
+ end
106
+ end
107
+ end
108
+
109
+ context "when autodetect is false" do
110
+ it "calls #parse with the content of the file and given comment delimiters" do
111
+ expect(FrontMatterParser).to receive(:parse).with(File.read(File.expand_path('../fixtures/example.md', __FILE__)), comment: nil, start_comment: nil, end_comment: nil)
112
+ FrontMatterParser.parse_file(File.expand_path('../fixtures/example.md', __FILE__), autodetect: false)
113
+ end
114
+ end
115
+ end
116
+ end
117
+
118
+ describe "the front matter" do
119
+ let(:sample) { {'title' => 'hello'} }
120
+
121
+ it "can be indented" do
122
+ string = %Q(
123
+ ---
124
+ title: hello
125
+ ---
126
+ Content)
127
+ expect(FrontMatterParser.parse(string).front_matter).to eq(sample)
128
+ end
129
+
130
+ it "can have each line commented" do
131
+ string = %Q(
132
+ #---
133
+ #title: hello
134
+ #---
135
+ Content)
136
+ expect(FrontMatterParser.parse(string, comment: '#').front_matter).to eq(sample)
137
+ end
138
+
139
+ it "can be indented after the comment delimiter" do
140
+ string = %Q(
141
+ # ---
142
+ # title: hello
143
+ # ---
144
+ Content)
145
+ expect(FrontMatterParser.parse(string, comment: '#').front_matter).to eq(sample)
146
+ end
147
+
148
+ it "can be between a multiline comment" do
149
+ string = %Q(
150
+ <!--
151
+ ---
152
+ title: hello
153
+ ---
154
+ -->
155
+ Content)
156
+ expect(FrontMatterParser.parse(string, start_comment: '<!--', end_comment: '-->').front_matter).to eq(sample)
157
+ end
158
+
159
+ it "can have the multiline comment delimiters indented" do
160
+ string = %Q(
161
+ <!--
162
+ ---
163
+ title: hello
164
+ ---
165
+ -->
166
+ Content)
167
+ expect(FrontMatterParser.parse(string, start_comment: '<!--', end_comment: '-->').front_matter).to eq(sample)
168
+ end
169
+
170
+ it "can have empty lines between the multiline comment delimiters and the front matter" do
171
+ string = %Q(
172
+ <!--
173
+
174
+ ---
175
+ title: hello
176
+ ---
177
+
178
+ -->
179
+ Content)
180
+ expect(FrontMatterParser.parse(string, start_comment: '<!--', end_comment: '-->').front_matter).to eq(sample)
181
+ end
182
+
183
+ it "can have multiline comment delimited by indentation" do
184
+ string = %Q(
185
+ /
186
+ ---
187
+ title: hello
188
+ ---
189
+ Content)
190
+ expect(FrontMatterParser.parse(string, start_comment: '/').front_matter).to eq(sample)
191
+ end
192
+ end
@@ -0,0 +1,2 @@
1
+ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
2
+ require 'front_matter_parser'
metadata ADDED
@@ -0,0 +1,141 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: front_matter_parser
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - marc
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-03-17 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.5'
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '1.6'
23
+ type: :development
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '1.5'
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '1.6'
33
+ - !ruby/object:Gem::Dependency
34
+ name: rake
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '10.1'
40
+ type: :development
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '10.1'
47
+ - !ruby/object:Gem::Dependency
48
+ name: rspec
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '2.14'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '2.14'
61
+ description: Library to parse files or strings with YAML front matters with syntax
62
+ autodetection.
63
+ email:
64
+ - marc@lamarciana.com
65
+ executables:
66
+ - autospec
67
+ - rake
68
+ - rspec
69
+ extensions: []
70
+ extra_rdoc_files: []
71
+ files:
72
+ - ".gitignore"
73
+ - ".rspec"
74
+ - ".ruby-version"
75
+ - ".travis.yml"
76
+ - ".yardopts"
77
+ - COPYING.LESSER
78
+ - COPYING.txt
79
+ - Gemfile
80
+ - LICENSE.txt
81
+ - README.md
82
+ - Rakefile
83
+ - bin/autospec
84
+ - bin/rake
85
+ - bin/rspec
86
+ - front_matter_parser.gemspec
87
+ - lib/front_matter_parser.rb
88
+ - lib/front_matter_parser/parsed.rb
89
+ - lib/front_matter_parser/version.rb
90
+ - spec/fixtures/example.coffee
91
+ - spec/fixtures/example.foo
92
+ - spec/fixtures/example.haml
93
+ - spec/fixtures/example.html
94
+ - spec/fixtures/example.liquid
95
+ - spec/fixtures/example.md
96
+ - spec/fixtures/example.sass
97
+ - spec/fixtures/example.scss
98
+ - spec/fixtures/example.slim
99
+ - spec/front_matter_parser/parsed_spec.rb
100
+ - spec/front_matter_parser_spec.rb
101
+ - spec/spec_helper.rb
102
+ homepage: https://github.com/laMarciana/front_matter_parser
103
+ licenses:
104
+ - LGPL3
105
+ metadata: {}
106
+ post_install_message:
107
+ rdoc_options: []
108
+ require_paths:
109
+ - lib
110
+ required_ruby_version: !ruby/object:Gem::Requirement
111
+ requirements:
112
+ - - ">="
113
+ - !ruby/object:Gem::Version
114
+ version: '0'
115
+ required_rubygems_version: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - ">="
118
+ - !ruby/object:Gem::Version
119
+ version: '0'
120
+ requirements: []
121
+ rubyforge_project:
122
+ rubygems_version: 2.2.2
123
+ signing_key:
124
+ specification_version: 4
125
+ summary: FrontMatterParser is a library to parse files or strings with YAML front
126
+ matters. When working with files, it can automatically detect the syntax of a file
127
+ from its extension and it supposes that the front matter is marked as that syntax
128
+ comments.
129
+ test_files:
130
+ - spec/fixtures/example.coffee
131
+ - spec/fixtures/example.foo
132
+ - spec/fixtures/example.haml
133
+ - spec/fixtures/example.html
134
+ - spec/fixtures/example.liquid
135
+ - spec/fixtures/example.md
136
+ - spec/fixtures/example.sass
137
+ - spec/fixtures/example.scss
138
+ - spec/fixtures/example.slim
139
+ - spec/front_matter_parser/parsed_spec.rb
140
+ - spec/front_matter_parser_spec.rb
141
+ - spec/spec_helper.rb