shortcode 0.4.3 → 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.
- data/CHANGELOG.md +11 -0
- data/Gemfile.lock +1 -1
- data/README.md +5 -1
- data/lib/shortcode/configuration.rb +12 -8
- data/lib/shortcode/parser.rb +6 -3
- data/lib/shortcode/version.rb +1 -1
- data/spec/parser_spec.rb +25 -9
- data/spec/spec_helper.rb +2 -1
- data/spec/support/fixtures/without_quotes.txt +1 -0
- metadata +4 -2
data/CHANGELOG.md
CHANGED
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
|
@@ -107,6 +107,7 @@ If you wish to use custom helper modules in templates you can do so by specifyin
|
|
|
107
107
|
Shortcode.setup do |config|
|
|
108
108
|
config.helpers = [CustomHelper, AnotherCustomHelper]
|
|
109
109
|
end
|
|
110
|
+
```
|
|
110
111
|
|
|
111
112
|
### Presenters
|
|
112
113
|
|
|
@@ -213,7 +214,10 @@ Shortcode.setup do |config|
|
|
|
213
214
|
config.self_closing_tags = [:youtube]
|
|
214
215
|
|
|
215
216
|
# the type of quotes to use for attribute values, default is double quotes (")
|
|
216
|
-
config.
|
|
217
|
+
config.attribute_quote_type = '"'
|
|
218
|
+
|
|
219
|
+
# Allows quotes around attributes to be omitted. Defaults to true (quotes must be present around the value).
|
|
220
|
+
config.use_attribute_quotes = true
|
|
217
221
|
end
|
|
218
222
|
```
|
|
219
223
|
|
|
@@ -18,15 +18,19 @@ class Shortcode::Configuration
|
|
|
18
18
|
attr_accessor :self_closing_tags
|
|
19
19
|
|
|
20
20
|
# Set the quotation sign used for attribute values. Defaults to double quote (")
|
|
21
|
-
attr_accessor :
|
|
21
|
+
attr_accessor :attribute_quote_type
|
|
22
|
+
|
|
23
|
+
# Allows quotes around attributes to be omitted. Defaults to false (quotes must be present around the value).
|
|
24
|
+
attr_accessor :use_attribute_quotes
|
|
22
25
|
|
|
23
26
|
def initialize
|
|
24
|
-
@template_parser
|
|
25
|
-
@template_path
|
|
26
|
-
@templates
|
|
27
|
-
@helpers
|
|
28
|
-
@block_tags
|
|
29
|
-
@self_closing_tags
|
|
30
|
-
@
|
|
27
|
+
@template_parser = :erb
|
|
28
|
+
@template_path = "app/views/shortcode_templates"
|
|
29
|
+
@templates = nil
|
|
30
|
+
@helpers = []
|
|
31
|
+
@block_tags = []
|
|
32
|
+
@self_closing_tags = []
|
|
33
|
+
@attribute_quote_type = '"'
|
|
34
|
+
@use_attribute_quotes = true
|
|
31
35
|
end
|
|
32
36
|
end
|
data/lib/shortcode/parser.rb
CHANGED
|
@@ -3,7 +3,7 @@ class Shortcode::Parser < Parslet::Parser
|
|
|
3
3
|
rule(:block_tag) { match_any_of Shortcode.configuration.block_tags }
|
|
4
4
|
rule(:self_closing_tag) { match_any_of Shortcode.configuration.self_closing_tags }
|
|
5
5
|
|
|
6
|
-
rule(:quotes) { str(Shortcode.configuration.
|
|
6
|
+
rule(:quotes) { str(Shortcode.configuration.attribute_quote_type) }
|
|
7
7
|
|
|
8
8
|
rule(:space) { str(' ').repeat(1) }
|
|
9
9
|
rule(:space?) { space.maybe }
|
|
@@ -11,8 +11,11 @@ class Shortcode::Parser < Parslet::Parser
|
|
|
11
11
|
rule(:whitespace) { (space | newline).repeat(1) }
|
|
12
12
|
rule(:whitespace?) { whitespace.maybe }
|
|
13
13
|
|
|
14
|
-
rule(:key)
|
|
15
|
-
|
|
14
|
+
rule(:key) { match('[a-zA-Z0-9\-_]').repeat(1) }
|
|
15
|
+
|
|
16
|
+
rule(:value_with_quotes) { quotes >> (quotes.absent? >> any).repeat.as(:value) >> quotes }
|
|
17
|
+
rule(:value_without_quotes) { quotes.absent? >> ( (str(']') | whitespace).absent? >> any ).repeat.as(:value) }
|
|
18
|
+
rule(:value) { Shortcode.configuration.use_attribute_quotes ? value_with_quotes : (value_without_quotes | value_with_quotes) }
|
|
16
19
|
|
|
17
20
|
rule(:option) { key.as(:key) >> str('=') >> value }
|
|
18
21
|
rule(:options) { (str(' ') >> option).repeat(1) }
|
data/lib/shortcode/version.rb
CHANGED
data/spec/parser_spec.rb
CHANGED
|
@@ -8,6 +8,7 @@ describe Shortcode::Parser do
|
|
|
8
8
|
|
|
9
9
|
let(:simple_quote) { load_fixture :simple_quote }
|
|
10
10
|
let(:full_quote) { load_fixture :full_quote }
|
|
11
|
+
let(:without_quotes) { load_fixture :without_quotes }
|
|
11
12
|
let(:quote_with_extras) { load_fixture :quote_with_extras }
|
|
12
13
|
let(:simple_list) { load_fixture :simple_list }
|
|
13
14
|
let(:timeline_event) { load_fixture :timeline_event }
|
|
@@ -25,20 +26,35 @@ describe Shortcode::Parser do
|
|
|
25
26
|
end
|
|
26
27
|
end
|
|
27
28
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
29
|
+
context "attribute_quote_type configuration" do
|
|
30
|
+
|
|
31
|
+
before do
|
|
32
|
+
Shortcode.setup do |config|
|
|
33
|
+
config.attribute_quote_type = "'"
|
|
34
|
+
end
|
|
31
35
|
end
|
|
32
36
|
|
|
33
|
-
quotes
|
|
34
|
-
|
|
35
|
-
|
|
37
|
+
it "parses quotes using custom quotations" do
|
|
38
|
+
quotes.each do |string|
|
|
39
|
+
# Change double quotes to single quotes in the fixture
|
|
40
|
+
expect(parser).to parse(string.gsub '"', "'")
|
|
41
|
+
end
|
|
36
42
|
end
|
|
37
43
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
context "use_attribute_quotes configuration" do
|
|
47
|
+
|
|
48
|
+
before do
|
|
49
|
+
Shortcode.setup do |config|
|
|
50
|
+
config.use_attribute_quotes = false
|
|
51
|
+
end
|
|
41
52
|
end
|
|
53
|
+
|
|
54
|
+
it "parses shortcodes with optional quotes" do
|
|
55
|
+
expect(parser).to parse(without_quotes)
|
|
56
|
+
end
|
|
57
|
+
|
|
42
58
|
end
|
|
43
59
|
|
|
44
60
|
it "parses list shortcodes" do
|
data/spec/spec_helper.rb
CHANGED
|
@@ -25,7 +25,8 @@ RSpec.configure do |config|
|
|
|
25
25
|
config.templates = nil
|
|
26
26
|
config.block_tags = [:quote, :collapsible_list, :item, :timeline_person, :rails_helper, :custom_helper]
|
|
27
27
|
config.self_closing_tags = [:timeline_event, :timeline_info]
|
|
28
|
-
config.
|
|
28
|
+
config.attribute_quote_type = '"'
|
|
29
|
+
config.use_attribute_quotes = true
|
|
29
30
|
end
|
|
30
31
|
end
|
|
31
32
|
end
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[quote author="Jamie Dyer" title=King_of_England]A quote[/quote]
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: shortcode
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 1.0.0
|
|
5
5
|
prerelease:
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
@@ -9,7 +9,7 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2014-07-
|
|
12
|
+
date: 2014-07-29 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: parslet
|
|
@@ -191,6 +191,7 @@ files:
|
|
|
191
191
|
- spec/support/fixtures/timeline_info_output.html
|
|
192
192
|
- spec/support/fixtures/timeline_person.txt
|
|
193
193
|
- spec/support/fixtures/timeline_person_output.html
|
|
194
|
+
- spec/support/fixtures/without_quotes.txt
|
|
194
195
|
- spec/support/presenters/missing_attributes_presenter.rb
|
|
195
196
|
- spec/support/presenters/missing_content_presenter.rb
|
|
196
197
|
- spec/support/presenters/missing_for_presenter.rb
|
|
@@ -273,6 +274,7 @@ test_files:
|
|
|
273
274
|
- spec/support/fixtures/timeline_info_output.html
|
|
274
275
|
- spec/support/fixtures/timeline_person.txt
|
|
275
276
|
- spec/support/fixtures/timeline_person_output.html
|
|
277
|
+
- spec/support/fixtures/without_quotes.txt
|
|
276
278
|
- spec/support/presenters/missing_attributes_presenter.rb
|
|
277
279
|
- spec/support/presenters/missing_content_presenter.rb
|
|
278
280
|
- spec/support/presenters/missing_for_presenter.rb
|