fast_blank 1.0.0 → 1.0.1

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: 5ccb1d100034d7f4b64f8b586a1936fa782bae23
4
- data.tar.gz: ca1266f681fd9a599f5ce7439f19d11e12b7bc25
2
+ SHA256:
3
+ metadata.gz: a46e29b33d568838d32c4610aee3abe0c747a3a7e51ed6d68fab8583898d8abb
4
+ data.tar.gz: 2a2f40409b7f03a01e05eedcbab8291580e4fb56ebf49cad9a77f9dc19273fa6
5
5
  SHA512:
6
- metadata.gz: 99af052c09364d2c1d69a53e948e3de398c831e023face6f6b0d0cd12d8a9f6572b5500ba4f38c136df070093cf99cc3dd986bb8ce9ede599bd7d0c65718c2b5
7
- data.tar.gz: a4ed6e70604a61c11eea45a5bc723e28e77e15afc51149986bf67a11c27a380bb803f9047de560ee6ac65f6d605005367b24ce08d9f34179a909061dce21763e
6
+ metadata.gz: 07f48b8d905e801cf320544001a351b5ebb671225a7a9eeba0248f14405cc9981e26b365f1c27a08636dd0379b9522599df556b0ad13e59435abffb557240336
7
+ data.tar.gz: e9cd3ec4d02c9b8a395432308c4cfc020374597f53852b255d55630e6929772bb07a4d2978852f90d15c9ec67f662323ded9dfaa5bb252b992957706b0fb92fc
data/README.md CHANGED
@@ -1,66 +1,146 @@
1
- ### String blank? Ruby Extension
1
+ ### `String#blank?` Ruby Extension
2
2
 
