deface 1.0.0.rc1 → 1.0.0.rc2

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.
@@ -3,7 +3,15 @@ rvm:
3
3
  - 1.8.7
4
4
  - 1.9.2
5
5
  - 1.9.3
6
+ - 2.0.0
7
+ - jruby-18mode
8
+ - jruby-19mode
6
9
  gemfile:
7
10
  - gemfiles/rails3_1.gemfile
8
11
  - gemfiles/rails3_2.gemfile
9
- - gemfiles/haml3_2.gemfile
12
+ - gemfiles/haml4_0.gemfile
13
+
14
+ notifications:
15
+ email:
16
+ - brian@spreecommerce.com
17
+ - ryan@spreecommerce.com
data/Gemfile CHANGED
@@ -1,3 +1,4 @@
1
- source :rubygems
1
+ source 'https://rubygems.org'
2
2
 
3
3
  gemspec
4
+
@@ -1,6 +1,6 @@
1
1
  <p style="float:right;">
2
- <a href="http://travis-ci.org/#!/railsdog/deface">
3
- <img src="http://travis-ci.org/railsdog/deface.png">
2
+ <a href="http://secure.travis-ci.org/spree/deface">
3
+ <img src="https://secure.travis-ci.org/spree/deface.png?branch=master">
4
4
  </a>
5
5
  </p>
6
6
 
@@ -185,9 +185,9 @@ You can redefine an existing override by simply declaring a new override with th
185
185
  You do not need to resupply all the values originally used, just the ones you want to change:
186
186
 
187
187
  ```ruby
188
- Deface::Override.new(:virtual_path => 'posts/index',
189
- :name => 'add_attrs_to_a_link',
190
- :disabled => true)
188
+ Deface::Override.new(:virtual_path => 'posts/index',
189
+ :name => 'add_attrs_to_a_link',
190
+ :disabled => true)
191
191
  ```
192
192
 
193
193
  ### Namespacing
@@ -196,9 +196,9 @@ If you want to avoid inadvertently redefining overrides in other engines, you ca
196
196
  an override automatically be namespaced to the engine in which it was defined:
197
197
 
198
198
  ```ruby
199
- Deface::Override.new(:virtual_path => 'posts/index',
200
- :name => 'add_link',
201
- :namespaced => true)
199
+ Deface::Override.new(:virtual_path => 'posts/index',
200
+ :name => 'add_link',
201
+ :namespaced => true)
202
202
  ```
203
203
 
204
204
  So for example if the above override was defined in `MyEngine` it would be automatically named `my_engine_add_link`.
@@ -327,7 +327,9 @@ Deface now supports precompiling where all overrides are loaded and applied to t
327
327
 
328
328
  It's important to disable Deface once precompiling is used to prevent overrides getting applied twice. To disable add the following line to your application's `production.rb` file:
329
329
 
330
- config.deface.enabled = false
330
+ ```ruby
331
+ config.deface.enabled = false
332
+ ```
331
333
 
332
334
  NOTE: You can also use precompiling in development mode.
333
335
 
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "deface"
3
- s.version = "1.0.0.rc1"
3
+ s.version = "1.0.0.rc2"
4
4
 
5
5
  s.authors = ["Brian D Quinn"]
6
6
  s.description = "Deface is a library that allows you to customize ERB & HAML views in a Rails application without editing the underlying view."
@@ -15,11 +15,12 @@ Gem::Specification.new do |s|
15
15
  s.require_paths = ["lib"]
16
16
  s.summary = "Deface is a library that allows you to customize ERB & HAML views in Rails"
17
17
 
18
- s.add_dependency('nokogiri', '~> 1.5.0')
18
+ s.add_dependency('nokogiri', '~> 1.5.9')
19
19
  s.add_dependency('rails', '~> 3.1')
20
20
  s.add_dependency('colorize', '>= 0.5.8')
21
21
 
22
22
  s.add_development_dependency('rspec', '>= 2.11.0')
23
23
  s.add_development_dependency('haml', '>= 3.1.4')
24
24
  s.add_development_dependency('simplecov', '>= 0.6.4')
25
+ s.add_development_dependency('generator_spec', '~> 0.8.5')
25
26
  end
