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
@@ -1,126 +0,0 @@
1
- require 'spec_helper'
2
- require 'parslet/rig/rspec'
3
- require 'pp'
4
-
5
- require 'support/presenters/my_presenter'
6
- require 'support/presenters/other_presenter'
7
- require 'support/presenters/multiple_presenter'
8
- require 'support/presenters/missing_for_presenter'
9
- require 'support/presenters/missing_initialize_presenter'
10
- require 'support/presenters/missing_content_presenter'
11
- require 'support/presenters/missing_attributes_presenter'
12
-
13
- describe Shortcode::Presenter do
14
-
15
- let(:configuration) { Shortcode.singleton.send(:configuration) }
16
- let(:simple_quote) { load_fixture :simple_quote }
17
- let(:item) { load_fixture :item }
18
-
19
- describe "using a custom presenter" do
20
-
21
- let(:presenter_output) { load_fixture :simple_quote_presenter_output, :html }
22
- let(:attributes_output) { load_fixture :simple_quote_presenter_attributes_output, :html }
23
-
24
- before do
25
- Shortcode.register_presenter MyPresenter
26
- end
27
-
28
- it "uses the custom attributes" do
29
- expect(Shortcode.process(simple_quote).gsub("\n",'')).to eq(presenter_output)
30
- end
31
-
32
- it "passes through additional attributes" do
33
- expect(Shortcode.process(simple_quote, { title: 'Additional attribute title' }).gsub("\n",'')).to eq(attributes_output)
34
- end
35
-
36
- end
37
-
38
- describe "using a single presenter for multiple shortcodes" do
39
- let(:quote_presenter_output) { load_fixture :simple_quote_presenter_output, :html }
40
- let(:item_presenter_output) { load_fixture :item_presenter_output, :html }
41
-
42
- let(:quote_attributes_output) { load_fixture :simple_quote_presenter_attributes_output, :html }
43
- let(:item_attributes_output) { load_fixture :item_presenter_attributes_output, :html }
44
-
45
- before do
46
- Shortcode.register_presenter MultiplePresenter
47
- end
48
-
49
- it "uses the custom attributes" do
50
- expect(Shortcode.process(simple_quote ).gsub("\n",'')).to eq(quote_presenter_output)
51
- expect(Shortcode.process(item ).gsub("\n",'')).to eq(item_presenter_output)
52
- end
53
-
54
- it "passes through additional attributes" do
55
- expect(Shortcode.process(simple_quote, { title: 'Additional attribute title' }).gsub("\n",'')).to eq(quote_attributes_output)
56
- expect(Shortcode.process(item, { title: 'Additional attribute title' }).gsub("\n",'')).to eq(item_attributes_output)
57
- end
58
-
59
- end
60
-
61
- context "presenter registration" do
62
-
63
- describe "registering a single presenter" do
64
-
65
- before do
66
- Shortcode.register_presenter MyPresenter
67
- end
68
-
69
- it "adds the presenter to the list" do
70
- expect(configuration.presenters).to include(MyPresenter.for)
71
- end
72
-
73
- end
74
-
75
- describe "registering multiple presenters" do
76
-
77
- before do
78
- Shortcode.register_presenter(MyPresenter, OtherPresenter)
79
- end
80
-
81
- it "adds the presenter to the list" do
82
- expect(configuration.presenters).to include(MyPresenter.for)
83
- expect(configuration.presenters).to include(OtherPresenter.for)
84
- end
85
-
86
- end
87
-
88
- end
89
-
90
- context "presenter validation" do
91
-
92
- describe "missing #for class method" do
93
-
94
- it "raises an exception" do
95
- expect { Shortcode.register_presenter MissingForPresenter }.to raise_error(ArgumentError, "The presenter must define the class method #for")
96
- end
97
-
98
- end
99
-
100
- describe "missing #initialize method" do
101
-
102
- it "raises an exception" do
103
- expect { Shortcode.register_presenter MissingInitializePresenter }.to raise_error(ArgumentError, "The presenter must define an initialize method")
104
- end
105
-
106
- end
107
-
108
- describe "missing #content method" do
109
-
110
- it "raises an exception" do
111
- expect { Shortcode.register_presenter MissingContentPresenter }.to raise_error(ArgumentError, "The presenter must define the method #content")
112
- end
113
-
114
- end
115
-
116
- describe "missing #attributes method" do
117
-
118
- it "raises an exception" do
119
- expect { Shortcode.register_presenter MissingAttributesPresenter }.to raise_error(ArgumentError, "The presenter must define the method #attributes")
120
- end
121
-
122
- end
123
-
124
- end
125
-
126
- end
data/spec/tag_spec.rb DELETED
@@ -1,86 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Shortcode::Tag do
4
- let(:configuration) { Shortcode.singleton.send(:configuration) }
5
-
6
- context "when the template file is missing" do
7
-
8
- let(:tag) { Shortcode::Tag.new('doesnt_exist', configuration) }
9
-
10
- it "raises a TemplateNotFound error when the file doesn't exists" do
11
- expect { tag.render }.to raise_error(Shortcode::TemplateNotFound)
12
- end
13
-
14
- end
15
-
16
- context "when an unsupported template parser is specified" do
17
-
18
- let(:tag) { Shortcode::Tag.new('quote', configuration) }
19
-
20
- before(:each) do
21
- Shortcode.setup do |config|
22
- config.template_parser = :something_crazy
23
- end
24
- end
25
-
26
- it "raises a TemplateNotFound error when the file doesn't exists" do
27
- expect { tag.render }.to raise_error(Shortcode::TemplateParserNotSupported)
28
- end
29
-
30
- end
31
-
32
- context "templates from strings" do
33
-
34
- let(:tag) { Shortcode::Tag.new('from_string', configuration, [{ key: 'string', value: 'batman' }]) }
35
-
36
- before(:each) do
37
- Shortcode.setup do |config|
38
- config.templates = {
39
- from_string: '<p><%= @attributes[:string] %></p>'
40
- }
41
- end
42
- end
43
-
44
- it "renders a template from a string" do
45
- expect(tag.render).to eq('<p>batman</p>')
46
- end
47
-
48
- end
49
-
50
- context "when the template is missing from the config" do
51
-
52
- let(:tag) { Shortcode::Tag.new('missing', configuration, [{ key: 'string', value: 'batman' }]) }
53
-
54
- before(:each) do
55
- Shortcode.setup do |config|
56
- config.templates = {
57
- from_string: '<p><%= @attributes[:string] %></p>'
58
- }
59
- end
60
- end
61
-
62
- it "raises an error" do
63
- expect { tag.render }.to raise_error(Shortcode::TemplateNotFound)
64
- end
65
-
66
- end
67
-
68
- context "when templates exist both in configuration and file system" do
69
- let(:tag) { Shortcode::Tag.new('quote', configuration ) }
70
-
71
- before(:each) do
72
- configuration.templates[:quote] = '<p><%= @content %></p>'
73
- end
74
-
75
- it 'uses the configuration template when check_config_templates_first is true' do
76
- expect(tag.markup).to eq('<p><%= @content %></p>')
77
- end
78
-
79
- it 'uses the file system template when check_config_templates_first is false' do
80
- configuration.check_config_templates_first = false
81
-
82
- expect(tag.markup).to eq(File.open('spec/support/templates/erb/quote.html.erb').read)
83
- end
84
- end
85
-
86
- end