deface 0.7.1 → 0.7.2

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/.travis.yml ADDED
@@ -0,0 +1,6 @@
1
+ script: "bundle exec rake"
2
+ rvm:
3
+ - 1.8.7
4
+ - 1.9.2
5
+ - 1.9.3
6
+ - ree
data/README.markdown CHANGED
@@ -99,6 +99,14 @@ Replaces all instances of `h1` in the `posts/_form.html.erb` partial with `<h1>N
99
99
  :replace => "h1",
100
100
  :text => "<h1>New Post</h1>")
101
101
 
102
+ Alternatively pass it a block of code to run:
103
+
104
+ Deface::Override.new(:virtual_path => "posts/_form",
105
+ :name => "example-1",
106
+ :replace => "h1") do
107
+ "<h1>New Post</h1>"
108
+ end
109
+
102
110
  Inserts `<%= link_to "List Comments", comments_url(post) %>` before all instances of `p` with css class `comment` in `posts/index.html.erb`
103
111
 
104
112
  Deface::Override.new(:virtual_path => "posts/index",
data/deface.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "deface"
3
- s.version = "0.7.1"
3
+ s.version = "0.7.2"
4
4
 
5
5
  s.authors = ["Brian D Quinn"]
6
6
  s.description = "Deface is a library that allows you to customize ERB views in a Rails application without editing the underlying view."
@@ -60,7 +60,7 @@ module Deface
60
60
  # :sequence => {:after => "override_name") - the current override will be applied after the named override passed.
61
61
  # * <tt>:attributes</tt> - A hash containing all the attributes to be set on the matched elements, eg: :attributes => {:class => "green", :title => "some string"}
62
62
  #
63
- def initialize(args)
63
+ def initialize(args, &content)
64
64
  unless Rails.application.try(:config).respond_to?(:deface) and Rails.application.try(:config).deface.try(:overrides)
65
65
  @@_early << args
66
66
  warn "[WARNING] Deface railtie has not initialized yet, override '#{args[:name]}' is being declared too early."
@@ -70,6 +70,8 @@ module Deface
70
70
  raise(ArgumentError, ":name must be defined") unless args.key? :name
71
71
  raise(ArgumentError, ":virtual_path must be defined") if args[:virtual_path].blank?
72
72
 
73
+ args[:text] = content.call if block_given?
74
+
73
75
  virtual_key = args[:virtual_path].to_sym
74
76
  name_key = args[:name].to_s.parameterize
75
77
 
@@ -336,7 +338,7 @@ module Deface
336
338
  virtual_path = details[:virtual_path]
337
339
  return [] if virtual_path.nil?
338
340
 
339
- virtual_path = virtual_path[1..-1] if virtual_path.first == '/'
341
+ virtual_path = virtual_path.gsub(/^\//, '')
340
342
 
341
343
  result = []
342
344
  result << self.all[virtual_path.to_sym].try(:values)
data/lib/deface/parser.rb CHANGED
@@ -74,6 +74,21 @@ module Deface
74
74
  end
75
75
 
76
76
  def self.convert(source)
77
+ if source.encoding_aware?
78
+ # Look for # encoding: *. If we find one, we'll encode the
79
+ # String in that encoding, otherwise, we'll use the
80
+ # default external encoding.
81
+ encoding = source.scan(/#{ActionView::Template::Handlers::ERB.const_get(:ENCODING_TAG)}/).first.try(:last) || Encoding.default_external
82
+
83
+ # Tag the source with the default external encoding
84
+ # or the encoding specified in the file
85
+ source.force_encoding(encoding)
86
+
87
+ unless source.valid_encoding?
88
+ raise ActionView::WrongEncodingError.new(source, encoding)
89
+ end
90
+ end
91
+
77
92
  erb_markup!(source)
78
93
 
79
94
  if source =~ /<html.*?(?:(?!>)[\s\S])*>/
@@ -16,7 +16,7 @@ module Deface
16
16
 
17
17
  config.to_prepare &method(:activate).to_proc
18
18
 
19
- # configures basic deface environment, with gets replaced
19
+ # configures basic deface environment, which gets replaced
20
20
  # with real environment if deface is not disabled
21
21
  #
22
22
  initializer "deface.add_configuration", :before => :load_environment_config do |app|
@@ -118,6 +118,21 @@ module Deface
118
118
 
119
119
  end
120
120
 
121
+ describe "with block" do
122
+ before(:each) do
123
+ #stub view paths to be local spec/assets directory
124
+ ActionController::Base.stub(:view_paths).and_return([File.join(File.dirname(__FILE__), '..', "assets")])
125
+
126
+ @override = Deface::Override.new(:virtual_path => "posts/index", :name => "Posts#index", :replace => "h1") do
127
+ "This is replacement text for the h1"
128
+ end
129
+ end
130
+
131
+ it "should set source to block content" do
132
+ @override.source.should == "This is replacement text for the h1"
133
+ end
134
+ end
135
+
121
136
  describe "#source_element" do
122
137
  before(:each) do
123
138
  @override = Deface::Override.new(:virtual_path => "posts/index", :name => "Posts#index", :replace => "h1", :text => "<%= method :opt => 'x' & 'y' %>")
@@ -1,3 +1,5 @@
1
+ # encoding: UTF-8
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  module Deface
@@ -19,7 +21,7 @@ module Deface
19
21
  if RUBY_VERSION < "1.9"
20
22
  parsed.should == "<html>\n<head><title>Hello</title></head>\n<body>test</body>\n</html>".split("\n")
21
23
  else
22
- parsed.should == "<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=US-ASCII\">\n<title>Hello</title>\n</head>\n<body>test</body>\n</html>".split("\n")
24
+ 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")
23
25
  end
24
26
 
25
27
  parsed = Deface::Parser.convert("<html><title>test</title></html>")
@@ -28,7 +30,7 @@ module Deface
28
30
  if RUBY_VERSION < "1.9"
29
31
  parsed.should == ["<html><head><title>test</title></head></html>"]
30
32
  else
31
- parsed.should == "<html><head>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=US-ASCII\">\n<title>test</title>\n</head></html>".split("\n")
33
+ 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")
32
34
  end
33
35
 
34
36
  parsed = Deface::Parser.convert("<html><p>test</p></html>")
@@ -84,6 +86,27 @@ module Deface
84
86
  it "should escape contents code tags" do
85
87
  Deface::Parser.convert("<% method_name(:key => 'value') %>").to_s.should == "<code erb-silent> method_name(:key =&gt; 'value') </code>"
86
88
  end
89
+
90
+ if "".encoding_aware?
91
+ it "should respect valid encoding tag" do
92
+ source = %q{<%# encoding: ISO-8859-1 %>Can you say ümlaut?}
93
+ Deface::Parser.convert(source)
94
+ source.encoding.name.should == 'ISO-8859-1'
95
+ end
96
+
97
+ it "should force default encoding" do
98
+ source = %q{Can you say ümlaut?}
99
+ source.force_encoding('ISO-8859-1')
100
+ Deface::Parser.convert(source)
101
+ source.encoding.should == Encoding.default_external
102
+ end
103
+
104
+ it "should force default encoding" do
105
+ source = %q{<%# encoding: US-ASCII %>Can you say ümlaut?}
106
+ lambda { Deface::Parser.convert(source) }.should raise_error(ActionView::WrongEncodingError)
107
+ end
108
+ end
109
+
87
110
  end
88
111
 
89
112
  describe "#undo_erb_markup" do
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: deface
3
3
  version: !ruby/object:Gem::Version
4
- hash: 1
4
+ hash: 7
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 7
9
- - 1
10
- version: 0.7.1
9
+ - 2
10
+ version: 0.7.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - Brian D Quinn
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-10-27 00:00:00 Z
18
+ date: 2011-11-28 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: nokogiri
@@ -75,6 +75,7 @@ extra_rdoc_files:
75
75
  - README.markdown
76
76
  files:
77
77
  - .gitignore
78
+ - .travis.yml
78
79
  - Gemfile
79
80
  - MIT-LICENSE
80
81
  - README.markdown