@@ -0,0 +1,5 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'haml', '~> 4.0.0'
4
+
5
+ gemspec :path=>"../"
@@ -1,5 +1,5 @@
1
- source :rubygems
1
+ source 'https://rubygems.org'
2
2
 
3
3
  gem "rails", "~> 3.1.0"
4
4
 
5
- gemspec :path=>"../"
5
+ gemspec :path=>"../"
@@ -1,5 +1,5 @@
1
- source :rubygems
1
+ source 'https://rubygems.org'
2
2
 
3
3
  gem "rails", "~> 3.2.0"
4
4
 
5
- gemspec :path=>"../"
5
+ gemspec :path=>"../"
@@ -34,6 +34,7 @@ require "deface/actions/remove_from_attributes"
34
34
  require "deface/matchers/element"
35
35
  require "deface/matchers/range"
36
36
  require "deface/environment"
37
+ require "deface/precompiler"
37
38
  require "colorize"
38
39
 
39
40
  module Deface
@@ -7,7 +7,7 @@ module Deface
7
7
  overrides = find(details)
8
8
 
9
9
  if log && overrides.size > 0
10
- Rails.logger.info "\e[1;32mDeface:\e[0m #{overrides.size} overrides found for '#{details[:virtual_path]}'"
10
+ Rails.logger.debug "\e[1;32mDeface:\e[0m #{overrides.size} overrides found for '#{details[:virtual_path]}'"
11
11
  end
12
12
 
13
13
  unless overrides.empty?
@@ -20,7 +20,7 @@ module Deface
20
20
 
21
21
  overrides.each do |override|
22
22
  if override.disabled?
23
- Rails.logger.info("\e[1;32mDeface:\e[0m '#{override.name}' is disabled") if log
23
+ Rails.logger.debug("\e[1;32mDeface:\e[0m '#{override.name}' is disabled") if log
24
24
  next
25
25
  end
26
26
 
@@ -28,7 +28,7 @@ module Deface
28
28
  matches = override.matcher.matches(doc, log)
29
29
 
30
30
  if log
31
- Rails.logger.send(matches.size == 0 ? :error : :info, "\e[1;32mDeface:\e[0m '#{override.name}' matched #{matches.size} times with '#{override.selector}'")
31
+ Rails.logger.send(matches.size == 0 ? :error : :debug, "\e[1;32mDeface:\e[0m '#{override.name}' matched #{matches.size} times with '#{override.selector}'")
32
32
  end
33
33
 
34
34
  if matches.empty?
@@ -62,7 +62,8 @@ module Deface
62
62
  end
63
63
 
