equalizer 0.0.7 → 0.0.8
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 +13 -5
- data/.travis.yml +2 -6
- data/Gemfile.devtools +20 -7
- data/config/flog.yml +1 -1
- data/config/rubocop.yml +5 -1
- data/lib/equalizer.rb +14 -11
- data/lib/equalizer/version.rb +1 -1
- data/spec/unit/equalizer/included_spec.rb +40 -0
- data/spec/unit/equalizer/methods/eql_predicate_spec.rb +19 -3
- data/spec/unit/equalizer/methods/equality_operator_spec.rb +10 -0
- data/spec/unit/equalizer/universal_spec.rb +1 -0
- metadata +9 -7
checksums.yaml
CHANGED
@@ -1,7 +1,15 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
ZGRlOGMwM2JjYmE4MzM0Yzg0YmQxN2MwYzZmM2U3MWIzNjkxNmNkMA==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
ZDVhZGIwM2U5MTdhNWYyNDZjYTlkOTY4ZTM4NzZhNzEyOTQzZGRiZQ==
|
5
7
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
OGM3NDcwMzhjY2M3MWJjNDBlYWRjZDk4YWY4NjYyNTI1NzdiZDc3MzBiMGEz
|
10
|
+
ZjAwYmJhNzgwNTg4YjU5ZmFlOTU1N2NiYjBmMWY4NmU0N2ZhOWZjZTNiNzhi
|
11
|
+
ZTdiN2NjODk1YWMyNzE5OWY0ZjY2NmQ3ZjNhYjY5Yzk1NjQ5OTI=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
MGM3YzJhODdkMDZhOTVmOWNkNWIzMTdhMWY1MjY5Njg1OWRmYWU5NDg5MGQw
|
14
|
+
M2RmNjVmOTM4OWYzODQ0NTk5Y2I3YTViYjgwMTdmMTI3MmVlMjVlZDZmMjE0
|
15
|
+
ZTc1Y2YzZGRhZWYyYTQyMWExNDJiYjY3NTljMDA5ZmIxYWVkZjI=
|
data/.travis.yml
CHANGED
@@ -1,12 +1,11 @@
|
|
1
1
|
language: ruby
|
2
|
-
before_install: gem install bundler
|
3
2
|
bundler_args: --without yard guard benchmarks
|
4
3
|
script: "bundle exec rake ci"
|
5
4
|
rvm:
|
6
5
|
- 1.9.3
|
7
6
|
- 2.0.0
|
8
7
|
- ruby-head
|
9
|
-
- rbx
|
8
|
+
- rbx
|
10
9
|
matrix:
|
11
10
|
include:
|
12
11
|
- rvm: jruby-19mode
|
@@ -14,10 +13,7 @@ matrix:
|
|
14
13
|
- rvm: jruby-head
|
15
14
|
env: JRUBY_OPTS="$JRUBY_OPTS --debug"
|
16
15
|
allow_failures:
|
17
|
-
- rvm:
|
18
|
-
- rvm: 2.0.0 # mutant fails
|
19
|
-
- rvm: ruby-head # travis broken
|
20
|
-
- rvm: rbx-19mode # mutant fails
|
16
|
+
- rvm: 2.0.0 # travis broken
|
21
17
|
notifications:
|
22
18
|
irc:
|
23
19
|
channels:
|
data/Gemfile.devtools
CHANGED
@@ -4,10 +4,14 @@ group :development do
|
|
4
4
|
gem 'rake', '~> 10.1.0'
|
5
5
|
gem 'rspec', '~> 2.14.1'
|
6
6
|
gem 'yard', '~> 0.8.7'
|
7
|
+
|
8
|
+
platform :rbx do
|
9
|
+
gem 'rubysl-singleton', '~> 2.0.0'
|
10
|
+
end
|
7
11
|
end
|
8
12
|
|
9
13
|
group :yard do
|
10
|
-
gem 'kramdown', '~> 1.
|
14
|
+
gem 'kramdown', '~> 1.2.0'
|
11
15
|
end
|
12
16
|
|
13
17
|
group :guard do
|
@@ -15,7 +19,7 @@ group :guard do
|
|
15
19
|
gem 'guard-bundler', '~> 1.0.0'
|
16
20
|
gem 'guard-rspec', '~> 3.0.2'
|
17
21
|
gem 'guard-rubocop', '~> 0.2.0'
|
18
|
-
|
22
|
+
gem 'guard-mutant', '~> 0.0.1'
|
19
23
|
|
20
24
|
# file system change event handling
|
21
25
|
gem 'listen', '~> 1.3.0'
|
@@ -30,18 +34,27 @@ group :guard do
|
|
30
34
|
end
|
31
35
|
|
32
36
|
group :metrics do
|
33
|
-
gem 'coveralls', '~> 0.
|
37
|
+
gem 'coveralls', '~> 0.7.0'
|
34
38
|
gem 'flay', '~> 2.4.0'
|
35
|
-
gem 'flog', '~> 4.
|
39
|
+
gem 'flog', '~> 4.2.0'
|
36
40
|
gem 'reek', '~> 1.3.2'
|
37
|
-
gem 'rubocop', '~> 0.
|
38
|
-
gem 'simplecov', '~> 0.
|
41
|
+
gem 'rubocop', '~> 0.15.0'
|
42
|
+
gem 'simplecov', '~> 0.8.2'
|
39
43
|
gem 'yardstick', '~> 0.9.7', git: 'https://github.com/dkubb/yardstick.git'
|
40
44
|
|
41
45
|
platforms :ruby_19, :ruby_20 do
|
42
|
-
|
46
|
+
gem 'mutant', '~> 0.3.0.rc3', git: 'https://github.com/mbj/mutant.git'
|
47
|
+
gem 'unparser', '~> 0.1.5', git: 'https://github.com/mbj/unparser.git'
|
43
48
|
gem 'yard-spellcheck', '~> 0.1.5'
|
44
49
|
end
|
50
|
+
|
51
|
+
platform :rbx do
|
52
|
+
gem 'json', '~> 1.8.1'
|
53
|
+
gem 'racc', '~> 1.4.10'
|
54
|
+
gem 'rubysl-logger', '~> 2.0.0'
|
55
|
+
gem 'rubysl-open-uri', '~> 2.0.0'
|
56
|
+
gem 'rubysl-prettyprint', '~> 2.0.2'
|
57
|
+
end
|
45
58
|
end
|
46
59
|
|
47
60
|
group :benchmarks do
|
data/config/flog.yml
CHANGED
@@ -1,2 +1,2 @@
|
|
1
1
|
---
|
2
|
-
threshold:
|
2
|
+
threshold: 18.7
|
data/config/rubocop.yml
CHANGED
@@ -29,7 +29,7 @@ CollectionMethods:
|
|
29
29
|
# sections of code and visually separate them. When the keyword is at the same
|
30
30
|
# level I think it sort of blends in with the def keywords and makes it harder
|
31
31
|
# to scan the code and see where the sections are.
|
32
|
-
|
32
|
+
AccessModifierIndentation:
|
33
33
|
Enabled: false
|
34
34
|
|
35
35
|
# Disable documentation checking until a class needs to be documented once
|
@@ -55,3 +55,7 @@ ConstantName:
|
|
55
55
|
# Not all trivial readers/writers can be defined with attr_* methods
|
56
56
|
TrivialAccessors:
|
57
57
|
Enabled: false
|
58
|
+
|
59
|
+
# Allow empty lines around body
|
60
|
+
EmptyLinesAroundBody:
|
61
|
+
Enabled: false
|
data/lib/equalizer.rb
CHANGED
@@ -16,12 +16,24 @@ class Equalizer < Module
|
|
16
16
|
def initialize(*keys)
|
17
17
|
@keys = keys
|
18
18
|
define_methods
|
19
|
-
include_comparison_methods
|
20
19
|
freeze
|
21
20
|
end
|
22
21
|
|
23
22
|
private
|
24
23
|
|
24
|
+
# Hook called when module is included
|
25
|
+
#
|
26
|
+
# @param [Module] descendant
|
27
|
+
# the module or class including Equalizer
|
28
|
+
#
|
29
|
+
# @return [self]
|
30
|
+
#
|
31
|
+
# @api private
|
32
|
+
def included(descendant)
|
33
|
+
super
|
34
|
+
descendant.module_eval { include Methods }
|
35
|
+
end
|
36
|
+
|
25
37
|
# Define the equalizer methods based on #keys
|
26
38
|
#
|
27
39
|
# @return [undefined]
|
@@ -41,7 +53,7 @@ private
|
|
41
53
|
def define_cmp_method
|
42
54
|
keys = @keys
|
43
55
|
define_method(:cmp?) do |comparator, other|
|
44
|
-
keys.all? { |key| send(key).
|
56
|
+
keys.all? { |key| send(key).public_send(comparator, other.send(key)) }
|
45
57
|
end
|
46
58
|
private :cmp?
|
47
59
|
end
|
@@ -72,15 +84,6 @@ private
|
|
72
84
|
end
|
73
85
|
end
|
74
86
|
|
75
|
-
# Include the #eql? and #== methods
|
76
|
-
#
|
77
|
-
# @return [undefined]
|
78
|
-
#
|
79
|
-
# @api private
|
80
|
-
def include_comparison_methods
|
81
|
-
module_eval { include Methods }
|
82
|
-
end
|
83
|
-
|
84
87
|
# The comparison methods
|
85
88
|
module Methods
|
86
89
|
|
data/lib/equalizer/version.rb
CHANGED
@@ -0,0 +1,40 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe Equalizer, '#included' do
|
6
|
+
subject { descendant.instance_exec(object) { |mod| include mod } }
|
7
|
+
|
8
|
+
let(:object) { described_class.new }
|
9
|
+
let(:descendant) { Class.new }
|
10
|
+
let(:superclass) { described_class.superclass }
|
11
|
+
|
12
|
+
before do
|
13
|
+
# Prevent Module.included from being called through inheritance
|
14
|
+
described_class::Methods.stub(:included)
|
15
|
+
end
|
16
|
+
|
17
|
+
around do |example|
|
18
|
+
# Restore included method after each example
|
19
|
+
superclass.class_eval do
|
20
|
+
alias_method :original_included, :included
|
21
|
+
example.call
|
22
|
+
undef_method :included
|
23
|
+
alias_method :included, :original_included
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'delegates to the superclass #included method' do
|
28
|
+
# This is the most succinct approach I could think of to test whether the
|
29
|
+
# superclass#included method is called. All of the built-in rspec helpers
|
30
|
+
# did not seem to work for this.
|
31
|
+
included = false
|
32
|
+
superclass.class_eval { define_method(:included) { |_| included = true } }
|
33
|
+
expect { subject }.to change { included }.from(false).to(true)
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'includes methods into the descendant' do
|
37
|
+
subject
|
38
|
+
expect(descendant.included_modules).to include(described_class::Methods)
|
39
|
+
end
|
40
|
+
end
|
@@ -5,14 +5,20 @@ require 'spec_helper'
|
|
5
5
|
describe Equalizer::Methods, '#eql?' do
|
6
6
|
subject { object.eql?(other) }
|
7
7
|
|
8
|
-
let(:object) { described_class.new }
|
8
|
+
let(:object) { described_class.new(true) }
|
9
9
|
|
10
10
|
let(:described_class) do
|
11
11
|
Class.new do
|
12
12
|
include Equalizer::Methods
|
13
13
|
|
14
|
+
attr_reader :boolean
|
15
|
+
|
16
|
+
def initialize(boolean)
|
17
|
+
@boolean = boolean
|
18
|
+
end
|
19
|
+
|
14
20
|
def cmp?(comparator, other)
|
15
|
-
|
21
|
+
boolean.send(comparator, other.boolean)
|
16
22
|
end
|
17
23
|
end
|
18
24
|
end
|
@@ -38,7 +44,17 @@ describe Equalizer::Methods, '#eql?' do
|
|
38
44
|
end
|
39
45
|
|
40
46
|
context 'with an equivalent object of a subclass' do
|
41
|
-
let(:other) { Class.new(described_class).new }
|
47
|
+
let(:other) { Class.new(described_class).new(true) }
|
48
|
+
|
49
|
+
it { should be(false) }
|
50
|
+
|
51
|
+
it 'is symmetric' do
|
52
|
+
should eql(other.eql?(object))
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
context 'with a different object' do
|
57
|
+
let(:other) { described_class.new(false) }
|
42
58
|
|
43
59
|
it { should be(false) }
|
44
60
|
|
@@ -95,4 +95,14 @@ describe Equalizer::Methods, '#==' do
|
|
95
95
|
should_not eql(other == object)
|
96
96
|
end
|
97
97
|
end
|
98
|
+
|
99
|
+
context 'with a different object' do
|
100
|
+
let(:other) { described_class.new(false) }
|
101
|
+
|
102
|
+
it { should be(false) }
|
103
|
+
|
104
|
+
it 'is symmetric' do
|
105
|
+
should eql(other == object)
|
106
|
+
end
|
107
|
+
end
|
98
108
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: equalizer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dan Kubb
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-12-02 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -18,7 +18,7 @@ dependencies:
|
|
18
18
|
- - ~>
|
19
19
|
- !ruby/object:Gem::Version
|
20
20
|
version: '1.3'
|
21
|
-
- - '>='
|
21
|
+
- - ! '>='
|
22
22
|
- !ruby/object:Gem::Version
|
23
23
|
version: 1.3.5
|
24
24
|
type: :development
|
@@ -28,7 +28,7 @@ dependencies:
|
|
28
28
|
- - ~>
|
29
29
|
- !ruby/object:Gem::Version
|
30
30
|
version: '1.3'
|
31
|
-
- - '>='
|
31
|
+
- - ! '>='
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: 1.3.5
|
34
34
|
description: Module to define equality, equivalence and inspection methods
|
@@ -68,6 +68,7 @@ files:
|
|
68
68
|
- lib/equalizer/version.rb
|
69
69
|
- spec/spec_helper.rb
|
70
70
|
- spec/support/config_alias.rb
|
71
|
+
- spec/unit/equalizer/included_spec.rb
|
71
72
|
- spec/unit/equalizer/methods/eql_predicate_spec.rb
|
72
73
|
- spec/unit/equalizer/methods/equality_operator_spec.rb
|
73
74
|
- spec/unit/equalizer/universal_spec.rb
|
@@ -81,21 +82,22 @@ require_paths:
|
|
81
82
|
- lib
|
82
83
|
required_ruby_version: !ruby/object:Gem::Requirement
|
83
84
|
requirements:
|
84
|
-
- - '>='
|
85
|
+
- - ! '>='
|
85
86
|
- !ruby/object:Gem::Version
|
86
87
|
version: '0'
|
87
88
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
88
89
|
requirements:
|
89
|
-
- - '>='
|
90
|
+
- - ! '>='
|
90
91
|
- !ruby/object:Gem::Version
|
91
92
|
version: '0'
|
92
93
|
requirements: []
|
93
94
|
rubyforge_project:
|
94
|
-
rubygems_version: 2.
|
95
|
+
rubygems_version: 2.1.11
|
95
96
|
signing_key:
|
96
97
|
specification_version: 4
|
97
98
|
summary: Module to define equality, equivalence and inspection methods
|
98
99
|
test_files:
|
100
|
+
- spec/unit/equalizer/included_spec.rb
|
99
101
|
- spec/unit/equalizer/methods/eql_predicate_spec.rb
|
100
102
|
- spec/unit/equalizer/methods/equality_operator_spec.rb
|
101
103
|
- spec/unit/equalizer/universal_spec.rb
|