string_master 0.3.19 → 0.4.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
- SHA1:
3
- metadata.gz: d5a075abc613363e9a4ff6a34fb2e090f904ad2e
4
- data.tar.gz: cf180f4ff24e411cb4dc101be650c85de93fa3f1
2
+ SHA256:
3
+ metadata.gz: db109c39955fd4d1cff51273ffebc3cbc3408e8e1bec70e78f6708c7502edcda
4
+ data.tar.gz: e76a26c8d32c689e71ee384f855c80a439b127e4e485c352b40725fbde3da9c2
5
5
  SHA512:
6
- metadata.gz: 5f94f5a00b02b0a9f2e5652816f69406ab1fc61c27f8ffc769299cc12827e6a30993f2c5fb9b88d3b991c8e4df9ef1c08b0c0ca788b51edbcde0f1763a56f4fe
7
- data.tar.gz: ca02e659e224132ba171ac05fee58d0f4f97276e5236c03c1abf0062ee1a05dd33d9fce2567471724173e8af6fce210682c1e19227ec81f3f47c45e196b876ad
6
+ metadata.gz: 3190989568bd6d9488480127b16b37c4aff378a4e418e88674e7e0a743d3cc37738f809f90b12382b364a58d7d4da442397543a51752d336341fc4ffee3fec87
7
+ data.tar.gz: 1a6cb57073486eac0aeb9d38451f2b74f483014cdb22907c6a7ee142419c521746c0273ea45ddfdd4bfade91a2ae1597b0517bb5d701f4195a7113824edfb200
data/Gemfile.lock CHANGED
@@ -1,15 +1,15 @@
1
1
  GIT
2
2
  remote: git@github.com:technicalpickles/jeweler.git
3
- revision: 20ae6a869ac588d479774cb60df896cd6138a6bb
3
+ revision: f1a62a72ca08a0f707a83541414ff9d36c875c90
4
4
  specs:
5
- jeweler (2.3.4)
5
+ jeweler (2.3.9)
6
6
  builder
7
- bundler (>= 1.0)
7
+ bundler
8
8
  git (>= 1.2.5)
9
- github_api (~> 0.11.0)
9
+ github_api (~> 0.16.0)
10
10
  highline (>= 1.6.15)
11
11
  nokogiri (>= 1.5.10)
12
- psych (~> 2.2)
12
+ psych
13
13
  rake
14
14
  rdoc
15
15
  semver2
@@ -17,94 +17,91 @@ GIT
17
17
  GEM
18
18
  remote: http://rubygems.org/
19
19
  specs:
20
- actionpack (4.2.3)
21
- actionview (= 4.2.3)
22
- activesupport (= 4.2.3)
23
- rack (~> 1.6)
24
- rack-test (~> 0.6.2)
25
- rails-dom-testing (~> 1.0, >= 1.0.5)
20
+ actionpack (5.2.2)
21
+ actionview (= 5.2.2)
22
+ activesupport (= 5.2.2)
23
+ rack (~> 2.0)
24
+ rack-test (>= 0.6.3)
25
+ rails-dom-testing (~> 2.0)
26
26
  rails-html-sanitizer (~> 1.0, >= 1.0.2)
27
- actionview (4.2.3)
28
- activesupport (= 4.2.3)
27
+ actionview (5.2.2)
28
+ activesupport (= 5.2.2)
29
29
  builder (~> 3.1)
30
- erubis (~> 2.7.0)
31
- rails-dom-testing (~> 1.0, >= 1.0.5)
32
- rails-html-sanitizer (~> 1.0, >= 1.0.2)
33
- activesupport (4.2.3)
34
- i18n (~> 0.7)
35
- json (~> 1.7, >= 1.7.7)
30
+ erubi (~> 1.4)
31
+ rails-dom-testing (~> 2.0)
32
+ rails-html-sanitizer (~> 1.0, >= 1.0.3)
33
+ activesupport (5.2.2)
34
+ concurrent-ruby (~> 1.0, >= 1.0.2)
35
+ i18n (>= 0.7, < 2)
36
36
  minitest (~> 5.1)
