string_master 0.3.19 → 0.4.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
- 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