touch_up 2.0.0 → 3.0.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.
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