deface 0.1.0 → 0.2.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.
data/README.markdown CHANGED
@@ -11,7 +11,7 @@ Deface temporarily converts ERB files into a pseudo HTML markup that can be pars
11
11
 
12
12
  becomes
13
13
 
14
- <erb-loud> some ruby code </erb-loud>
14
+ <code erb-loud> some ruby code </code>
15
15
 
16
16
  and
17
17
 
@@ -19,7 +19,7 @@ and
19
19
 
20
20
  becomes
21
21
 
22
- <erb-silent> other ruby code </erb-silent>
22
+ <code erb-silent> other ruby code </code>
23
23
 
24
24
  Deface overrides have full access to all variables accessible to the view being customized.
25
25
 
@@ -30,9 +30,7 @@ A new instance of the Deface::Override class is initialized for each customizati
30
30
 
31
31
  Target
32
32
  ------
33
- * <tt>:file_path</tt> - The relative file path of the template / partial where the override should take effect eg: *"shared/_person"*, *"admin/posts/new"* this will apply to all controller actions that use the specified template.
34
-
35
- * <tt>:virtual_path</tt> - The controller and action name where the override should take effect eg: *"controller/action"* or *"posts/index"* will apply to all layouts, templates and partials that are used in the rendering of the specified action.
33
+ * <tt>:virtual_path</tt> - The template / partial / layout where the override should take effect eg: *"shared/_person"*, *"admin/posts/new"* this will apply to all controller actions that use the specified template.
36
34
 
37
35
  Action
38
36
  ------
@@ -54,27 +52,34 @@ Source
54
52
 
55
53
  Optional
56
54
  --------
57
- * <tt>:name</tt> - Unique name for override so it can be identified and modified later. This needs to be unique within the same `:virtual_path` or `:file_path`
55
+ * <tt>:name</tt> - Unique name for override so it can be identified and modified later. This needs to be unique within the same `:virtual_path`
58
56
 
59
57
  Examples
60
58
  ========
61
59
 
62
60
  Replaces all instances of _h1_ in the `posts/_form.html.erb` partial with `<h1>New Post</h1>`
63
61
 
64
- Deface::Override.new(:file_path => "posts/_form", :name => "example-1", :replace => "h1", :text => "<h1>New Post</h1>")
62
+ Deface::Override.new(:virtual_path => "posts/_form",
63
+ :name => "example-1",
64
+ :replace => "h1",
65
+ :text => "<h1>New Post</h1>")
65
66
 
66
- Inserts `<%= link_to "List Comments", comments_url(post) %>` before all instances of `p` with css class `comment` in any layout / template / partial used when rendering _PostsController#index_ action:
67
+ Inserts `<%= link_to "List Comments", comments_url(post) %>` before all instances of `p` with css class `comment` in `posts/index.html.erb`
67
68
 
68
- Deface::Override.new(:virtual_path => "posts/index", :name => "example-2", :insert_before => "p.comment", :text => "<%= link_to "List Comments", comments_url(post) %>")
69
+ Deface::Override.new(:virtual_path => "posts/index",
70
+ :name => "example-2",
71
+ :insert_before => "p.comment",
72
+ :text => "<%= link_to "List Comments", comments_url(post) %>")
69
73
 
70
- Inserts the contents of `shared/_comment.html.erb` after all instances of `div` with an id of `comment_21` in any layout / template / partial used when rendering _PostsController#show_ action:
74
+ Inserts the contents of `shared/_comment.html.erb` after all instances of `div` with an id of `comment_21` in `posts/show.html.erb`
71
75
 
72
- Deface::Override.new(:virtual_path => "posts/show", :name => "example-3", :insert_after => "div#comment_21", :partial => "shared/comment")
76
+ Deface::Override.new(:virtual_path => "posts/show",
77
+ :name => "example-3",
78
+ :insert_after => "div#comment_21",
79
+ :partial => "shared/comment")
73
80
 
