deface 0.2.0 → 0.3.0

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.
@@ -0,0 +1,3 @@
1
+ *.swp
2
+ .DS_Store
3
+ pkg
@@ -5,39 +5,20 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{deface}
8
- s.version = "0.2.0"
8
+ s.version = "0.3.0"
9
9
 
10
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
10
  s.authors = ["Brian Quinn"]
12
- s.date = %q{2010-08-31}
13
11
  s.description = %q{Deface is a library that allows you to customize ERB views in a Rails application without editing the underlying view.}
14
12
  s.email = %q{brian@railsdog.com}
15
13
  s.extra_rdoc_files = [
16
14
  "README.markdown"
17
15
  ]
18
- s.files = [
19
- "MIT-LICENSE",
20
- "README.markdown",
21
- "Rakefile",
22
- "VERSION",
23
- "deface.gemspec",
24
- "init.rb",
25
- "lib/deface.rb",
26
- "lib/deface/action_view_extensions.rb",
27
- "lib/deface/override.rb",
28
- "lib/deface/parser.rb"
29
- ]
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
30
18
  s.homepage = %q{http://github.com/BDQ/Deface}
31
19
  s.rdoc_options = ["--charset=UTF-8"]
32
20
  s.require_paths = ["lib"]
33
- s.rubygems_version = %q{1.3.7}
34
21
  s.summary = %q{Deface is a library that allows you to customize ERB views in Rails}
35
- s.test_files = [
36
- "spec/deface/override_spec.rb",
37
- "spec/deface/parser_spec.rb",
38
- "spec/deface/template_spec.rb",
39
- "spec/spec_helper.rb"
40
- ]
41
22
 
42
23
  if s.respond_to? :specification_version then
43
24
  current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
@@ -1,5 +1,6 @@
1
1
  require "action_view"
2
2
  require "action_controller"
3
3
  require "deface/action_view_extensions"
4
+ require "deface/template_helper"
4
5
  require "deface/override"
5
6
  require "deface/parser"
@@ -2,32 +2,7 @@ ActionView::Template.class_eval do
2
2
  alias_method :rails_initialize, :initialize
3
3
 
4
4
  def initialize(source, identifier, handler, details)
5
- overrides = Deface::Override.find(details)
6
-
7
- unless overrides.empty?
8
- doc = Deface::Parser.convert_fragment(source)
9
-
10
- overrides.each do |override|
11
- doc.css(override.selector).each do |match|
12
-
13
- match.replace case override.action
14
- when :remove
15
- ""
16
- when :replace
17
- Deface::Parser.convert_fragment(override.source.clone)
18
- when :insert_before
19
- Deface::Parser.convert_fragment(override.source.clone << match.to_s)
20
- when :insert_after
21
- Deface::Parser.convert_fragment(match.to_s << override.source.clone)
22
- end
23
-
24
- end
25
- end
26
-
27
- source = doc.to_s
28
-
29
- Deface::Parser.undo_erb_markup!(source)
30
- end
5
+ source = Deface::Override.apply(source, details)
31
6
 
32
7
  rails_initialize(source, identifier, handler, details)
33
8
  end
@@ -1,10 +1,12 @@
1
1
  module Deface
2
2
  class Override
3
+ include Deface::TemplateHelper
4
+
3
5
  cattr_accessor :all, :actions
4
6
  attr_accessor :args
5
7
 
6
8
  @@all ||= {}
7
- @@actions = [:remove, :replace, :insert_after, :insert_before]
9
+ @@actions = [:remove, :replace, :insert_after, :insert_before, :insert_top, :insert_bottom]
8
10
 
9
11
  # Initializes new override, you must supply only one Target, Action & Source
10
12
  # parameter for each override (and any number of Optional parameters).
@@ -21,6 +23,8 @@ module Deface
21
23
  # * <tt>:replace</tt> - Replaces all elements that match the supplied selector
22
24
  # * <tt>:insert_after</tt> - Inserts after all elements that match the supplied selector
23
25
  # * <tt>:insert_before</tt> - Inserts before all elements that match the supplied selector
26
+ # * <tt>:insert_top</tt> - Inserts inside all elements that match the supplied selector, before all existing child
27
+ # * <tt>:insert_bottom</tt> - Inserts inside all elements that match the supplied selector, after all existing child
24
28
  #
25
29
  # ==== Source
26
30
  #
@@ -32,10 +36,15 @@ module Deface
32
36
  #
33
37
  # * <tt>:name</tt> - Unique name for override so it can be identified and modified later.
34
38
  # This needs to be unique within the same :virtual_path
39
+ # * <tt>:disabled</tt> - When set to true the override will not be applied.
40
+
35
41
 
36
42
  def initialize(args)
37
43
  @args = args
38
44
 
45
+ raise(ArgumentError, "Invalid action") if self.action.nil?
46
+ raise(ArgumentError, ":virtual_path must be defined") if args[:virtual_path].blank?
47
+
39
48
  key = args[:virtual_path].to_sym
40
49
 
41
50
  @@all[key] ||= {}
@@ -46,6 +55,10 @@ module Deface
46
55
  @args[self.action]
47
56
  end
48
57
 
58
+ def name
59
+ @args[:name]
60
+ end
61
+
49
62
  def action
50
63
  (@@actions & @args.keys).first
51
64
  end
@@ -62,8 +75,100 @@ module Deface
62
75
  Deface::Parser.erb_markup!(erb)
63
76
  end
64
77
 
78
+ def source_element
79
+ @converted_source ||= Deface::Parser.convert(source.clone).to_s
80
+ end
81
+
82
+ def disabled?
83
+ @args.key?(:disabled) ? @args[:disabled] : false
84
+ end
85
+
86
+ def end_selector
87
+ @args[:closing_selector]
88
+ end
89
+
90
+ # applies all applicable overrides to given source
91
+ #
92
+ def self.apply(source, details)
93
+ overrides = find(details)
94
+ @enable_logging ||= (defined?(Rails) == "constant" ? true : false)
95
+
96
+ if @enable_logging && overrides.size > 0
97
+ Rails.logger.info "\e[1;32mDeface:\e[0m #{overrides.size} overrides found for #{details[:virtual_path]}"
98
+ end
99
+
100
+ unless overrides.empty?
101
+ doc = Deface::Parser.convert(source)
102
+
103
+ overrides.each do |override|
104
+ if override.disabled?
105
+ if @enable_logging
106
+ Rails.logger.info "\e[1;32mDeface:\e[0m #{override.name} is disabled"
107
+ end
108
+ next
109
+ end
110
+
111
+ if override.end_selector.blank?
112
+ # single css selector
113
+
114
+ matches = doc.css(override.selector)
115
+
116
+ if @enable_logging
117
+ Rails.logger.info "\e[1;32mDeface:\e[0m #{override.name} matched #{matches.size} times with #{override.selector}"
118
+ end
119
+
120
+ matches.each do |match|
121
+ case override.action
122
+ when :remove
123
+ match.replace ""
124
+ when :replace
125
+ match.replace override.source_element
126
+ when :insert_before
127
+ match.before override.source_element
128
+ when :insert_after
129
+ match.after override.source_element
130
+ when :insert_top
131
+ match.children.before(override.source_element)
132
+ when :insert_bottom
133
+ match.children.after(override.source_element)
134
+ end
135
+
136
+ end
137
+ else
138
+ # targeting range of elements as end_selector is present
139
+ starting = doc.css(override.selector).first
140
+ if starting && starting.parent
141
+ ending = starting.parent.css(override.end_selector).first
142
+ else
143
+ ending = doc.css(override.end_selector).first
144
+ end
145
+
146
+ if starting && ending
147
+ elements = select_range(starting, ending)
148
+
149
+ if override.action == :replace
150
+ starting.before(override.source_element)
151
+ end
152
+
153
+ #now remove all matched elements
154
+ elements.map &:remove
155
+ end
156
+ end
157
+
158
+ end
159
+
160
+ source = doc.to_s
161
+
162
+ Deface::Parser.undo_erb_markup!(source)
163
+ end
164
+
165
+ source
166
+ end
167
+
168
+ # finds all applicable overrides for supplied template
169
+ #
65
170
  def self.find(details)
66
- return [] unless @@all
171
+ return [] if @@all.empty? || details.empty?
67
172
 
68
173
  result = []
69
174
 
@@ -74,16 +179,10 @@ module Deface
74
179
  end
75
180
 
76
181
  private
77
- def load_template_source(virtual_path, partial)
78
- parts = virtual_path.split("/")
79
-
80
- @lookup_context ||= ActionView::LookupContext.new(ActionController::Base.view_paths, {:formats => [:html]})
81
-
82
- if parts.size == 2
83
- return @lookup_context.find(parts[1], parts[0], partial).source
84
- else
85
- return ""
86
- end
182
+ # finds all elements upto closing sibling in nokgiri document
183
+ #
184
+ def self.select_range(first, last)
185
+ first == last ? [first] : [first, *select_range(first.next, last)]
87
186
  end
88
187
 
89
188
  end
@@ -1,5 +1,6 @@
1
1
  require 'nokogiri'
2
2
  require 'erubis'
3
+ require 'cgi'
3
4
 
4
5
  module Deface
5
6
  class Parser
@@ -11,6 +12,11 @@ module Deface
11
12
  {"%>" => "</code>"} ]