37
- thread_safe (~> 0.3, >= 0.3.4)
38
37
  tzinfo (~> 1.1)
39
- addressable (2.5.0)
40
- public_suffix (~> 2.0, >= 2.0.2)
41
- builder (3.2.2)
38
+ addressable (2.4.0)
39
+ builder (3.2.3)
40
+ concurrent-ruby (1.1.4)
41
+ crass (1.0.4)
42
42
  descendants_tracker (0.0.4)
43
43
  thread_safe (~> 0.3, >= 0.3.1)
44
- diff-lcs (1.2.5)
45
- erubis (2.7.0)
44
+ diff-lcs (1.3)
45
+ erubi (1.8.0)
46
46
  faraday (0.9.2)
47
47
  multipart-post (>= 1.2, < 3)
48
- git (1.3.0)
49
- github_api (0.11.3)
50
- addressable (~> 2.3)
51
- descendants_tracker (~> 0.0.1)
48
+ git (1.5.0)
49
+ github_api (0.16.0)
50
+ addressable (~> 2.4.0)
51
+ descendants_tracker (~> 0.0.4)
52
52
  faraday (~> 0.8, < 0.10)
53
- hashie (>= 1.2)
54
- multi_json (>= 1.7.5, < 2.0)
55
- nokogiri (~> 1.6.0)
56
- oauth2
57
- hashie (3.5.5)
58
- highline (1.7.8)
59
- i18n (0.7.0)
60
- json (1.8.3)
61
- jwt (1.5.6)
62
- loofah (2.0.2)
53
+ hashie (>= 3.4)
54
+ mime-types (>= 1.16, < 3.0)
55
+ oauth2 (~> 1.0)
56
+ hashie (3.6.0)
57
+ highline (2.0.0)
58
+ i18n (1.3.0)
59
+ concurrent-ruby (~> 1.0)
60
+ jwt (2.1.0)
61
+ loofah (2.2.3)
62
+ crass (~> 1.0.2)
63
63
  nokogiri (>= 1.5.9)
64
- mini_portile (0.6.2)
65
- minitest (5.8.0)
66
- multi_json (1.12.1)
64
+ mime-types (2.99.3)
65
+ mini_portile2 (2.4.0)
66
+ minitest (5.11.3)
67
+ multi_json (1.13.1)
67
68
  multi_xml (0.6.0)
68
69
  multipart-post (2.0.0)
69
- nokogiri (1.6.6.2)
70
- mini_portile (~> 0.6.0)
71
- oauth2 (1.3.1)
72
- faraday (>= 0.8, < 0.12)
73
- jwt (~> 1.0)
70
+ nokogiri (1.9.1)
71
+ mini_portile2 (~> 2.4.0)
72
+ oauth2 (1.4.1)
73
+ faraday (>= 0.8, < 0.16.0)
74
+ jwt (>= 1.0, < 3.0)
74
75
  multi_json (~> 1.3)
75
76
  multi_xml (~> 0.5)
76
77
  rack (>= 1.2, < 3)