3
3
  [![Gem Version](https://badge.fury.io/rb/fast_blank.png)](http://badge.fury.io/rb/fast_blank) [![Build Status](https://travis-ci.org/SamSaffron/fast_blank.png?branch=master)](https://travis-ci.org/SamSaffron/fast_blank)
4
4
 
5
- `fast_blank` is a simple extension which provides a fast implementation of active support's string#blank? function
5
+ `fast_blank` is a simple C extension which provides a fast implementation of [Active Support's `String#blank?` method](http://api.rubyonrails.org/classes/String.html#method-i-blank-3F).
6
6
 
7
7
  ### How do you use it?
8
8
 
9
9
  require 'fast_blank'
10
10
 
11
- ### How fast is "Fast"?
11
+ or add it to your Bundler Gemfile
12
12
 
13
+ gem 'fast_blank'
13
14
 
14
- About 5-9x faster than current active support, on my machine (your mileage my vary):
15
+ ### How fast is "Fast"?
15
16
 
16
- $ ./benchmark
17
+ About 1.2–20x faster than Active Support on my machine (your mileage my vary, depends on string length):
17
18
 
18
19
  ```
19
- user system total real
20
- user system total real
21
- Fast Blank 0 : 0.070000 0.000000 0.070000 ( 0.075247)
22
- Fast Blank (Active Support) 0 : 0.080000 0.000000 0.080000 ( 0.075029)
23
- Slow Blank 0 : 0.500000 0.000000 0.500000 ( 0.503026)
24
- Fast Blank 6 : 0.200000 0.000000 0.200000 ( 0.191480)
25
- Fast Blank (Active Support) 6 : 0.180000 0.000000 0.180000 ( 0.179891)
26
- Slow Blank 6 : 0.660000 0.000000 0.660000 ( 0.658604)
27
- Fast Blank 14 : 0.080000 0.010000 0.090000 ( 0.086371)
28
- Fast Blank (Active Support) 14 : 0.130000 0.000000 0.130000 ( 0.129258)
29
- Slow Blank 14 : 0.890000 0.000000 0.890000 ( 0.886140)
30
- Fast Blank 24 : 0.150000 0.000000 0.150000 ( 0.158151)
31
- Fast Blank (Active Support) 24 : 0.140000 0.000000 0.140000 ( 0.149284)
32
- Slow Blank 24 : 0.900000 0.000000 0.900000 ( 0.899663)
33
- Fast Blank 136 : 0.130000 0.000000 0.130000 ( 0.125831)
34
- Fast Blank (Active Support) 136 : 0.150000 0.000000 0.150000 ( 0.148948)
35
- Slow Blank 136 : 0.900000 0.000000 0.900000 ( 0.899885)
20
+ $ bundle exec ./benchmark
21
+
22
+ ================== Test String Length: 0 ==================
23
+ Calculating -------------------------------------
24
+ Fast Blank 225.251k i/100ms
25
+ Fast ActiveSupport 225.676k i/100ms
26
+ Slow Blank 110.934k i/100ms
27
+ New Slow Blank 221.792k i/100ms
28
+ -------------------------------------------------
29
+ Fast Blank 29.673M (± 2.7%) i/s - 148.215M
30
+ Fast ActiveSupport 28.249M (± 3.5%) i/s - 141.048M
31
+ Slow Blank 2.158M (± 3.3%) i/s - 10.872M
32
+ New Slow Blank 23.558M (± 3.2%) i/s - 117.772M
33
+
34
+ Comparison:
35
+ Fast Blank: 29673200.1 i/s
36
+ Fast ActiveSupport: 28248894.5 i/s - 1.05x slower
37
+ New Slow Blank: 23557900.0 i/s - 1.26x slower
38
+ Slow Blank: 2157787.7 i/s - 13.75x slower
39
+
40
+
41
+ ================== Test String Length: 6 ==================
42
+ Calculating -------------------------------------
43
+ Fast Blank 201.185k i/100ms
44
+ Fast ActiveSupport 205.076k i/100ms
45
+ Slow Blank 102.061k i/100ms
46
+ New Slow Blank 123.087k i/100ms
47
+ -------------------------------------------------
48
+ Fast Blank 13.894M (± 2.3%) i/s - 69.409M
49
+ Fast ActiveSupport 14.627M (± 3.5%) i/s - 73.212M
50
+ Slow Blank 1.943M (± 2.3%) i/s - 9.798M
51
+ New Slow Blank 2.796M (± 1.8%) i/s - 14.032M
52
+
53
+ Comparison:
54
+ Fast ActiveSupport: 14627063.7 i/s
55
+ Fast Blank: 13893631.2 i/s - 1.05x slower
56
+ New Slow Blank: 2795783.3 i/s - 5.23x slower
57
+ Slow Blank: 1943025.9 i/s - 7.53x slower
58
+
59
+
60
+ ================== Test String Length: 14 ==================
61
+ Calculating -------------------------------------
62
+ Fast Blank 220.004k i/100ms
63
+ Fast ActiveSupport 219.716k i/100ms
64
+ Slow Blank 147.399k i/100ms
65
+ New Slow Blank 106.651k i/100ms
66
+ -------------------------------------------------
67
+ Fast Blank 24.949M (± 3.0%) i/s - 124.742M
68
+ Fast ActiveSupport 24.491M (± 3.3%) i/s - 122.382M
69
+ Slow Blank 4.292M (± 1.6%) i/s - 21.520M
70
+ New Slow Blank 2.115M (± 2.4%) i/s - 10.665M
71
+
72
+ Comparison:
73
+ Fast Blank: 24948558.8 i/s
74
+ Fast ActiveSupport: 24491245.1 i/s - 1.02x slower
75
+ Slow Blank: 4292490.5 i/s - 5.81x slower
76
+ New Slow Blank: 2115097.6 i/s - 11.80x slower
77
+
78
+
79
+ ================== Test String Length: 24 ==================
80
+ Calculating -------------------------------------
81
+ Fast Blank 206.555k i/100ms
82
+ Fast ActiveSupport 208.513k i/100ms
83
+ Slow Blank 137.733k i/100ms
84
+ New Slow Blank 101.215k i/100ms
85
+ -------------------------------------------------
86
+ Fast Blank 16.761M (± 2.7%) i/s - 83.861M
87
+ Fast ActiveSupport 17.710M (± 3.2%) i/s - 88.618M
88
+ Slow Blank 3.744M (± 2.0%) i/s - 18.732M
89
+ New Slow Blank 1.962M (± 2.7%) i/s - 9.818M
90
+
91
+ Comparison:
92
+ Fast ActiveSupport: 17709936.5 i/s
93
+ Fast Blank: 16760839.7 i/s - 1.06x slower
94
+ Slow Blank: 3744048.4 i/s - 4.73x slower
95
+ New Slow Blank: 1961831.1 i/s - 9.03x slower
96
+
97
+
98
+ ================== Test String Length: 136 ==================
99
+ Calculating -------------------------------------
100
+ Fast Blank 201.772k i/100ms
101
+ Fast ActiveSupport 189.120k i/100ms
102
+ Slow Blank 129.439k i/100ms
103
+ New Slow Blank 90.677k i/100ms
104
+ -------------------------------------------------
105
+ Fast Blank 16.718M (± 2.8%) i/s - 83.534M
106
+ Fast ActiveSupport 17.617M (± 3.6%) i/s - 87.941M
107
+ Slow Blank 3.725M (± 3.0%) i/s - 18.639M
108
+ New Slow Blank 1.940M (± 4.8%) i/s - 9.702M
109
+
110
+ Comparison:
111
+ Fast ActiveSupport: 17616782.1 i/s
112
+ Fast Blank: 16718307.8 i/s - 1.05x slower
113
+ Slow Blank: 3725097.6 i/s - 4.73x slower
114
+ New Slow Blank: 1940271.2 i/s - 9.08x slower
36
115
 
37
116
 
38
117
  ```
39
118
 
40
-
41
119
  Additionally, this gem allocates no strings during the test, making it less of a GC burden.
42
120
 
121
+ ### Compatibility note:
43
122
 
44
- ###Compatibility note:
123
+ `fast_blank` supports MRI Ruby 1.9.3, 2.0, 2.1, and 2.2, as well as Rubinius 2.x. Earlier versions of MRI are untested.
45
124
 
46
- fast_blank is supported under MRI Ruby 1.9.3, 2.0 and 2.1, earlier versions of MRI are untested.
125
+ `fast_blank` implements `String#blank?` as MRI would have implemented it, meaning it has 100% parity with `String#strip.length == 0`.
47
126
 
48
- fast_blank implements string.blank? as MRI would have it implemented, meaning it has 100% parity with `String#strip.length == 0`.
127
+ Active Support's version also considers Unicode spaces. For example, `"\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000".blank?` is true in Active Support even though `fast_blank` would treat it as *not* blank. Therefore, `fast_blank` also provides `blank_as?` which is a 100%-compatible Active Support `blank?` replacement.
49
128
 
129
+ ### Credits
50
130
 
51
- Active Supports version looks also at unicode spaces
52
- for example: `"\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000".blank?` is true in Active Support even though fast_blank would treat it as not blank.
131
+ * Author: Sam Saffron (sam.saffron@gmail.com)
132
+ * https://github.com/SamSaffron/fast_blank
133
+ * License: MIT
134
+ * Gem template based on [CodeMonkeySteve/fast_xor](https://github.com/CodeMonkeySteve/fast_xor)
53
135
 
54
- fast_blank also provides blank_as? which is a 100% compatible blank? replacement.
136
+ ### Change log:
55
137
 
56
- Author: Sam Saffron sam.saffron@gmail.com
57
- http://github.com/SamSaffron/fast_blank
58
- License: MIT
138
+ 1.0.1:
139
+ - Minor, avoid warnings if redefining blank?
59
140
 
60
- ### Change log:
141
+ 1.0.0:
142
+ - Adds Ruby 2.2 support ([@tjschuck](https://github.com/tjschuck) — [#9](https://github.com/SamSaffron/fast_blank/pull/9))
61
143
 
62
144
  0.0.2:
63
- - Removed rake dependency (tmm1)
64
- - Unrolled internal loop to improve perf (tmm1)
65
-
66
- (gem template based on https://github.com/CodeMonkeySteve/fast_xor )
145
+ - Removed rake dependency ([@tmm1](https://github.com/tmm1) — [#2](https://github.com/SamSaffron/fast_blank/pull/2))
146
+ - Unrolled internal loop to improve perf ([@tmm1](https://github.com/tmm1) — [#2](https://github.com/SamSaffron/fast_blank/pull/2))
data/benchmark CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
  $: << File.dirname(__FILE__)+'/lib'
3
- require 'benchmark'
3
+ require 'benchmark/ips'
4
4
  require 'fast_blank'
5
5
 
6
6
  class String
@@ -8,13 +8,13 @@ class String
8
8
  def slow_blank?
9
9
  /\A[[:space:]]*\z/ === self
10
10
  end
11
- end
12
-
13
-
14
- n = 1000000
15
11
 
12
+ def new_slow_blank?
13
+ empty? || !(/[[:^space:]]/ === self)
14
+ end
15
+ end
16
16
 
17
- strings = [
17
+ test_strings = [
18
18
  "",
19
19
  "\r\n\r\n ",
20
20
  "this is a test",
@@ -26,32 +26,141 @@ strings = [
26
26
  this is a longer test"
27
27
  ]
28
28
 
29
- strings.each do |s|
29
+ test_strings.each do |s|
30
30
  raise "failed on #{s.inspect}" if s.blank? != s.slow_blank?
31
+ raise "failed on #{s.inspect}" if s.blank? != s.new_slow_blank?
31
32
  end
32
33
 
33
- Benchmark.bmbm do |x|
34
- strings.each do |s|
35
- x.report("Fast Blank #{s.length} :") do n.times { s.blank? } end
36
- x.report("Fast Blank (Active Support) #{s.length} :") do n.times { s.blank_as? } end
37
- x.report("Slow Blank #{s.length} :") do n.times { s.slow_blank? } end
38
- #x.report("Empty #{s.length} :") do n.times { s.empty? } end
34
+ test_strings.each do |s|
35
+ puts "\n================== Test String Length: #{s.length} =================="
36
+ Benchmark.ips do |x|
37
+ x.report("Fast Blank") do |times|
38
+ i = 0
39
+ while i < times
40
+ s.blank?
41
+ i += 1
42
+ end
43
+ end
44
+
45
+ x.report("Fast ActiveSupport") do |times|
46
+ i = 0
47
+ while i < times
48
+ s.blank_as?
49
+ i += 1
50
+ end
51
+ end
52
+
53
+ x.report("Slow Blank") do |times|
54
+ i = 0
55
+ while i < times
56
+ s.slow_blank?
57
+ i += 1
58
+ end
59
+ end
60
+
61
+ x.report("New Slow Blank") do |times|
62
+ i = 0
63
+ while i < times
64
+ s.new_slow_blank?
65
+ i += 1
66
+ end
67
+ end
68
+
69
+ x.compare!
39
70
  end
40
71
  end
41
72
 
42
- # user system total real
43
- # Fast Blank 0 : 0.050000 0.000000 0.050000 ( 0.048928)
44
- # Fast Blank (Active Support) 0 : 0.050000 0.000000 0.050000 ( 0.049967)
45
- # Slow Blank 0 : 0.290000 0.000000 0.290000 ( 0.295086)
46
- # Fast Blank 6 : 0.090000 0.000000 0.090000 ( 0.089295)
47
- # Fast Blank (Active Support) 6 : 0.090000 0.000000 0.090000 ( 0.089648)
48
- # Slow Blank 6 : 0.420000 0.000000 0.420000 ( 0.418375)
49
- # Fast Blank 14 : 0.060000 0.000000 0.060000 ( 0.056642)
50
- # Fast Blank (Active Support) 14 : 0.060000 0.000000 0.060000 ( 0.061443)
51
- # Slow Blank 14 : 0.670000 0.000000 0.670000 ( 0.668229)
52
- # Fast Blank 24 : 0.070000 0.000000 0.070000 ( 0.075878)
53
- # Fast Blank (Active Support) 24 : 0.090000 0.000000 0.090000 ( 0.088610)
54
- # Slow Blank 24 : 0.650000 0.000000 0.650000 ( 0.650736)
55
- # Fast Blank 136 : 0.070000 0.000000 0.070000 ( 0.075540)
56
- # Fast Blank (Active Support) 136 : 0.090000 0.000000 0.090000 ( 0.087240)
57
- # Slow Blank 136 : 0.660000 0.000000 0.660000 ( 0.655168)
73
+ # ================== Test String Length: 0 ==================
74
+ # Calculating -------------------------------------
75
+ # Fast Blank 225.251k i/100ms
76
+ # Fast ActiveSupport 225.676k i/100ms
77
+ # Slow Blank 110.934k i/100ms
78
+ # New Slow Blank 221.792k i/100ms
79
+ # -------------------------------------------------
80
+ # Fast Blank 29.673M (± 2.7%) i/s - 148.215M
81
+ # Fast ActiveSupport 28.249M (± 3.5%) i/s - 141.048M
82
+ # Slow Blank 2.158M (± 3.3%) i/s - 10.872M
83
+ # New Slow Blank 23.558M (± 3.2%) i/s - 117.772M
84
+ #
85
+ # Comparison:
86
+ # Fast Blank: 29673200.1 i/s
87
+ # Fast ActiveSupport: 28248894.5 i/s - 1.05x slower
88
+ # New Slow Blank: 23557900.0 i/s - 1.26x slower
89
+ # Slow Blank: 2157787.7 i/s - 13.75x slower
90
+ #
91
+ #
92
+ # ================== Test String Length: 6 ==================
93
+ # Calculating -------------------------------------
94
+ # Fast Blank 201.185k i/100ms
95
+ # Fast ActiveSupport 205.076k i/100ms
96
+ # Slow Blank 102.061k i/100ms
97
+ # New Slow Blank 123.087k i/100ms
98
+ # -------------------------------------------------
99
+ # Fast Blank 13.894M (± 2.3%) i/s - 69.409M
100
+ # Fast ActiveSupport 14.627M (± 3.5%) i/s - 73.212M
101
+ # Slow Blank 1.943M (± 2.3%) i/s - 9.798M
102
+ # New Slow Blank 2.796M (± 1.8%) i/s - 14.032M
103
+ #
104
+ # Comparison:
105
+ # Fast ActiveSupport: 14627063.7 i/s
106
+ # Fast Blank: 13893631.2 i/s - 1.05x slower
107
+ # New Slow Blank: 2795783.3 i/s - 5.23x slower
108
+ # Slow Blank: 1943025.9 i/s - 7.53x slower
109
+ #
110
+ #
111
+ # ================== Test String Length: 14 ==================
112
+ # Calculating -------------------------------------
113
+ # Fast Blank 220.004k i/100ms
114
+ # Fast ActiveSupport 219.716k i/100ms
115
+ # Slow Blank 147.399k i/100ms
116
+ # New Slow Blank 106.651k i/100ms
117
+ # -------------------------------------------------
118
+ # Fast Blank 24.949M (± 3.0%) i/s - 124.742M
119
+ # Fast ActiveSupport 24.491M (± 3.3%) i/s - 122.382M
120
+ # Slow Blank 4.292M (± 1.6%) i/s - 21.520M
121
+ # New Slow Blank 2.115M (± 2.4%) i/s - 10.665M
122
+ #
123
+ # Comparison:
124
+ # Fast Blank: 24948558.8 i/s
125
+ # Fast ActiveSupport: 24491245.1 i/s - 1.02x slower
126
+ # Slow Blank: 4292490.5 i/s - 5.81x slower
127
+ # New Slow Blank: 2115097.6 i/s - 11.80x slower
128
+ #
129
+ #
130
+ # ================== Test String Length: 24 ==================
131
+ # Calculating -------------------------------------
132
+ # Fast Blank 206.555k i/100ms
133
+ # Fast ActiveSupport 208.513k i/100ms
134
+ # Slow Blank 137.733k i/100ms
135
+ # New Slow Blank 101.215k i/100ms
136
+ # -------------------------------------------------
137
+ # Fast Blank 16.761M (± 2.7%) i/s - 83.861M
138
+ # Fast ActiveSupport 17.710M (± 3.2%) i/s - 88.618M
139
+ # Slow Blank 3.744M (± 2.0%) i/s - 18.732M
140
+ # New Slow Blank 1.962M (± 2.7%) i/s - 9.818M
141
+ #
142
+ # Comparison:
143
+ # Fast ActiveSupport: 17709936.5 i/s
144
+ # Fast Blank: 16760839.7 i/s - 1.06x slower
145
+ # Slow Blank: 3744048.4 i/s - 4.73x slower
146
+ # New Slow Blank: 1961831.1 i/s - 9.03x slower
147
+ #
148
+ #
149
+ # ================== Test String Length: 136 ==================
150
+ # Calculating -------------------------------------
151
+ # Fast Blank 201.772k i/100ms
152
+ # Fast ActiveSupport 189.120k i/100ms
153
+ # Slow Blank 129.439k i/100ms
154
+ # New Slow Blank 90.677k i/100ms
155
+ # -------------------------------------------------
156
+ # Fast Blank 16.718M (± 2.8%) i/s - 83.534M
157
+ # Fast ActiveSupport 17.617M (± 3.6%) i/s - 87.941M
158
+ # Slow Blank 3.725M (± 3.0%) i/s - 18.639M
159
+ # New Slow Blank 1.940M (± 4.8%) i/s - 9.702M
160
+ #
161
+ # Comparison:
162
+ # Fast ActiveSupport: 17616782.1 i/s
163
+ # Fast Blank: 16718307.8 i/s - 1.05x slower
164
+ # Slow Blank: 3725097.6 i/s - 4.73x slower
165
+ # New Slow Blank: 1940271.2 i/s - 9.08x slower
166
+ #
@@ -6,24 +6,11 @@
6
6
 
7
7
  #define STR_ENC_GET(str) rb_enc_from_index(ENCODING_GET(str))
8
8
 
9
- /* Backward compatibility with Ruby 1.8 */
10
- #ifndef RSTRING_PTR
11
- #define RSTRING_PTR(s) (RSTRING(s)->ptr)
9
+ #ifndef RUBY_API_VERSION_CODE
10
+ # define ruby_version_before_2_2() 1
11
+ #else
12
+ # define ruby_version_before_2_2() (RUBY_API_VERSION_CODE < 20200)
12
13
  #endif
13
- #ifndef RSTRING_LEN
14
- #define RSTRING_LEN(s) (RSTRING(s)->len)
15
- #endif
16
-
17
- static int
18
- ruby_version_before_2_2()
19
- {
20
- #ifdef RUBY_API_VERSION_MAJOR
21
- if (RUBY_API_VERSION_MAJOR > 2 || (RUBY_API_VERSION_MAJOR == 2 && RUBY_API_VERSION_MINOR >= 2)) {
22
- return 0;
23
- }
24
- #endif
25
- return 1;
26
- }
27
14
 
28
15
  static VALUE
29
16
  rb_str_blank_as(VALUE str)
@@ -66,10 +53,11 @@ rb_str_blank_as(VALUE str)
66
53
  case 0x202f:
67
54
  case 0x205f:
68
55
  case 0x3000:
56
+ #if ruby_version_before_2_2()
57
+ case 0x180e:
58
+ #endif
69
59
  /* found */
70
60
  break;
71
- case 0x180e:
72
- if (ruby_version_before_2_2()) break;
73
61
  default:
74
62
  return Qfalse;
75
63
  }
@@ -1,11 +1,18 @@
1
- require 'fast_blank'
1
+ $VERBOSE = true
2
2
 
3
3
  class ::String
4
+ # Stub the original method to make sure it is redefined correctly.
5
+ def blank?
6
+ raise NotImplementedError
7
+ end
8
+
4
9
  def blank2?
5
10
  /\A[[:space:]]*\z/ === self
6
11
  end
7
12
  end
8
13
 
14
+ require 'fast_blank'
15
+
9
16
  describe String do
10
17
  it "works" do
11
18
  expect("".blank?).to eq(true)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fast_blank
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sam Saffron
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-08-03 00:00:00.000000000 Z
11
+ date: 2021-08-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake-compiler
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: benchmark-ips
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  description: Provides a C-optimized method for determining if a string is blank
42
56
  email: sam.saffron@gmail.com
43
57
  executables: []
@@ -56,7 +70,7 @@ homepage: https://github.com/SamSaffron/fast_blank
56
70
  licenses:
57
71
  - MIT
58
72
  metadata: {}
59
- post_install_message:
73
+ post_install_message:
60
74
  rdoc_options: []
61
75
  require_paths:
62
76
  - lib
@@ -71,9 +85,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
71
85
  - !ruby/object:Gem::Version
72
86
  version: '0'
73
87
  requirements: []
74
- rubyforge_project:
75
- rubygems_version: 2.4.5
76
- signing_key:
88
+ rubygems_version: 3.1.6
89
+ signing_key:
77
90
  specification_version: 4
78
91
  summary: Fast String blank? implementation
79
92
  test_files: