snippr 0.3.0 → 0.13.1
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/.gitignore +13 -0
- data/.rspec +2 -0
- data/.travis.yml +8 -0
- data/Gemfile +4 -0
- data/README.md +143 -0
- data/Rakefile +5 -4
- data/lib/snippr.rb +14 -2
- data/lib/snippr/i18n.rb +9 -10
- data/lib/snippr/links.rb +59 -0
- data/lib/snippr/meta_data.rb +33 -0
- data/lib/snippr/normalizer.rb +18 -0
- data/lib/snippr/normalizer/camelizer.rb +18 -0
- data/lib/snippr/normalizer/de_rester.rb +25 -0
- data/lib/snippr/path.rb +27 -6
- data/lib/snippr/processor.rb +18 -0
- data/lib/snippr/processor/dynamics.rb +31 -0
- data/lib/snippr/processor/functions.rb +50 -0
- data/lib/snippr/processor/links.rb +20 -0
- data/lib/snippr/processor/wikilinks.rb +20 -0
- data/lib/snippr/snip.rb +57 -0
- data/lib/snippr/snippr.rb +41 -45
- data/lib/snippr/view_helper.rb +71 -0
- data/snippr.gemspec +30 -0
- data/spec/fixtures/a/path/aSnippet.snip +1 -0
- data/spec/fixtures/a/path/aSnippetWithParam.snip +1 -0
- data/spec/fixtures/controller/action/aSnippet.snip +1 -0
- data/spec/fixtures/empty.snip +3 -0
- data/spec/fixtures/i18n/list_de.snip +0 -0
- data/spec/fixtures/meta/broken.snip +5 -0
- data/spec/fixtures/meta/withContent.snip +5 -0
- data/spec/fixtures/meta/withContentNoNewline.snip +4 -0
- data/spec/fixtures/meta/withNoContent.snip +4 -0
- data/spec/fixtures/withUnderscore/andUnderscore/aSnippet.snip +1 -0
- data/spec/fixtures/withViewHelperMethod.snip +1 -0
- data/spec/snippr/i18n_spec.rb +30 -0
- data/spec/snippr/links_spec.rb +137 -0
- data/spec/snippr/normalizer/camelizer_spec.rb +13 -0
- data/spec/snippr/normalizer/de_rester_spec.rb +24 -0
- data/spec/snippr/normalizer_spec.rb +40 -0
- data/spec/snippr/path_spec.rb +87 -0
- data/spec/snippr/processor/dynamics_spec.rb +49 -0
- data/spec/snippr/processor/functions_spec.rb +72 -0
- data/spec/snippr/processor/links_spec.rb +12 -0
- data/spec/snippr/processor/wikilinks_spec.rb +12 -0
- data/spec/snippr/processor_spec.rb +35 -0
- data/spec/snippr/snip_spec.rb +179 -0
- data/spec/snippr/snippr_spec.rb +60 -55
- data/spec/snippr/view_helper_spec.rb +221 -0
- data/spec/spec_helper.rb +17 -3
- metadata +178 -87
- data/README.rdoc +0 -77
- data/lib/snippr/core_ext.rb +0 -12
- data/lib/snippr/helper.rb +0 -23
- data/lib/snippr/link.rb +0 -26
- data/spec/fixtures/tariff/einheit.snip +0 -1
- data/spec/fixtures/wiki.snip +0 -1
- data/spec/snippr/core_ext_spec.rb +0 -11
@@ -0,0 +1,12 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Snippr::Processor::Links do
|
4
|
+
|
5
|
+
it "should call Snippr::Links.adjust_link with the links found and return the results" do
|
6
|
+
seq = sequence 'links'
|
7
|
+
Snippr::Links.expects(:adjust_link).with('<a href="http://www.blaulabs.de" onclick="return true;">here</a>').in_sequence(seq).returns('--here--')
|
8
|
+
Snippr::Links.expects(:adjust_link).with('<A class=\'link\' href="internal.html">or here</A>').in_sequence(seq).returns('--or here--')
|
9
|
+
subject.process('click <a href="http://www.blaulabs.de" onclick="return true;">here</a> <A class=\'link\' href="internal.html">or here</A>').should == 'click --here-- --or here--'
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Snippr::Processor::Wikilinks do
|
4
|
+
|
5
|
+
it "should call Snippr::Links.adjust_link with the links found and return the results" do
|
6
|
+
seq = sequence 'wikilinks'
|
7
|
+
Snippr::Links.expects(:adjust_link).with('<a href="http://www.blaulabs.de">here</a>').in_sequence(seq).returns('--here--')
|
8
|
+
Snippr::Links.expects(:adjust_link).with('<a href="internal.html">or here</a>').in_sequence(seq).returns('--or here--')
|
9
|
+
subject.process('click [[http://www.blaulabs.de|here]] [[internal.html|or here]]').should == 'click --here-- --or here--'
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Snippr::Processor do
|
4
|
+
|
5
|
+
describe ".processors" do
|
6
|
+
|
7
|
+
it "should be an array" do
|
8
|
+
subject.processors.should be_an(Array)
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should have a set of default processors" do
|
12
|
+
processors = subject.processors
|
13
|
+
processors.size.should == 4
|
14
|
+
processors[0].should be_a(Snippr::Processor::Functions)
|
15
|
+
processors[1].should be_a(Snippr::Processor::Dynamics)
|
16
|
+
processors[2].should be_a(Snippr::Processor::Links)
|
17
|
+
processors[3].should be_a(Snippr::Processor::Wikilinks)
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
describe ".process" do
|
23
|
+
|
24
|
+
it "should call process on all processors, passing the content between them and returning the last result" do
|
25
|
+
seq = sequence 'processors'
|
26
|
+
subject.processors.each_with_index do |processor, i|
|
27
|
+
processor.should respond_to(:process)
|
28
|
+
processor.expects(:process).with(i.to_s, {'1' => '2'}).returns((i + 1).to_s).in_sequence(seq)
|
29
|
+
end
|
30
|
+
subject.process('0', {'1' => '2'}).should == subject.processors.size.to_s
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
@@ -0,0 +1,179 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
require "spec_helper"
|
3
|
+
|
4
|
+
describe Snippr::Snip do
|
5
|
+
|
6
|
+
describe "initializer" do
|
7
|
+
|
8
|
+
before do
|
9
|
+
Snippr::Path.path = 'path'
|
10
|
+
end
|
11
|
+
|
12
|
+
context "without I18n" do
|
13
|
+
|
14
|
+
before do
|
15
|
+
Snippr::I18n.enabled = false
|
16
|
+
end
|
17
|
+
|
18
|
+
it "initializes name, path and opts without opts" do
|
19
|
+
snip = Snippr::Snip.new(:path_to_snips, :file)
|
20
|
+
snip.name.should == 'pathToSnips/file'
|
21
|
+
snip.path.should == 'path/pathToSnips/file.snip'
|
22
|
+
snip.opts.should == {}
|
23
|
+
end
|
24
|
+
|
25
|
+
it "initializes name, path and opts with opts" do
|
26
|
+
snip = Snippr::Snip.new(:path_to_snips, :file, :key => :value)
|
27
|
+
snip.name.should == 'pathToSnips/file'
|
28
|
+
snip.path.should == 'path/pathToSnips/file.snip'
|
29
|
+
snip.opts.should == {:key => :value}
|
30
|
+
end
|
31
|
+
|
32
|
+
it "initializes name, path and opts with given extension" do
|
33
|
+
snip = Snippr::Snip.new(:path_to_snips, :file, :extension => :yml)
|
34
|
+
snip.name.should == "pathToSnips/file"
|
35
|
+
snip.path.should == "path/pathToSnips/file.yml"
|
36
|
+
snip.opts.should == { :extension => :yml }
|
37
|
+
end
|
38
|
+
|
39
|
+
it "initializes name, path and opts with given i18n deactivation" do
|
40
|
+
snip = Snippr::Snip.new(:path_to_snips, :file, :i18n => true)
|
41
|
+
snip.name.should == "pathToSnips/file_#{::I18n.locale}"
|
42
|
+
snip.path.should == "path/pathToSnips/file_#{::I18n.locale}.snip"
|
43
|
+
snip.opts.should == { :i18n => true }
|
44
|
+
end
|
45
|
+
|
46
|
+
it "returns no double slahes in the path for nil value" do
|
47
|
+
snip = Snippr::Snip.new(:path_to_snips, nil ,:file)
|
48
|
+
snip.name.should == 'pathToSnips/file'
|
49
|
+
snip.path.should == 'path/pathToSnips/file.snip'
|
50
|
+
end
|
51
|
+
|
52
|
+
it "returns no double slahes in the path for empty string value" do
|
53
|
+
snip = Snippr::Snip.new(:path_to_snips, "" ,:file)
|
54
|
+
snip.name.should == 'pathToSnips/file'
|
55
|
+
snip.path.should == 'path/pathToSnips/file.snip'
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
59
|
+
|
60
|
+
context "with I18n" do
|
61
|
+
|
62
|
+
before do
|
63
|
+
Snippr::I18n.enabled = true
|
64
|
+
end
|
65
|
+
|
66
|
+
it "initializes name, path and opts without opts" do
|
67
|
+
snip = Snippr::Snip.new(:path_to_snips, :file)
|
68
|
+
snip.name.should == "pathToSnips/file_#{::I18n.locale}"
|
69
|
+
snip.path.should == "path/pathToSnips/file_#{::I18n.locale}.snip"
|
70
|
+
snip.opts.should == {}
|
71
|
+
end
|
72
|
+
|
73
|
+
it "initializes name, path and opts with opts" do
|
74
|
+
snip = Snippr::Snip.new(:path_to_snips, :file, :key => :value)
|
75
|
+
snip.name.should == "pathToSnips/file_#{::I18n.locale}"
|
76
|
+
snip.path.should == "path/pathToSnips/file_#{::I18n.locale}.snip"
|
77
|
+
snip.opts.should == {:key => :value}
|
78
|
+
end
|
79
|
+
|
80
|
+
it "initializes name, path and opts with given extension" do
|
81
|
+
snip = Snippr::Snip.new(:path_to_snips, :file, :extension => :yml)
|
82
|
+
snip.name.should == "pathToSnips/file_#{::I18n.locale}"
|
83
|
+
snip.path.should == "path/pathToSnips/file_#{::I18n.locale}.yml"
|
84
|
+
snip.opts.should == { :extension => :yml }
|
85
|
+
end
|
86
|
+
|
87
|
+
it "initializes name, path and opts with given i18n deactivation" do
|
88
|
+
snip = Snippr::Snip.new(:path_to_snips, :file, :i18n => false)
|
89
|
+
snip.name.should == "pathToSnips/file"
|
90
|
+
snip.path.should == "path/pathToSnips/file.snip"
|
91
|
+
snip.opts.should == { :i18n => false }
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
|
96
|
+
end
|
97
|
+
|
98
|
+
describe "#unprocessed_content" do
|
99
|
+
|
100
|
+
it "reads an existing snip" do
|
101
|
+
Snippr::Snip.new(:home).unprocessed_content.should == '<p>Home</p>'
|
102
|
+
end
|
103
|
+
|
104
|
+
it "stores the read data instead of reading it again" do
|
105
|
+
File.expects(:read).once.returns('data')
|
106
|
+
snip = Snippr::Snip.new(:home)
|
107
|
+
snip.unprocessed_content.should == 'data'
|
108
|
+
snip.unprocessed_content.should == 'data'
|
109
|
+
end
|
110
|
+
|
111
|
+
it "returns an empty string on missing snips" do
|
112
|
+
File.expects(:read).never
|
113
|
+
Snippr::Snip.new(:doesnotexist).unprocessed_content.should == ''
|
114
|
+
end
|
115
|
+
|
116
|
+
it "strips the read content" do
|
117
|
+
Snippr::Snip.new(:empty).unprocessed_content.should == ''
|
118
|
+
end
|
119
|
+
|
120
|
+
end
|
121
|
+
|
122
|
+
[:content, :to_s].each do |method|
|
123
|
+
|
124
|
+
describe "##{method}" do
|
125
|
+
|
126
|
+
it "calls Snippr::Processor.process with opts and return decorated result" do
|
127
|
+
Snippr::Processor.expects(:process).with('<p>Home</p>', {:a => :b}).returns('processed')
|
128
|
+
Snippr::Snip.new(:home, :a => :b).send(method).should == "<!-- starting snippr: home -->\nprocessed\n<!-- closing snippr: home -->"
|
129
|
+
end
|
130
|
+
|
131
|
+
it "stores the processed data instead of processing it again" do
|
132
|
+
Snippr::Processor.expects(:process).with('<p>Home</p>', {:a => :b}).once.returns('processed')
|
133
|
+
snip = Snippr::Snip.new(:home, :a => :b)
|
134
|
+
snip.send(method).should == "<!-- starting snippr: home -->\nprocessed\n<!-- closing snippr: home -->"
|
135
|
+
snip.send(method).should == "<!-- starting snippr: home -->\nprocessed\n<!-- closing snippr: home -->"
|
136
|
+
end
|
137
|
+
|
138
|
+
it "doesn't call Snippr::Processor.process and return missing string" do
|
139
|
+
Snippr::Processor.expects(:process).never
|
140
|
+
Snippr::Snip.new(:doesnotexist, :a => :b).send(method).should == '<!-- missing snippr: doesnotexist -->'
|
141
|
+
end
|
142
|
+
|
143
|
+
end
|
144
|
+
|
145
|
+
end
|
146
|
+
|
147
|
+
describe "#missing?" do
|
148
|
+
|
149
|
+
it "returns true when the snip isn't there" do
|
150
|
+
Snippr::Snip.new(:doesnotexist).should be_missing
|
151
|
+
end
|
152
|
+
|
153
|
+
it "returns false when the snip is there but empty" do
|
154
|
+
Snippr::Snip.new(:empty).should_not be_missing
|
155
|
+
end
|
156
|
+
|
157
|
+
it "returns false when the snip is there and has content" do
|
158
|
+
Snippr::Snip.new(:home).should_not be_missing
|
159
|
+
end
|
160
|
+
|
161
|
+
end
|
162
|
+
|
163
|
+
describe "#empty?" do
|
164
|
+
|
165
|
+
it "returns true when the snip isn't there" do
|
166
|
+
Snippr::Snip.new(:doesnotexist).should be_empty
|
167
|
+
end
|
168
|
+
|
169
|
+
it "returns false when the snip is there but empty" do
|
170
|
+
Snippr::Snip.new(:empty).should be_empty
|
171
|
+
end
|
172
|
+
|
173
|
+
it "returns false when the snip is there and has content" do
|
174
|
+
Snippr::Snip.new(:home).should_not be_empty
|
175
|
+
end
|
176
|
+
|
177
|
+
end
|
178
|
+
|
179
|
+
end
|
data/spec/snippr/snippr_spec.rb
CHANGED
@@ -1,79 +1,84 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
3
|
describe Snippr do
|
4
|
-
before :all do
|
5
|
-
snippr_path = File.join File.dirname(__FILE__), "..", "fixtures"
|
6
|
-
|
7
|
-
if RUBY_PLATFORM =~ /java/
|
8
|
-
Snippr::Path::JavaLang::System.set_property Snippr::Path::JVMProperty, snippr_path
|
9
|
-
else
|
10
|
-
Snippr.path = snippr_path
|
11
|
-
end
|
12
|
-
Snippr.i18n = false
|
13
|
-
end
|
14
4
|
|
15
|
-
it "should
|
16
|
-
Snippr.
|
5
|
+
it "should delegate path to Snippr::Path.path" do
|
6
|
+
Snippr::Path.should respond_to(:path)
|
7
|
+
Snippr::Path.expects(:path).returns('path')
|
8
|
+
subject.path.should == 'path'
|
17
9
|
end
|
18
10
|
|
19
|
-
it "should
|
20
|
-
Snippr.
|
11
|
+
it "should delegate path= to Snippr::Path.path=" do
|
12
|
+
Snippr::Path.should respond_to(:path=)
|
13
|
+
Snippr::Path.expects(:path=).with('path')
|
14
|
+
subject.path = 'path'
|
21
15
|
end
|
22
16
|
|
23
|
-
it "should
|
24
|
-
Snippr.
|
17
|
+
it "should delegate i18n? to Snippr::I18n.enabled?" do
|
18
|
+
Snippr::I18n.should respond_to(:enabled?)
|
19
|
+
Snippr::I18n.expects(:enabled?).returns(true)
|
20
|
+
subject.i18n?.should == true
|
25
21
|
end
|
26
22
|
|
27
|
-
it "should
|
28
|
-
Snippr.
|
23
|
+
it "should delegate i18n= to Snippr::I18n.enabled=" do
|
24
|
+
Snippr::I18n.should respond_to(:enabled=)
|
25
|
+
Snippr::I18n.expects(:enabled=).with(true)
|
26
|
+
subject.i18n = true
|
29
27
|
end
|
30
28
|
|
31
|
-
it "should
|
32
|
-
Snippr.
|
33
|
-
|
34
|
-
|
35
|
-
"<!-- closing snippr: home -->"
|
29
|
+
it "should delegate adjust_urls_except? to Snippr::Links.adjust_urls_except" do
|
30
|
+
Snippr::Links.should respond_to(:adjust_urls_except)
|
31
|
+
Snippr::Links.expects(:adjust_urls_except).returns([1])
|
32
|
+
subject.adjust_urls_except.should == [1]
|
36
33
|
end
|
37
34
|
|
38
|
-
it "should
|
39
|
-
|
40
|
-
|
35
|
+
it "should delegate adjust_urls_except= to Snippr::Links.adjust_urls_except=" do
|
36
|
+
Snippr::Links.should respond_to(:adjust_urls_except=)
|
37
|
+
Snippr::Links.expects(:adjust_urls_except=).with([2])
|
38
|
+
subject.adjust_urls_except = [2]
|
41
39
|
end
|
42
40
|
|
43
|
-
|
44
|
-
Snippr.load(:doesnotexist).should ==
|
45
|
-
"<!-- starting snippr: doesnotexist -->\n" <<
|
46
|
-
"<samp class=\"missing snippr\" />\n" <<
|
47
|
-
"<!-- closing snippr: doesnotexist -->"
|
48
|
-
end
|
49
|
-
|
50
|
-
it "should convert wiki links to html links" do
|
51
|
-
Snippr.load(:wiki).should ==
|
52
|
-
"<!-- starting snippr: wiki -->\n" <<
|
53
|
-
"<p>Click <a href=\"http://www.blaulabs.de\">here with blanks</a>.</p>\n" <<
|
54
|
-
"<!-- closing snippr: wiki -->"
|
55
|
-
end
|
41
|
+
context "the logger" do
|
56
42
|
|
57
|
-
|
58
|
-
|
43
|
+
after do
|
44
|
+
Snippr.logger = nil
|
45
|
+
end
|
46
|
+
|
47
|
+
it "can be configured" do
|
48
|
+
Snippr.logger = :logger
|
49
|
+
Snippr.logger.should == :logger
|
50
|
+
end
|
59
51
|
|
60
|
-
it "
|
61
|
-
|
62
|
-
|
63
|
-
Snippr.load(:i18n, :shop).should ==
|
64
|
-
"<!-- starting snippr: i18n/shop_de -->\n" <<
|
65
|
-
"<p>Willkommen in unserem Shop.</p>\n" <<
|
66
|
-
"<!-- closing snippr: i18n/shop_de -->"
|
52
|
+
it "defaults to a custom logger" do
|
53
|
+
Snippr.logger.should be_a(Logger)
|
67
54
|
end
|
68
55
|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
56
|
+
context "in a Rails app" do
|
57
|
+
|
58
|
+
before do
|
59
|
+
Rails = Class.new { def self.logger; :rails_logger end }
|
60
|
+
end
|
61
|
+
|
62
|
+
after do
|
63
|
+
Object.send(:remove_const, :Rails)
|
64
|
+
end
|
65
|
+
|
66
|
+
it "uses the Rails logger" do
|
67
|
+
Snippr.logger.should == :rails_logger
|
68
|
+
end
|
69
|
+
|
76
70
|
end
|
71
|
+
|
72
|
+
end
|
73
|
+
|
74
|
+
it "should delegate load to Snippr::Snip.new" do
|
75
|
+
Snippr::Snip.expects(:new).with(:a, :b).returns('snip')
|
76
|
+
subject.load(:a, :b).should == 'snip'
|
77
|
+
end
|
78
|
+
|
79
|
+
it "should delegate list to Snippr::Path.list" do
|
80
|
+
Snippr::Path.expects(:list).with(:c, :d).returns([:snip])
|
81
|
+
subject.list(:c, :d).should == [:snip]
|
77
82
|
end
|
78
83
|
|
79
84
|
end
|
@@ -0,0 +1,221 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
require "spec_helper"
|
3
|
+
|
4
|
+
describe Snippr::ViewHelper do
|
5
|
+
include Snippr::ViewHelper
|
6
|
+
|
7
|
+
describe "snippr" do
|
8
|
+
|
9
|
+
def helper_method(param)
|
10
|
+
"wrapppppp #{param.upcase} ppppppparw"
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should allow calling of methods on a Rails view" do
|
14
|
+
snippr(:with_view_helper_method).should == "<!-- starting snippr: withViewHelperMethod -->\nwith helper *wrapppppp TEST ppppppparw*\n<!-- closing snippr: withViewHelperMethod -->"
|
15
|
+
end
|
16
|
+
|
17
|
+
context "existance check on string returned by snippr" do
|
18
|
+
|
19
|
+
context "existing snippet" do
|
20
|
+
|
21
|
+
it "returns true when calling .exists?" do
|
22
|
+
snippr(:home).exists?.should be_true
|
23
|
+
end
|
24
|
+
|
25
|
+
it "returns false when calling .missing?" do
|
26
|
+
snippr(:home).missing?.should be_false
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
context "missing snippet" do
|
32
|
+
it "returns false when calling .exists?" do
|
33
|
+
snippr(:missing).exists?.should be_false
|
34
|
+
end
|
35
|
+
|
36
|
+
it "returns true when calling .missing?" do
|
37
|
+
snippr(:missing).missing?.should be_true
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
context "snippr with meta data" do
|
44
|
+
|
45
|
+
context "and content" do
|
46
|
+
|
47
|
+
it "returns a Hash of meta information" do
|
48
|
+
snippr(:meta, :with_content).meta.should == {
|
49
|
+
"description" => "Die mit dem Fluegli",
|
50
|
+
"keywords" => "blau Mobilfunk GmbH, blau.de, blauworld, handy, sim"
|
51
|
+
}
|
52
|
+
end
|
53
|
+
|
54
|
+
it "returns a hash ofmeta information even if the YAML Fron Matter BLock ends without newline" do
|
55
|
+
snippr(:meta, :with_content_no_newline).meta.should == {
|
56
|
+
"description" => "Die mit dem Fluegli",
|
57
|
+
"keywords" => "blau Mobilfunk GmbH, blau.de, blauworld, handy, sim"
|
58
|
+
}
|
59
|
+
|
60
|
+
end
|
61
|
+
|
62
|
+
it "accepts a key to search for" do
|
63
|
+
snippr(:meta, :with_content).meta("description").should == "Die mit dem Fluegli"
|
64
|
+
end
|
65
|
+
|
66
|
+
it "returns the content without meta information" do
|
67
|
+
snippr(:meta, :with_content).to_s.should == "<!-- starting snippr: meta/withContent -->\n<p>So meta!</p>\n<!-- closing snippr: meta/withContent -->"
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
71
|
+
|
72
|
+
context "and no content" do
|
73
|
+
|
74
|
+
it "still returns a Hash of meta information" do
|
75
|
+
snippr(:meta, :with_no_content).meta.should == {
|
76
|
+
"description" => "Die mit dem Fluegli",
|
77
|
+
"keywords" => "blau Mobilfunk GmbH, blau.de, blauworld, handy, sim"
|
78
|
+
}
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
82
|
+
|
83
|
+
end
|
84
|
+
|
85
|
+
context "snippr with broken meta data" do
|
86
|
+
|
87
|
+
it "logs a warning and acts as if no meta information exist" do
|
88
|
+
Snippr.logger.expects(:warn).with do |msg|
|
89
|
+
msg =~ /Unable to extract meta data from Snip \[:meta, :broken\]/
|
90
|
+
end
|
91
|
+
|
92
|
+
snip = snippr(:meta, :broken)
|
93
|
+
snip.meta.should == {}
|
94
|
+
snip.to_s.should == "<!-- starting snippr: meta/broken -->\n<p>Broken!</p>\n<!-- closing snippr: meta/broken -->"
|
95
|
+
end
|
96
|
+
|
97
|
+
end
|
98
|
+
|
99
|
+
context "existing snippr" do
|
100
|
+
|
101
|
+
it "should call html_safe and return html safe value" do
|
102
|
+
content = snippr(:home)
|
103
|
+
content.should == "<!-- starting snippr: home -->\n<p>Home</p>\n<!-- closing snippr: home -->"
|
104
|
+
content.should be_html_safe
|
105
|
+
end
|
106
|
+
|
107
|
+
it "should pass html_safe snippr to block" do
|
108
|
+
lambda {
|
109
|
+
snippr(:home) do |snippr|
|
110
|
+
snippr.should be_html_safe
|
111
|
+
raise StandardError.new('block should be called')
|
112
|
+
end
|
113
|
+
}.should raise_error StandardError, 'block should be called'
|
114
|
+
end
|
115
|
+
|
116
|
+
it "should return 0 with block" do
|
117
|
+
snippr(:home) do; end.should == 0
|
118
|
+
end
|
119
|
+
|
120
|
+
end
|
121
|
+
|
122
|
+
context "empty snippr" do
|
123
|
+
|
124
|
+
it "should call html_safe return html save value" do
|
125
|
+
content = snippr(:empty)
|
126
|
+
content.should == "<!-- starting snippr: empty -->\n\n<!-- closing snippr: empty -->"
|
127
|
+
content.should be_html_safe
|
128
|
+
end
|
129
|
+
|
130
|
+
it "should not pass snippr to block but concat snippr and return 0" do
|
131
|
+
expects(:concat).with("<!-- starting snippr: empty -->\n\n<!-- closing snippr: empty -->")
|
132
|
+
lambda {
|
133
|
+
snippr(:empty) do
|
134
|
+
raise StandardError.new('block should not be called')
|
135
|
+
end.should == 0
|
136
|
+
}.should_not raise_error
|
137
|
+
end
|
138
|
+
|
139
|
+
end
|
140
|
+
|
141
|
+
context "missing snippr" do
|
142
|
+
|
143
|
+
it "should call html_safe return html save value" do
|
144
|
+
content = snippr(:doesnotexist)
|
145
|
+
content.should == '<!-- missing snippr: doesnotexist -->'
|
146
|
+
content.should be_html_safe
|
147
|
+
end
|
148
|
+
|
149
|
+
it "should not pass snippr to block but concat snippr and return 0" do
|
150
|
+
expects(:concat).with('<!-- missing snippr: doesnotexist -->')
|
151
|
+
lambda {
|
152
|
+
snippr(:doesnotexist) do
|
153
|
+
raise StandardError.new('block should not be called')
|
154
|
+
end.should == 0
|
155
|
+
}.should_not raise_error
|
156
|
+
end
|
157
|
+
|
158
|
+
end
|
159
|
+
|
160
|
+
end
|
161
|
+
|
162
|
+
describe "#snippr_with_path" do
|
163
|
+
|
164
|
+
context "on pages controller (special case)" do
|
165
|
+
|
166
|
+
before do
|
167
|
+
stubs(:controller_name).returns("pages")
|
168
|
+
stubs(:params).returns(:id => "a/path", :action => :view)
|
169
|
+
end
|
170
|
+
|
171
|
+
it "uses the path given in 'id' param" do
|
172
|
+
snippr_with_path(:a_snippet).should == "<!-- starting snippr: a/path/aSnippet -->\na snippet\n<!-- closing snippr: a/path/aSnippet -->"
|
173
|
+
end
|
174
|
+
|
175
|
+
it "works with a given block" do
|
176
|
+
lambda {
|
177
|
+
snippr_with_path(:a_snippet) do |snippr|
|
178
|
+
snippr.should be_html_safe
|
179
|
+
raise StandardError.new('block should be called')
|
180
|
+
end
|
181
|
+
}.should raise_error StandardError, 'block should be called'
|
182
|
+
end
|
183
|
+
|
184
|
+
it "works with parameters hash" do
|
185
|
+
snippr_with_path(:a_snippet_with_param, :param => "value").should == "<!-- starting snippr: a/path/aSnippetWithParam -->\na snippet with param value\n<!-- closing snippr: a/path/aSnippetWithParam -->"
|
186
|
+
end
|
187
|
+
|
188
|
+
end
|
189
|
+
|
190
|
+
context "on standard controllers" do
|
191
|
+
|
192
|
+
before do
|
193
|
+
stubs(:controller_name).returns("with_underscore")
|
194
|
+
stubs(:params).returns(:action => :and_underscore)
|
195
|
+
end
|
196
|
+
|
197
|
+
it "should camelize controller and action names" do
|
198
|
+
snippr_with_path(:a_snippet).should == "<!-- starting snippr: withUnderscore/andUnderscore/aSnippet -->\nan underscored snippet with param {param}\n<!-- closing snippr: withUnderscore/andUnderscore/aSnippet -->"
|
199
|
+
end
|
200
|
+
|
201
|
+
it "works with a given block" do
|
202
|
+
lambda {
|
203
|
+
snippr_with_path(:a_snippet) do |snippr|
|
204
|
+
snippr.should be_html_safe
|
205
|
+
raise StandardError.new('block should be called')
|
206
|
+
end
|
207
|
+
}.should raise_error StandardError, 'block should be called'
|
208
|
+
end
|
209
|
+
|
210
|
+
it "works with parameters hash" do
|
211
|
+
snippr_with_path(:a_snippet, :param => "value").should == "<!-- starting snippr: withUnderscore/andUnderscore/aSnippet -->\nan underscored snippet with param value\n<!-- closing snippr: withUnderscore/andUnderscore/aSnippet -->"
|
212
|
+
end
|
213
|
+
|
214
|
+
it "should allow multiple arguments" do
|
215
|
+
snippr_with_path(:deeper, :nested, :snippet).should == "<!-- missing snippr: withUnderscore/andUnderscore/deeper/nested/snippet -->"
|
216
|
+
end
|
217
|
+
end
|
218
|
+
|
219
|
+
end
|
220
|
+
|
221
|
+
end
|