77
- psych (2.2.4)
78
- public_suffix (2.0.5)
79
- rack (1.6.4)
80
- rack-test (0.6.3)
81
- rack (>= 1.0)
82
- rails-deprecated_sanitizer (1.0.3)
83
- activesupport (>= 4.2.0.alpha)
84
- rails-dom-testing (1.0.6)
85
- activesupport (>= 4.2.0.beta, < 5.0)
86
- nokogiri (~> 1.6.0)
87
- rails-deprecated_sanitizer (>= 1.0.1)
88
- rails-html-sanitizer (1.0.2)
89
- loofah (~> 2.0)
90
- rake (12.0.0)
91
- rdoc (5.1.0)
92
- rspec (3.3.0)
93
- rspec-core (~> 3.3.0)
94
- rspec-expectations (~> 3.3.0)
95
- rspec-mocks (~> 3.3.0)
96
- rspec-core (3.3.2)
97
- rspec-support (~> 3.3.0)
98
- rspec-expectations (3.3.1)
78
+ psych (3.1.0)
79
+ rack (2.0.6)
80
+ rack-test (1.1.0)
81
+ rack (>= 1.0, < 3)
82
+ rails-dom-testing (2.0.3)
83
+ activesupport (>= 4.2.0)
84
+ nokogiri (>= 1.6)
85
+ rails-html-sanitizer (1.0.4)
86
+ loofah (~> 2.2, >= 2.2.2)
87
+ rake (12.3.2)
88
+ rdoc (6.1.0)
89
+ rspec (3.8.0)
90
+ rspec-core (~> 3.8.0)
91
+ rspec-expectations (~> 3.8.0)
92
+ rspec-mocks (~> 3.8.0)
93
+ rspec-core (3.8.0)
94
+ rspec-support (~> 3.8.0)
95
+ rspec-expectations (3.8.2)
99
96
  diff-lcs (>= 1.2.0, < 2.0)
100
- rspec-support (~> 3.3.0)
101
- rspec-mocks (3.3.2)
97
+ rspec-support (~> 3.8.0)
98
+ rspec-mocks (3.8.0)
102
99
  diff-lcs (>= 1.2.0, < 2.0)
103
- rspec-support (~> 3.3.0)
104
- rspec-support (3.3.0)
100
+ rspec-support (~> 3.8.0)
101
+ rspec-support (3.8.0)
105
102
  semver2 (3.4.2)
106
- thread_safe (0.3.5)
107
- tzinfo (1.2.2)
103
+ thread_safe (0.3.6)
104
+ tzinfo (1.2.5)
108
105
  thread_safe (~> 0.1)
109
106
 
110
107
  PLATFORMS
@@ -117,4 +114,4 @@ DEPENDENCIES
117
114
  rspec
118
115
 
119
116
  BUNDLED WITH
120
- 1.12.4
117
+ 1.16.1
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.19
1
+ 0.4.0
@@ -2,7 +2,7 @@ class StringMaster
2
2
 
3
3
  require "erb"
4
4
  require "action_view"
5
-
5
+
6
6
  include ERB::Util
7
7
  include ActionView::Helpers
8
8
 
@@ -23,7 +23,7 @@ class StringMaster
23
23
  text.scan(/<([a-zA-Z0-9]+?)(\s[^>]*)?>/).each { |t| open_tags.unshift(t[0]) }
24
24
  text.scan(/<\/\s*?([a-zA-Z0-9]+)\s*?>/).each { |t| open_tags.slice!(open_tags.index(t[0])) unless open_tags.index(t[0]).nil? }
25
25
  open_tags.each { |t| text += "</#{t}>" unless %w(img br hr).include?(t.to_s) }
26
-
26
+
27
27
  @modified_string = text
28
28
  return self
29
29
  end
@@ -45,7 +45,7 @@ class StringMaster
45
45
  end
46
46
  # Convert all unclosed left tag brackets (<) into &lt;
47
47
  @modified_string.gsub!(/<+([^>]*)\Z/, '&lt;\1')
48
- # Convert all unopened right tag brackets (<) into &lt;
48
+ # Convert all unopened right tag brackets (>) into &gt;
49
49
  @modified_string.gsub!(/\A([^<]*)>+/, '\1&gt;')
50
50
  self
51
51
  end
@@ -67,16 +67,22 @@ class StringMaster
67
67
  def urls_to_links(options = {})
68
68
  wrap_with = options[:wrap_with] || ['','']
69
69
  html_options = options[:html_options] || ''
