fast_blank 0.0.2 → 1.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 +4 -4
- data/README.md +5 -1
- data/benchmark +2 -2
- data/ext/fast_blank/fast_blank.c +14 -1
- data/spec/fast_blank_spec.rb +10 -11
- metadata +11 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5ccb1d100034d7f4b64f8b586a1936fa782bae23
|
4
|
+
data.tar.gz: ca1266f681fd9a599f5ce7439f19d11e12b7bc25
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 99af052c09364d2c1d69a53e948e3de398c831e023face6f6b0d0cd12d8a9f6572b5500ba4f38c136df070093cf99cc3dd986bb8ce9ede599bd7d0c65718c2b5
|
7
|
+
data.tar.gz: a4ed6e70604a61c11eea45a5bc723e28e77e15afc51149986bf67a11c27a380bb803f9047de560ee6ac65f6d605005367b24ce08d9f34179a909061dce21763e
|
data/README.md
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
### String blank? Ruby Extension
|
2
2
|
|
3
|
+
[](http://badge.fury.io/rb/fast_blank) [](https://travis-ci.org/SamSaffron/fast_blank)
|
4
|
+
|
3
5
|
`fast_blank` is a simple extension which provides a fast implementation of active support's string#blank? function
|
4
6
|
|
5
7
|
### How do you use it?
|
@@ -39,7 +41,9 @@ Slow Blank 136 : 0.900000 0.000000 0.900000 ( 0.8998
|
|
39
41
|
Additionally, this gem allocates no strings during the test, making it less of a GC burden.
|
40
42
|
|
41
43
|
|
42
|
-
###
|
44
|
+
###Compatibility note:
|
45
|
+
|
46
|
+
fast_blank is supported under MRI Ruby 1.9.3, 2.0 and 2.1, earlier versions of MRI are untested.
|
43
47
|
|
44
48
|
fast_blank implements string.blank? as MRI would have it implemented, meaning it has 100% parity with `String#strip.length == 0`.
|
45
49
|
|
data/benchmark
CHANGED
@@ -6,7 +6,7 @@ require 'fast_blank'
|
|
6
6
|
class String
|
7
7
|
# active support implementation
|
8
8
|
def slow_blank?
|
9
|
-
|
9
|
+
/\A[[:space:]]*\z/ === self
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
@@ -39,7 +39,7 @@ Benchmark.bmbm do |x|
|
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|
42
|
-
|
42
|
+
# user system total real
|
43
43
|
# Fast Blank 0 : 0.050000 0.000000 0.050000 ( 0.048928)
|
44
44
|
# Fast Blank (Active Support) 0 : 0.050000 0.000000 0.050000 ( 0.049967)
|
45
45
|
# Slow Blank 0 : 0.290000 0.000000 0.290000 ( 0.295086)
|
data/ext/fast_blank/fast_blank.c
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
#include <ruby.h>
|
3
3
|
#include <ruby/encoding.h>
|
4
4
|
#include <ruby/re.h>
|
5
|
+
#include <ruby/version.h>
|
5
6
|
|
6
7
|
#define STR_ENC_GET(str) rb_enc_from_index(ENCODING_GET(str))
|
7
8
|
|
@@ -13,6 +14,17 @@
|
|
13
14
|
#define RSTRING_LEN(s) (RSTRING(s)->len)
|
14
15
|
#endif
|
15
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
|
+
|
16
28
|
static VALUE
|
17
29
|
rb_str_blank_as(VALUE str)
|
18
30
|
{
|
@@ -38,7 +50,6 @@ rb_str_blank_as(VALUE str)
|
|
38
50
|
case 0x85:
|
39
51
|
case 0xa0:
|
40
52
|
case 0x1680:
|
41
|
-
case 0x180e:
|
42
53
|
case 0x2000:
|
43
54
|
case 0x2001:
|
44
55
|
case 0x2002:
|
@@ -57,6 +68,8 @@ rb_str_blank_as(VALUE str)
|
|
57
68
|
case 0x3000:
|
58
69
|
/* found */
|
59
70
|
break;
|
71
|
+
case 0x180e:
|
72
|
+
if (ruby_version_before_2_2()) break;
|
60
73
|
default:
|
61
74
|
return Qfalse;
|
62
75
|
}
|
data/spec/fast_blank_spec.rb
CHANGED
@@ -2,24 +2,23 @@ require 'fast_blank'
|
|
2
2
|
|
3
3
|
class ::String
|
4
4
|
def blank2?
|
5
|
-
|
5
|
+
/\A[[:space:]]*\z/ === self
|
6
6
|
end
|
7
7
|
end
|
8
8
|
|
9
9
|
describe String do
|
10
10
|
it "works" do
|
11
|
-
"".blank
|
12
|
-
" ".blank
|
13
|
-
"\r\n".blank
|
11
|
+
expect("".blank?).to eq(true)
|
12
|
+
expect(" ".blank?).to eq(true)
|
13
|
+
expect("\r\n".blank?).to eq(true)
|
14
14
|
"\r\n\v\f\r\s\u0085".blank? == true
|
15
|
-
|
16
15
|
end
|
17
16
|
|
18
17
|
it "provides a parity with active support function" do
|
19
18
|
(16*16*16*16).times do |i|
|
20
19
|
c = i.chr('UTF-8') rescue nil
|
21
20
|
unless c.nil?
|
22
|
-
"#{i.to_s(16)} #{c.blank_as?}".
|
21
|
+
expect("#{i.to_s(16)} #{c.blank_as?}").to eq("#{i.to_s(16)} #{c.blank2?}")
|
23
22
|
end
|
24
23
|
end
|
25
24
|
|
@@ -27,7 +26,7 @@ describe String do
|
|
27
26
|
(256).times do |i|
|
28
27
|
c = i.chr('ASCII') rescue nil
|
29
28
|
unless c.nil?
|
30
|
-
"#{i.to_s(16)} #{c.blank_as?}".
|
29
|
+
expect("#{i.to_s(16)} #{c.blank_as?}").to eq("#{i.to_s(16)} #{c.blank2?}")
|
31
30
|
end
|
32
31
|
end
|
33
32
|
end
|
@@ -36,16 +35,16 @@ describe String do
|
|
36
35
|
(256).times do |i|
|
37
36
|
c = i.chr('ASCII') rescue nil
|
38
37
|
unless c.nil?
|
39
|
-
"#{i.to_s(16)} #{c.strip.length == 0}".
|
38
|
+
expect("#{i.to_s(16)} #{c.strip.length == 0}").to eq("#{i.to_s(16)} #{c.blank?}")
|
40
39
|
end
|
41
40
|
end
|
42
41
|
end
|
43
42
|
|
44
43
|
it "treats \u0000 correctly" do
|
45
44
|
# odd I know
|
46
|
-
"\u0000".strip.length.
|
47
|
-
"\u0000".blank_as
|
48
|
-
"\u0000".blank
|
45
|
+
expect("\u0000".strip.length).to eq(0)
|
46
|
+
expect("\u0000".blank_as?).to be_falsey
|
47
|
+
expect("\u0000".blank?).to be_truthy
|
49
48
|
end
|
50
49
|
|
51
50
|
end
|
metadata
CHANGED
@@ -1,41 +1,41 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fast_blank
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sam Saffron
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-08-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake-compiler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rspec
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
description: Provides a C-optimized method for determining if a string is blank
|
@@ -48,9 +48,9 @@ files:
|
|
48
48
|
- MIT-LICENSE
|
49
49
|
- README.md
|
50
50
|
- benchmark
|
51
|
-
- lib/.gemkeep
|
52
|
-
- ext/fast_blank/fast_blank.c
|
53
51
|
- ext/fast_blank/extconf.rb
|
52
|
+
- ext/fast_blank/fast_blank.c
|
53
|
+
- lib/.gemkeep
|
54
54
|
- spec/fast_blank_spec.rb
|
55
55
|
homepage: https://github.com/SamSaffron/fast_blank
|
56
56
|
licenses:
|
@@ -62,17 +62,17 @@ require_paths:
|
|
62
62
|
- lib
|
63
63
|
required_ruby_version: !ruby/object:Gem::Requirement
|
64
64
|
requirements:
|
65
|
-
- -
|
65
|
+
- - ">="
|
66
66
|
- !ruby/object:Gem::Version
|
67
67
|
version: '0'
|
68
68
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
69
69
|
requirements:
|
70
|
-
- -
|
70
|
+
- - ">="
|
71
71
|
- !ruby/object:Gem::Version
|
72
72
|
version: '0'
|
73
73
|
requirements: []
|
74
74
|
rubyforge_project:
|
75
|
-
rubygems_version: 2.
|
75
|
+
rubygems_version: 2.4.5
|
76
76
|
signing_key:
|
77
77
|
specification_version: 4
|
78
78
|
summary: Fast String blank? implementation
|