levenshtein-ffi 1.0.2 → 1.0.3

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.
data/Gemfile CHANGED
@@ -1,8 +1,8 @@
1
1
  source :rubygems
2
2
 
3
- gem 'ffi'
3
+ gem 'ffi', '~> 1.1.5'
4
4
 
5
5
  group :test do
6
- gem 'rspec', '1.3.1'
6
+ gem 'rspec', '2.7.0'
7
7
  gem 'jeweler'
8
8
  end
@@ -1,19 +1,27 @@
1
1
  GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
- ffi (1.0.9)
4
+ diff-lcs (1.1.3)
5
+ ffi (1.1.5)
5
6
  git (1.2.5)
6
7
  jeweler (1.6.4)
7
8
  bundler (~> 1.0)
8
9
  git (>= 1.2.5)
9
10
  rake
10
11
  rake (0.9.2)
11
- rspec (1.3.1)
12
+ rspec (2.7.0)
13
+ rspec-core (~> 2.7.0)
14
+ rspec-expectations (~> 2.7.0)
15
+ rspec-mocks (~> 2.7.0)
16
+ rspec-core (2.7.1)
17
+ rspec-expectations (2.7.0)
18
+ diff-lcs (~> 1.1.2)
19
+ rspec-mocks (2.7.0)
12
20
 
13
21
  PLATFORMS
14
22
  ruby
15
23
 
16
24
  DEPENDENCIES
17
- ffi
25
+ ffi (~> 1.1.5)
18
26
  jeweler
19
- rspec (= 1.3.1)
27
+ rspec (= 2.7.0)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.2
1
+ 1.0.3
@@ -4,14 +4,14 @@
4
4
  # -*- encoding: utf-8 -*-
5
5
 
6
6
  Gem::Specification.new do |s|
7
- s.name = %q{levenshtein-ffi}
8
- s.version = "1.0.2"
7
+ s.name = "levenshtein-ffi"
8
+ s.version = "1.0.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["David Balatero"]
12
- s.date = %q{2011-09-05}
13
- s.description = %q{Provides a fast, cross-Ruby implementation of the levenshtein distance algorithm.}
14
- s.email = %q{dbalatero@gmail.com}
12
+ s.date = "2012-08-09"
13
+ s.description = "Provides a fast, cross-Ruby implementation of the levenshtein distance algorithm."
14
+ s.email = "dbalatero@gmail.com"
15
15
  s.extensions = ["ext/levenshtein/extconf.rb"]
16
16
  s.extra_rdoc_files = [
17
17
  "README.markdown",
@@ -34,27 +34,27 @@ Gem::Specification.new do |s|
34
34
  "spec/levenshtein_spec.rb",
35
35
  "spec/spec_helper.rb"
36
36
  ]
37
- s.homepage = %q{http://github.com/dbalatero/levenshtein-ffi}
37
+ s.homepage = "http://github.com/dbalatero/levenshtein-ffi"
38
38
  s.require_paths = ["lib"]
39
- s.rubygems_version = %q{1.6.2}
40
- s.summary = %q{An FFI version of the levenshtein gem.}
39
+ s.rubygems_version = "1.8.17"
40
+ s.summary = "An FFI version of the levenshtein gem."
41
41
 
42
42
  if s.respond_to? :specification_version then
43
43
  s.specification_version = 3
44
44
 
45
45
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
46
- s.add_runtime_dependency(%q<ffi>, [">= 0"])
46
+ s.add_runtime_dependency(%q<ffi>, ["~> 1.1.5"])
47
47
  s.add_runtime_dependency(%q<ffi>, [">= 0"])
48
48
  s.add_development_dependency(%q<rspec>, [">= 0"])
49
49
  s.add_development_dependency(%q<jeweler>, [">= 0"])
50
50
  else
51
- s.add_dependency(%q<ffi>, [">= 0"])
51
+ s.add_dependency(%q<ffi>, ["~> 1.1.5"])
52
52
  s.add_dependency(%q<ffi>, [">= 0"])
53
53
  s.add_dependency(%q<rspec>, [">= 0"])
54
54
  s.add_dependency(%q<jeweler>, [">= 0"])
55
55
  end
56
56
  else
57
- s.add_dependency(%q<ffi>, [">= 0"])
57
+ s.add_dependency(%q<ffi>, ["~> 1.1.5"])
58
58
  s.add_dependency(%q<ffi>, [">= 0"])
59
59
  s.add_dependency(%q<rspec>, [">= 0"])
60
60
  s.add_dependency(%q<jeweler>, [">= 0"])
@@ -1,12 +1,29 @@
1
1
  require 'ffi'
2
2
 
3
3
  module Levenshtein
4
- extend FFI::Library
5
-
6
- # Try loading in order.
7
- library = File.dirname(__FILE__) + "/../ext/levenshtein/levenshtein"
8
- candidates = ['.bundle', '.so', '.dylib', ''].map { |ext| library + ext }
9
- ffi_lib(candidates)
10
-
11
- attach_function :distance, :levenshtein, [:string, :string], :int
4
+ class << self
5
+ extend FFI::Library
6
+
7
+ # Try loading in order.
8
+ library = File.dirname(__FILE__) + "/../ext/levenshtein/levenshtein"
9
+ candidates = ['.bundle', '.so', '.dylib', ''].map { |ext| library + ext }
10
+ ffi_lib(candidates)
11
+
12
+ # Safe version of distance, checks that arguments are really strings.
13
+ def distance(str1, str2)
14
+ validate(str1)
15
+ validate(str2)
16
+ ffi_distance(str1, str2)
17
+ end
18
+
19
+ # Unsafe version. Results in a segmentation fault if passed nils!
20
+ attach_function :ffi_distance, :levenshtein, [:string, :string], :int
21
+
22
+ private
23
+ def validate(arg)
24
+ unless arg.kind_of?(String)
25
+ raise TypeError, "wrong argument type #{arg.class} (expected String)"
26
+ end
27
+ end
28
+ end
12
29
  end
@@ -19,4 +19,15 @@ describe Levenshtein do
19
19
  Levenshtein.distance(w2, w1).should == d
20
20
  end
21
21
  end
22
+
23
+ it "should raise an error if either argument is nil" do
24
+ expect { Levenshtein.distance("", nil) }.to raise_error TypeError
25
+ expect { Levenshtein.distance(nil, "") }.to raise_error TypeError
26
+ end
27
+
28
+ it "should raise an error if either argument is something else than a string" do
29
+ expect { Levenshtein.distance("woah", /woah/) }.to raise_error TypeError
30
+ expect { Levenshtein.distance(5.3, "5.3") }.to raise_error TypeError
31
+ expect { Levenshtein.distance(Object.new, "Hello") }.to raise_error TypeError
32
+ end
22
33
  end
@@ -1,3 +1 @@
1
- require 'spec'
2
-
3
1
  require File.dirname(__FILE__) + "/../lib/levenshtein"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: levenshtein-ffi
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,23 +9,22 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-09-05 00:00:00.000000000 -07:00
13
- default_executable:
12
+ date: 2012-08-09 00:00:00.000000000 Z
14
13
  dependencies:
15
14
  - !ruby/object:Gem::Dependency
16
15
  name: ffi
17
- requirement: &2164470340 !ruby/object:Gem::Requirement
16
+ requirement: &70329943057740 !ruby/object:Gem::Requirement
18
17
  none: false
19
18
  requirements:
20
- - - ! '>='
19
+ - - ~>
21
20
  - !ruby/object:Gem::Version
22
- version: '0'
21
+ version: 1.1.5
23
22
  type: :runtime
24
23
  prerelease: false
25
- version_requirements: *2164470340
24
+ version_requirements: *70329943057740
26
25
  - !ruby/object:Gem::Dependency
27
26
  name: ffi
28
- requirement: &2164472060 !ruby/object:Gem::Requirement
27
+ requirement: &70329943056940 !ruby/object:Gem::Requirement
29
28
  none: false
30
29
  requirements:
31
30
  - - ! '>='
@@ -33,10 +32,10 @@ dependencies:
33
32
  version: '0'
34
33
  type: :runtime
35
34
  prerelease: false
36
- version_requirements: *2164472060
35
+ version_requirements: *70329943056940
37
36
  - !ruby/object:Gem::Dependency
38
37
  name: rspec
39
- requirement: &2164550620 !ruby/object:Gem::Requirement
38
+ requirement: &70329943056140 !ruby/object:Gem::Requirement
40
39
  none: false
41
40
  requirements:
42
41
  - - ! '>='
@@ -44,10 +43,10 @@ dependencies:
44
43
  version: '0'
45
44
  type: :development
46
45
  prerelease: false
47
- version_requirements: *2164550620
46
+ version_requirements: *70329943056140
48
47
  - !ruby/object:Gem::Dependency
49
48
  name: jeweler
50
- requirement: &2164718380 !ruby/object:Gem::Requirement
49
+ requirement: &70329943055340 !ruby/object:Gem::Requirement
51
50
  none: false
52
51
  requirements:
53
52
  - - ! '>='
@@ -55,7 +54,7 @@ dependencies:
55
54
  version: '0'
56
55
  type: :development
57
56
  prerelease: false
58
- version_requirements: *2164718380
57
+ version_requirements: *70329943055340
59
58
  description: Provides a fast, cross-Ruby implementation of the levenshtein distance
60
59
  algorithm.
61
60
  email: dbalatero@gmail.com
@@ -82,7 +81,6 @@ files:
82
81
  - spec/levenshtein_spec.rb
83
82
  - spec/spec_helper.rb
84
83
  - README.markdown.html
85
- has_rdoc: true
86
84
  homepage: http://github.com/dbalatero/levenshtein-ffi
87
85
  licenses: []
88
86
  post_install_message:
@@ -95,9 +93,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
95
93
  - - ! '>='
96
94
  - !ruby/object:Gem::Version
97
95
  version: '0'
98
- segments:
99
- - 0
100
- hash: -3210361372130881473
101
96
  required_rubygems_version: !ruby/object:Gem::Requirement
102
97
  none: false
103
98
  requirements:
@@ -106,7 +101,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
106
101
  version: '0'
107
102
  requirements: []
108
103
  rubyforge_project:
109
- rubygems_version: 1.6.2
104
+ rubygems_version: 1.8.17
110
105
  signing_key:
111
106
  specification_version: 3
112
107
  summary: An FFI version of the levenshtein gem.