70
- @modified_string.gsub!(
71
- /(\s|^|\A|\n|\t|\r)((http|https):\/\/.*?)([,.])?(\s|$|\n|\Z|\t|\r|<)/,
72
- '\1<a href="\2" ' + html_options + '>\2</a>\4\5'
73
- )
70
+
71
+ # ascii_only option - show URLs with warning about contain non-latin characters
72
+ if options[:ascii_only]
73
+ validate_url_contains_ascii(@modified_string, html_options, wrap_with)
74
+ else
75
+ @modified_string.gsub!(
76
+ /(\s|^|\A|\n|\t|\r)((http|https):\/\/.*?)([,.])?(\s|$|\n|\Z|\t|\r|<)/,
77
+ '\1<a href="\2" ' + html_options + '>\2</a>\4\5'
78
+ )
79
+ end
74
80
  self
75
81
  end
76
82
 
77
83
  # Breaks words that are longer than 'length'
78
84
  def break_long_words(length=75, break_char=" ", &block)
79
- @modified_string.gsub!(/<a [^>]+>|<img [^>]+>|([^\s^\n^\^^\A^\t^\r<]{#{length},}?)|<\/a>/) do |s|
85
+ @modified_string.gsub!(/https?:\/\/\S+|<a [^>]+>|<img [^>]+>|([^\s^\n^\^^\A^\t^\r<]{#{length},}?)|<\/a>/) do |s|
80
86
  if $1
81
87
  ns = block_given? ? yield($1) : $1
82
88
  last_pos, result_string = 0, ''
@@ -118,7 +124,7 @@ class StringMaster
118
124
  if line =~ regexp
119
125
  unless code_tag == :opened
120
126
  result.chomp! if options[:remove_newlines]
121
- result += "<#{tag}>"
127
+ result += "<#{tag}>"
122
128
  code_tag = :opened
123
129
  end
124
130
  result += line.sub(regexp, '')
@@ -134,11 +140,11 @@ class StringMaster
134
140
  result += line
135
141
  end
136
142
  end
137
-
143
+
138
144
  # Make sure there's always a closing tag
139
145
  if code_tag == :opened
140
146
  result.chomp!
141
- result += "</#{tag}>\n"
147
+ result += "</#{tag}>\n"
142
148
  end
143
149
 
144
150
  @modified_string = result
@@ -147,9 +153,9 @@ class StringMaster
147
153
 
148
154
  # Finds all lines that start with 4 spaces and wraps them into <code> tags.
149
155
  # It also transforms each occurence of 2 or more spaces into an &nbsp; entity,
150
- # which is available as a standalone method #preserve_whitespace
156
+ # which is available as a standalone method #preserve_whitespace
151
157
  def wrap_code
152
- wrap_lines("code", /\A\s{4}/, remove_newlines: true)
158
+ wrap_lines("code", /\A\s{4}/, remove_newlines: true)
153
159
  preserve_whitespace_within("code") # already returns `self`
154
160
  end
155
161
 
@@ -166,7 +172,7 @@ class StringMaster
166
172
  @modified_string.gsub!(/`(.+?)`/m, opening_tag + '\1' + closing_tag)
167
173
  self
168
174
  end
169
-
175
+
170
176
  # Same as wrap_inline_code, but spans across multiplelines
171
177
  def wrap_backticks_code(opening_tag="<code>", closing_tag="</code>")
172
178
  @modified_string.gsub!(/`(.+?)`/m, opening_tag + '\1' + closing_tag)
@@ -177,5 +183,18 @@ class StringMaster
177
183
  modified_string.html_safe
178
184
  end
179
185
 
180
- end
186
+ private
181
187
 
188
+ # Checking references for the presence of non-latin characters. If such
189
+ # characters are found, the link will not be displayed like html link.
190
+ # Instead of it, will be returned a warning message.
191
+ def validate_url_contains_ascii(string, html_options, wrap_with)
192
+ string.gsub!(/((http|https)[^<\s,]{7,}\b)/im) do |link|
193
+ if link.ascii_only?
194
+ "<a href='#{link}'#{html_options}>#{link}</a>"
195
+ else
196
+ "[WARNING, URL CONTAINS NON-LATIN LETTERS: #{link}]"
197
+ end
198
+ end
199
+ end
200
+ end
@@ -1,7 +1,7 @@
1
1
  require "spec_helper"
2
2
 
3
3
  describe StringMaster do
4
-
4
+
5
5
  it "closes unclosed tags" do
6
6
  parser = StringMaster.new("<b>Hello,<i>world</b>")
7
7
  parser.close_tags.string.should == '<b>Hello,<i>world</b></i>'
@@ -50,33 +50,121 @@ describe StringMaster do
50
50
 
51
51
  it "makes images of urls that end with .jpg and other image extensions" do
52
52
  parser = StringMaster.new('Hello, this is my photo http://image.com/image.jpg, yeah baby')
53
- parser.urls_to_images(:wrap_with => ['<p>', '</p>'], :html_options => 'class="ico"').string.should ==
53
+ parser.urls_to_images(:wrap_with => ['<p>', '</p>'], :html_options => 'class="ico"').string.should ==
54
54
  'Hello, this is my photo<p><img src="http://image.com/image.jpg" alt="" class="ico"/> </p>yeah baby'
55
55
 
56
56
  # use https
57
57
  parser = StringMaster.new('Hello, this is my photo https://image.com/image.jpg, yeah baby')
58
- parser.urls_to_images(:wrap_with => ['<p>', '</p>'], :html_options => 'class="ico"').string.should ==
58
+ parser.urls_to_images(:wrap_with => ['<p>', '</p>'], :html_options => 'class="ico"').string.should ==
59
59
  'Hello, this is my photo<p><img src="https://image.com/image.jpg" alt="" class="ico"/> </p>yeah baby'
60
60
  end
61
61
 
62
- it "makes links of urls" do
63
- # example 1
64
- parser = StringMaster.new('Hello, this is my homepage http://url.com, yeah baby')
65
- parser.urls_to_links.string.should ==
66
- 'Hello, this is my homepage <a href="http://url.com" >http://url.com</a>, yeah baby'
67
-
68
- # example 2
69
- parser = StringMaster.new("http://localhost:3000/\nhttp://localhost:3000/")
70
- parser.urls_to_links.string.should ==
71
- "<a href=\"http://localhost:3000/\" >http://localhost:3000/</a>\n<a href=\"http://localhost:3000/\" >http://localhost:3000/</a>"
62
+ describe 'makes links of urls' do
63
+ # ascii_only option - show URLs with warning about contain non-latin characters
64
+ describe 'without ascii_only validate' do
65
+ # example 1
66
+ it 'when text include url' do
67
+ parser = StringMaster.new('Hello, this is my homepage http://url.com, yeah baby')
68
+ parser.urls_to_links(ascii_only: false).string.should ==
69
+ 'Hello, this is my homepage <a href="http://url.com" >http://url.com</a>, yeah baby'
70
+ end
71
+
72
+ # example 2
73
+ it 'when text have several urls' do
74
+ parser = StringMaster.new("http://localhost:3000/\nhttp://localhost:3000/")
75
+ parser.urls_to_links(ascii_only: false).string.should ==
76
+ "<a href=\"http://localhost:3000/\" >http://localhost:3000/</a>\n<a href=\"http://localhost:3000/\" >http://localhost:3000/</a>"
77
+ end
78
+
79
+ # example 3
80
+ it 'when text have html tag and url' do
81
+ parser = StringMaster.new('http://gyazo.com/a4c16e7a6009f40f29248ad4fed41bd3.png<br>')
82
+ parser.urls_to_links(ascii_only: false).string.should == '<a href="http://gyazo.com/a4c16e7a6009f40f29248ad4fed41bd3.png" >http://gyazo.com/a4c16e7a6009f40f29248ad4fed41bd3.png</a><br>'
83
+ end
84
+
85
+ # example 4, with https
86
+ it 'when text include https and url' do
87
+ parser = StringMaster.new('https://gyazo.com/a4c16e7a6009f40f29248ad4fed41bd3.png<br>')
88
+ parser.urls_to_links(ascii_only: false).string.should == '<a href="https://gyazo.com/a4c16e7a6009f40f29248ad4fed41bd3.png" >https://gyazo.com/a4c16e7a6009f40f29248ad4fed41bd3.png</a><br>'
89
+ end
90
+
91
+ describe 'when url contain non-latin characters and' do
92
+
93
+ it "warning message doesn't shows" do
94
+ parser = StringMaster.new('http://url.cоm')
95
+ parser.urls_to_links(ascii_only: false).string.should_not ==
96
+ '[WARNING, URL CONTAINS NON-LATIN LETTERS: http://url.cоm]'
97
+ end
98
+
99
+ it "non-latin url shows like a url with latin only characters" do
100
+ parser = StringMaster.new('http://url.cоm')
101
+ parser.urls_to_links(ascii_only: false).string.should ==
102
+ '<a href="http://url.cоm" >http://url.cоm</a>'
103
+ end
104
+ end
105
+ end
106
+
107
+ describe 'with ascii_only validate' do
108
+ # example 1
109
+ it 'show warning when text include non-latin url' do
110
+ parser = StringMaster.new('Hello, this is my homepage http://url.cоm, yeah baby')
111
+ parser.urls_to_links(ascii_only: true).string.should ==
112
+ 'Hello, this is my homepage [WARNING, URL CONTAINS NON-LATIN LETTERS: http://url.cоm], yeah baby'
113
+ end
114
+
115
+ # example 2
116
+ it 'show warning when text have several non-latin urls' do
117
+ parser = StringMaster.new("http://lоcalhost:3000\nhttp://lоcalhost:3000")
118
+ parser.urls_to_links(ascii_only: true).string.should ==
119
+ "[WARNING, URL CONTAINS NON-LATIN LETTERS: http://lоcalhost:3000]\n[WARNING, URL CONTAINS NON-LATIN LETTERS: http://lоcalhost:3000]"
120
+ end
72
121
 
73
- # example 3
74
- parser = StringMaster.new('http://gyazo.com/a4c16e7a6009f40f29248ad4fed41bd3.png<br>')
75
- parser.urls_to_links.string.should == '<a href="http://gyazo.com/a4c16e7a6009f40f29248ad4fed41bd3.png" >http://gyazo.com/a4c16e7a6009f40f29248ad4fed41bd3.png</a><br>'
122
+ # example 3
123
+ it 'show warning when text have html tag and non-latin url' do
124
+ parser = StringMaster.new('http://gyаzo.com/a4c16e7a6009f40f29248ad4fed41bd3.png<br>')
125
+ parser.urls_to_links(ascii_only: true).string.should == '[WARNING, URL CONTAINS NON-LATIN LETTERS: http://gyаzo.com/a4c16e7a6009f40f29248ad4fed41bd3.png]<br>'
126
+ end
76
127
 
77
- # example 4, with https
78
- parser = StringMaster.new('https://gyazo.com/a4c16e7a6009f40f29248ad4fed41bd3.png<br>')
79
- parser.urls_to_links.string.should == '<a href="https://gyazo.com/a4c16e7a6009f40f29248ad4fed41bd3.png" >https://gyazo.com/a4c16e7a6009f40f29248ad4fed41bd3.png</a><br>'
128
+ # example 4, with https
129
+ it 'show warning when text include https and non-latin url' do
130
+ parser = StringMaster.new('https://gyаzo.com/a4c16e7a6009f40f29248ad4fed41bd3.png<br>')
131
+ parser.urls_to_links(ascii_only: true).string.should == '[WARNING, URL CONTAINS NON-LATIN LETTERS: https://gyаzo.com/a4c16e7a6009f40f29248ad4fed41bd3.png]<br>'
132
+ end
133
+
134
+ describe 'when url contain latin characters and' do
135
+ it "warning message doesn't shows" do
136
+ parser = StringMaster.new('http://url.com')
137
+ parser.urls_to_links(ascii_only: true).string.should_not ==
138
+ '[WARNING, URL CONTAINS NON-LATIN LETTERS: http://url.cоm]'
139
+ end
140
+
141
+ it "latin url shows correct" do
142
+ parser = StringMaster.new('http://url.com')
143
+ parser.urls_to_links(ascii_only: true).string.should ==
144
+ "<a href='http://url.com'>http://url.com</a>"
145
+ end
146
+ end
147
+
148
+ describe 'when text contain' do
149
+ it 'non-latin symbols and latin url' do
150
+ parser = StringMaster.new('тест http://url.com')
151
+ parser.urls_to_links(ascii_only: true).string.should ==
152
+ "тест <a href='http://url.com'>http://url.com</a>"
153
+ end
154
+
155
+ it 'both symbol types and non-latin url' do
156
+ parser = StringMaster.new('тест non-latin url http://url.cоm')
157
+ parser.urls_to_links(ascii_only: true).string.should ==
158
+ "тест non-latin url [WARNING, URL CONTAINS NON-LATIN LETTERS: http://url.cоm]"
159
+ end
160
+
161
+ it 'both symbol types both url types' do
162
+ parser = StringMaster.new('тест non-latin url http://url.cоm и тест only-latin url https://url.com')
163
+ parser.urls_to_links(ascii_only: true).string.should ==
164
+ "тест non-latin url [WARNING, URL CONTAINS NON-LATIN LETTERS: http://url.cоm] и тест only-latin url <a href='https://url.com'>https://url.com</a>"
165
+ end
166
+ end
167
+ end
80
168
  end
81
169
 
82
170
  it "wraps code in <code> tags" do
@@ -143,6 +231,18 @@ WRAPPED_CODE
143
231
  parser.break_long_words(5).string.should == '<img src="image.gif" alt="looooooooooooongalt"/>'
144
232
  end
145
233
 
234
+ it "handles http links when attempt to break long words" do
235
+ string_with_long_link = 'some text http://verylonglink.com other text'
236
+ parser = StringMaster.new(string_with_long_link)
237
+ parser.break_long_words(6).string.should == string_with_long_link
238
+ end
239
+
240
+ it "handles http links when attempt to break long words" do
241
+ string_with_long_link = 'some text https://verylonglink.com other text'
242
+ parser = StringMaster.new(string_with_long_link)
243
+ parser.break_long_words(6).string.should == string_with_long_link
244
+ end
245
+
146
246
  it "cuts too long string and appends (if specified) characters to its end" do
147
247
  parser = StringMaster.new("This is quite a long text")
148
248
  parser.cut(11, 7, :append => '...').string.should == "This is..."
data/spec/spec_helper.rb CHANGED
@@ -5,4 +5,5 @@ Dir[File.dirname(__FILE__) + "/../lib/string_master/*.rb"].each {|f| require f }
5
5
 
6
6
  RSpec.configure do |config|
7
7
  config.expect_with(:rspec) { |c| c.syntax = :should }
8
+ config.default_formatter = "doc"
8
9
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: string_master
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.19
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Roman Snitko
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-04-20 00:00:00.000000000 Z
11
+ date: 2018-12-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: actionpack
@@ -113,7 +113,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
113
113
  version: '0'
114
114
  requirements: []
115
115
  rubyforge_project:
116
- rubygems_version: 2.5.1
116
+ rubygems_version: 2.7.6
117
117
  signing_key:
118
118
  specification_version: 4
119
119
  summary: Most common string manipulations for a webapp