deface 1.0.0.rc3 → 1.0.0.rc4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/CHANGELOG.markdown +4 -0
- data/README.markdown +9 -6
- data/deface.gemspec +2 -2
- data/lib/deface/actions/surround_action.rb +2 -2
- data/lib/deface/applicator.rb +6 -0
- data/lib/deface/parser.rb +9 -9
- data/spec/deface/applicator_spec.rb +2 -2
- data/spec/deface/dsl/context_spec.rb +2 -2
- data/spec/deface/dsl/loader_spec.rb +19 -19
- data/spec/deface/environment_spec.rb +5 -5
- data/spec/deface/override_spec.rb +26 -26
- data/spec/deface/parser_spec.rb +31 -17
- data/spec/spec_helper.rb +5 -5
- metadata +21 -38
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: a72a852dcfe7cec6de674b4596fe8cea3f350937
|
4
|
+
data.tar.gz: bf66b21acd0eb5da511d76c8c785d47cb57004ff
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 5bad01645ba75cdb71f60615ba287993c92eb5fa8b302384e9343abca8535eac8436baba79e65f72071f2f4252e35d67bb623dc13e4e4dedecb25d7312c90497
|
7
|
+
data.tar.gz: da65449721be0849dbb1cfe001af8cd591e74dc3d87e2d767d4dd302e585d15be48381a78de5643f32d2e562a780d909f5662abb088abbaac4d10baab5fea096
|
data/CHANGELOG.markdown
ADDED
@@ -0,0 +1,4 @@
|
|
1
|
+
## 1.0.0.rc4 (2013-09-04)
|
2
|
+
|
3
|
+
* [BREAKING CHANGE] ERB blocks are no longer converted into <code erb-loud|erb-silent>, now they are <erb loud|silent> [jhawthorn]
|
4
|
+
* Lots of other changes too numerous to list here in the first changelog entry, will get better going forward :)
|
data/README.markdown
CHANGED
@@ -144,7 +144,7 @@ Removes any ERB block containing the string `helper_method` in the `posts/new.ht
|
|
144
144
|
```ruby
|
145
145
|
Deface::Override.new(:virtual_path => "posts/new",
|
146
146
|
:name => "example-4",
|
147
|
-
:remove => "
|
147
|
+
:remove => "erb[loud]:contains('helper_method')",
|
148
148
|
:original => "<%= helper_method %>")
|
149
149
|
```
|
150
150
|
|
@@ -171,8 +171,8 @@ Remove an entire ERB if statement (and all it's contents) in the 'admin/products
|
|
171
171
|
```ruby
|
172
172
|
Deface::Override.new(:virtual_path => 'admin/products/index',
|
173
173
|
:name => "remove_if_statement",
|
174
|
-
:remove => "
|
175
|
-
:closing_selector => "
|
174
|
+
:remove => "erb[silent]:contains('if @product.sold?')",
|
175
|
+
:closing_selector => "erb[silent]:contains('end')"
|
176
176
|
```
|
177
177
|
|
178
178
|
### Scope
|
@@ -244,9 +244,12 @@ and including haml source:
|
|
244
244
|
You can include all the additional options you can normally use when defining a Deface::Override manually, a more complex example:
|
245
245
|
|
246
246
|
```html
|
247
|
-
<!-- replace_contents 'h1' closing_selector 'div#intro'
|
247
|
+
<!-- replace_contents 'h1' closing_selector 'div#intro'
|
248
|
+
sequence :before => 'my_other_override'
|
249
|
+
disabled -->
|
248
250
|
<p>This is a complicated example</p>
|
249
251
|
```
|
252
|
+
Note options requiring a hash should be on a separate line.
|
250
253
|
|
251
254
|
#### Disabled / Enabled
|
252
255
|
|
@@ -351,7 +354,7 @@ Deface temporarily converts ERB files into a pseudo HTML markup that can be pars
|
|
351
354
|
becomes:
|
352
355
|
|
353
356
|
```html
|
354
|
-
<
|
357
|
+
<erb loud> some ruby code </erb>
|
355
358
|
```
|
356
359
|
|
357
360
|
and
|
@@ -363,7 +366,7 @@ and
|
|
363
366
|
becomes:
|
364
367
|
|
365
368
|
```html
|
366
|
-
<
|
369
|
+
<erb silent> other ruby code </erb>
|
367
370
|
```
|
368
371
|
|
369
372
|
ERB that is contained inside a HTML tag definition is converted slightly differently to ensure a valid HTML document that Nokogiri can parse:
|
data/deface.gemspec
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = "deface"
|
3
|
-
s.version = "1.0.0.
|
3
|
+
s.version = "1.0.0.rc4"
|
4
4
|
|
5
5
|
s.authors = ["Brian D Quinn"]
|
6
6
|
s.description = "Deface is a library that allows you to customize ERB, Haml and Slim views in a Rails application without editing the underlying view."
|
7
7
|
s.email = "brian@spreecommerce.com"
|
8
8
|
s.extra_rdoc_files = [
|
9
|
-
"README.markdown"
|
9
|
+
"README.markdown", "CHANGELOG.markdown"
|
10
10
|
]
|
11
11
|
s.files = `git ls-files`.split("\n")
|
12
12
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
@@ -6,10 +6,10 @@ module Deface
|
|
6
6
|
end
|
7
7
|
|
8
8
|
def original_placeholders
|
9
|
-
@original_placeholders ||= source_element.css("
|
9
|
+
@original_placeholders ||= source_element.css("erb:contains('render_original')")
|
10
10
|
raise(DefaceError, "The surround action couldn't find <%= render_original %> in your template") unless @original_placeholders.first
|
11
11
|
@original_placeholders
|
12
12
|
end
|
13
13
|
end
|
14
14
|
end
|
15
|
-
end
|
15
|
+
end
|
data/lib/deface/applicator.rb
CHANGED
@@ -32,6 +32,12 @@ module Deface
|
|
32
32
|
|
33
33
|
if log
|
34
34
|
Rails.logger.send(matches.size == 0 ? :error : :debug, "\e[1;32mDeface:\e[0m '#{override.name}' matched #{matches.size} times with '#{override.selector}'")
|
35
|
+
|
36
|
+
# temporarily check and notify on use of old selector styles.
|
37
|
+
#
|
38
|
+
if matches.empty? && override.selector.match(/code|erb-loud|erb-silent/)
|
39
|
+
Rails.logger.error "\e[1;32mDeface: [WARNING]\e[0m Override '#{override.name}' may be using an invalid selector of '#{override.selector}', <code erb-loud|silent> tags are now <erb loud|silent>"
|
40
|
+
end
|
35
41
|
end
|
36
42
|
|
37
43
|
if matches.empty?
|
data/lib/deface/parser.rb
CHANGED
@@ -34,13 +34,13 @@ module Deface
|
|
34
34
|
end
|
35
35
|
|
36
36
|
#replaces all <% %> not inside opening html tags
|
37
|
-
replacements = [ {"<%=" => "<
|
38
|
-
{"<%" => "<
|
39
|
-
{"%>" => "</
|
37
|
+
replacements = [ {"<%=" => "<erb loud>"},
|
38
|
+
{"<%" => "<erb silent>"},
|
39
|
+
{"%>" => "</erb>"} ]
|
40
40
|
|
41
41
|
replacements.each{ |h| h.each { |replace, with| source.gsub! replace, with } }
|
42
42
|
|
43
|
-
source.scan(/(<
|
43
|
+
source.scan(/(<erb.*?>)((?:(?!<\/erb>)[\s\S])*)(<\/erb>)/).each do |match|
|
44
44
|
source.sub!("#{match[0]}#{match[1]}#{match[2]}") { |m| m = "#{match[0]}#{CGI.escapeHTML(match[1])}#{match[2]}" }
|
45
45
|
end
|
46
46
|
|
@@ -50,11 +50,11 @@ module Deface
|
|
50
50
|
# undoes ERB markup generated by Deface::Parser::ERB
|
51
51
|
#
|
52
52
|
def self.undo_erb_markup!(source)
|
53
|
-
replacements = [ {"<
|
54
|
-
{"<
|
55
|
-
{"<
|
56
|
-
{"<
|
57
|
-
{"</
|
53
|
+
replacements = [ {"<erb silent>" => '<%'},
|
54
|
+
{"<erb silent=\"\">" => '<%'},
|
55
|
+
{"<erb loud>" => '<%='},
|
56
|
+
{"<erb loud=\"\">" => '<%='},
|
57
|
+
{"</erb>" => '%>'}]
|
58
58
|
|
59
59
|
replacements.each{ |h| h.each { |replace, with| source.gsub! replace, with } }
|
60
60
|
|
@@ -31,7 +31,7 @@ module Deface
|
|
31
31
|
|
32
32
|
describe "with a single :copy using :start and :end" do
|
33
33
|
before { Deface::Override.new(:virtual_path => "posts/index", :name => "Posts#index", :insert_before => "h1",
|
34
|
-
:copy => {:start => "
|
34
|
+
:copy => {:start => "erb:contains('if true')", :end => "erb:contains('end')"}) }
|
35
35
|
let(:source) { "<h1>World</h1><% if true %><p>True that!</p><% end %><p>Hello</p>" }
|
36
36
|
|
37
37
|
|
@@ -52,7 +52,7 @@ module Deface
|
|
52
52
|
|
53
53
|
describe "with a single :cut using :start and :end" do
|
54
54
|
before { Deface::Override.new(:virtual_path => "posts/index", :name => "Posts#index", :replace => "h1",
|
55
|
-
:cut => {:start => "
|
55
|
+
:cut => {:start => "erb:contains('if true')", :end => "erb:contains('end')"}) }
|
56
56
|
let(:source) { "<h1>World</h1><% if true %><p>True that!</p><% end %><p>Hello</p>" }
|
57
57
|
|
58
58
|
|
@@ -37,7 +37,7 @@ describe Deface::DSL::Context do
|
|
37
37
|
it 'should generate a warning if two action values are specified' do
|
38
38
|
subject.insert_top('selector')
|
39
39
|
|
40
|
-
logger =
|
40
|
+
logger = double('logger')
|
41
41
|
Rails.should_receive(:logger).and_return(logger)
|
42
42
|
logger.should_receive(:error).with("\e[1;32mDeface: [WARNING]\e[0m Multiple action methods have been called. The last one will be used.")
|
43
43
|
|
@@ -67,7 +67,7 @@ describe Deface::DSL::Context do
|
|
67
67
|
it 'should generate a warning if two sources are specified' do
|
68
68
|
subject.partial('partial name')
|
69
69
|
|
70
|
-
logger =
|
70
|
+
logger = double('logger')
|
71
71
|
Rails.should_receive(:logger).and_return(logger)
|
72
72
|
logger.should_receive(:error).with("\e[1;32mDeface: [WARNING]\e[0m Multiple source methods have been called. The last one will be used.")
|
73
73
|
|
@@ -6,7 +6,7 @@ describe Deface::DSL::Loader do
|
|
6
6
|
context '.load' do
|
7
7
|
context 'extension check' do
|
8
8
|
it 'should succeed if file ends with .deface' do
|
9
|
-
file =
|
9
|
+
file = double('deface file')
|
10
10
|
filename = 'app/overrides/example_name.deface'
|
11
11
|
|
12
12
|
lambda { Deface::DSL::Loader.load(filename) }.should_not raise_error(
|
@@ -14,7 +14,7 @@ describe Deface::DSL::Loader do
|
|
14
14
|
end
|
15
15
|
|
16
16
|
it 'should succeed if file ends with .html.erb.deface' do
|
17
|
-
file =
|
17
|
+
file = double('deface file')
|
18
18
|
filename = 'app/overrides/example_name.html.erb.deface'
|
19
19
|
|
20
20
|
lambda { Deface::DSL::Loader.load(filename) }.should_not raise_error(
|
@@ -22,7 +22,7 @@ describe Deface::DSL::Loader do
|
|
22
22
|
end
|
23
23
|
|
24
24
|
it 'should succeed if file ends with .html.haml.deface' do
|
25
|
-
file =
|
25
|
+
file = double('deface file')
|
26
26
|
filename = 'app/overrides/example_name.html.haml.deface'
|
27
27
|
|
28
28
|
lambda { Deface::DSL::Loader.load(filename) }.should_not raise_error(
|
@@ -30,7 +30,7 @@ describe Deface::DSL::Loader do
|
|
30
30
|
end
|
31
31
|
|
32
32
|
it 'should succeed if file ends with .html.slim.deface' do
|
33
|
-
file =
|
33
|
+
file = double('deface file')
|
34
34
|
filename = 'app/overrides/example_name.html.slim.deface'
|
35
35
|
|
36
36
|
lambda { Deface::DSL::Loader.load(filename) }.should_not raise_error(
|
@@ -38,7 +38,7 @@ describe Deface::DSL::Loader do
|
|
38
38
|
end
|
39
39
|
|
40
40
|
it 'should fail if file ends with .blargh.deface' do
|
41
|
-
file =
|
41
|
+
file = double('deface file')
|
42
42
|
filename = 'app/overrides/example_name.blargh.deface'
|
43
43
|
|
44
44
|
lambda { Deface::DSL::Loader.load(filename) }.should raise_error(
|
@@ -46,7 +46,7 @@ describe Deface::DSL::Loader do
|
|
46
46
|
end
|
47
47
|
|
48
48
|
it "should suceed if parent directory has a dot(.) in it's name" do
|
49
|
-
file =
|
49
|
+
file = double('deface file')
|
50
50
|
filename = 'app/overrides/parent.dir.with.dot/example_name.html.haml.deface'
|
51
51
|
|
52
52
|
lambda { Deface::DSL::Loader.load(filename) }.should_not raise_error(
|
@@ -55,7 +55,7 @@ describe Deface::DSL::Loader do
|
|
55
55
|
end
|
56
56
|
|
57
57
|
it 'should fail if .html.erb.deface file is in the root of app/overrides' do
|
58
|
-
file =
|
58
|
+
file = double('html/erb/deface file')
|
59
59
|
filename = 'app/overrides/example_name.html.erb.deface'
|
60
60
|
|
61
61
|
lambda { Deface::DSL::Loader.load(filename) }.should raise_error(
|
@@ -63,16 +63,16 @@ describe Deface::DSL::Loader do
|
|
63
63
|
end
|
64
64
|
|
65
65
|
it 'should set the virtual_path for a .deface file in a directory below overrides' do
|
66
|
-
file =
|
66
|
+
file = double('deface file')
|
67
67
|
filename = 'app/overrides/path/to/view/example_name.deface'
|
68
68
|
File.should_receive(:open).with(filename).and_yield(file)
|
69
69
|
|
70
70
|
override_name = 'example_name'
|
71
|
-
context =
|
71
|
+
context = double('dsl context')
|
72
72
|
Deface::DSL::Context.should_receive(:new).with(override_name).
|
73
73
|
and_return(context)
|
74
74
|
|
75
|
-
file_contents =
|
75
|
+
file_contents = double('file contents')
|
76
76
|
file.should_receive(:read).and_return(file_contents)
|
77
77
|
|
78
78
|
context.should_receive(:virtual_path).with('path/to/view').ordered
|
@@ -83,16 +83,16 @@ describe Deface::DSL::Loader do
|
|
83
83
|
end
|
84
84
|
|
85
85
|
it 'should set the virtual_path for a .html.erb.deface file in a directory below overrides' do
|
86
|
-
file =
|
86
|
+
file = double('html/erb/deface file')
|
87
87
|
filename = 'app/overrides/path/to/view/example_name.html.erb.deface'
|
88
88
|
File.should_receive(:open).with(filename).and_yield(file)
|
89
89
|
|
90
90
|
override_name = 'example_name'
|
91
|
-
context =
|
91
|
+
context = double('dsl context')
|
92
92
|
Deface::DSL::Context.should_receive(:new).with(override_name).
|
93
93
|
and_return(context)
|
94
94
|
|
95
|
-
file_contents =
|
95
|
+
file_contents = double('file contents')
|
96
96
|
file.should_receive(:read).and_return(file_contents)
|
97
97
|
|
98
98
|
Deface::DSL::Loader.should_receive(:extract_dsl_commands_from_erb).
|
@@ -108,16 +108,16 @@ describe Deface::DSL::Loader do
|
|
108
108
|
end
|
109
109
|
|
110
110
|
it 'should set the virtual_path for a .html.haml.deface file in a directory below overrides' do
|
111
|
-
file =
|
111
|
+
file = double('html/haml/deface file')
|
112
112
|
filename = 'app/overrides/path/to/view/example_name.html.haml.deface'
|
113
113
|
File.should_receive(:open).with(filename).and_yield(file)
|
114
114
|
|
115
115
|
override_name = 'example_name'
|
116
|
-
context =
|
116
|
+
context = double('dsl context')
|
117
117
|
Deface::DSL::Context.should_receive(:new).with(override_name).
|
118
118
|
and_return(context)
|
119
119
|
|
120
|
-
file_contents =
|
120
|
+
file_contents = double('file contents')
|
121
121
|
file.should_receive(:read).and_return(file_contents)
|
122
122
|
|
123
123
|
Deface::DSL::Loader.should_receive(:extract_dsl_commands_from_haml).
|
@@ -133,16 +133,16 @@ describe Deface::DSL::Loader do
|
|
133
133
|
end
|
134
134
|
|
135
135
|
it 'should set the virtual_path for a .html.slim.deface file in a directory below overrides' do
|
136
|
-
file =
|
136
|
+
file = double('html/slim/deface file')
|
137
137
|
filename = 'app/overrides/path/to/view/example_name.html.slim.deface'
|
138
138
|
File.should_receive(:open).with(filename).and_yield(file)
|
139
139
|
|
140
140
|
override_name = 'example_name'
|
141
|
-
context =
|
141
|
+
context = double('dsl context')
|
142
142
|
Deface::DSL::Context.should_receive(:new).with(override_name).
|
143
143
|
and_return(context)
|
144
144
|
|
145
|
-
file_contents =
|
145
|
+
file_contents = double('file contents')
|
146
146
|
file.should_receive(:read).and_return(file_contents)
|
147
147
|
|
148
148
|
Deface::DSL::Loader.should_receive(:extract_dsl_commands_from_slim).
|
@@ -54,7 +54,7 @@ module Deface
|
|
54
54
|
end
|
55
55
|
|
56
56
|
it "should enumerate_and_load nil when railtie has no app/overrides path set" do
|
57
|
-
Rails.application.stub_chain :railties, railties_collection_accessor => [
|
57
|
+
Rails.application.stub_chain :railties, railties_collection_accessor => [double('railtie', :root => "/some/path")]
|
58
58
|
|
59
59
|
Rails.application.config.deface.overrides.should_receive(:enumerate_and_load).with(nil, Rails.application.root)
|
60
60
|
Rails.application.config.deface.overrides.should_receive(:enumerate_and_load).with(nil, "/some/path")
|
@@ -62,7 +62,7 @@ module Deface
|
|
62
62
|
end
|
63
63
|
|
64
64
|
it "should enumerate_and_load path when railtie has app/overrides path set" do
|
65
|
-
Rails.application.stub_chain :railties, railties_collection_accessor => [
|
65
|
+
Rails.application.stub_chain :railties, railties_collection_accessor => [ double('railtie', :root => "/some/path", :paths => {"app/overrides" => ["app/some_path"] } )]
|
66
66
|
|
67
67
|
Rails.application.config.deface.overrides.should_receive(:enumerate_and_load).with(nil, Rails.application.root)
|
68
68
|
Rails.application.config.deface.overrides.should_receive(:enumerate_and_load).with(["app/some_path"] , "/some/path")
|
@@ -70,7 +70,7 @@ module Deface
|
|
70
70
|
end
|
71
71
|
|
72
72
|
it "should enumerate_and_load railties first, followed by the application iteslf" do
|
73
|
-
Rails.application.stub_chain :railties, railties_collection_accessor => [
|
73
|
+
Rails.application.stub_chain :railties, railties_collection_accessor => [ double('railtie', :root => "/some/path", :paths => {"app/overrides" => ["app/some_path"] } )]
|
74
74
|
|
75
75
|
Rails.application.config.deface.overrides.should_receive(:enumerate_and_load).with(["app/some_path"] , "/some/path").ordered
|
76
76
|
Rails.application.config.deface.overrides.should_receive(:enumerate_and_load).with(nil, Rails.application.root).ordered
|
@@ -78,7 +78,7 @@ module Deface
|
|
78
78
|
end
|
79
79
|
|
80
80
|
it "should ignore railtie with no root" do
|
81
|
-
railtie =
|
81
|
+
railtie = double('railtie')
|
82
82
|
Rails.application.stub_chain :railties, railties_collection_accessor => [railtie]
|
83
83
|
|
84
84
|
railtie.should_receive(:respond_to?).with(:root)
|
@@ -96,7 +96,7 @@ module Deface
|
|
96
96
|
|
97
97
|
describe 'load_overrides' do
|
98
98
|
let(:assets_path) { Pathname.new(File.join(File.dirname(__FILE__), '..', "assets")) }
|
99
|
-
let(:engine) {
|
99
|
+
let(:engine) { double('railtie', :root => assets_path, :class => "DummyEngine", :paths => {"app/overrides" => ["dummy_engine"]}) }
|
100
100
|
before { Rails.application.stub(:class => 'RailsAppl') }
|
101
101
|
|
102
102
|
it "should keep a reference to which railtie/app defined the override" do
|
@@ -38,9 +38,9 @@ module Deface
|
|
38
38
|
@original.original_source.should be_an_instance_of Nokogiri::HTML::DocumentFragment
|
39
39
|
|
40
40
|
if RUBY_PLATFORM == 'java'
|
41
|
-
@original.original_source.to_s.should == "<p><
|
41
|
+
@original.original_source.to_s.should == "<p><erb loud=\"\"> something </erb></p>"
|
42
42
|
else
|
43
|
-
@original.original_source.to_s.should == "<p><
|
43
|
+
@original.original_source.to_s.should == "<p><erb loud> something </erb></p>"
|
44
44
|
end
|
45
45
|
end
|
46
46
|
end
|
@@ -64,11 +64,11 @@ module Deface
|
|
64
64
|
|
65
65
|
it "should return true when input contains similar (ignoring whitespace)" do
|
66
66
|
if RUBY_PLATFORM == 'java'
|
67
|
-
@original.validate_original("<p><
|
68
|
-
@original.validate_original("<p><
|
67
|
+
@original.validate_original("<p><erb loud=\"\"> something </erb></p>").should be_true
|
68
|
+
@original.validate_original("<p><erb loud=\"\">something\n</erb> </p>").should be_true
|
69
69
|
else
|
70
|
-
@original.validate_original("<p><
|
71
|
-
@original.validate_original("<p><
|
70
|
+
@original.validate_original("<p><erb loud> something </erb></p>").should be_true
|
71
|
+
@original.validate_original("<p><erb loud>something\n</erb> </p>").should be_true
|
72
72
|
end
|
73
73
|
end
|
74
74
|
|
@@ -117,11 +117,11 @@ module Deface
|
|
117
117
|
|
118
118
|
before(:each) do
|
119
119
|
@override = Deface::Override.new(:virtual_path => "posts/index", :name => "Posts#index", :replace => "h1",
|
120
|
-
:haml => %q{%strong{:class => "
|
120
|
+
:haml => %q{%strong{:class => "erb", :id => "message"}= 'Hello, World!'})
|
121
121
|
end
|
122
122
|
|
123
123
|
it "should return erb converted from haml as source" do
|
124
|
-
@override.source.should == "<strong class='
|
124
|
+
@override.source.should == "<strong class='erb' id='message'><%= 'Hello, World!' %>\n</strong>\n"
|
125
125
|
|
126
126
|
@override.source_argument.should == :haml
|
127
127
|
end
|
@@ -131,11 +131,11 @@ module Deface
|
|
131
131
|
|
132
132
|
before(:each) do
|
133
133
|
@override = Deface::Override.new(:virtual_path => "posts/index", :name => "Posts#index", :replace => "h1",
|
134
|
-
:slim => %q{strong class="
|
134
|
+
:slim => %q{strong class="erb" id="message"= 'Hello, World!'})
|
135
135
|
end
|
136
136
|
|
137
137
|
it "should return erb converted from slim as source" do
|
138
|
-
@override.source.should == "<strong class=\"
|
138
|
+
@override.source.should == "<strong class=\"erb\" id=\"message\"><%= ::Temple::Utils.escape_html_safe(('Hello, World!')) %><%\n%></strong>"
|
139
139
|
|
140
140
|
@override.source_argument.should == :slim
|
141
141
|
end
|
@@ -189,9 +189,9 @@ module Deface
|
|
189
189
|
@override.source
|
190
190
|
|
191
191
|
if RUBY_PLATFORM == 'java'
|
192
|
-
parsed.to_s.gsub(/\n/,'').should == "<div><h1>Manage Posts</h1><
|
192
|
+
parsed.to_s.gsub(/\n/,'').should == "<div><h1>Manage Posts</h1><erb loud=\"\"> some_method </erb></div>"
|
193
193
|
else
|
194
|
-
parsed.to_s.gsub(/\n/,'').should == "<div><h1>Manage Posts</h1><
|
194
|
+
parsed.to_s.gsub(/\n/,'').should == "<div><h1>Manage Posts</h1><erb loud> some_method </erb></div>"
|
195
195
|
end
|
196
196
|
|
197
197
|
@override.source_argument.should == :copy
|
@@ -202,7 +202,7 @@ module Deface
|
|
202
202
|
end
|
203
203
|
|
204
204
|
it "should return unescaped content for source document" do
|
205
|
-
@override = Deface::Override.new(:virtual_path => "posts/index", :name => "Posts#index", :insert_after => "h1", :copy => "
|
205
|
+
@override = Deface::Override.new(:virtual_path => "posts/index", :name => "Posts#index", :insert_after => "h1", :copy => "erb[loud]:contains('some_method')")
|
206
206
|
@override.stub(:parsed_document).and_return(parsed)
|
207
207
|
@override.source.should == "<%= some_method %>"
|
208
208
|
end
|
@@ -215,7 +215,7 @@ module Deface
|
|
215
215
|
|
216
216
|
before(:each) do
|
217
217
|
@override = Deface::Override.new(:virtual_path => "posts/index", :name => "Posts#index", :insert_after => "h1",
|
218
|
-
:copy => {:start => "
|
218
|
+
:copy => {:start => "erb:contains('if true')", :end => "erb:contains('end')"})
|
219
219
|
|
220
220
|
@override.stub(:parsed_document).and_return(parsed)
|
221
221
|
end
|
@@ -224,9 +224,9 @@ module Deface
|
|
224
224
|
@override.source
|
225
225
|
|
226
226
|
if RUBY_PLATFORM == 'java'
|
227
|
-
parsed.to_s.gsub(/\n/,'').should == "<h1>World</h1><
|
227
|
+
parsed.to_s.gsub(/\n/,'').should == "<h1>World</h1><erb silent=\"\"> if true </erb><p>True that!</p><erb silent=\"\"> end </erb><p>Hello</p>"
|
228
228
|
else
|
229
|
-
parsed.to_s.gsub(/\n/,'').should == "<h1>World</h1><
|
229
|
+
parsed.to_s.gsub(/\n/,'').should == "<h1>World</h1><erb silent> if true </erb><p>True that!</p><erb silent> end </erb><p>Hello</p>"
|
230
230
|
end
|
231
231
|
|
232
232
|
@override.source_argument.should == :copy
|
@@ -247,9 +247,9 @@ module Deface
|
|
247
247
|
it "should remove cut element from original parsed source" do
|
248
248
|
@override.source
|
249
249
|
if RUBY_PLATFORM == 'java'
|
250
|
-
parsed.to_s.gsub(/\n/,'').should == "<div><
|
250
|
+
parsed.to_s.gsub(/\n/,'').should == "<div><erb loud=\"\"> some_method </erb></div>"
|
251
251
|
else
|
252
|
-
parsed.to_s.gsub(/\n/,'').should == "<div><
|
252
|
+
parsed.to_s.gsub(/\n/,'').should == "<div><erb loud> some_method </erb></div>"
|
253
253
|
end
|
254
254
|
|
255
255
|
@override.source_argument.should == :cut
|
@@ -260,7 +260,7 @@ module Deface
|
|
260
260
|
end
|
261
261
|
|
262
262
|
it "should return unescaped content for source document" do
|
263
|
-
@override = Deface::Override.new(:virtual_path => "posts/index", :name => "Posts#index", :insert_after => "h1", :cut => "
|
263
|
+
@override = Deface::Override.new(:virtual_path => "posts/index", :name => "Posts#index", :insert_after => "h1", :cut => "erb[loud]:contains('some_method')")
|
264
264
|
@override.stub(:parsed_document).and_return(parsed)
|
265
265
|
@override.source.should == "<%= some_method %>"
|
266
266
|
end
|
@@ -274,7 +274,7 @@ module Deface
|
|
274
274
|
|
275
275
|
before(:each) do
|
276
276
|
@override = Deface::Override.new(:virtual_path => "posts/index", :name => "Posts#index", :insert_after => "h1",
|
277
|
-
:cut => {:start => "
|
277
|
+
:cut => {:start => "erb:contains('if true')", :end => "erb:contains('end')"})
|
278
278
|
|
279
279
|
@override.stub(:parsed_document).and_return(parsed)
|
280
280
|
end
|
@@ -282,9 +282,9 @@ module Deface
|
|
282
282
|
it "should remove cut element from original parsed source" do
|
283
283
|
@override.source
|
284
284
|
if RUBY_PLATFORM == 'java'
|
285
|
-
parsed.to_s.gsub(/\n/,'').should == "<h1>World</h1><
|
285
|
+
parsed.to_s.gsub(/\n/,'').should == "<h1>World</h1><erb loud=\"\"> hello </erb>"
|
286
286
|
else
|
287
|
-
parsed.to_s.gsub(/\n/,'').should == "<h1>World</h1><
|
287
|
+
parsed.to_s.gsub(/\n/,'').should == "<h1>World</h1><erb loud> hello </erb>"
|
288
288
|
end
|
289
289
|
|
290
290
|
@override.source_argument.should == :cut
|
@@ -342,12 +342,12 @@ module Deface
|
|
342
342
|
@override.source_element.should be_an_instance_of Nokogiri::HTML::DocumentFragment
|
343
343
|
|
344
344
|
if RUBY_PLATFORM == 'java'
|
345
|
-
source = "<
|
345
|
+
source = "<erb loud=\"\"> method :opt => 'x' & 'y' </erb>"
|
346
346
|
@override.source_element.to_s.should == source
|
347
347
|
#do it twice to ensure it doesn't change as it's destructive
|
348
348
|
@override.source_element.to_s.should == source
|
349
349
|
else
|
350
|
-
source = "<
|
350
|
+
source = "<erb loud> method :opt => 'x' & 'y' </erb>"
|
351
351
|
@override.source_element.to_s.should == source
|
352
352
|
#do it twice to ensure it doesn't change as it's destructive
|
353
353
|
@override.source_element.to_s.should == source
|
@@ -497,7 +497,7 @@ module Deface
|
|
497
497
|
Deface::Override.all.clear
|
498
498
|
|
499
499
|
@override = Deface::Override.new(:virtual_path => "posts/index", :name => "Posts#index", :replace => "h1", :text => "<h1>Argh!</h1>")
|
500
|
-
@second = Deface::Override.new(:virtual_path => "posts/index", :name => "second", :insert_after => "p", :text => "<pre>this is
|
500
|
+
@second = Deface::Override.new(:virtual_path => "posts/index", :name => "second", :insert_after => "p", :text => "<pre>this is erb?</pre>")
|
501
501
|
|
502
502
|
@digest = Deface::Override.digest(:virtual_path => "posts/index")
|
503
503
|
end
|
@@ -513,7 +513,7 @@ module Deface
|
|
513
513
|
@override = Deface::Override.new(:virtual_path => "posts/index", :name => "Posts#index", :replace => "h1", :text => "<h1>Argh!</h1>")
|
514
514
|
Deface::Override.digest(:virtual_path => "posts/index").should == @digest
|
515
515
|
|
516
|
-
@second = Deface::Override.new(:virtual_path => "posts/index", :name => "2nd", :insert_after => "p", :text => "<pre>this is
|
516
|
+
@second = Deface::Override.new(:virtual_path => "posts/index", :name => "2nd", :insert_after => "p", :text => "<pre>this is erb?</pre>")
|
517
517
|
Deface::Override.digest(:virtual_path => "posts/index").should_not == @digest
|
518
518
|
end
|
519
519
|
|
data/spec/deface/parser_spec.rb
CHANGED
@@ -58,6 +58,20 @@ module Deface
|
|
58
58
|
end
|
59
59
|
end
|
60
60
|
|
61
|
+
# Regression test for #84, #100
|
62
|
+
it "should parse html document with erb in the head" do
|
63
|
+
parsed = Deface::Parser.convert("<html><head><%= method_name %></head><body></body></html>")
|
64
|
+
parsed.should be_an_instance_of(Nokogiri::HTML::Document)
|
65
|
+
parsed = parsed.to_s.split("\n")
|
66
|
+
|
67
|
+
if RUBY_PLATFORM == 'java'
|
68
|
+
parsed.should == ["<html><head><erb loud=\"\"> method_name </erb></head><body></body></html>"]
|
69
|
+
else
|
70
|
+
parsed = parsed[1..-1]
|
71
|
+
parsed.should == "<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n<erb loud> method_name </erb>\n</head>\n<body></body>\n</html>".split("\n")
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
61
75
|
it "should parse body tag" do
|
62
76
|
tag = Deface::Parser.convert("<body id=\"body\" <%= something %>>test</body>")
|
63
77
|
tag.should be_an_instance_of(Nokogiri::XML::Element)
|
@@ -68,14 +82,14 @@ module Deface
|
|
68
82
|
|
69
83
|
it "should convert <% ... %>" do
|
70
84
|
tag = Deface::Parser.convert("<% method_name %>")
|
71
|
-
tag = tag.css('
|
72
|
-
tag.attributes['
|
85
|
+
tag = tag.css('erb').first
|
86
|
+
tag.attributes['silent'].value.should eq ''
|
73
87
|
end
|
74
88
|
|
75
89
|
it "should convert <%= ... %>" do
|
76
90
|
tag = Deface::Parser.convert("<%= method_name %>")
|
77
|
-
tag = tag.css('
|
78
|
-
tag.attributes['
|
91
|
+
tag = tag.css('erb').first
|
92
|
+
tag.attributes['loud'].value.should eq ''
|
79
93
|
end
|
80
94
|
|
81
95
|
it "should convert first <% ... %> inside html tag" do
|
@@ -129,23 +143,23 @@ module Deface
|
|
129
143
|
tag.text.should eq 'A Link'
|
130
144
|
end
|
131
145
|
|
132
|
-
it "should escape contents
|
146
|
+
it "should escape contents erb tags" do
|
133
147
|
tag = Deface::Parser.convert("<% method_name :key => 'value' %>")
|
134
|
-
tag = tag.css('
|
135
|
-
tag.attributes.key?('
|
148
|
+
tag = tag.css('erb').first
|
149
|
+
tag.attributes.key?('silent').should be_true
|
136
150
|
tag.text.should eq " method_name :key => 'value' "
|
137
151
|
end
|
138
152
|
|
139
|
-
it "should handle round brackets in
|
153
|
+
it "should handle round brackets in erb tags" do
|
140
154
|
# commented out line below will fail as : adjacent to ( causes Nokogiri parser issue on jruby
|
141
155
|
tag = Deface::Parser.convert("<% method_name(:key => 'value') %>")
|
142
|
-
tag = tag.css('
|
143
|
-
tag.attributes.key?('
|
156
|
+
tag = tag.css('erb').first
|
157
|
+
tag.attributes.key?('silent').should be_true
|
144
158
|
tag.text.should eq " method_name(:key => 'value') "
|
145
159
|
|
146
160
|
tag = Deface::Parser.convert("<% method_name( :key => 'value' ) %>")
|
147
|
-
tag = tag.css('
|
148
|
-
tag.attributes.key?('
|
161
|
+
tag = tag.css('erb').first
|
162
|
+
tag.attributes.key?('silent').should be_true
|
149
163
|
tag.text.should eq " method_name( :key => 'value' ) "
|
150
164
|
end
|
151
165
|
|
@@ -169,12 +183,12 @@ module Deface
|
|
169
183
|
end
|
170
184
|
|
171
185
|
describe "#undo_erb_markup" do
|
172
|
-
it "should revert <
|
173
|
-
Deface::Parser.undo_erb_markup!("<
|
186
|
+
it "should revert <erb silent>" do
|
187
|
+
Deface::Parser.undo_erb_markup!("<erb silent> method_name </erb>").should == "<% method_name %>"
|
174
188
|
end
|
175
189
|
|
176
|
-
it "should revert <
|
177
|
-
Deface::Parser.undo_erb_markup!("<
|
190
|
+
it "should revert <erb loud>" do
|
191
|
+
Deface::Parser.undo_erb_markup!("<erb loud> method_name </erb>").should == "<%= method_name %>"
|
178
192
|
end
|
179
193
|
|
180
194
|
it "should revert data-erb-x attrs inside html tag" do
|
@@ -195,7 +209,7 @@ module Deface
|
|
195
209
|
end
|
196
210
|
end
|
197
211
|
|
198
|
-
it "should unescape contents of
|
212
|
+
it "should unescape contents of erb tags" do
|
199
213
|
Deface::Parser.undo_erb_markup!("<% method(:key => 'value' %>").should == "<% method(:key => 'value' %>"
|
200
214
|
Deface::Parser.undo_erb_markup!("<% method(:key => 'value'\n %>").should == "<% method(:key => 'value'\n %>"
|
201
215
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -44,13 +44,13 @@ shared_context "mock Rails" do
|
|
44
44
|
|
45
45
|
# mock rails to keep specs FAST!
|
46
46
|
unless defined? Rails
|
47
|
-
Rails =
|
47
|
+
Rails = double 'Rails'
|
48
48
|
end
|
49
49
|
|
50
50
|
Rails.stub :version => rails_version
|
51
51
|
|
52
|
-
Rails.stub :application =>
|
53
|
-
Rails.application.stub :config =>
|
52
|
+
Rails.stub :application => double('application')
|
53
|
+
Rails.application.stub :config => double('config')
|
54
54
|
Rails.application.config.stub :cache_classes => true
|
55
55
|
Rails.application.config.stub :deface => ActiveSupport::OrderedOptions.new
|
56
56
|
Rails.application.config.deface.enabled = true
|
@@ -61,13 +61,13 @@ shared_context "mock Rails" do
|
|
61
61
|
|
62
62
|
Rails.stub :root => Pathname.new('spec/dummy')
|
63
63
|
|
64
|
-
Rails.stub :logger =>
|
64
|
+
Rails.stub :logger => double('logger')
|
65
65
|
Rails.logger.stub(:error)
|
66
66
|
Rails.logger.stub(:warning)
|
67
67
|
Rails.logger.stub(:info)
|
68
68
|
Rails.logger.stub(:debug)
|
69
69
|
|
70
|
-
Time.stub :zone =>
|
70
|
+
Time.stub :zone => double('zone')
|
71
71
|
Time.zone.stub(:now).and_return Time.parse('1979-05-25')
|
72
72
|
|
73
73
|
require "haml/template/plugin"
|
metadata
CHANGED
@@ -1,20 +1,18 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: deface
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.0.
|
5
|
-
prerelease: 6
|
4
|
+
version: 1.0.0.rc4
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Brian D Quinn
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2013-
|
11
|
+
date: 2013-09-04 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: nokogiri
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
17
|
- - ~>
|
20
18
|
- !ruby/object:Gem::Version
|
@@ -22,7 +20,6 @@ dependencies:
|
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
24
|
- - ~>
|
28
25
|
- !ruby/object:Gem::Version
|
@@ -30,103 +27,90 @@ dependencies:
|
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: rails
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - '>='
|
36
32
|
- !ruby/object:Gem::Version
|
37
33
|
version: '3.1'
|
38
34
|
type: :runtime
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - '>='
|
44
39
|
- !ruby/object:Gem::Version
|
45
40
|
version: '3.1'
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: colorize
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
|
-
- -
|
45
|
+
- - '>='
|
52
46
|
- !ruby/object:Gem::Version
|
53
47
|
version: 0.5.8
|
54
48
|
type: :runtime
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
|
-
- -
|
52
|
+
- - '>='
|
60
53
|
- !ruby/object:Gem::Version
|
61
54
|
version: 0.5.8
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: rspec
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
|
-
- -
|
59
|
+
- - '>='
|
68
60
|
- !ruby/object:Gem::Version
|
69
61
|
version: 2.11.0
|
70
62
|
type: :development
|
71
63
|
prerelease: false
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
65
|
requirements:
|
75
|
-
- -
|
66
|
+
- - '>='
|
76
67
|
- !ruby/object:Gem::Version
|
77
68
|
version: 2.11.0
|
78
69
|
- !ruby/object:Gem::Dependency
|
79
70
|
name: haml
|
80
71
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
72
|
requirements:
|
83
|
-
- -
|
73
|
+
- - '>='
|
84
74
|
- !ruby/object:Gem::Version
|
85
75
|
version: 3.1.4
|
86
76
|
type: :development
|
87
77
|
prerelease: false
|
88
78
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
79
|
requirements:
|
91
|
-
- -
|
80
|
+
- - '>='
|
92
81
|
- !ruby/object:Gem::Version
|
93
82
|
version: 3.1.4
|
94
83
|
- !ruby/object:Gem::Dependency
|
95
84
|
name: slim
|
96
85
|
requirement: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
86
|
requirements:
|
99
|
-
- -
|
87
|
+
- - '>='
|
100
88
|
- !ruby/object:Gem::Version
|
101
89
|
version: 2.0.0
|
102
90
|
type: :development
|
103
91
|
prerelease: false
|
104
92
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
93
|
requirements:
|
107
|
-
- -
|
94
|
+
- - '>='
|
108
95
|
- !ruby/object:Gem::Version
|
109
96
|
version: 2.0.0
|
110
97
|
- !ruby/object:Gem::Dependency
|
111
98
|
name: simplecov
|
112
99
|
requirement: !ruby/object:Gem::Requirement
|
113
|
-
none: false
|
114
100
|
requirements:
|
115
|
-
- -
|
101
|
+
- - '>='
|
116
102
|
- !ruby/object:Gem::Version
|
117
103
|
version: 0.6.4
|
118
104
|
type: :development
|
119
105
|
prerelease: false
|
120
106
|
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
none: false
|
122
107
|
requirements:
|
123
|
-
- -
|
108
|
+
- - '>='
|
124
109
|
- !ruby/object:Gem::Version
|
125
110
|
version: 0.6.4
|
126
111
|
- !ruby/object:Gem::Dependency
|
127
112
|
name: generator_spec
|
128
113
|
requirement: !ruby/object:Gem::Requirement
|
129
|
-
none: false
|
130
114
|
requirements:
|
131
115
|
- - ~>
|
132
116
|
- !ruby/object:Gem::Version
|
@@ -134,7 +118,6 @@ dependencies:
|
|
134
118
|
type: :development
|
135
119
|
prerelease: false
|
136
120
|
version_requirements: !ruby/object:Gem::Requirement
|
137
|
-
none: false
|
138
121
|
requirements:
|
139
122
|
- - ~>
|
140
123
|
- !ruby/object:Gem::Version
|
@@ -146,10 +129,12 @@ executables: []
|
|
146
129
|
extensions: []
|
147
130
|
extra_rdoc_files:
|
148
131
|
- README.markdown
|
132
|
+
- CHANGELOG.markdown
|
149
133
|
files:
|
150
134
|
- .gitignore
|
151
135
|
- .rspec
|
152
136
|
- .travis.yml
|
137
|
+
- CHANGELOG.markdown
|
153
138
|
- Gemfile
|
154
139
|
- MIT-LICENSE
|
155
140
|
- README.markdown
|
@@ -249,28 +234,27 @@ files:
|
|
249
234
|
- tasks/utils.rake
|
250
235
|
homepage: https://github.com/spree/deface
|
251
236
|
licenses: []
|
237
|
+
metadata: {}
|
252
238
|
post_install_message:
|
253
239
|
rdoc_options:
|
254
240
|
- --charset=UTF-8
|
255
241
|
require_paths:
|
256
242
|
- lib
|
257
243
|
required_ruby_version: !ruby/object:Gem::Requirement
|
258
|
-
none: false
|
259
244
|
requirements:
|
260
|
-
- -
|
245
|
+
- - '>='
|
261
246
|
- !ruby/object:Gem::Version
|
262
247
|
version: '0'
|
263
248
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
264
|
-
none: false
|
265
249
|
requirements:
|
266
|
-
- -
|
250
|
+
- - '>'
|
267
251
|
- !ruby/object:Gem::Version
|
268
252
|
version: 1.3.1
|
269
253
|
requirements: []
|
270
254
|
rubyforge_project:
|
271
|
-
rubygems_version:
|
255
|
+
rubygems_version: 2.0.3
|
272
256
|
signing_key:
|
273
|
-
specification_version:
|
257
|
+
specification_version: 4
|
274
258
|
summary: Deface is a library that allows you to customize ERB, Haml and Slim views
|
275
259
|
in Rails
|
276
260
|
test_files:
|
@@ -311,4 +295,3 @@ test_files:
|
|
311
295
|
- spec/deface/utils/failure_finder_spec.rb
|
312
296
|
- spec/generators/deface/override_generator_spec.rb
|
313
297
|
- spec/spec_helper.rb
|
314
|
-
has_rdoc:
|