12
13
 
13
14
  replacements.each{ |h| h.each { |replace, with| source.gsub! replace, with } }
15
+
16
+ source.scan(/(<code.*?>)((?:(?!<\/code>)[\s\S])*)(<\/code>)/).each do |match|
17
+ source.gsub!("#{match[0]}#{match[1]}#{match[2]}", "#{match[0]}#{CGI.escapeHTML(match[1])}#{match[2]}")
18
+ end
19
+
14
20
  source
15
21
  end
16
22
 
@@ -20,20 +26,30 @@ module Deface
20
26
  replacements = [ {"<code erb-silent>" => '<%'},
21
27
  {"<code erb-loud>" => '<%='},
22
28
  {"</code>" => '%>'},
23
- {/(<|&lt;)code erb-silent(&gt;|>)/ => '<%'},
24
- {/(<|&lt;)code erb-loud(&gt;|>)/ => '<%='},
25
- {/(<|&lt;)\/code(&gt;|>)/ => '%>'},
26
- {/(?!=<%=?)&gt;(?=.*%>)/ => '>'},
27
- {/(?!=<%=?)&lt;(?=.*%>)/ => '<'}]
29
+ {/(<|&lt;)code(\s|%20)erb-silent(&gt;|>)/ => '<%'},
30
+ {/(<|&lt;)code(\s|%20)erb-loud(&gt;|>)/ => '<%='},
31
+ {/(<|&lt;)\/code(&gt;|>)/ => '%>'} ]
28
32
 
29
33
  replacements.each{ |h| h.each { |replace, with| source.gsub! replace, with } }
34
+
35
+ #un-escape changes from Nokogiri and erb-markup!
36
+ source.scan(/(<%.*?)((?:(?!%>)[\s\S])*)(%>)/).each do |match|
37
+ escaped = URI.unescape match[1]
38
+ escaped = CGI.unescapeHTML CGI.unescapeHTML(escaped)
39
+ source.gsub!("#{match[0]}#{match[1]}#{match[2]}", "#{match[0]}#{escaped}#{match[2]}")
40
+ end
41
+
30
42
  source
31
43
  end
32
44
 
33
-
34
- def self.convert_fragment(source)
45
+ def self.convert(source)
35
46
  erb_markup!(source)
36
- Nokogiri::HTML::DocumentFragment.parse(source)
47
+
48
+ if source =~ /(<html.*?)((?:(?!>)[\s\S])*)(>)/
49
+ Nokogiri::HTML::Document.parse(source)
50
+ else
51
+ Nokogiri::HTML::DocumentFragment.parse(source)
52
+ end
37
53
  end
38
54
 
39
55
  end
@@ -0,0 +1,21 @@
1
+ module Deface
2
+ module TemplateHelper
3
+
4
+ # used to find source for a partial or template using virutal_path
5
+ def load_template_source(virtual_path, partial)
6
+ parts = virtual_path.split("/")
7
+
8
+ if parts.size == 2
9
+ prefix = ""
10
+ name = virtual_path
11
+ else
12
+ prefix = parts.shift
13
+ name = parts.join("/")
14
+ end
15
+
16
+ @lookup_context ||= ActionView::LookupContext.new(ActionController::Base.view_paths, {:formats => [:html]})
17
+
18
+ @lookup_context.find(name, prefix, partial).source
19
+ end
20
+ end
21
+ end
@@ -0,0 +1 @@
1
+ <h1>Manage Posts</h1>
@@ -0,0 +1 @@
1
+ <p>I'm from shared/post partial</p>
@@ -0,0 +1 @@
1
+ <p>I'm from shared/person template</p>
@@ -17,8 +17,14 @@ module Deface
17
17
  @override.selector.should == "h1"
18
18
  end
19
19
 
