touch_up 2.0.0 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d0e8e7732cb168af2fcebc057b581d3624cca0dd
4
- data.tar.gz: 7a840cc995e6894e3626f0423d0399b979b574a9
3
+ metadata.gz: 21e2b827a0177d7b09510de6bddfdd1ece2d49d9
4
+ data.tar.gz: ff3e7c1f9f5515a14f2a2d160b8e9ae9cfba5381
5
5
  SHA512:
6
- metadata.gz: 1d06a1c676356c0ac58ed6a1a00ab8117d730eec34db0a6fb922549ca2890e80a1adfb00b964e470118c2c8b6763ada0c1455f62958aba419e90c5224e154aef
7
- data.tar.gz: 5b9ea08ad8b37e15819a4741719979789e5997b74e3d3f8f982b35daf2a89e168a2e7238bb56e087e6ab543dc34d772de1c66a123202e435dd1cc7efe6b33608
6
+ metadata.gz: 6b4fb2f52a70eccf56802c4798291dacf3ea1572994610e461560220afa7a7e5eb87e42e881daabd7ee56347c79c43c7313840d6b89a0f61ad34f78377f3b697
7
+ data.tar.gz: dc76871bc2ed6d0ceaf73864b964da5e0fa4cc25d7e02a453a5b5e382f6bd5ba0aa170a576ca74f3017c27587da738555fc1700f2eeff6da078449737c7c8a33
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.0.0
1
+ 3.0.0
data/lib/touch_up.rb CHANGED
@@ -4,7 +4,9 @@ require 'twitter-text'
4
4
 
5
5
  class Touch_Up
6
6
 