74
81
  Removes any instance of `<%= helper_method %>` in the `posts/new.html.erb" template:
75
82
 
76
- Deface::Override.new(:file_path => "posts/new", :name => "example-4", :remove => "erb-loud:contains('helper_method')" )
77
-
78
-
79
-
80
-
83
+ Deface::Override.new(:virtual_path => "posts/new",
84
+ :name => "example-4",
85
+ :remove => "code[erb-loud]:contains('helper_method')" )
data/Rakefile CHANGED
@@ -28,7 +28,9 @@ begin
28
28
  Jeweler::Tasks.new do |gem|
29
29
  gem.name = "deface"
30
30
  gem.summary = "Deface is a library that allows you to customize ERB views in Rails"
31
+ gem.description = "Deface is a library that allows you to customize ERB views in a Rails application without editing the underlying view."
31
32
  gem.email = "brian@railsdog.com"
33
+ gem.homepage = "http://github.com/BDQ/Deface"
32
34
  gem.authors = ["Brian Quinn"]
33
35
  gem.files = Dir["*", "{lib}/**/*"]
34
36
  gem.add_dependency("nokogiri", "~> 1.4.3")
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.2.0
data/deface.gemspec CHANGED
@@ -5,11 +5,12 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{deface}
8
- s.version = "0.1.0"
8
+ s.version = "0.2.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Brian Quinn"]
12
- s.date = %q{2010-08-30}
12
+ s.date = %q{2010-08-31}
13
+ s.description = %q{Deface is a library that allows you to customize ERB views in a Rails application without editing the underlying view.}
13
14
  s.email = %q{brian@railsdog.com}
14
15
  s.extra_rdoc_files = [
15
16
  "README.markdown"
@@ -26,6 +27,7 @@ Gem::Specification.new do |s|
26
27
  "lib/deface/override.rb",
27
28
  "lib/deface/parser.rb"
28
29
  ]
30
+ s.homepage = %q{http://github.com/BDQ/Deface}
29
31
  s.rdoc_options = ["--charset=UTF-8"]
30
32
  s.require_paths = ["lib"]
31
33
  s.rubygems_version = %q{1.3.7}
@@ -2,7 +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.merge({:file_path => identifier}))
5
+ overrides = Deface::Override.find(details)
6
6
 
7
7
  unless overrides.empty?
8
8
  doc = Deface::Parser.convert_fragment(source)
@@ -26,7 +26,7 @@ ActionView::Template.class_eval do
26
26
 
27
27
  source = doc.to_s
28
28
 
29
- Deface::Parser.undo_erb_markup(source)
29
+ Deface::Parser.undo_erb_markup!(source)
30
30
  end
31
31
 
32
32
  rails_initialize(source, identifier, handler, details)
@@ -1,10 +1,9 @@
1
1
  module Deface
2
2
  class Override
3
- cattr_accessor :virtual, :file, :actions
3
+ cattr_accessor :all, :actions
4
4
  attr_accessor :args
5
5
 
6
- @@virtual ||= {}
7
- @@file ||= {}
6
+ @@all ||= {}
8
7
  @@actions = [:remove, :replace, :insert_after, :insert_before]
9
8
 
10
9
  # Initializes new override, you must supply only one Target, Action & Source
@@ -12,13 +11,9 @@ module Deface
12
11
  #
13
12
  # ==== Target
14
13
  #
15
- # * <tt>:file_path</tt> - The relative file path of the template / partial where
14
+ # * <tt>:virtual_path</tt> - The path of the template / partial where
16
15
  # the override should take effect eg: "shared/_person", "admin/posts/new"
17
16
  # this will apply to all controller actions that use the specified template
18
- # * <tt>:virtual_path</tt> - The controller and action name where
19
- # the override should take effect eg: "controller/action" or "posts/index"
20
- # will apply to all layouts, templates and partials that are used in the
21
- # rendering of the specified action.
22
17
  #
23
18
  # ==== Action
24
19
  #
@@ -36,22 +31,15 @@ module Deface
36
31
  # ==== Optional
37
32
  #
38
33
  # * <tt>:name</tt> - Unique name for override so it can be identified and modified later.
39
- # This needs to be unique within the same :virtual_path or :file_path
34
+ # This needs to be unique within the same :virtual_path
40
35
 
41
36
  def initialize(args)
42
37
  @args = args
43
38
 
44
- if args.key?(:virtual_path)
45
- key = args[:virtual_path].to_sym
39
+ key = args[:virtual_path].to_sym
46
40
 
47
- @@virtual[key] ||= {}
48
- @@virtual[key][args[:name].to_s.parameterize] = self
49
- elsif args.key?(:file_path)
50
- key = args[:file_path]
51
-
52
- @@file[key] ||= {}
53
- @@file[key][args[:name].to_s.parameterize] = self
54
- end
41
+ @@all[key] ||= {}
42
+ @@all[key][args[:name].to_s.parameterize] = self
55
43
  end
56
44
 
57
45
  def selector
@@ -71,19 +59,16 @@ module Deface
71
59
  @args[:text]
72
60
  end
73
61
 
74
- Deface::Parser::ERB.compile(erb)
62
+ Deface::Parser.erb_markup!(erb)
75
63
  end
76
64
 
77
65
  def self.find(details)
78
- return [] unless self.virtual || self.file
66
+ return [] unless @@all
79
67
 
80
68
  result = []
81
69
 
82
70
  virtual_path = details[:virtual_path]
83
- result << @@virtual[virtual_path.to_sym].try(:values) if virtual_path
84
-
85
- file_path = details[:file_path]
86
- result << @@file.map { |key,overrides| overrides.try(:values) if file_path =~ /#{key}/ } if file_path
71
+ result << @@all[virtual_path.to_sym].try(:values)
87
72
 
88
73
  result.flatten.compact
89
74
  end
data/lib/deface/parser.rb CHANGED
@@ -3,88 +3,38 @@ require 'erubis'
3
3
 
4
4
  module Deface
5
5
  class Parser
6
+ # converts erb to markup
7
+ #
8
+ def self.erb_markup!(source)
9
+ replacements = [ {"<%=" => "<code erb-loud>"},
10
+ {"<%" => "<code erb-silent>"},
11
+ {"%>" => "</code>"} ]
12
+
13
+ replacements.each{ |h| h.each { |replace, with| source.gsub! replace, with } }
14
+ source
15
+ end
16
+
6
17
  # undoes ERB markup generated by Deface::Parser::ERB
7
18
  #
8
- def self.undo_erb_markup(source)
9
- source.gsub! /(<|&lt;)erb-silent(&gt;|>)/, '<% '
10
- source.gsub! /(<|&lt;)erb-loud(&gt;|>)/, '<%= '
11
- source.gsub! /(<|&lt;)\/erb-(loud|silent)(&gt;|>)/, ' %>'
12
- source.gsub! /(?!=<%=?)&gt;(?=.*%>)/, '>'
19
+ def self.undo_erb_markup!(source)
20
+ replacements = [ {"<code erb-silent>" => '<%'},
21
+ {"<code erb-loud>" => '<%='},
22
+ {"</code>" => '%>'},
23
+ {/(<|&lt;)code erb-silent(&gt;|>)/ => '<%'},
24
+ {/(<|&lt;)code erb-loud(&gt;|>)/ => '<%='},
25
+ {/(<|&lt;)\/code(&gt;|>)/ => '%>'},
26
+ {/(?!=<%=?)&gt;(?=.*%>)/ => '>'},
27
+ {/(?!=<%=?)&lt;(?=.*%>)/ => '<'}]
28
+
29
+ replacements.each{ |h| h.each { |replace, with| source.gsub! replace, with } }
13
30
  source
14
31
  end
15
32
 
16
33
 
17
34
  def self.convert_fragment(source)
18
- source = Deface::Parser::ERB.compile(source)
35
+ erb_markup!(source)
19
36
  Nokogiri::HTML::DocumentFragment.parse(source)
20
37
  end
21
38
 
22
- # A class for converting ERB code into a format that's easier
23
- # for css & xpath querying4
24
-
25
- # the erb tags are converted to html tags in the following way.
26
- # `<% ... %>` is converted into `<erb-silent> ... </erb-silent>`.
27
- # `<%= ... %>` is converted into `<erb-loud> ... </erb-loud>`.
28
- #
29
- class ERB < Erubis::Basic::Engine
30
- # Compiles an ERB template into a HTML document containing `erb-` tags.
31
- # 100% borrowed from HTML2HAML .. thank you team HAML.
32
- #
33
- # @param template [String] The ERB template
34
- # @return [String] The output document
35
- def self.compile(template)
36
- new(template).src
37
- end
38
-
39
- # not supported (yet?)
40
- def escaped_expr(code)
41
- raise "Not Supported"
42
- end
43
-
44
- # The conversion has no preamble.
45
- def add_preamble(src); end
46
-
47
- # The conversion has no postamble.
48
- def add_postamble(src); end
49
-
50
- # Concatenates the text onto the source buffer.
51
- #
52
- # @param src [String] The source buffer
53
- # @param text [String] The raw text to add to the buffer
54
- def add_text(src, text)
55
- src << text
56
- end
57
-
58
- # Concatenates a silent Ruby statement onto the source buffer.
59
- # This uses the `<erb-silent>` tag
60
- #
61
- # @param src [String] The source buffer
62
- # @param code [String] The Ruby statement to add to the buffer
63
- def add_stmt(src, code)
64
- src << whitespace(code) << "<erb-silent>" << code.strip << "</erb-silent>"
65
- end
66
-
67
- # Concatenates a Ruby expression that's printed to the document
68
- # onto the source buffer.
69
- # This uses the `<erb-silent>` tag
70
- #
71
- # @param src [String] The source buffer
72
- # @param code [String] The Ruby expression to add to the buffer
73
- def add_expr_literal(src, code)
74
- src << whitespace(code) << "<erb-loud>" << code.strip << "</erb-loud>"
75
- end
76
-
77
- # not supported (yet?)
78
- def add_expr_debug(src, code)
79
- raise "Not Supported"
80
- end
81
-
82
- private
83
- def whitespace(code)
84
- arr = code.scan /^(\s*)/
85
- res = arr.flatten.first
86
- res.length==1 ? "" : res
87
- end
88
- end
89
39
  end
90
40
  end
@@ -4,7 +4,6 @@ module Deface
4
4
  describe Override do
5
5
  before(:each) do
6
6
  @override = Deface::Override.new(:virtual_path => "posts/index", :name => "Posts#index", :replace => "h1", :text => "<h1>Argh!</h1>")
7
- @override2 = Deface::Override.new(:file_path => "posts/index", :name => "Posts#index", :replace => "h1", :text => "<h1>Argh!</h1>")
8
7
  end
9
8
 
10
9
  it "should return correct action" do
@@ -22,22 +21,12 @@ module Deface
22
21
  Deface::Override.find({:virtual_path => "posts/index"}).size.should == 1
23
22
  end
24
23
 
25
- it "should find by file_path" do
26
- Deface::Override.find({:file_path => "/full/path/to/posts/index.html.erb"}).size.should == 1
27
- end
28
-
29
24
  describe "#new" do
30
25
 
31
- it "should increase virtual#size by 1" do
26
+ it "should increase all#size by 1" do
32
27
  expect {
33
28
  Deface::Override.new(:virtual_path => "posts/new", :name => "Posts#new", :replace => "h1", :text => "<h1>argh!</h1>")
34
- }.to change{Deface::Override.virtual.size}.by(1)
35
- end
36
-
37
- it "should increase file#size by 1" do
38
- expect {
39
- Deface::Override.new(:file_path => "posts/new", :name => "Posts#new", :replace => "h1", :text => "<h1>argh!</h1>")
40
- }.to change{Deface::Override.file.size}.by(1)
29
+ }.to change{Deface::Override.all.size}.by(1)
41
30
  end
42
31
  end
43
32
 
@@ -87,10 +76,10 @@ module Deface
87
76
  @replacement = Deface::Override.new(:virtual_path => "posts/index", :name => "Posts#index", :replace => "h1", :text => "<h1>Arrrr!</h1>")
88
77
  end
89
78
 
90
- it "should not increase virtual#size by 1" do
79
+ it "should not increase all#size by 1" do
91
80
  expect {
92
81
  Deface::Override.new(:virtual_path => "posts/index", :name => "Posts#index", :replace => "h1", :text => "<h1>Arrrr!</h1>")
93
- }.to change{Deface::Override.virtual.size}.by(0)
82
+ }.to change{Deface::Override.all.size}.by(0)
94
83
 
95
84
  end
96
85
 
@@ -9,37 +9,37 @@ module Deface
9
9
  end
10
10
 
11
11
  it "should convert <% ... %>" do
12
- Deface::Parser.convert_fragment("<% method_name %>").to_s.should == "<erb-silent>method_name</erb-silent>"
12
+ Deface::Parser.convert_fragment("<% method_name %>").to_s.should == "<code erb-silent> method_name </code>"
13
13
  end
14
14
 
15
15
  it "should convert <%= ... %>" do
16
- Deface::Parser.convert_fragment("<%= method_name %>").to_s.should == "<erb-loud>method_name</erb-loud>"
16
+ Deface::Parser.convert_fragment("<%= method_name %>").to_s.should == "<code erb-loud> method_name </code>"
17
17
  end
18
18
 
19
19
  it "should convert nested <% ... %>" do
20
- Deface::Parser.convert_fragment("<p id=\"<% method_name %>\"></p>").to_s.should == "<p id=\"&lt;erb-silent&gt;method_name&lt;/erb-silent&gt;\"></p>"
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>"
21
21
  end
22
22
 
23
23
  it "should convert nested <%= ... %>" do
24
- Deface::Parser.convert_fragment("<p id=\"<%= method_name %>\"></p>").to_s.should == "<p id=\"&lt;erb-loud&gt;method_name&lt;/erb-loud&gt;\"></p>"
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>"
25
25
  end
26
26
  end
27
27
 
28
28
  describe "#undo_erb_markup" do
29
- it "should revert <erb-silent>" do
30
- Deface::Parser.undo_erb_markup("<erb-silent>method_name</erb-silent>").should == "<% method_name %>"
29
+ it "should revert <code erb-silent>" do
30
+ Deface::Parser.undo_erb_markup!("<code erb-silent> method_name </code>").should == "<% method_name %>"
31
31
  end
32
32
 
33
- it "should revert <erb-loud>" do
34
- Deface::Parser.undo_erb_markup("<erb-loud>method_name</erb-loud>").should == "<%= method_name %>"
33
+ it "should revert <code erb-loud>" do
34
+ Deface::Parser.undo_erb_markup!("<code erb-loud> method_name </code>").should == "<%= method_name %>"
35
35
  end
36
36
 
37
- it "should revert nested <erb-silent>" do
38
- Deface::Parser.undo_erb_markup("<tr id=\"&lt;erb-silent&gt;method_name&lt;/erb-silent&gt;\"></tr>").should == "<tr id=\"<% method_name %>\"></tr>"
37
+ it "should revert nested <code erb-silent>" do
38
+ 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
39
  end
40
40
 
41
- it "should revert nested <erb-loud>" do
42
- Deface::Parser.undo_erb_markup("<tr id=\"&lt;erb-loud&gt;method_name&lt;/erb-loud&gt;\"></tr>").should == "<tr id=\"<%= method_name %>\"></tr>"
41
+ it "should revert nested <code erb-loud>" do
42
+ 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
43
  end
44
44
 
45
45
  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: 27
4
+ hash: 23
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 1
8
+ - 2
9
9
  - 0
10
- version: 0.1.0
10
+ version: 0.2.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-30 00:00:00 +01:00
18
+ date: 2010-08-31 00:00:00 +01:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -50,7 +50,7 @@ dependencies:
50
50
  version: 3.0.0
51
51
  type: :runtime
52
52
  version_requirements: *id002
53
- description:
53
+ description: Deface is a library that allows you to customize ERB views in a Rails application without editing the underlying view.
54
54
  email: brian@railsdog.com
55
55
  executables: []
56
56
 
@@ -74,7 +74,7 @@ files:
74
74
  - spec/deface/template_spec.rb
75
75
  - spec/spec_helper.rb
76
76
  has_rdoc: true
77
- homepage:
77
+ homepage: http://github.com/BDQ/Deface
78
78
  licenses: []
79
79
 
80
80
  post_install_message: