Skip to content
This repository has been archived by the owner on Jul 13, 2023. It is now read-only.

Commit

Permalink
Add Paperclip::InterpolatedString to store the interpolated string wh…
Browse files Browse the repository at this point in the history
…ich has an escape flag
  • Loading branch information
sikachu committed Oct 10, 2011
1 parent f7fdc9f commit db60516
Show file tree
Hide file tree
Showing 2 changed files with 95 additions and 0 deletions.
33 changes: 33 additions & 0 deletions lib/paperclip/interpolated_string.rb
@@ -0,0 +1,33 @@
require 'uri'

module Paperclip
class InterpolatedString < String
def escaped?
!!@escaped
end

def escape
if !escaped?
escaped_string = self.class.new(URI.escape(self))
escaped_string.instance_variable_set(:@escaped, true)
escaped_string
else
self
end
end

def unescape
if escaped?
escaped_string = self.class.new(URI.unescape(self))
escaped_string.instance_variable_set(:@escaped, false)
escaped_string
else
self
end
end

def force_escape
@escaped = true
end
end
end
62 changes: 62 additions & 0 deletions test/interpolated_string_test.rb
@@ -0,0 +1,62 @@
require './test/helper'

class InterpolatedStringTest < Test::Unit::TestCase
context "inheritance" do
should "inherited from String" do
assert Paperclip::InterpolatedString.new("paperclip").is_a? String
end
end

context "#escape" do
subject { Paperclip::InterpolatedString.new("paperclip foo").escape }

should "returns an InterpolatedString object" do
assert subject.is_a? Paperclip::InterpolatedString
end

should "escape the output string" do
assert_equal "paperclip%20foo", subject
end

should "not double escape output string" do
assert_equal "paperclip%20foo", subject.escape
end
end

context "#unescape" do
subject { Paperclip::InterpolatedString.new("paperclip%20foo").escape.unescape }

should "returns an InterpolatedString object" do
assert subject.is_a? Paperclip::InterpolatedString
end

should "unescape the output string" do
assert_equal "paperclip%20foo", subject
end

should "not double unescape output string" do
assert_equal "paperclip%20foo", subject.unescape
end
end

context "#escaped?" do
subject { Paperclip::InterpolatedString.new("paperclip") }

should "returns true if string was escaped" do
assert subject.escape.escaped?
end

should "returns false if string wasn't escaped" do
assert !subject.escaped?
end
end

context "#force_escape" do
subject { Paperclip::InterpolatedString.new("paperclip") }
setup { subject.force_escape }

should "sets escaped flag to true" do
assert subject.escaped?
end
end
end

0 comments on commit db60516

Please sign in to comment.