20
- it "should find by virtual_path" do
21
- Deface::Override.find({:virtual_path => "posts/index"}).size.should == 1
20
+ describe "#find" do
21
+ it "should find by virtual_path" do
22
+ Deface::Override.find({:virtual_path => "posts/index"}).size.should == 1
23
+ end
24
+
25
+ it "should return empty array when no details hash passed" do
26
+ Deface::Override.find({}).should == []
27
+ end
22
28
  end
23
29
 
24
30
  describe "#new" do
@@ -71,6 +77,17 @@ module Deface
71
77
 
72
78
  end
73
79
 
80
+ describe "#source_element" do
81
+ before(:each) do
82
+ @override = Deface::Override.new(:virtual_path => "posts/index", :name => "Posts#index", :replace => "h1", :text => "<%= method 'x' & 'y' %>")
83
+ end
84
+
85
+ it "should return memoized escaped source" do
86
+ @override.source_element
87
+ @override.source_element.should == "<code erb-loud> method 'x' &amp;amp; 'y' </code>"
88
+ end
89
+ end
90
+
74
91
  describe "when redefining an existing virutal_path and name" do
75
92
  before(:each) do
76
93
  @replacement = Deface::Override.new(:virtual_path => "posts/index", :name => "Posts#index", :replace => "h1", :text => "<h1>Arrrr!</h1>")
@@ -3,25 +3,50 @@ require 'spec_helper'
3
3
  module Deface
4
4
  describe Parser do
5
5
 
6
- describe "#convert_fragment" do
7
- it "should parse html" do
8
- Deface::Parser.convert_fragment("<h1>Hello</h1>").to_s.should == "<h1>Hello</h1>"
6
+ describe "#convert" do
7
+ it "should parse html fragment" do
8
+ Deface::Parser.convert("<h1>Hello</h1>").should be_an_instance_of(Nokogiri::HTML::DocumentFragment)
9
+ Deface::Parser.convert("<h1>Hello</h1>").to_s.should == "<h1>Hello</h1>"
10
+ Deface::Parser.convert("<title>Hello</title>").should be_an_instance_of(Nokogiri::HTML::DocumentFragment)
11
+ Deface::Parser.convert("<title>Hello</title>").to_s.should == "<title>Hello</title>"
12
+ end
13
+
14
+ it "should parse html document" do
15
+ parsed = Deface::Parser.convert("<html><head><title>Hello</title></head><body>test</body>")
16
+ parsed.should be_an_instance_of(Nokogiri::HTML::Document)
17
+ parsed = parsed.to_s.split("\n")[1..-1]
18
+ parsed.should == "<html>\n<head><title>Hello</title></head>\n<body>test</body>\n</html>".split("\n") #ignore doctype added by noko
19
+
20
+ parsed = Deface::Parser.convert("<html><title>test</title></html>")
21
+ parsed.should be_an_instance_of(Nokogiri::HTML::Document)
22
+ parsed = parsed.to_s.split("\n")[1..-1]
23
+ parsed.should == "<html><head><title>test</title></head></html>".split("\n") #ignore doctype added by noko
24
+
25
+
26
+ parsed = Deface::Parser.convert("<html><p>test</p></html>")
27
+ parsed.should be_an_instance_of(Nokogiri::HTML::Document)
28
+ parsed = parsed.to_s.split("\n")[1..-1]
29
+ parsed.should == "<html><body><p>test</p></body></html>".split("\n") #ignore doctype added by noko
9
30
  end
10
31
 
11
32
  it "should convert <% ... %>" do
12
- Deface::Parser.convert_fragment("<% method_name %>").to_s.should == "<code erb-silent> method_name </code>"
33
+ Deface::Parser.convert("<% method_name %>").to_s.should == "<code erb-silent> method_name </code>"
13
34
  end
14
35
 
15
36
  it "should convert <%= ... %>" do
16
- Deface::Parser.convert_fragment("<%= method_name %>").to_s.should == "<code erb-loud> method_name </code>"
37
+ Deface::Parser.convert("<%= method_name %>").to_s.should == "<code erb-loud> method_name </code>"
17
38
  end
18
39
 
19
40
  it "should convert nested <% ... %>" do
