string-utility 2.6.1 → 2.7.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: d2defc994ee582faf5c459b3be066bbbf9bc590f
4
- data.tar.gz: f72122ba8058fe44ab3146f0840bbb411faa78c8
3
+ metadata.gz: 65f4ab68c518d824992c9a23668fff43c9cc059b
4
+ data.tar.gz: e7daf05079663691b8ae629b715c68a4101b8fe7
5
5
  SHA512:
6
- metadata.gz: e316fd265940f7c7088d991149a049b1e3db5382b514aea73a0bf435504708092ec50008626bb6501b8124766d3963cbf584f6d3594d8588f0f77b0ae2d69379
7
- data.tar.gz: 6198e97f447abfca20894832817b29ebebe7d8e74b24ad6f8affa93cb97dfdc9bfda4afc1c40a1d4698cb7c4d6688215c75a4eff1062863e7db10f08fe16c701
6
+ metadata.gz: 481e28a768310e5e4926a1b7bacb3d76a02dc88962abe2efe595298a595f9a6866017c1ed5a864232f3181d3e9f15d3528a45034294b6751ad58b3357a304fb9
7
+ data.tar.gz: fb0a4e78fa9ef435947020a9f9f9e798f616a601d0f792dacf5283dc84053212aa873206feddb82b35f55199cb3d481929dc20112565520994b12740f83248fc
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Changelog
2
2
  ## Version 2
3
+ ### Version 2.7.0
4
+ * Improve random_line by not dividing by 0.
5
+ * Add safely_gsub! refinement method for an easier, more readable version of `str.gsub!(pattern, replace) || str`.
6
+
3
7
  ### Version 2.6.1