64
64
  comment.gsub('<!--', '').gsub('-->', '').strip.scan(/[^\s"']+|"[^"]*"|'[^']*'/).each do |part|
65
- dsl_commands =~ /('|")\z/ || part =~ /\w\z/ ? dsl_commands << "\n" : dsl_commands << ' '
65
+
66
+ dsl_commands =~ /('|")\z/ || part =~ /\A[^\d:='"%]/ ? dsl_commands << "\n" : dsl_commands << ' '
66
67
  dsl_commands << part
67
68
  end
68
69
 
File without changes
@@ -24,7 +24,6 @@ module Deface
24
24
  replace_line
25
25
  end
26
26
 
27
-
28
27
  i = -1
29
28
  #catch all <% %> inside tags id <p <%= test %>> , not inside attrs
30
29
  replace_line.scan(/(<%.*?%>)/m).each do |match|
@@ -51,9 +50,11 @@ module Deface
51
50
  # undoes ERB markup generated by Deface::Parser::ERB
52
51
  #
53
52
  def self.undo_erb_markup!(source)
54
- replacements = [ {"<code erb-silent>" => '<%'},
55
- {"<code erb-loud>" => '<%='},
56
- {"</code>" => '%>'}]
53
+ replacements = [ {"<code erb-silent>" => '<%'},
54
+ {"<code erb-silent=\"\">" => '<%'},
55
+ {"<code erb-loud>" => '<%='},
56
+ {"<code erb-loud=\"\">" => '<%='},
57
+ {"</code>" => '%>'}]
57
58
 
58
59
  replacements.each{ |h| h.each { |replace, with| source.gsub! replace, with } }
59
60
 
@@ -0,0 +1,33 @@
1
+ module Deface
2
+ class Precompiler
3
+
4
+ extend Deface::TemplateHelper
5
+
6
+ def self.precompile
7
+ base_path = Rails.root.join("app/compiled_views")
8
+ # temporarily configures deface env and loads
9
+ # all overrides so we can precompile
10
+ unless Rails.application.config.deface.enabled
11
+ Rails.application.config.deface = Deface::Environment.new
12
+ Rails.application.config.deface.overrides.early_check
13
+ Rails.application.config.deface.overrides.load_all Rails.application
14
+ end
15
+
16
+ Rails.application.config.deface.overrides.all.each do |virtual_path,overrides|
17
+ template_path = base_path.join( "#{virtual_path}.html.erb")
18
+
19
+ FileUtils.mkdir_p template_path.dirname
20
+ begin
21
+ source = load_template_source(virtual_path.to_s, false, true)
22
+ if source.blank?
23
+ raise "Compiled source was blank for '#{virtual_path}'"
24
+ end
25
+ File.open(template_path, 'w') {|f| f.write source }
26
+ rescue Exception => e
27
+ puts "Unable to precompile '#{virtual_path}' due to: "
28
+ puts e.message
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -1,7 +1,7 @@
1
1
  module Deface
2
2
  module TemplateHelper
3
3
 
4
- # used to find source for a partial or template using virutal_path
4
+ # used to find source for a partial or template using virtual_path
5
5
  def load_template_source(virtual_path, partial, apply_overrides=true)
6
6
  parts = virtual_path.split("/")
7
7
  prefix = []
@@ -0,0 +1,8 @@
1
+ Description:
2
+ Generate a deface override
3
+
4
+ Example:
5
+ rails generate deface:override posts/_post add_headline
6
+
7
+ This will create:
8
+ app/overrides/posts/_post/add_headline.html.{erb|haml}.deface
@@ -0,0 +1,16 @@
1
+ module Deface
2
+ module Generators
3
+ class OverrideGenerator < Rails::Generators::Base
4
+ desc "Generates deface overrides"
5
+ source_root File.expand_path("../templates", __FILE__)
6
+ class_option :template_engine, :desc => 'Template engine to be invoked (erb or haml).'
7
+ argument :view, :type => :string
8
+ argument :name, :type => :string, :default => 'override'
9
+
10
+ def copy_template
11
+ engine = options[:template_engine]
12
+ copy_file "override.html.#{engine}.deface", "app/overrides/#{view}/#{name}.html.#{engine}.deface"
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,2 @@
1
+ <!-- insert_after 'h1' -->
2
+ <h2>These robots are awesome.</h2>
@@ -0,0 +1,3 @@
1
+ /
2
+ insert_after 'h1'
3
+ %h2 These robots are awesome.
@@ -0,0 +1,2 @@
1
+ <!-- insert_bottom 'li' -->
2
+ Added to li!
@@ -0,0 +1,2 @@
1
+ <p>I'm from shared/precompileme template</p>
2
+ <%= "I've got ERB too" %>
@@ -54,7 +54,10 @@ module Deface
54
54
  let(:source) { "<div><img class=\"<%= hello_moon %>\" src=\"path/to/button.png\"></div>" }
55
55
 
56
56
  it "should return modified source" do
57
- Dummy.apply(source, {:virtual_path => "posts/index"}).gsub("\n", "").should == "<div><img src=\"path/to/button.png\" class=\"<%= hello_world %>\"></div>"
57
+ tag = Nokogiri::HTML::DocumentFragment.parse(Dummy.apply(source, {:virtual_path => "posts/index"}).gsub("\n", ""))
58
+ tag = tag.css('img').first
59
+ tag.attributes['src'].value.should eq "path/to/button.png"
60
+ tag.attributes['class'].value.should eq "<%= hello_world %>"
58
61
  end
59
62
  end
60
63
  end
@@ -53,7 +53,7 @@ describe Deface::DSL::Loader do
53
53
  lambda { Deface::DSL::Loader.load(filename) }.should raise_error(
54
54
  "Deface::DSL overrides must be in a sub-directory that matches the views virtual path. Move 'app/overrides/example_name.html.erb.deface' into a sub-directory.")
55
55
  end
56
-
56
+
57
57
  it 'should set the virtual_path for a .deface file in a directory below overrides' do
58
58
  file = mock('deface file')
59
59
  filename = 'app/overrides/path/to/view/example_name.deface'
@@ -177,6 +177,26 @@ describe Deface::DSL::Loader do
177
177
  the_rest.should == "<h1>Wow!</h1>"
178
178
  end
179
179
 
180
+ it 'should work with multiple commands on one line when command argument is not a normal string' do
181
+ example = %q{<!-- replace_contents 'h1 .title' closing_selector %q{div#intro} disabled namespaced --><h1>Wow!</h1>}
182
+ dsl_commands, the_rest = Deface::DSL::Loader.extract_dsl_commands_from_erb(example)
183
+ dsl_commands.should == "\nreplace_contents 'h1 .title'\nclosing_selector %q{div#intro}\ndisabled\nnamespaced"
184
+ the_rest.should == "<h1>Wow!</h1>"
185
+ end
186
+
187
+ it 'should work with multiple commands on one line when command argument is an integer' do
188
+ example = %q{<!-- replace_contents 'h1 .title' disabled sequence 2 namespaced --><h1>Wow!</h1>}
189
+ dsl_commands, the_rest = Deface::DSL::Loader.extract_dsl_commands_from_erb(example)
190
+ dsl_commands.should == "\nreplace_contents 'h1 .title'\ndisabled\nsequence 2\nnamespaced"
191
+ the_rest.should == "<h1>Wow!</h1>"
192
+ end
193
+
194
+ it 'should work with multiple commands on one line when command argument is a hash' do
195
+ example = %q{<!-- add_to_attributes 'h1 .title' attributes :class => 'pretty'--><h1>Wow!</h1>}
196
+ dsl_commands, the_rest = Deface::DSL::Loader.extract_dsl_commands_from_erb(example)
197
+ dsl_commands.should == "\nadd_to_attributes 'h1 .title'\nattributes :class => 'pretty'"
198
+ the_rest.should == "<h1>Wow!</h1>"
199
+ end
180
200
  end
181
201
 
182
202
  context '.extract_dsl_commands_from_haml' do
@@ -202,4 +222,4 @@ describe Deface::DSL::Loader do
202
222
  end
203
223
 
204
224
  end
205
- end
225
+ end
@@ -36,7 +36,12 @@ module Deface
36
36
  it "should return parsed nokogiri document when present" do
37
37
  @original = Deface::Override.new(:virtual_path => "posts/index", :name => "Posts#index", :replace => "h1", :text => "<h1>Argh!</h1>", :original => "<p><%= something %></p>")
38
38
  @original.original_source.should be_an_instance_of Nokogiri::HTML::DocumentFragment
39
- @original.original_source.to_s.should == "<p><code erb-loud> something </code></p>"
39
+
40
+ if RUBY_PLATFORM == 'java'
41
+ @original.original_source.to_s.should == "<p><code erb-loud=\"\"> something </code></p>"
42
+ else
43
+ @original.original_source.to_s.should == "<p><code erb-loud> something </code></p>"
44
+ end
40
45
  end
41
46
  end
42
47
 
@@ -58,8 +63,13 @@ module Deface
58
63
  end
59
64
 
60
65
  it "should return true when input contains similar (ignoring whitespace)" do
61
- @original.validate_original("<p><code erb-loud> something </code></p>").should be_true
62
- @original.validate_original("<p><code erb-loud>something\n</code> </p>").should be_true
66
+ if RUBY_PLATFORM == 'java'
67
+ @original.validate_original("<p><code erb-loud=\"\"> something </code></p>").should be_true
68
+ @original.validate_original("<p><code erb-loud=\"\">something\n</code> </p>").should be_true
69
+ else
70
+ @original.validate_original("<p><code erb-loud> something </code></p>").should be_true
71
+ @original.validate_original("<p><code erb-loud>something\n</code> </p>").should be_true
72
+ end
63
73
  end
64
74
 
65
75
  it "should return false when and input contains different string" do
@@ -163,13 +173,18 @@ module Deface
163
173
 
164
174
  it "should not change original parsed source" do
165
175
  @override.source
166
- parsed.to_s.gsub(/\n/,'').should == "<div><h1>Manage Posts</h1><code erb-loud> some_method </code></div>"
176
+
177
+ if RUBY_PLATFORM == 'java'
178
+ parsed.to_s.gsub(/\n/,'').should == "<div><h1>Manage Posts</h1><code erb-loud=\"\"> some_method </code></div>"
179
+ else
180
+ parsed.to_s.gsub(/\n/,'').should == "<div><h1>Manage Posts</h1><code erb-loud> some_method </code></div>"
181
+ end
167
182
 
168
183
  @override.source_argument.should == :copy
169
184
  end
170
185
 
171
186
  it "should return copy of content from source document" do
172
- @override.source.should == "<h1>Manage Posts</h1>\n"
187
+ @override.source.to_s.strip.should == "<h1>Manage Posts</h1>"
173
188
  end
174
189
 
175
190
  it "should return unescaped content for source document" do
@@ -193,7 +208,12 @@ module Deface
193
208
 
194
209
  it "should not change original parsed source" do
195
210
  @override.source
196
- parsed.to_s.gsub(/\n/,'').should == "<h1>World</h1><code erb-silent> if true </code><p>True that!</p><code erb-silent> end </code><p>Hello</p>"
211
+
212
+ if RUBY_PLATFORM == 'java'
213
+ parsed.to_s.gsub(/\n/,'').should == "<h1>World</h1><code erb-silent=\"\"> if true </code><p>True that!</p><code erb-silent=\"\"> end </code><p>Hello</p>"
214
+ else
215
+ parsed.to_s.gsub(/\n/,'').should == "<h1>World</h1><code erb-silent> if true </code><p>True that!</p><code erb-silent> end </code><p>Hello</p>"
216
+ end
197
217
 
198
218
  @override.source_argument.should == :copy
199
219
  end
@@ -212,7 +232,11 @@ module Deface
212
232
 
213
233
  it "should remove cut element from original parsed source" do
214
234
  @override.source
215
- parsed.to_s.gsub(/\n/,'').should == "<div><code erb-loud> some_method </code></div>"
235
+ if RUBY_PLATFORM == 'java'
236
+ parsed.to_s.gsub(/\n/,'').should == "<div><code erb-loud=\"\"> some_method </code></div>"
237
+ else
238
+ parsed.to_s.gsub(/\n/,'').should == "<div><code erb-loud> some_method </code></div>"
239
+ end
216
240
 
217
241
  @override.source_argument.should == :cut
218
242
  end
@@ -243,7 +267,11 @@ module Deface
243
267
 
244
268
  it "should remove cut element from original parsed source" do
245
269
  @override.source
246
- parsed.to_s.gsub(/\n/,'').should == "<h1>World</h1><code erb-loud> hello </code>"
270
+ if RUBY_PLATFORM == 'java'
271
+ parsed.to_s.gsub(/\n/,'').should == "<h1>World</h1><code erb-loud=\"\"> hello </code>"
272
+ else
273
+ parsed.to_s.gsub(/\n/,'').should == "<h1>World</h1><code erb-loud> hello </code>"
274
+ end
247
275
 
248
276
  @override.source_argument.should == :cut
249
277
  end
@@ -298,9 +326,18 @@ module Deface
298
326
 
299
327
  it "should return escaped source" do
300
328
  @override.source_element.should be_an_instance_of Nokogiri::HTML::DocumentFragment
301
- @override.source_element.to_s.should == "<code erb-loud> method :opt =&gt; 'x' &amp; 'y' </code>"
302
- #do it twice to ensure it doesn't change as it's destructive
303
- @override.source_element.to_s.should == "<code erb-loud> method :opt =&gt; 'x' &amp; 'y' </code>"
329
+
330
+ if RUBY_PLATFORM == 'java'
331
+ source = "<code erb-loud=\"\"> method :opt =&gt; 'x' &amp; 'y' </code>"
332
+ @override.source_element.to_s.should == source
333
+ #do it twice to ensure it doesn't change as it's destructive
334
+ @override.source_element.to_s.should == source
335
+ else
336
+ source = "<code erb-loud> method :opt =&gt; 'x' &amp; 'y' </code>"
337
+ @override.source_element.to_s.should == source
338
+ #do it twice to ensure it doesn't change as it's destructive
339
+ @override.source_element.to_s.should == source
340
+ end
304
341
  end
305
342
  end
306
343
 
@@ -16,9 +16,16 @@ module Deface
16
16
  it "should parse html document" do
17
17
  parsed = Deface::Parser.convert("<html><head><title>Hello</title></head><body>test</body>")
18
18
  parsed.should be_an_instance_of(Nokogiri::HTML::Document)
19
- parsed = parsed.to_s.split("\n")[1..-1] #ignore doctype added by noko
19
+ parsed = parsed.to_s.split("\n")
20
20
 
21
- if RUBY_VERSION < "1.9"
21
+ unless RUBY_PLATFORM == 'java'
22
+ parsed = parsed[1..-1] #ignore doctype added by nokogiri
23
+ end
24
+
25
+ #accounting for qwerks in Nokogir between ruby versions / platforms
26
+ if RUBY_PLATFORM == 'java'
27
+ parsed.should == ["<html><head><title>Hello</title></head><body>test</body></html>"]
28
+ elsif RUBY_VERSION < "1.9"
22
29
  parsed.should == "<html>\n<head><title>Hello</title></head>\n<body>test</body>\n</html>".split("\n")
23
30
  else
24
31
  parsed.should == "<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n<title>Hello</title>\n</head>\n<body>test</body>\n</html>".split("\n")
@@ -26,8 +33,14 @@ module Deface
26
33
 
27
34
  parsed = Deface::Parser.convert("<html><title>test</title></html>")
28
35
  parsed.should be_an_instance_of(Nokogiri::HTML::Document)
29
- parsed = parsed.to_s.split("\n")[1..-1] #ignore doctype added by noko
30
- if RUBY_VERSION < "1.9"
36
+ parsed = parsed.to_s.split("\n")
37
+
38
+ unless RUBY_PLATFORM == 'java'
39
+ parsed = parsed[1..-1] #ignore doctype added by nokogiri
40
+ end
41
+
42
+ #accounting for qwerks in Nokogir between ruby versions / platforms
43
+ if RUBY_VERSION < "1.9" || RUBY_PLATFORM == 'java'
31
44
  parsed.should == ["<html><head><title>test</title></head></html>"]
32
45
  else
33
46
  parsed.should == "<html><head>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n<title>test</title>\n</head></html>".split("\n")
@@ -35,22 +48,34 @@ module Deface
35
48
 
36
49
  parsed = Deface::Parser.convert("<html><p>test</p></html>")
37
50
  parsed.should be_an_instance_of(Nokogiri::HTML::Document)
38
- parsed = parsed.to_s.split("\n")[1..-1] #ignore doctype added by noko
39
- parsed.should == "<html><body><p>test</p></body></html>".split("\n")
51
+ parsed = parsed.to_s.split("\n")
52
+
53
+ if RUBY_PLATFORM == 'java'
54
+ parsed.should eq ["<html><head></head><body><p>test</p></body></html>"]
55
+ else
56
+ parsed = parsed[1..-1]
57
+ parsed.should eq ["<html><body><p>test</p></body></html>"]
58
+ end
40
59
  end
41
60
 
42
61
  it "should parse body tag" do
43
- parsed = Deface::Parser.convert("<body id=\"body\" <%= something %>>test</body>")
44
- parsed.should be_an_instance_of(Nokogiri::XML::Element)
45
- parsed.to_s.should == "<body id=\"body\" data-erb-0=\"&lt;%= something %&gt;\">test</body>"
62
+ tag = Deface::Parser.convert("<body id=\"body\" <%= something %>>test</body>")
63
+ tag.should be_an_instance_of(Nokogiri::XML::Element)
64
+ tag.text.should eq 'test'
65
+ tag.attributes['id'].value.should eq 'body'
66
+ tag.attributes['data-erb-0'].value.should eq '<%= something %>'
46
67
  end
47
68
 
48
69
  it "should convert <% ... %>" do
49
- Deface::Parser.convert("<% method_name %>").to_s.should == "<code erb-silent> method_name </code>"
70
+ tag = Deface::Parser.convert("<% method_name %>")
71
+ tag = tag.css('code').first
72
+ tag.attributes['erb-silent'].value.should eq ''
50
73
  end
51
74
 
52
75
  it "should convert <%= ... %>" do
53
- Deface::Parser.convert("<%= method_name %>").to_s.should == "<code erb-loud> method_name </code>"
76
+ tag = Deface::Parser.convert("<%= method_name %>")
77
+ tag = tag.css('code').first
78
+ tag.attributes['erb-loud'].value.should eq ''
54
79
  end
55
80
 
56
81
  it "should convert first <% ... %> inside html tag" do
@@ -70,21 +95,52 @@ module Deface
70
95
  end
71
96
 
72
97
  it "should convert <% ... %> inside non-quoted attr value" do
73
- Deface::Parser.convert("<p id=<% method_name %>></p>").to_s.should == "<p data-erb-id=\"&lt;% method_name %&gt;\"></p>"
74
- Deface::Parser.convert("<p id=<% method_name %> alt=\"test\"></p>").to_s.should == "<p data-erb-id=\"&lt;% method_name %&gt;\" alt=\"test\"></p>"
98
+ tag = Deface::Parser.convert("<p id=<% method_name %>></p>")
99
+ tag = tag.css('p').first
100
+ tag.attributes['data-erb-id'].value.should eq '<% method_name %>'
101
+
102
+ tag = Deface::Parser.convert("<p id=<% method_name %> alt=\"test\"></p>")
103
+ tag = tag.css('p').first
104
+ tag.attributes['data-erb-id'].value.should eq '<% method_name %>'
105
+ tag.attributes['alt'].value.should eq 'test'
75
106
  end
76
107
 
77
108
  it "should convert multiple <% ... %> inside html tag" do
78
- Deface::Parser.convert(%q{<p <%= method_name %> alt="<% x = 'y' +
79
- \"2\" %>" title='<% method_name %>' <%= other_method %></p>}).to_s.should == "<p data-erb-0=\"&lt;%= method_name %&gt;\" data-erb-alt=\"&lt;% x = 'y' + \n \\&quot;2\\&quot; %&gt;\" data-erb-title=\"&lt;% method_name %&gt;\" data-erb-1=\"&lt;%= other_method %&gt;\"></p>"
109
+ tag = Deface::Parser.convert(%q{<p <%= method_name %> alt="<% x = 'y' +
110
+ \"2\" %>" title='<% method_name %>' <%= other_method %></p>})
111
+
112
+ tag = tag.css('p').first
113
+ tag.attributes['data-erb-0'].value.should == "<%= method_name %>"
114
+ tag.attributes['data-erb-1'].value.should == "<%= other_method %>"
115
+ tag.attributes['data-erb-alt'].value.should == "<% x = 'y' + \n \\\"2\\\" %>"
116
+ tag.attributes['data-erb-title'].value.should == "<% method_name %>"
80
117
  end
81
118
 
82
119
  it "should convert <%= ... %> including href attribute" do
83
- Deface::Parser.convert(%(<a href="<%= x 'y' + "z" %>">A Link</a>)).to_s.should == "<a data-erb-href=\"&lt;%= x 'y' + &quot;z&quot; %&gt;\">A Link</a>"
120
+ tag = Deface::Parser.convert(%(<a href="<%= x 'y' + "z" %>">A Link</a>))
121
+ tag = tag.css('a').first
122
+ tag.attributes['data-erb-href'].value.should eq "<%= x 'y' + \"z\" %>"
123
+ tag.text.should eq 'A Link'
84
124
  end
85
125
 
86
126
  it "should escape contents code tags" do
87
- Deface::Parser.convert("<% method_name(:key => 'value') %>").to_s.should == "<code erb-silent> method_name(:key =&gt; 'value') </code>"
127
+ tag = Deface::Parser.convert("<% method_name :key => 'value' %>")
128
+ tag = tag.css('code').first
129
+ tag.attributes.key?('erb-silent').should be_true
130
+ tag.text.should eq " method_name :key => 'value' "
131
+ end
132
+
133
+ it "should handle round brackets in code tags" do
134
+ # commented out line below will fail as : adjacent to ( causes Nokogiri parser issue on jruby
135
+ tag = Deface::Parser.convert("<% method_name(:key => 'value') %>")
136
+ tag = tag.css('code').first
137
+ tag.attributes.key?('erb-silent').should be_true
138
+ tag.text.should eq " method_name(:key => 'value') "
139
+
140
+ tag = Deface::Parser.convert("<% method_name( :key => 'value' ) %>")
141
+ tag = tag.css('code').first
142
+ tag.attributes.key?('erb-silent').should be_true
143
+ tag.text.should eq " method_name( :key => 'value' ) "
88
144
  end
89
145
 
90
146
  if "".encoding_aware?