20
- Deface::Parser.convert_fragment("<p id=\"<% method_name %>\"></p>").to_s.should == "<p id=\"&lt;code erb-silent&gt; method_name &lt;/code&gt;\"></p>"
41
+ Deface::Parser.convert("<p id=\"<% method_name %>\"></p>").to_s.should == "<p id=\"&lt;code erb-silent&gt; method_name &lt;/code&gt;\"></p>"
42
+ end
43
+
44
+ it "should convert nested <%= ... %> including href attribute" do
45
+ Deface::Parser.convert(%(<a href="<%= x 'y' + "z" %>">A Link</a>)).to_s.should == "<a href=\"&lt;code%20erb-loud&gt;%20x%20'y'%20+%20%22z%22%20&lt;/code&gt;\">A Link</a>"
21
46
  end
22
47
 
23
- it "should convert nested <%= ... %>" do
24
- Deface::Parser.convert_fragment("<p id=\"<%= method_name %>\"></p>").to_s.should == "<p id=\"&lt;code erb-loud&gt; method_name &lt;/code&gt;\"></p>"
48
+ it "should escape contents code tags" do
49
+ Deface::Parser.convert("<% method_name(:key => 'value') %>").to_s.should == "<code erb-silent> method_name(:key =&gt; 'value') </code>"
25
50
  end
26
51
  end
27
52
 
@@ -38,10 +63,24 @@ module Deface
38
63
  Deface::Parser.undo_erb_markup!("<p id=\"&lt;code erb-silent&gt; method_name > 1 &lt;/code&gt;\"></p>").should == "<p id=\"<% method_name > 1 %>\"></p>"
39
64
  end
40
65
 
66
+ it "should revert nested <code erb-silent> including href attribute" do
67
+ Deface::Parser.undo_erb_markup!("<a href=\"&lt;code%20erb-silent&gt;%20method_name%20&lt;/code&gt;\">A Link</a>").should == "<a href=\"<% method_name %>\">A Link</a>"
68
+ end
69
+
41
70
  it "should revert nested <code erb-loud>" do
42
71
  Deface::Parser.undo_erb_markup!("<p id=\"&lt;code erb-loud&gt; method_name < 2 &lt;/code&gt;\"></p>").should == "<p id=\"<%= method_name < 2 %>\"></p>"
43
72
  end
44
73
 
74
+ it "should revert nested <code erb-loud> including href attribute" do
75
+ Deface::Parser.undo_erb_markup!("<a href=\"&lt;code%20erb-loud&gt;%20x%20'y'%20+%20'z'%20&lt;/code&gt;\">A Link</a>").should == %(<a href="<%= x 'y' + 'z' %>">A Link</a>)
76
+ Deface::Parser.undo_erb_markup!("<a href=\"&lt;code%20erb-loud&gt;%20x%20'y'%20+%20%22z%22%20&lt;/code&gt;\">A Link</a>").should == %(<a href="<%= x 'y' + "z" %>">A Link</a>)
77
+ end
78
+
79
+ it "should unescape contents of code tags" do
80
+ Deface::Parser.undo_erb_markup!("<% method(:key =&gt; 'value' %>").should == "<% method(:key => 'value' %>"
81
+ Deface::Parser.undo_erb_markup!("<% method(:key =&gt; 'value'\n %>").should == "<% method(:key => 'value'\n %>"
82
+ end
83
+
45
84
  end
46
85
 
47
86
  end
@@ -0,0 +1,31 @@
1
+ require 'spec_helper'
2
+
3
+ module Deface
4
+ describe TemplateHelper do
5
+ include Deface::TemplateHelper
6
+
7
+ describe "load_template_source" do
8
+ before do
9
+ #stub view paths to be local spec/assets directory
10
+ ActionController::Base.stub(:view_paths).and_return([File.join(File.dirname(__FILE__), '..', "assets")])
11
+ end
12
+
13
+ it "should return source for partial" do
14
+ load_template_source("shared/_post", false).should == "<p>I'm from shared/post partial</p>\n"
15
+ end
16
+
17
+ it "should return source for template" do
18
+ load_template_source("shared/person", false).should == "<p>I'm from shared/person template</p>\n"
19
+ end
20
+
21
+ it "should return source for namespaced template" do
22
+ load_template_source("admin/posts/index", false).should == "<h1>Manage Posts</h1>\n"
23
+ end
24
+
25
+ it "should raise exception for non-existing file" do
26
+ lambda { load_template_source("tester/_post", false) }.should raise_error(ActionView::MissingTemplate)
27
+ end
28
+
29
+ end
30
+ end
31
+ end
@@ -70,6 +70,48 @@ module ActionView
70
70
  end
71
71
  end
72
72
 
