shortcode 1.2.1 → 2.0.0.pre

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.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop +1 -0
  3. data/.rubocop.yml +72 -0
  4. data/.travis.yml +7 -6
  5. data/Appraisals +3 -7
  6. data/Gemfile +2 -2
  7. data/Gemfile.lock +136 -18
  8. data/bin/appraisal +17 -0
  9. data/bin/rspec +17 -0
  10. data/bin/rubocop +17 -0
  11. data/gemfiles/rails_4.2.gemfile +1 -1
  12. data/gemfiles/rails_5.0.gemfile +1 -1
  13. data/gemfiles/rails_5.1.gemfile +1 -1
  14. data/lib/shortcode.rb +17 -41
  15. data/lib/shortcode/configuration.rb +3 -1
  16. data/lib/shortcode/parser.rb +21 -17
  17. data/lib/shortcode/presenter.rb +18 -15
  18. data/lib/shortcode/processor.rb +3 -1
  19. data/lib/shortcode/railtie.rb +2 -0
  20. data/lib/shortcode/tag.rb +11 -4
  21. data/lib/shortcode/template_binding.rb +12 -7
  22. data/lib/shortcode/transformer.rb +8 -4
  23. data/lib/shortcode/version.rb +3 -1
  24. data/shortcode.gemspec +10 -7
  25. data/spec/.rubocop.yml +17 -0
  26. data/spec/performance_spec.rb +4 -5
  27. data/spec/rails_helpers_spec.rb +25 -31
  28. data/spec/shortcode/parser_spec.rb +313 -0
  29. data/spec/shortcode/presenter_spec.rb +118 -0
  30. data/spec/shortcode/tag_spec.rb +73 -0
  31. data/spec/shortcode_spec.rb +40 -37
  32. data/spec/spec_helper.rb +6 -20
  33. data/spec/support/fixtures.rb +4 -6
  34. data/spec/support/presenters/missing_attributes_presenter.rb +3 -6
  35. data/spec/support/presenters/missing_content_presenter.rb +3 -6
  36. data/spec/support/presenters/missing_for_presenter.rb +3 -6
  37. data/spec/support/presenters/missing_initialize_presenter.rb +3 -6
  38. data/spec/support/presenters/multiple_presenter.rb +4 -5
  39. data/spec/support/presenters/my_presenter.rb +3 -4
  40. data/spec/support/presenters/other_presenter.rb +3 -4
  41. data/spec/template_parsers_spec.rb +21 -22
  42. data/spec/transformer_spec.rb +26 -36
  43. metadata +75 -24
  44. data/gemfiles/rails_4.1.gemfile +0 -8
  45. data/spec/parser_spec.rb +0 -307
  46. data/spec/presenter_spec.rb +0 -126
  47. data/spec/tag_spec.rb +0 -86
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shortcode
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.1
4
+ version: 2.0.0.pre
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jamie Dyer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-06-22 00:00:00.000000000 Z
11
+ date: 2017-11-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: parslet
@@ -38,6 +38,48 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '1.15'
41
+ - !ruby/object:Gem::Dependency
42
+ name: coveralls
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.8'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.8'
55
+ - !ruby/object:Gem::Dependency
56
+ name: haml
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '5.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '5.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rails
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '='
74
+ - !ruby/object:Gem::Version
75
+ version: 5.1.4
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '='
81
+ - !ruby/object:Gem::Version
82
+ version: 5.1.4
41
83
  - !ruby/object:Gem::Dependency
42
84
  name: rake
43
85
  requirement: !ruby/object:Gem::Requirement
@@ -58,64 +100,69 @@ dependencies:
58
100
  requirements:
59
101
  - - "~>"
60
102
  - !ruby/object:Gem::Version
61
- version: '3.6'
103
+ version: '3.7'
62
104
  type: :development
63
105
  prerelease: false
64
106
  version_requirements: !ruby/object:Gem::Requirement
65
107
  requirements:
66
108
  - - "~>"
67
109
  - !ruby/object:Gem::Version
68
- version: '3.6'
110
+ version: '3.7'
69
111
  - !ruby/object:Gem::Dependency
70
- name: coveralls
112
+ name: rubocop
71
113
  requirement: !ruby/object:Gem::Requirement
72
114
  requirements:
73
115
  - - "~>"
74
116
  - !ruby/object:Gem::Version
75
- version: '0.8'
117
+ version: '0.51'
76
118
  type: :development
77
119
  prerelease: false
78
120
  version_requirements: !ruby/object:Gem::Requirement
79
121
  requirements:
80
122
  - - "~>"
81
123
  - !ruby/object:Gem::Version
82
- version: '0.8'
124
+ version: '0.51'
83
125
  - !ruby/object:Gem::Dependency