4
8
  * Fix issue where to_i_separated, underscorify, and spacify returned nil, due to tr! and gsub! returning nil (#2).
5
9
 
data/lib/utils.rb CHANGED
@@ -6,9 +6,9 @@ module StringUtility
6
6
  # @param separator [String] The string to use as a separator. Can only be
7
7
  # 1 character long. Will use the first character if it is greater than
8
8
  # 1 character long. Defaults to a comma.
9
- # @return [String] Formatted version of the provided string.
9
+ # @return [String] A new formatted version of the provided string.
10
10
  def separate(count = 3, separator = ',')
11
- separator = separator[0] if separator.length > 1
11
+ separator = separator[0]
12
12
  string = self
13
13
  string.reverse!
14
14
  string = string.scan(/.{1,#{count}}/).join(separator)
@@ -19,22 +19,28 @@ module StringUtility
19
19
  # of #separate.
20
20
  # @return [Int] The integer version of the separated string.
21
21
  def to_i_separated
22
- self.gsub!(/\D/, '') if self =~ /\D/
23
- to_i
22
+ safely_gsub!(/\D/, '').to_i
24
23
  end
25
24
 
26
25
  # Replaces all whitespace with underscores.
27
26
  # @return [String] The string with replaced whitespace.
28
27
  def underscorify
29
- self.gsub!(/\s/, '_') if self =~ /\s/
30
- self
28
+ safely_gsub!(/\s/, '_')
31
29
  end
32
30
 
33
31
  # Replaces all underscores with whitespace.
34
32
  # @return [String] The string with replaced underscores.
35
33
  def spacify
36
- self.tr!('_', ' ') if self.include?('_')
37
- self
34
+ safely_gsub!('_', ' ')
35
+ end
36
+
37
+ # Readable shorthand for the only safe, fast way to use gsub! using || operators. Unlike gsub!, safely_gsub! will
38
+ # NEVER return nil. This method should not be used instead of gsub! when the string replacement is predictable, as
39
+ # this method is somewhat slower than gsub! (see spec/benchmark).
40
+ # @see #{String#gsub!} for parameters and other information.
41
+ # @return [String] Exactly what gsub! would return, or self. Never nil.
42
+ def safely_gsub!(pattern, replace)
43
+ gsub!(pattern, replace) || self
38
44
  end
39
45
  end
40
46
 
@@ -47,20 +53,21 @@ module StringUtility
47
53
  file = open(path)
48
54
  selected = nil
49
55
  file.each_with_index do |line, num|
50
- selected = line if !line.nil? && rand < 1.0 / num
56
+ int = num == 0 ? 1.0 : 1.0 / num
57
+ selected = line if !line.nil? && rand < int
51
58
  end
52
59
  file.close
53
60
  selected
54
61
  end
55
62
 
56
- # Gets a random three-digit hexidecimal web color string.
57
- # @return [String] A random hexidecimal.
63
+ # Gets a random three-digit hexadecimal web color string.
64
+ # @return [String] A random hexadecimal.
58
65
  def self.random_color_three
59
66
  string = random_color(0..2)
60
67
  "##{string}"
61
68
  end
62
69
 
63
- # Gets a random six-digit hexidecimal web color string.
70
+ # Gets a random six-digit hexadecimal web color string.
64
71
  # @return [String] See #random_color_three
65
72
  def self.random_color_six
66
73
  string = random_color(0..5)
data/spec/benchmark.rb CHANGED
@@ -46,3 +46,36 @@ Benchmark.bm do |b|
46
46
  end
47
47
  end
48
48
  end
49
+
50
+ Benchmark.bm do |b|
51
+ b.report('gsub! success') do
52
+ TIMES.times do
53
+ 'ABC'.gsub!('ABC', '123')
54
+ end
55
+ end
56
+
57
+ b.report('safely_gsub! success') do
58
+ TIMES.times do
59
+ 'ABC'.safely_gsub!('ABC', '123')
60
+ end
61
+ end
62
+
63
+ b.report('gsub! fail') do
64
+ TIMES.times do
65
+ 'ABC'.gsub!('DEF', '456')
66
+ end
67
+ end
68
+
69
+ b.report('gsub! fail safe') do
70
+ TIMES.times do
71
+ str = 'ABC'
72
+ str.gsub!('DEF', '456') || str
73
+ end
74
+ end
75
+
76
+ b.report('safely_gsub! fail') do
77
+ TIMES.times do
78
+ 'ABC'.safely_gsub!('DEF', '456')
79
+ end
80
+ end
81
+ end
data/spec/testcases.rb CHANGED
@@ -8,6 +8,7 @@ class TestStringUtility < Test::Unit::TestCase
8
8
  assert_equal('10,00', '1000'.separate(2))
9
9
  assert_equal('1:000', '1000'.separate(3, ':'))
10
10
  assert_equal('10:00', '1000'.separate(2, ':'))
11
+ assert_equal('100', '100'.separate)
11
12
  end
12
13
 
13
14
  def test_to_i_sparated
@@ -37,4 +38,10 @@ class TestStringUtility < Test::Unit::TestCase
37
38
  def test_random_color_six
38
39
  assert_instance_of(String, StringUtility.random_color_six)
39
40
  end
41
+
42
+ def test_safely_gsub
43
+ assert_equal('b', 'b'.safely_gsub!('a', '1'))
44
+ assert_not_nil('b'.safely_gsub!('a', '1'))
45
+ assert_equal('bb', 'ab'.safely_gsub!('a', 'b'))
46
+ end
40
47
  end
metadata CHANGED
@@ -1,17 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: string-utility
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.6.1
4
+ version: 2.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eli Foster
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-12-16 00:00:00.000000000 Z
11
+ date: 2016-02-18 00:00:00.000000000 Z
12
12
  dependencies: []
13
- description: |2
14
- Some simple but handy methods to interact with string objects.
13
+ description: " Some simple but handy methods to interact with string objects.\n"
15
14
  email: elifosterwy@gmail.com
16
15
  executables: []
17
16
  extensions: []
@@ -43,9 +42,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
43
42
  version: '0'
44
43
  requirements: []
45
44
  rubyforge_project:
46
- rubygems_version: 2.4.5.1
45
+ rubygems_version: 2.5.1
47
46
  signing_key:
48
47
  specification_version: 4
49
48
  summary: Provides some basic utilities for interacting with Strings
50
49
  test_files: []
51
- has_rdoc: