fuzzy-string-match 0.9.6 → 0.9.7
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 +6 -0
- data/Rakefile +7 -39
- data/lib/fuzzystringmatch/inline/jarowinkler.rb +48 -6
- data/test/basic_native_spec.rb +12 -21
- data/test/basic_pure_spec.rb +12 -21
- data/test/mutibyte_spec.rb +17 -26
- metadata +10 -39
- data/VERSION.yml +0 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e6c482cde7e2c3ed8adf5e868574d23505f6c11b
|
4
|
+
data.tar.gz: dba293a5c00ba813c05c41e3029b00de4213b917
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 078f094e32f22a4a832cf424d93538613c570bb5bc7151f3689edebc0b7c8c8f4051c2897e2f244d7a0b0e5dbcf018c062dcd65f476d9e231a2311499ed77392
|
7
|
+
data.tar.gz: c27ff9107753139c648832c5ec4f06d701d128b7117b0ea1da42e770021a2946d1245e65f96a79ab2e9b7cf672c20a66113e57012a2b80e68e45388402ec70c4
|
data/README.md
CHANGED
@@ -96,6 +96,12 @@
|
|
96
96
|
|
97
97
|
## ChangeLog
|
98
98
|
|
99
|
+
### 0.9.7 / Oct 15, 2014
|
100
|
+
|
101
|
+
* Use rspec 3.1 syntax.
|
102
|
+
* Fixed: issue #12 `Using stack allocated memory`.
|
103
|
+
* Fixed: remove duplicated dependency of gem package.
|
104
|
+
|
99
105
|
### 0.9.6 / Dec 21, 2013
|
100
106
|
|
101
107
|
* New feature: fuzzy-string-match falls back into pure ruby mode when c-compile fails.
|
data/Rakefile
CHANGED
@@ -1,51 +1,19 @@
|
|
1
1
|
#-*- mode: ruby; -*-
|
2
2
|
#
|
3
3
|
# Release Engineering
|
4
|
-
# 1. edit the
|
5
|
-
# 2. rake
|
6
|
-
#
|
7
|
-
#
|
8
|
-
# 4.
|
9
|
-
# 5.
|
10
|
-
# 6. gem push pkg/fuzzy-string-match-x.x.x.gem ( need gem version 1.3.6 or higer. Please "gem update --system" to update )
|
4
|
+
# 1. edit the "s.version = " line of fuzzy-string-match.gemspec
|
5
|
+
# 2. rake && rake build
|
6
|
+
# to generate pkg/fuzzy-string-match-x.x.x.gem
|
7
|
+
# 3. install fuzzy-string-match-x.x.x.gem to clean environment and test
|
8
|
+
# 4. rake release
|
9
|
+
# 5. gem push pkg/fuzzy-string-match-x.x.x.gem ( need gem version 1.3.6 or higer. Please "gem update --system" to update )
|
11
10
|
#
|
12
11
|
# for Development
|
13
12
|
# rake test_dev
|
14
13
|
# rake benchmark
|
15
14
|
|
16
15
|
require 'rake'
|
17
|
-
|
18
|
-
require 'jeweler2'
|
19
|
-
|
20
|
-
Jeweler::Tasks.new do |gemspec|
|
21
|
-
gemspec.name = "fuzzy-string-match"
|
22
|
-
gemspec.summary = "fuzzy string matching library"
|
23
|
-
gemspec.description = "calculate Jaro Winkler distance."
|
24
|
-
gemspec.email = "kiyoka@sumibi.org"
|
25
|
-
gemspec.license = 'Apache-2.0'
|
26
|
-
gemspec.homepage = "http://github.com/kiyoka/fuzzy-string-match"
|
27
|
-
gemspec.authors = ["Kiyoka Nishiyama"]
|
28
|
-
gemspec.files = FileList['.gemtest',
|
29
|
-
'Rakefile',
|
30
|
-
'VERSION.yml',
|
31
|
-
'lib/fuzzystringmatch/inline/jarowinkler.rb',
|
32
|
-
'lib/fuzzystringmatch/inline.rb',
|
33
|
-
'lib/fuzzystringmatch/pure/jarowinkler.rb',
|
34
|
-
'lib/fuzzystringmatch/pure.rb',
|
35
|
-
'lib/fuzzystringmatch.rb',
|
36
|
-
'test/basic_native_spec.rb',
|
37
|
-
'test/basic_pure_spec.rb',
|
38
|
-
'test/mutibyte_spec.rb',
|
39
|
-
'LICENSE.txt',
|
40
|
-
'README.md'].to_a
|
41
|
-
gemspec.add_development_dependency( "rspec" )
|
42
|
-
gemspec.add_dependency( 'RubyInline', '>= 3.8.6')
|
43
|
-
gemspec.required_ruby_version = '>= 1.9.1'
|
44
|
-
end
|
45
|
-
|
46
|
-
rescue LoadError
|
47
|
-
puts "Jeweler not available. Install it with: sudo gem install jeweler"
|
48
|
-
end
|
16
|
+
require 'bundler/gem_tasks'
|
49
17
|
|
50
18
|
task :default => [:test] do
|
51
19
|
end
|
@@ -22,8 +22,17 @@ module FuzzyStringMatch
|
|
22
22
|
false
|
23
23
|
end
|
24
24
|
|
25
|
+
def getDistance(s1,s2)
|
26
|
+
result = getDistanceInternal(s1,s2)
|
27
|
+
if result.nan?
|
28
|
+
raise NoMemoryError.new( "failed to allocate memory. string argument s1 or s2 is too large." )
|
29
|
+
end
|
30
|
+
return result
|
31
|
+
end
|
32
|
+
|
25
33
|
inline do |builder|
|
26
34
|
builder.include '<iostream>'
|
35
|
+
builder.include '<math.h>'
|
27
36
|
builder.add_compile_flags %q(-x c++)
|
28
37
|
builder.add_link_flags %q(-lstdc++)
|
29
38
|
builder.c_raw 'int max( int a, int b ) { return ((a)>(b)?(a):(b)); }'
|
@@ -32,7 +41,7 @@ module FuzzyStringMatch
|
|
32
41
|
builder.c '
|
33
42
|
|
34
43
|
|
35
|
-
double
|
44
|
+
double getDistanceInternal( char *s1, char *s2 )
|
36
45
|
{
|
37
46
|
char *_max;
|
38
47
|
char *_min;
|
@@ -48,12 +57,22 @@ double getDistance( char *s1, char *s2 )
|
|
48
57
|
}
|
49
58
|
int range = max( _max_length / 2 - 1, 0 );
|
50
59
|
|
51
|
-
int indexes
|
60
|
+
int *indexes = NULL;
|
61
|
+
indexes = (int *)malloc(_min_length * sizeof(int));
|
62
|
+
if( NULL == indexes ) {
|
63
|
+
return nanl("");
|
64
|
+
}
|
65
|
+
|
66
|
+
int *flags = NULL;
|
67
|
+
flags = (int *)malloc(_max_length * sizeof(int));
|
68
|
+
if( NULL == flags ) {
|
69
|
+
free(indexes);
|
70
|
+
return nanl("");
|
71
|
+
}
|
72
|
+
|
52
73
|
for( int i = 0 ; i < _min_length ; i++ ) {
|
53
74
|
indexes[i] = -1;
|
54
75
|
}
|
55
|
-
|
56
|
-
int flags[_max_length];
|
57
76
|
for( int i = 0 ; i < _max_length ; i++ ) {
|
58
77
|
flags[i] = 0;
|
59
78
|
}
|
@@ -70,8 +89,22 @@ double getDistance( char *s1, char *s2 )
|
|
70
89
|
}
|
71
90
|
}
|
72
91
|
|
73
|
-
char ms1
|
74
|
-
char
|
92
|
+
char *ms1 = NULL;
|
93
|
+
ms1 = (char *)malloc(matches * sizeof(char));
|
94
|
+
if( NULL == ms1 ) {
|
95
|
+
free(indexes);
|
96
|
+
free(flags);
|
97
|
+
return nanl("");
|
98
|
+
}
|
99
|
+
char *ms2 = NULL;
|
100
|
+
ms2 = (char *)malloc(matches * sizeof(char));
|
101
|
+
if( NULL == ms2 ) {
|
102
|
+
free(indexes);
|
103
|
+
free(flags);
|
104
|
+
free(ms1);
|
105
|
+
return nanl("");
|
106
|
+
}
|
107
|
+
|
75
108
|
int ms1_length = matches;
|
76
109
|
|
77
110
|
for (int i = 0, si = 0; i < _min_length; i++) {
|
@@ -103,12 +136,21 @@ double getDistance( char *s1, char *s2 )
|
|
103
136
|
|
104
137
|
double m = (double) matches;
|
105
138
|
if (matches == 0) {
|
139
|
+
free(indexes);
|
140
|
+
free(flags);
|
141
|
+
free(ms1);
|
142
|
+
free(ms2);
|
106
143
|
return 0.0;
|
107
144
|
}
|
108
145
|
int t = transpositions / 2;
|
109
146
|
double j = ((m / strlen(s1) + m / strlen(s2) + (m - t) / m)) / 3;
|
110
147
|
double jw = j < 0.7 ? j : j + double_min(0.1, 1.0 / _max_length) * prefix
|
111
148
|
* (1 - j);
|
149
|
+
|
150
|
+
free(indexes);
|
151
|
+
free(flags);
|
152
|
+
free(ms1);
|
153
|
+
free(ms2);
|
112
154
|
return jw;
|
113
155
|
}'
|
114
156
|
end
|
data/test/basic_native_spec.rb
CHANGED
@@ -28,31 +28,22 @@ describe FuzzyStringMatch, "when some string distances (Native) are" do
|
|
28
28
|
@jarow = FuzzyStringMatch::JaroWinkler.create( :native )
|
29
29
|
end
|
30
30
|
it "should" do
|
31
|
-
@jarow.getDistance( "henka", "henkan" ).
|
32
|
-
@jarow.getDistance( "al", "al" ).
|
33
|
-
@jarow.getDistance( "martha", "marhta" ).
|
34
|
-
@jarow.getDistance( "jones", "johnson" ).
|
35
|
-
@jarow.getDistance( "abcvwxyz", "cabvwxyz" ).
|
36
|
-
@jarow.getDistance( "dwayne", "duane" ).
|
37
|
-
@jarow.getDistance( "dixon", "dicksonx" ).
|
38
|
-
@jarow.getDistance( "fvie", "ten" ).
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
d1 > d2
|
43
|
-
}.should be_true
|
44
|
-
lambda {
|
45
|
-
d1 = @jarow.getDistance("brittney spears", "britney spears")
|
46
|
-
d2 = @jarow.getDistance("brittney spears", "brittney startzman")
|
47
|
-
d1 > d2
|
48
|
-
}.should be_true
|
49
|
-
|
50
|
-
@jarow.pure?( ).should == (RUBY_PLATFORM == "java")
|
31
|
+
expect( @jarow.getDistance( "henka", "henkan" )).to be_within(0.0001).of(0.9722)
|
32
|
+
expect( @jarow.getDistance( "al", "al" )).to be_within(0.0001).of(1.0)
|
33
|
+
expect( @jarow.getDistance( "martha", "marhta" )).to be_within(0.0001).of(0.9611)
|
34
|
+
expect( @jarow.getDistance( "jones", "johnson" )).to be_within(0.0001).of(0.8323)
|
35
|
+
expect( @jarow.getDistance( "abcvwxyz", "cabvwxyz" )).to be_within(0.0001).of(0.9583)
|
36
|
+
expect( @jarow.getDistance( "dwayne", "duane" )).to be_within(0.0001).of(0.8400)
|
37
|
+
expect( @jarow.getDistance( "dixon", "dicksonx" )).to be_within(0.0001).of(0.8133)
|
38
|
+
expect( @jarow.getDistance( "fvie", "ten" )).to be_within(0.0001).of(0.0)
|
39
|
+
expect( @jarow.getDistance("zac ephron", "zac efron" )).to be > ( @jarow.getDistance("zac ephron", "kai ephron" ))
|
40
|
+
expect( @jarow.getDistance("brittney spears", "britney spears" )).to be > ( @jarow.getDistance("brittney spears", "brittney startzman" ))
|
41
|
+
expect( @jarow.pure?( )).to be == (RUBY_PLATFORM == "java")
|
51
42
|
end
|
52
43
|
end
|
53
44
|
|
54
45
|
describe FuzzyStringMatch, "when older factory method was called, (Native) are" do
|
55
46
|
it "should" do
|
56
|
-
|
47
|
+
expect { FuzzyStringMatch::JaroWinkler.new.create( :native ) }.to raise_error(NoMethodError)
|
57
48
|
end
|
58
49
|
end
|
data/test/basic_pure_spec.rb
CHANGED
@@ -28,32 +28,23 @@ describe FuzzyStringMatch, "when some string distances (Pure) are" do
|
|
28
28
|
@jarow = FuzzyStringMatch::JaroWinkler.create
|
29
29
|
end
|
30
30
|
it "should" do
|
31
|
-
@jarow.getDistance( "henka", "henkan" ).
|
32
|
-
@jarow.getDistance( "al", "al" ).
|
33
|
-
@jarow.getDistance( "martha", "marhta" ).
|
34
|
-
@jarow.getDistance( "jones", "johnson" ).
|
35
|
-
@jarow.getDistance( "abcvwxyz", "cabvwxyz" ).
|
36
|
-
@jarow.getDistance( "dwayne", "duane" ).
|
37
|
-
@jarow.getDistance( "dixon", "dicksonx" ).
|
38
|
-
@jarow.getDistance( "fvie", "ten" ).
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
d1 > d2
|
43
|
-
}.should be_true
|
44
|
-
lambda {
|
45
|
-
d1 = @jarow.getDistance("brittney spears", "britney spears")
|
46
|
-
d2 = @jarow.getDistance("brittney spears", "brittney startzman")
|
47
|
-
d1 > d2
|
48
|
-
}.should be_true
|
49
|
-
|
50
|
-
@jarow.pure?( ).should be_true
|
31
|
+
expect( @jarow.getDistance( "henka", "henkan" )).to be_within(0.0001).of(0.9722)
|
32
|
+
expect( @jarow.getDistance( "al", "al" )).to be_within(0.0001).of(1.0)
|
33
|
+
expect( @jarow.getDistance( "martha", "marhta" )).to be_within(0.0001).of(0.9611)
|
34
|
+
expect( @jarow.getDistance( "jones", "johnson" )).to be_within(0.0001).of(0.8323)
|
35
|
+
expect( @jarow.getDistance( "abcvwxyz", "cabvwxyz" )).to be_within(0.0001).of(0.9583)
|
36
|
+
expect( @jarow.getDistance( "dwayne", "duane" )).to be_within(0.0001).of(0.8400)
|
37
|
+
expect( @jarow.getDistance( "dixon", "dicksonx" )).to be_within(0.0001).of(0.8133)
|
38
|
+
expect( @jarow.getDistance( "fvie", "ten" )).to be_within(0.0001).of(0.0)
|
39
|
+
expect( @jarow.getDistance("zac ephron", "zac efron" )).to be > ( @jarow.getDistance("zac ephron", "kai ephron" ))
|
40
|
+
expect( @jarow.getDistance("brittney spears", "britney spears" )).to be > ( @jarow.getDistance("brittney spears", "brittney startzman" ))
|
41
|
+
expect( @jarow.pure?( )).to be true
|
51
42
|
end
|
52
43
|
end
|
53
44
|
|
54
45
|
describe FuzzyStringMatch, "when older factory method was called, (Native) are" do
|
55
46
|
it "should" do
|
56
|
-
|
47
|
+
expect { FuzzyStringMatch::JaroWinkler.new.create( :pure ) }.to raise_error(NoMethodError)
|
57
48
|
end
|
58
49
|
end
|
59
50
|
|
data/test/mutibyte_spec.rb
CHANGED
@@ -28,31 +28,22 @@ describe FuzzyStringMatch, "when some UTF8 string distances (Pure) are" do
|
|
28
28
|
@jarow = FuzzyStringMatch::JaroWinkler.create
|
29
29
|
end
|
30
30
|
it "should" do
|
31
|
-
@jarow.getDistance( "al", "al" ).
|
32
|
-
@jarow.getDistance( "martha", "marhta" ).
|
33
|
-
@jarow.getDistance( "jones", "johnson" ).
|
34
|
-
@jarow.getDistance( "abcvwxyz", "cabvwxyz" ).
|
35
|
-
@jarow.getDistance( "dwayne", "duane" ).
|
36
|
-
@jarow.getDistance( "dixon", "dicksonx" ).
|
37
|
-
@jarow.getDistance( "fvie", "ten" ).
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
@jarow.getDistance( "スパゲティー", "スパゲッティー" ).should be_within(0.0001).of(0.9666)
|
49
|
-
@jarow.getDistance( "スパゲティー", "スパゲティ" ).should be_within(0.0001).of(0.9722)
|
50
|
-
@jarow.getDistance( "スティービー・ワンダー", "スピーディー・ワンダー" ).should be_within(0.0001).of(0.8561)
|
51
|
-
@jarow.getDistance( "マイケル・ジャクソン", "ジャイケル・マクソン" ).should be_within(0.0001).of(0.8000)
|
52
|
-
@jarow.getDistance( "まつもとゆきひろ", "まつもとひろゆき" ).should be_within(0.0001).of(0.9500)
|
53
|
-
@jarow.getDistance( "クライエント", "クライアント" ).should be_within(0.0001).of(0.9222)
|
54
|
-
@jarow.getDistance( "サーバー", "サーバ" ).should be_within(0.0001).of(0.9416)
|
55
|
-
|
56
|
-
@jarow.pure?( ).should be_true
|
31
|
+
expect( @jarow.getDistance( "al", "al" )).to be_within(0.0001).of(1.0)
|
32
|
+
expect( @jarow.getDistance( "martha", "marhta" )).to be_within(0.0001).of(0.9611)
|
33
|
+
expect( @jarow.getDistance( "jones", "johnson" )).to be_within(0.0001).of(0.8323)
|
34
|
+
expect( @jarow.getDistance( "abcvwxyz", "cabvwxyz" )).to be_within(0.0001).of(0.9583)
|
35
|
+
expect( @jarow.getDistance( "dwayne", "duane" )).to be_within(0.0001).of(0.8400)
|
36
|
+
expect( @jarow.getDistance( "dixon", "dicksonx" )).to be_within(0.0001).of(0.8133)
|
37
|
+
expect( @jarow.getDistance( "fvie", "ten" )).to be_within(0.0001).of(0.0)
|
38
|
+
expect( @jarow.getDistance("zac ephron", "zac efron")).to be > ( @jarow.getDistance("zac ephron", "kai ephron" ))
|
39
|
+
expect( @jarow.getDistance("brittney spears", "britney spears")).to be > ( @jarow.getDistance("brittney spears", "brittney startzman" ))
|
40
|
+
expect( @jarow.getDistance( "スパゲティー", "スパゲッティー" )).to be_within(0.0001).of(0.9666)
|
41
|
+
expect( @jarow.getDistance( "スパゲティー", "スパゲティ" )).to be_within(0.0001).of(0.9722)
|
42
|
+
expect( @jarow.getDistance( "スティービー・ワンダー", "スピーディー・ワンダー" )).to be_within(0.0001).of(0.8561)
|
43
|
+
expect( @jarow.getDistance( "マイケル・ジャクソン", "ジャイケル・マクソン" )).to be_within(0.0001).of(0.8000)
|
44
|
+
expect( @jarow.getDistance( "まつもとゆきひろ", "まつもとひろゆき" )).to be_within(0.0001).of(0.9500)
|
45
|
+
expect( @jarow.getDistance( "クライエント", "クライアント" )).to be_within(0.0001).of(0.9222)
|
46
|
+
expect( @jarow.getDistance( "サーバー", "サーバ" )).to be_within(0.0001).of(0.9416)
|
47
|
+
expect( @jarow.pure?( )).to be true
|
57
48
|
end
|
58
49
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fuzzy-string-match
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kiyoka Nishiyama
|
@@ -14,56 +14,28 @@ dependencies:
|
|
14
14
|
name: rspec
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - '>='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 3.1.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
|
-
version:
|
26
|
+
version: 3.1.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: RubyInline
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - '>='
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: 3.8.6
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: 3.8.6
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: rspec
|
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'
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: RubyInline
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - ">="
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: 3.8.6
|
62
|
-
type: :runtime
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - ">="
|
38
|
+
- - '>='
|
67
39
|
- !ruby/object:Gem::Version
|
68
40
|
version: 3.8.6
|
69
41
|
description: calculate Jaro Winkler distance.
|
@@ -74,11 +46,10 @@ extra_rdoc_files:
|
|
74
46
|
- LICENSE.txt
|
75
47
|
- README.md
|
76
48
|
files:
|
77
|
-
-
|
49
|
+
- .gemtest
|
78
50
|
- LICENSE.txt
|
79
51
|
- README.md
|
80
52
|
- Rakefile
|
81
|
-
- VERSION.yml
|
82
53
|
- lib/fuzzystringmatch.rb
|
83
54
|
- lib/fuzzystringmatch/inline.rb
|
84
55
|
- lib/fuzzystringmatch/inline/jarowinkler.rb
|
@@ -97,12 +68,12 @@ require_paths:
|
|
97
68
|
- lib
|
98
69
|
required_ruby_version: !ruby/object:Gem::Requirement
|
99
70
|
requirements:
|
100
|
-
- -
|
71
|
+
- - '>='
|
101
72
|
- !ruby/object:Gem::Version
|
102
73
|
version: 1.9.1
|
103
74
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
104
75
|
requirements:
|
105
|
-
- -
|
76
|
+
- - '>='
|
106
77
|
- !ruby/object:Gem::Version
|
107
78
|
version: '0'
|
108
79
|
requirements: []
|