73
+ describe "with a single insert_top override defined" do
74
+ before(:all) do
75
+ Deface::Override.new(:virtual_path => "posts/index", :name => "Posts#index", :insert_top => "ul", :text => "<li>me first</li>")
76
+
77
+ @template = ActionView::Template.new("<ul><li>first</li><li>second</li><li>third</li></ul>",
78
+ "/path/to/file.erb",
79
+ ActionView::Template::Handlers::ERB,
80
+ {:virtual_path=>"posts/index", :format=>:html})
81
+ end
82
+
83
+ it "should return modified source" do
84
+ @template.source.gsub("\n", "").should == "<ul><li>me first</li><li>first</li><li>second</li><li>third</li></ul>"
85
+ end
86
+ end
87
+
88
+ describe "with a single insert_bottom override defined" do
89
+ before(:all) do
90
+ Deface::Override.new(:virtual_path => "posts/index", :name => "Posts#index", :insert_bottom => "ul", :text => "<li>I'm always last</li>")
91
+
92
+ @template = ActionView::Template.new("<ul><li>first</li><li>second</li><li>third</li></ul>",
93
+ "/path/to/file.erb",
94
+ ActionView::Template::Handlers::ERB,
95
+ {:virtual_path=>"posts/index", :format=>:html})
96
+ end
97
+
98
+ it "should return modified source" do
99
+ @template.source.gsub("\n", "").should == "<ul><li>first</li><li>second</li><li>third</li><li>I'm always last</li></ul>"
100
+ end
101
+ end
102
+
103
+
104
+ describe "with a single disabled override defined" do
105
+ before(:all) do
106
+ Deface::Override.new(:virtual_path => "posts/index", :name => "Posts#index", :remove => "p", :text => "<h1>Argh!</h1>", :disabled => true)
107
+ @template = ActionView::Template.new("<p>test</p><%= raw(text) %>", "/some/path/to/file.erb", ActionView::Template::Handlers::ERB, {:virtual_path=>"posts/index", :format=>:html})
108
+ end
109
+
110
+ it "should return unmodified source" do
111
+ @template.source.should == "<p>test</p><%= raw(text) %>"
112
+ end
113
+ end
114
+
73
115
  end
74
116
  end
75
117
  end
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: 23
5
- prerelease: false
4
+ hash: 19
5
+ prerelease:
6
6
  segments:
7
7
  - 0
8
- - 2
8
+ - 3
9
9
  - 0
10
- version: 0.2.0
10
+ version: 0.3.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Brian Quinn
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-08-31 00:00:00 +01:00
18
+ date: 2011-04-13 00:00:00 +01:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -59,6 +59,7 @@ extensions: []
59
59
  extra_rdoc_files:
60
60
  - README.markdown
61
61
  files:
62
+ - .gitignore
62
63
  - MIT-LICENSE
63
64
  - README.markdown
64
65
  - Rakefile
@@ -69,8 +70,13 @@ files:
69
70
  - lib/deface/action_view_extensions.rb
70
71
  - lib/deface/override.rb
71
72
  - lib/deface/parser.rb
73
+ - lib/deface/template_helper.rb
74
+ - spec/assets/admin/posts/index.html.erb
75
+ - spec/assets/shared/_post.html.erb
76
+ - spec/assets/shared/person.html.erb
72
77
  - spec/deface/override_spec.rb
73
78
  - spec/deface/parser_spec.rb
79
+ - spec/deface/template_helper_spec.rb
74
80
  - spec/deface/template_spec.rb
75
81
  - spec/spec_helper.rb
76
82
  has_rdoc: true
@@ -103,12 +109,16 @@ required_rubygems_version: !ruby/object:Gem::Requirement
103
109
  requirements: []
104
110
 
105
111
  rubyforge_project:
106
- rubygems_version: 1.3.7
112
+ rubygems_version: 1.5.0
107
113
  signing_key:
108
114
  specification_version: 3
109
115
  summary: Deface is a library that allows you to customize ERB views in Rails
110
116
  test_files:
117
+ - spec/assets/admin/posts/index.html.erb
118
+ - spec/assets/shared/_post.html.erb
119
+ - spec/assets/shared/person.html.erb
111
120
  - spec/deface/override_spec.rb
112
121
  - spec/deface/parser_spec.rb
122
+ - spec/deface/template_helper_spec.rb
113
123
  - spec/deface/template_spec.rb
114
124
  - spec/spec_helper.rb