84
- name: slim
126
+ name: rubocop-rspec
85
127
  requirement: !ruby/object:Gem::Requirement
86
128
  requirements:
87
129
  - - "~>"
88
130
  - !ruby/object:Gem::Version
89
- version: '3.0'
131
+ version: '1.19'
90
132
  type: :development
91
133
  prerelease: false
92
134
  version_requirements: !ruby/object:Gem::Requirement
93
135
  requirements:
94
136
  - - "~>"
95
137
  - !ruby/object:Gem::Version
96
- version: '3.0'
138
+ version: '1.19'
97
139
  - !ruby/object:Gem::Dependency
98
- name: haml
140
+ name: slim
99
141
  requirement: !ruby/object:Gem::Requirement
100
142
  requirements:
101
143
  - - "~>"
102
144
  - !ruby/object:Gem::Version
103
- version: '5.0'
145
+ version: '3.0'
104
146
  type: :development
105
147
  prerelease: false
106
148
  version_requirements: !ruby/object:Gem::Requirement
107
149
  requirements:
108
150
  - - "~>"
109
151
  - !ruby/object:Gem::Version
110
- version: '5.0'
152
+ version: '3.0'
111
153
  description: Gem for parsing wordpress style shortcodes
112
154
  email:
113
155
  - jamie@kernowsoul.com
114
- executables: []
156
+ executables:
157
+ - appraisal
158
+ - rspec
159
+ - rubocop
115
160
  extensions: []
116
161
  extra_rdoc_files: []
117
162
  files:
118
163
  - ".gitignore"
164
+ - ".rubocop"
165
+ - ".rubocop.yml"
119
166
  - ".ruby-version"
120
167
  - ".travis.yml"
121
168
  - Appraisals
@@ -125,7 +172,9 @@ files:
125
172
  - LICENSE.txt
126
173
  - README.md
127
174
  - Rakefile
128
- - gemfiles/rails_4.1.gemfile
175
+ - bin/appraisal
176
+ - bin/rspec
177
+ - bin/rubocop
129
178
  - gemfiles/rails_4.2.gemfile
130
179
  - gemfiles/rails_5.0.gemfile
131
180
  - gemfiles/rails_5.1.gemfile
@@ -141,10 +190,12 @@ files:
141
190
  - lib/shortcode/transformer.rb
142
191
  - lib/shortcode/version.rb
143
192
  - shortcode.gemspec
144
- - spec/parser_spec.rb
193
+ - spec/.rubocop.yml
145
194
  - spec/performance_spec.rb
146
- - spec/presenter_spec.rb
147
195
  - spec/rails_helpers_spec.rb
196
+ - spec/shortcode/parser_spec.rb
197
+ - spec/shortcode/presenter_spec.rb
198
+ - spec/shortcode/tag_spec.rb
148
199
  - spec/shortcode_spec.rb
149
200
  - spec/spec_helper.rb
150
201
  - spec/support/fixtures.rb
@@ -198,7 +249,6 @@ files:
198
249
  - spec/support/templates/haml/rails_helper.html.haml
199
250
  - spec/support/templates/slim/quote.html.slim
200
251
  - spec/support/templates/slim/rails_helper.html.slim
201
- - spec/tag_spec.rb
202
252
  - spec/template_parsers_spec.rb
203
253
  - spec/transformer_spec.rb
204
254
  homepage: https://github.com/kernow/shortcode
@@ -216,20 +266,22 @@ required_ruby_version: !ruby/object:Gem::Requirement
216
266
  version: '0'
217
267
  required_rubygems_version: !ruby/object:Gem::Requirement
218
268
  requirements:
219
- - - ">="
269
+ - - ">"
220
270
  - !ruby/object:Gem::Version
221
- version: '0'
271
+ version: 1.3.1
222
272
  requirements: []
223
273
  rubyforge_project:
224
- rubygems_version: 2.5.2
274
+ rubygems_version: 2.6.13
225
275
  signing_key:
226
276
  specification_version: 4
227
277
  summary: Gem for parsing wordpress style shortcodes in ruby projects
228
278
  test_files:
229
- - spec/parser_spec.rb
279
+ - spec/.rubocop.yml
230
280
  - spec/performance_spec.rb
231
- - spec/presenter_spec.rb
232
281
  - spec/rails_helpers_spec.rb
282
+ - spec/shortcode/parser_spec.rb
283
+ - spec/shortcode/presenter_spec.rb
284
+ - spec/shortcode/tag_spec.rb
233
285
  - spec/shortcode_spec.rb
234
286
  - spec/spec_helper.rb
235
287
  - spec/support/fixtures.rb
@@ -283,6 +335,5 @@ test_files:
283
335
  - spec/support/templates/haml/rails_helper.html.haml
284
336
  - spec/support/templates/slim/quote.html.slim
285
337
  - spec/support/templates/slim/rails_helper.html.slim
286
- - spec/tag_spec.rb
287
338
  - spec/template_parsers_spec.rb
288
339
  - spec/transformer_spec.rb
@@ -1,8 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "appraisal", "2.2.0"
6
- gem "rails", "~> 4.1.16"
7
-
8
- gemspec path: "../"
data/spec/parser_spec.rb DELETED
@@ -1,307 +0,0 @@
1
- require 'spec_helper'
2
- require 'parslet/rig/rspec'
3
- require 'pp'
4
-
5
- describe Shortcode::Parser do
6
- configuration = Shortcode.singleton.send(:configuration)
7
- let(:parser) { Shortcode::Parser.new(configuration) }
8
-
9
- let(:simple_quote) { load_fixture :simple_quote }
10
- let(:full_quote) { load_fixture :full_quote }
11
- let(:without_quotes) { load_fixture :without_quotes }
12
- let(:quote_with_extras) { load_fixture :quote_with_extras }
13
- let(:simple_list) { load_fixture :simple_list }
14
- let(:timeline_event) { load_fixture :timeline_event }
15
- let(:timeline_info) { load_fixture :timeline_info }
16
- let(:timeline_person) { load_fixture :timeline_person }
17
- let(:complex_snippet) { load_fixture :complex_snippet }
18
-
19
- let(:quotes) { [simple_quote, full_quote, quote_with_extras] }
20
- let(:collapsible_lists) { [simple_list] }
21
- let(:timelines) { [timeline_event, timeline_info, timeline_person] }
22
-
23
- it "parses quote shortcodes" do
24
- quotes.each do |string|
25
- expect(parser).to parse(string)
26
- end
27
- end
28
-
29
- describe "matching similar tags" do
30
-
31
- context "with the smaller tag listed first" do
32
-
33
- before do
34
- Shortcode.setup do |config|
35
- config.block_tags = [:xx, :xxx]
36
- end
37
- end
38
-
39
- it "parses xx" do
40
- expect(parser.open).to parse("[xx]")
41
- end
42
-
43
- it "parses xxx" do
44
- expect(parser.open).to parse("[xxx]")
45
- end
46
-
47
- end
48
-
49
- context "with the smaller tag listed last" do
50
-
51
- before do
52
- Shortcode.setup do |config|
53
- config.block_tags = [:xxx, :xx]
54
- end
55
- end
56
-
57
- it "parses xx" do
58
- expect(parser.open).to parse("[xx]")
59
- end
60
-
61
- it "parses xxx" do
62
- expect(parser.open).to parse("[xxx]")
63
- end
64
-
65
- end
66
-
67
- end
68
-
69
- context "attribute_quote_type configuration" do
70
-
71
- before do
72
- Shortcode.setup do |config|
73
- config.attribute_quote_type = "'"
74
- end
75
- end
76
-
77
- it "parses quotes using custom quotations" do
78
- quotes.each do |string|
79
- # Change double quotes to single quotes in the fixture
80
- expect(parser).to parse(string.gsub '"', "'")
81
- end
82
- end
83
-
84
- end
85
-
86
- context "use_attribute_quotes configuration" do
87
-
88
- before do
89
- Shortcode.setup do |config|
90
- config.use_attribute_quotes = false
91
- end
92
- end
93
-
94
- it "parses shortcodes with optional quotes" do
95
- expect(parser).to parse(without_quotes)
96
- end
97
-
98
- end
99
-
100
- it "parses list shortcodes" do
101
- collapsible_lists.each do |string|
102
- expect(parser).to parse(string)
103
- end
104
- end
105
-
106
- it "parses timeline shortcodes" do
107
- timelines.each do |string|
108
- expect(parser).to parse(string)
109
- end
110
- end
111
-
112
- it "parses complex nested shortcodes" do
113
- expect(parser).to parse(complex_snippet)
114
- end
115
-
116
- describe "parsed strings" do
117
-
118
- context "simple_quote" do
119
-
120
- let(:parsed_object) { parser.parse(simple_quote) }
121
-
122
- it "created the expected object" do
123
- expect(parsed_object[:body]).to eq([{ open: "quote", options: [], inner: [{ text: "hello" }], close: "quote" }])
124
- end
125
-
126
- end
127
-
128
- context "full_quote" do
129
-
130
- let(:parsed_object) { parser.parse(full_quote) }
131
-
132
- it "created the expected object" do
133
- expect(parsed_object[:body]).to eq([{
134
- open: "quote",
135
- options: [
136
- { key: "author", value: "Jamie Dyer" },
137
- { key: "title", value: "King of England" }
138
- ],
139
- inner: [{ text: "A quote" }],
140
- close: "quote"
141
- }])
142
- end
143
-
144
- end
145
-
146
- context "quote_with_extras" do
147
-
148
- let(:parsed_object) { parser.parse(quote_with_extras) }
149
-
150
- it "created the expected object" do
151
- expect(parsed_object[:body]).to eq([
152
- { text: "Blah blah " },
153
- {
154
- open: "quote",
155
- options: [
156
- { key: "author", value: "Jamie Dyer" }
157
- ],
158
- inner: [{ text: "A quote" }],
159
- close: "quote"
160
- },
161
- { text: " <br> blah blah\n" }
162
- ])
163
- end
164
-
165
- end
166
-
167
- context "simple_list" do
168
-
169
- let(:parsed_object) { parser.parse(simple_list) }
170
-
171
- it "created the expected object" do
172
- expect(parsed_object[:body]).to eq([{
173
- open: "collapsible_list",
174
- options: [],
175
- inner: [{
176
- open: "item",
177
- options: [{ key: "title", value: "Example title 1" }],
178
- inner: [{ text: "Example content 1" }],
179
- close: "item"
180
- },
181
- {
182
- open: "item",
183
- options: [{ key: "title", value: "Example title 2" }],
184
- inner: [{ text: "Example content 2" }],
185
- close: "item"
186
- },
187
- {
188
- open: "item",
189
- options: [{ key: "title", value: "Example title 3" }],
190
- inner: [{ text: "Example content 3" }],
191
- close: "item"
192
- }],
193
- close: "collapsible_list"
194
- }])
195
- end
196
-
197
- end
198
-
199
- context "timeline_event" do
200
-
201
- let(:parsed_object) { parser.parse(timeline_event) }
202
-
203
- it "created the expected object" do
204
- expect(parsed_object[:body]).to eq([{
205
- open_close: "timeline_event",
206
- options: [
207
- { key: "date", value: "March 2013" },
208
- { key: "title", value: "a title" },
209
- { key: "link", value: "http://blah.com" }
210
- ]
211
- }])
212
- end
213
-
214
- end
215
-
216
- context "timeline_info" do
217
-
218
- let(:parsed_object) { parser.parse(timeline_info) }
219
-
220
- it "created the expected object" do
221
- expect(parsed_object[:body]).to eq([{
222
- open_close: "timeline_info",
223
- options: [
224
- { key: "date", value: "Feb 2013" },
225
- { key: "title", value: "Something amazing" }
226
- ]
227
- }])
228
- end
229
-
230
- end
231
-
232
- context "timeline_person" do
233
-
234
- let(:parsed_object) { parser.parse(timeline_person) }
235
-
236
- it "created the expected object" do
237
- expect(parsed_object[:body]).to eq([{
238
- open: "timeline_person",
239
- options: [
240
- { key: "date", value: "Jan 2012" },
241
- { key: "title", value: "A real title" },
242
- { key: "image", value: "/images/person.jpg" },
243
- { key: "name", value: "Sam Smith" },
244
- { key: "position", value: "Presedent" },
245
- { key: "link", value: "http://blah.com" }
246
- ],
247
- inner: [{ text: "A bit of body copy\nwith a newline\n" }],
248
- close: "timeline_person"
249
- }])
250
- end
251
-
252
- end
253
-
254
- context "complex_snippet" do
255
-
256
- let(:parsed_object) { parser.parse(complex_snippet) }
257
-
258
- it "created the expected object" do
259
- expect(parsed_object[:body]).to eq([{
260
- text: "<h3>A page title</h3>\n<p>Some text</p>\n"},
261
- {
262
- open: "collapsible_list",
263
- options: [],
264
- inner: [{
265
- open: "item",
266
- options: [{ key: "title", value: "Example title 1" }],
267
- inner: [{
268
- open: "quote",
269
- options: [
270
- { key: "author", value: "Jamie Dyer" },
271
- { key: "title", value: "King of England" }
272
- ],
273
- inner: [{ text: "A quote" }],
274
- close: "quote"
275
- },
276
- { text: "I'm inbetween 2 quotes!\n " },
277
- {
278
- open: "quote",
279
- options: [
280
- { key: "author", value: "Forrest Gump" },
281
- { key: "title", value: "Idiot" }
282
- ],
283
- inner: [{text: "Life is like..."}],
284
- close: "quote"
285
- }],
286
- close: "item"
287
- },
288
- {
289
- open: "item",
290
- options: [{ key: "title", value: "Example title 2" }],
291
- inner: [{ text: "Example content 2" }],
292
- close: "item"
293
- },
294
- {
295
- open: "item",
296
- options: [{ key: "title", value: "Example title 3" }],
297
- inner: [{ text: "Example content 3" }],
298
- close: "item"
299
- }],
300
- close: "collapsible_list"
301
- },
302
- { text: "\n<p>Some more text</p>\n" }
303
- ])
304
- end
305
- end
306
- end
307
- end