identity_parade 0.1.1 → 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 +32 -6
- data/identity_parade.gemspec +5 -2
- data/lib/identity_parade/match.rb +3 -0
- data/lib/identity_parade/matcher.rb +4 -1
- data/lib/identity_parade/matchers/boolean_matcher.rb +1 -3
- data/lib/identity_parade/version.rb +1 -1
- data/lib/identity_parade.rb +15 -2
- metadata +19 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7380c519639022df0efa2b685bab2d9572c9f3acbf9e86a27cb2cd49a35df75c
|
4
|
+
data.tar.gz: 9aaf25c04855146be3e8c5776e3cfd100699202b3ad7bcdafa87b500ca6a628e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c0a55315ad2c80c0858d829bbb8df5c82f34dcd66f418e0e98ef9dca4a8fc8ba31c36e65166cca11078ddeb0503b658a0481995e6e98e47de9faeafc269f61de
|
7
|
+
data.tar.gz: a1577e814ddaecd0829e5bce5d81d688883e8570cae39d63a139256f9ae27efef4e515251c99c9fb9c055a64fcf67bdcfe6c574886fabfab71f37423f00a5bc9
|
data/README.md
CHANGED
@@ -20,25 +20,51 @@ Or install it yourself as:
|
|
20
20
|
|
21
21
|
## Usage
|
22
22
|
|
23
|
+
IdentityParade has a very simple API. There are basically only two methods:
|
24
|
+
|
23
25
|
``` ruby
|
24
|
-
|
26
|
+
# Checks the similarity between to arguments. Returns a number between
|
27
|
+
# 0 and 1. 0 is no similarity and 1 is a complete duplicate.
|
28
|
+
IdentityParade.match(arg1, arg2)
|
25
29
|
# => 0.95
|
26
30
|
|
27
|
-
|
31
|
+
# When matching score is equal or greater than the global +matching_score+
|
32
|
+
# it returns true - otherwise false.
|
33
|
+
IdentityParade.match?(arg1, arg2)
|
28
34
|
# => true
|
29
35
|
```
|
30
36
|
|
37
|
+
## Configuration
|
38
|
+
|
39
|
+
IdentityParade can be configured by the `configure` method:
|
40
|
+
|
41
|
+
``` ruby
|
42
|
+
IdentityParade.configure do |config|
|
43
|
+
# Blacklist some keys in a hash that should not be compared.
|
44
|
+
config.blacklisted_keys = %w[id created_at updated_at]
|
45
|
+
# Set the global match score to 80%
|
46
|
+
config.match_score = 0.80
|
47
|
+
end
|
48
|
+
```
|
31
49
|
|
32
50
|
## Development
|
33
51
|
|
34
|
-
After checking out the repo, run `bin/setup` to install dependencies. Then, run
|
52
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then, run
|
53
|
+
`rake spec` to run the tests. You can also run `bin/console` for an interactive
|
54
|
+
prompt that will allow you to experiment.
|
35
55
|
|
36
|
-
To install this gem onto your local machine, run `bundle exec rake install`. To
|
56
|
+
To install this gem onto your local machine, run `bundle exec rake install`. To
|
57
|
+
release a new version, update the version number in `version.rb`, and then run
|
58
|
+
`bundle exec rake release`, which will create a git tag for the version, push
|
59
|
+
git commits and tags, and push the `.gem` file to
|
60
|
+
[rubygems.org](https://rubygems.org).
|
37
61
|
|
38
62
|
## Contributing
|
39
63
|
|
40
|
-
Bug reports and pull requests are welcome on GitHub at
|
64
|
+
Bug reports and pull requests are welcome on GitHub at
|
65
|
+
https://github.com/henvo/identity_parade.
|
41
66
|
|
42
67
|
## License
|
43
68
|
|
44
|
-
The gem is available as open source under the terms of the [MIT
|
69
|
+
The gem is available as open source under the terms of the [MIT
|
70
|
+
License](https://opensource.org/licenses/MIT).
|
data/identity_parade.gemspec
CHANGED
@@ -9,8 +9,10 @@ Gem::Specification.new do |spec|
|
|
9
9
|
spec.authors = ['Henning Vogt']
|
10
10
|
spec.email = ['git@henvo.de']
|
11
11
|
|
12
|
-
spec.summary = '
|
13
|
-
spec.description = '
|
12
|
+
spec.summary = 'Checks basic data types for similarity.'
|
13
|
+
spec.description = 'IdentityParade allows you to compare two basic data ' \
|
14
|
+
'types, e.g. hashes, arrays, numbers and strings.' \
|
15
|
+
'It returns a matching score or a boolean.'
|
14
16
|
spec.homepage = 'https://github.com/henvo/identity_parade'
|
15
17
|
spec.license = 'MIT'
|
16
18
|
|
@@ -37,4 +39,5 @@ Gem::Specification.new do |spec|
|
|
37
39
|
spec.add_development_dependency 'rake', '~> 10.0'
|
38
40
|
spec.add_development_dependency 'reek', '~> 4.8'
|
39
41
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
42
|
+
spec.add_development_dependency 'simplecov', '~> 0.16'
|
40
43
|
end
|
@@ -8,16 +8,19 @@ module IdentityParade
|
|
8
8
|
@right = right
|
9
9
|
end
|
10
10
|
|
11
|
+
# @return [Float] the matching score
|
11
12
|
def score
|
12
13
|
return unless Kernel.const_defined?(matcher_class_name)
|
13
14
|
|
14
15
|
matcher.new(@left, @right).score
|
15
16
|
end
|
16
17
|
|
18
|
+
# @return [Class] The matcher class
|
17
19
|
def matcher
|
18
20
|
matcher_class_name.constantize
|
19
21
|
end
|
20
22
|
|
23
|
+
# @return [String] the matcher class name
|
21
24
|
def matcher_class_name
|
22
25
|
"identity_parade/matchers/#{@left.class.name.underscore}_matcher".classify
|
23
26
|
end
|
@@ -1,5 +1,8 @@
|
|
1
1
|
module IdentityParade
|
2
|
-
# The base class for all matchers
|
2
|
+
# The base class for all matchers implements the basic interface for all
|
3
|
+
# matchers.
|
4
|
+
#
|
5
|
+
# Every matcher MUST implement a score method that returns a Number.
|
3
6
|
class Matcher
|
4
7
|
attr_reader :left, :right
|
5
8
|
|
@@ -3,9 +3,7 @@ module IdentityParade
|
|
3
3
|
# This matcher checks the similarity of booleans
|
4
4
|
class BooleanMatcher < Matcher
|
5
5
|
def score
|
6
|
-
|
7
|
-
|
8
|
-
@left == @right ? 1 : 0
|
6
|
+
@left.class == @right.class ? 1 : 0
|
9
7
|
end
|
10
8
|
end
|
11
9
|
end
|
data/lib/identity_parade.rb
CHANGED
@@ -14,15 +14,15 @@ require 'identity_parade/matchers/boolean_matcher'
|
|
14
14
|
require 'identity_parade/matchers/true_class_matcher'
|
15
15
|
require 'identity_parade/matchers/false_class_matcher'
|
16
16
|
|
17
|
-
|
18
17
|
# This gem allows to compare two types.
|
19
18
|
module IdentityParade
|
20
19
|
class << self
|
21
|
-
# :reek
|
20
|
+
# :reek:Attribute because we want to share the config
|
22
21
|
def config
|
23
22
|
@config ||= RecursiveOpenStruct.new
|
24
23
|
end
|
25
24
|
|
25
|
+
# Allows to configure the global configuration
|
26
26
|
def configure
|
27
27
|
yield(config)
|
28
28
|
end
|
@@ -30,10 +30,23 @@ module IdentityParade
|
|
30
30
|
|
31
31
|
module_function
|
32
32
|
|
33
|
+
# Get the matching score of two basic data types
|
34
|
+
#
|
35
|
+
# @param left [Number, String, Array, TrueClass, FalseClass] left
|
36
|
+
# @param right [Number, String, Array, TrueClass, FalseClass] right
|
37
|
+
#
|
38
|
+
# @return [Float] the matching score
|
33
39
|
def match(left, right)
|
34
40
|
IdentityParade::Match.new(left, right).score
|
35
41
|
end
|
36
42
|
|
43
|
+
# Checks if a matching score is higher than the globally configure
|
44
|
+
# match_score.
|
45
|
+
#
|
46
|
+
# @param left [Number, String, Array, TrueClass, FalseClass] left
|
47
|
+
# @param right [Number, String, Array, TrueClass, FalseClass] right
|
48
|
+
#
|
49
|
+
# @return [TrueClass, FalseClass] the result
|
37
50
|
def match?(left, right)
|
38
51
|
match(left, right) >= IdentityParade.config.match_score
|
39
52
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: identity_parade
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Henning Vogt
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-04-
|
11
|
+
date: 2018-04-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -128,7 +128,22 @@ dependencies:
|
|
128
128
|
- - "~>"
|
129
129
|
- !ruby/object:Gem::Version
|
130
130
|
version: '3.0'
|
131
|
-
|
131
|
+
- !ruby/object:Gem::Dependency
|
132
|
+
name: simplecov
|
133
|
+
requirement: !ruby/object:Gem::Requirement
|
134
|
+
requirements:
|
135
|
+
- - "~>"
|
136
|
+
- !ruby/object:Gem::Version
|
137
|
+
version: '0.16'
|
138
|
+
type: :development
|
139
|
+
prerelease: false
|
140
|
+
version_requirements: !ruby/object:Gem::Requirement
|
141
|
+
requirements:
|
142
|
+
- - "~>"
|
143
|
+
- !ruby/object:Gem::Version
|
144
|
+
version: '0.16'
|
145
|
+
description: IdentityParade allows you to compare two basic data types, e.g. hashes,
|
146
|
+
arrays, numbers and strings.It returns a matching score or a boolean.
|
132
147
|
email:
|
133
148
|
- git@henvo.de
|
134
149
|
executables: []
|
@@ -185,5 +200,5 @@ rubyforge_project:
|
|
185
200
|
rubygems_version: 2.7.6
|
186
201
|
signing_key:
|
187
202
|
specification_version: 4
|
188
|
-
summary:
|
203
|
+
summary: Checks basic data types for similarity.
|
189
204
|
test_files: []
|