7
- NOTHING = ''.freeze
7
+ NOTHING = ''.freeze
8
+ HREFS = %r@(\*([^\*]+)\*\s+)?([^\.\s]+\.[^\.\s]+[^\s]+[^\.\s])@
9
+ MARK_DOWNS = /(\&\#47\;|~~|\*)([^\1\<\>]+)(\1)/
8
10
 
9
11
  include Twitter::Extractor
10
12
 
@@ -16,36 +18,33 @@ class Touch_Up
16
18
  end
17
19
 
18
20
  def to_html
19
- @origin.
21
+ splits = Escape_Escape_Escape.html(@origin).gsub(HREFS) { |full, match|
20
22
 
21
- # "a" (anchor) tags, auto-linking
22
- gsub(%r@(\*([^\*]+)\*\s+)?([^\.\s]+\.[^\.\s]+[^\s]+[^\.\s])@) { |full, match|
23
+ raw_text = $2 ? Escape_Escape_Escape.decode_html($2) : nil
24
+ raw_append = Escape_Escape_Escape.decode_html $3
25
+ raw_link = extract_urls(raw_append).first
23
26
 
24
- text = $2
25
- raw_link = Escape_Escape_Escape.decode_html($3)
26
-
27
- link = extract_urls(raw_link).first
28
-
29
- if !link
27
+ if !raw_link
30
28
  full
31
29
  else
32
30
 
33
- append = raw_link.sub(link, NOTHING)
34
- short_link = link
35
- clean_short_link = Escape_Escape_Escape.html(short_link)
31
+ append = Escape_Escape_Escape.html raw_append.sub(raw_link, NOTHING)
32
+ text = if raw_text
33
+ Escape_Escape_Escape.html(raw_text)
34
+ else
35
+ Escape_Escape_Escape.html(raw_link)
36
+ end
37
+
38
+ raw_link = Escape_Escape_Escape.decode_html(raw_link)
36
39
 
37
- if !link['://']
38
- link = 'http://' + link
40
+ if !raw_link['://']
41
+ raw_link = 'http://' + raw_link
39
42
  end
40
43
 
41
44
  begin
42
- clean_link = Escape_Escape_Escape.href(link)
45
+ link = Escape_Escape_Escape.href(raw_link)
43
46
 
44
- if text
45
- "<a href=\"#{clean_link}\">#{text}</a>#{append}"
46
- else
47
- "<a href=\"#{clean_link}\">#{clean_short_link}</a>#{append}"
48
- end
47
+ "<a href=\"#{link}\">#{text}</a>#{append}"
49
48
 
50
49
  rescue Escape_Escape_Escape::Invalid_HREF
51
50
  full
@@ -54,22 +53,33 @@ class Touch_Up
54
53
  end # if
55
54
 
56
55
 
57
- }.
58
-
56
+ }.split(/(\<[^\>]+\>[^\<]+\<\/[^\>]+\>)/)
59
57
 
60
58
  # "i", "del", "strong" tags
61
- gsub(/([\*\/\-\~]{1,2})([^\1\<\>]+)(\1)/) { |full, match|
62
- case
63
- when $1 == $3 && $1 == '/'
64
- "<i>#{$2}</i>"
65
- when $1 == '~~' && $3 == '~~'
66
- "<del>#{$2}</del>"
67
- when $1 == $3 && $1 == '*'
68
- "<strong>#{$2}</strong>"
69
- else
70
- full
59
+ final = ""
60
+ i = 0
61
+ while i < splits.size
62
+ final << (splits[i].gsub(MARK_DOWNS) { |full, match|
63
+ case
64
+ when $1 == $3 && $1 == '&#47;'
65
+ "<i>#{$2}</i>"
66
+ when $1 == '~~' && $3 == '~~'
67
+ "<del>#{$2}</del>"
68
+ when $1 == $3 && $1 == '*'
69
+ "<strong>#{$2}</strong>"
70
+ else
71
+ full
72
+ end
73
+ })
74
+
75
+ i += 1
76
+ if splits[i]
77
+ final << splits[i]
78
+ i += 1
71
79
  end
72
- }
80
+ end
81
+
82
+ final
73
83
 
74
84
  end
75
85
 
@@ -2,12 +2,8 @@
2
2
  describe 'italics' do
3
3
 
4
4
  it "turns slash-ed text into italics: /slash/ <i>slash</i>" do
5
- text = Touch_Up.new(<<-EOF)
6
- This is my /slash/ text.
7
- EOF
8
- text.to_html.strip.should == <<-EOF.strip
9
- This is my <i>slash</i> text.
10
- EOF
5
+ Touch_Up.new("This is my /slash/ text.").
6
+ to_html.strip.should == "This is my <i>slash</i> text."
11
7
  end # === it turns slash-ed text into italics: /slash/ <i>slash</i>
12
8
 
13
9
  it "leaves surrounding chars alone: I am super-/slanted/." do
@@ -20,10 +16,8 @@ end # === describe 'italics'
20
16
  describe "strong" do
21
17
 
22
18
  it "turns star-ed text to strong: *bold* <strong>bold</strong>" do
23
- text = Touch_Up.new(<<-EOF)
24
- This is my brave and *bold* text.
25
- EOF
26
- text.to_html.strip.should == <<-EOF.strip
19
+ Touch_Up.new("This is my brave and *bold* text.").
20
+ to_html.strip.should == <<-EOF.strip
27
21
  This is my brave and <strong>bold</strong> text.
28
22
  EOF
29
23
  end # === it turns star-ed text to strong: *bold* <strong>bold</strong>
@@ -38,12 +32,8 @@ end # === describe "strong"
38
32
  describe "strikethrough" do
39
33
 
40
34
  it "turns strikethrough text to :del: ~~del~~ <del>del</del>" do
41
- text = Touch_Up.new(<<-EOF)
42
- This is my ~~old~~ text.
43
- EOF
44
- text.to_html.strip.should == <<-EOF.strip
45
- This is my <del>old</del> text.
46
- EOF
35
+ Touch_Up.new("This is my ~~old~~ text.").
36
+ to_html.strip.should == "This is my <del>old</del> text."
47
37
  end # === it "turns strikethrough-ed text to strong: ~~del~~ <del>del</del>" do
48
38
 
49
39
  it "leaves surrounding chars alone: I am re~~deleted~~ed." do
@@ -56,18 +46,24 @@ end # === describe "strikethrough"
56
46
  describe "linking" do
57
47
 
58
48
  it "turns text into links: *my link* google.com" do
59
- text = Touch_Up.new "This is *my link* google.com."
60
- text.to_html.should == "This is <a href=\"http:&#47;&#47;google.com\">my link</a>."
49
+ href="google.com"
50
+ Touch_Up.new("This is *my link* #{href}.").
51
+ to_html.should == "This is <a href=\"#{Escape_Escape_Escape.href "http://#{href}"}\">my link</a>."
61
52
  end
62
53
 
63
54
  it "turns only text with a period inside to links: text. vs my.text." do
64
- text = Touch_Up.new "This is *bold* text. This is my *link* lewrockwell.com."
65
- text.to_html.should == "This is <strong>bold</strong> text. This is my <a href=\"http:&#47;&#47;lewrockwell.com\">link</a>."
55
+ link = "lewrockwell.com"
56
+ clean = Escape_Escape_Escape.href "http://#{link}"
57
+ Touch_Up.new(
58
+ "This is *bold* text. This is my *link* #{link}."
59
+ ).to_html.should ==
60
+ "This is <strong>bold</strong> text. This is my <a href=\"#{clean}\">link</a>."
66
61
  end
67
62
 
68
63
  it "does not create invalid links: javascript://alert('text.text')" do
69
- Touch_Up.new("This is my *link* javascript://alert('text.text').").
70
- to_html.should == "This is my <strong>link</strong> javascript://alert('text.text')."
64
+ link = "javascript://alert('text.text')"
65
+ Touch_Up.new("This is my *link* #{link}.").
66
+ to_html.should == "This is my <strong>link</strong> #{Escape_Escape_Escape.html link}."
71
67
  end
72
68
 
73
69
  it "ignores ending punctuation: .com." do
@@ -98,7 +94,7 @@ describe "linking" do
98
94
  it "does not auto-link invalid urls: http://www.yahoo.com/&" do
99
95
  txt = "This is invalid: http://кц.рф"
100
96
  Touch_Up.new(txt).
101
- to_html.should == txt
97
+ to_html.should == Escape_Escape_Escape.html(txt)
102
98
  end
103
99
 
104
100
  it "does not double-escape hrefs" do
@@ -0,0 +1,40 @@
1
+
2
+ describe 'escaping' do
3
+
4
+ it "escapes text" do
5
+ text = "<strong>text</strong>"
6
+ actual = Touch_Up.new("#{text} *text*").to_html
7
+
8
+ actual.should == "#{Escape_Escape_Escape.html text} <strong>text</strong>"
9
+ end # === it escapes text
10
+
11
+ it "accepts escaped text, w/o double escaping it" do
12
+ text = "<strong>e</strong>"
13
+ actual = Touch_Up.new(
14
+ Escape_Escape_Escape.html "#{text} *text*"
15
+ ).to_html
16
+
17
+ actual.should == "#{Escape_Escape_Escape.html text} <strong>text</strong>"
18
+ end # === it accespts escaped text, w/o double escaping it
19
+
20
+ it "escapes :href, not just html" do
21
+ href = "http://www.example.com/?test='test"
22
+ e_href = Escape_Escape_Escape.href(href)
23
+ actual = Touch_Up.new("*my href* #{href}").to_html
24
+
25
+ actual.should == %^<a href="#{e_href}">my href</a>^
26
+ end # === it escapes :href, not just html
27
+
28
+ it "escapes content of :a tags" do
29
+ href = "http://www.example.com/"
30
+ e_href = Escape_Escape_Escape.href(href)
31
+
32
+ text = "my <href>"
33
+ e_text = Escape_Escape_Escape.html(text)
34
+ actual = Touch_Up.new("*#{text}* #{href}").to_html
35
+
36
+ actual.should == %^<a href="#{e_href}">#{e_text}</a>^
37
+ end # === it escapes content of :a tags
38
+
39
+ end # === describe 'escaping'
40
+
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: touch_up
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - da99
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-24 00:00:00.000000000 Z
11
+ date: 2015-03-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pry
@@ -109,6 +109,7 @@ files:
109
109
  - VERSION
110
110
  - lib/touch_up.rb
111
111
  - specs/0010-it-runs.rb
112
+ - specs/0011-escaping.rb
112
113
  - specs/lib/helpers.rb
113
114
  - touch_up.gemspec
114
115
  homepage: https://github.com/da99/touch_up