shortcode 1.2.1 → 2.0.0.pre

Sign up to get free protection for your applications and to get access to all the features.
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