attr_comparable 0.0.2 → 0.2.0.pre.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 4298a8f8bf1a126196d9bedaeca3e22a91b3a33c6c862b5355436c1120675fc8
4
+ data.tar.gz: eb72be741397d6f77ff7bd45e80175fc08e9cd0d00b1fae4327486a27b07e974
5
+ SHA512:
6
+ metadata.gz: 46bdc2c502aa48134ce9b8484099311b69ccc8a6361bcd4743d8d8159d3d50a6b64fd668cbff092456677642529977c76eae827c2cd820ee16adfb20faede4d9
7
+ data.tar.gz: 533d118ee77b4041a197faa6c86f3558a6e3be4c70685200fd2edddbd1dff0cef0573d82a537daeef040b8cee5db1646073a1b1365f18fa6982283111f17acae
data/.gitignore CHANGED
@@ -1,2 +1,4 @@
1
1
  .idea
2
2
  pkg
3
+
4
+ test/reports/*
@@ -0,0 +1 @@
1
+ 2.6.1
data/Gemfile CHANGED
@@ -1,6 +1,12 @@
1
- # ruby '1.8.7'
1
+ # ruby '2.4.2'
2
2
 
3
3
  source 'https://rubygems.org'
4
4
 
5
5
  # Specify your gem's dependencies in attr_default.gemspec
6
6
  gemspec
7
+
8
+ group :development do
9
+ gem 'minitest'
10
+ gem 'minitest-reporters'
11
+ gem 'rake', '>=0.9'
12
+ end
@@ -1,18 +1,30 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- attr_comparable (0.0.2)
5
- minitest
4
+ attr_comparable (0.2.0.pre.1)
6
5
 
7
6
  GEM
8
7
  remote: https://rubygems.org/
9
8
  specs:
10
- minitest (5.0.6)
11
- rake (10.1.0)
9
+ ansi (1.5.0)
10
+ builder (3.2.3)
11
+ minitest (5.13.0)
12
+ minitest-reporters (1.4.2)
13
+ ansi
14
+ builder
15
+ minitest (>= 5.0)
16
+ ruby-progressbar
17
+ rake (13.0.1)
18
+ ruby-progressbar (1.10.1)
12
19
 
13
20
  PLATFORMS
14
21
  ruby
15
22
 
16
23
  DEPENDENCIES
17
24
  attr_comparable!
25
+ minitest
26
+ minitest-reporters
18
27
  rake (>= 0.9)
28
+
29
+ BUNDLED WITH
30
+ 1.17.2
@@ -0,0 +1,56 @@
1
+ #!/usr/bin/groovy
2
+ @Library('jenkins-pipeline@v0.4.4')
3
+ import com.invoca.docker.*;
4
+
5
+ pipeline {
6
+ agent {
7
+ kubernetes {
8
+ defaultContainer 'ruby'
9
+ yaml '''
10
+ apiVersion: v1
11
+ kind: Pod
12
+ metadata:
13
+ labels:
14
+ jenkins/attr-comparable: true
15
+ namespace: jenkins
16
+ name: attr-comparable
17
+ spec:
18
+ containers:
19
+ - name: ruby
20
+ image: ruby:2.6.1
21
+ tty: true
22
+ command:
23
+ - cat
24
+ '''
25
+ }
26
+ }
27
+ stages {
28
+ stage('Unit Tests') {
29
+ environment {
30
+ GITHUB_KEY = credentials('github_key')
31
+ }
32
+
33
+ steps {
34
+ script {
35
+ sh '''
36
+ # get SSH setup inside the container
37
+ eval `ssh-agent -s`
38
+ echo "$GITHUB_KEY" | ssh-add -
39
+ mkdir -p /root/.ssh
40
+ ssh-keyscan -t rsa github.com > /root/.ssh/known_hosts
41
+
42
+ # run tests
43
+ bundle install --path vendor/bundle
44
+ bundle exec rake test
45
+ '''
46
+ }
47
+ }
48
+
49
+ post {
50
+ always { junit 'test/reports/*.xml' }
51
+ }
52
+ }
53
+ }
54
+
55
+ post { always { notifySlack(currentBuild.result) } }
56
+ }
data/README.md CHANGED
@@ -31,6 +31,11 @@ class FullName
31
31
  (middle <=> other.middle).nonzero? ||
32
32
  suffix <=> other.suffix
33
33
  end
34
+
35
+ def to_s
36
+ no_suffix = [first.presence, middle.presence, last.presence].compact.join(' ')
37
+ [no_suffix, suffix.presence].compact.join(', ')
38
+ end
34
39
  end
35
40
  ```
36
41
  You can see that the `<=>` method isn't very DRY, and as shown it doesn't even work with `nil`.
@@ -70,6 +75,6 @@ Example Usage
70
75
  >> junior = FullName.new("John", "Q.", "Public", "Jr.")
71
76
  >> junior > dad
72
77
  => true
73
- >> [mom, dad, junior].sort.map &:to_s
78
+ >> [junior, mom, dad].sort.map &:to_s
74
79
  => ["Kathy Doe", "John Q. Public", "John Q. Public, Jr."]
75
80
  ```
data/Rakefile CHANGED
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env rake
2
- require "bundler/gem_tasks"
2
+ require 'bundler/gem_tasks'
3
+ require 'rake/testtask'
3
4
 
4
5
  task :default => :test
5
6
 
6
- desc "Run unit tests."
7
- task :test do
8
- ruby "test/attr_comparable_test.rb"
7
+ Rake::TestTask.new do |t|
8
+ t.pattern = "test/**/*_test.rb"
9
9
  end
@@ -1,15 +1,16 @@
1
1
  require File.expand_path('../lib/attr_comparable/version', __FILE__)
2
2
 
3
3
  Gem::Specification.new do |gem|
4
- gem.add_dependency 'minitest' # Included in Ruby 1.9, but we want the latest.
5
- gem.add_development_dependency 'rake', '>=0.9'
6
-
7
4
  gem.authors = ["Colin Kelley"]
8
5
  gem.email = ["colindkelley@gmail.com"]
9
6
  gem.description = %q{AttrComparable}
10
7
  gem.summary = %q{Mix-in to make a value class Comparable. Simply declare the order of attributes to compare and the <=> (as needed by Comparable) is generated for you, including support for nil. Includes Comparable.}
11
8
  gem.homepage = "https://github.com/RingRevenue/attr_comparable"
12
9
 
10
+ gem.metadata = {
11
+ 'allowed_push_host' => 'https://rubygems.org'
12
+ }
13
+
13
14
  gem.files = `git ls-files`.split($\)
14
15
  gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
15
16
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/.*\.rb})
@@ -11,35 +11,35 @@ module AttrComparable
11
11
  module ClassMethods
12
12
  # like <=> but handles nil values
13
13
  # returns the code in string form to be eval'd
14
- # code will return nil instead of 0 for equal iff return_nil_on_equal is truthy
15
- def compare_with_nil_code(left, right, return_nil_on_equal)
14
+ def compare_with_nil_code(left, right)
16
15
  <<-EOS
17
16
  if #{ left }.nil?
18
17
  if #{ right }.nil?
19
- #{ return_nil_on_equal ? 'nil' : '0' }
18
+ 0
20
19
  else
21
20
  -1
22
21
  end
23
22
  elsif #{ right }.nil?
24
23
  1
25
24
  else
26
- (#{ left } <=> #{ right })#{ '.nonzero?' if return_nil_on_equal }
25
+ if (cmp_result = (#{ left } <=> #{ right })).nil?
26
+ return nil
27
+ end
28
+ cmp_result
27
29
  end
28
30
  EOS
29
31
  end
30
32
 
31
- def attr_compare(*attributes_arg)
32
- attributes = attributes_arg.flatten
33
-
34
- remaining_attrs = attributes.size;
35
- attr_exprs = attributes.map do |attribute|
36
- remaining_attrs -= 1
37
- compare_with_nil_code("self.#{attribute}", "rhs.#{attribute}", remaining_attrs.nonzero?).strip
33
+ def attr_compare(*attributes)
34
+ attr_exprs = (attributes.flatten).map do |attribute|
35
+ '(' + compare_with_nil_code("self.#{attribute}", "rhs.#{attribute}").strip + ')'
38
36
  end
39
37
 
40
38
  class_eval <<-EOS
41
39
  def <=>(rhs)
42
- #{ attr_exprs.join(" || ") }
40
+ unless rhs.nil?
41
+ #{ attr_exprs.join(".nonzero? || ") }
42
+ end
43
43
  end
44
44
  EOS
45
45
  end
@@ -1,3 +1,3 @@
1
1
  module AttrComparable
2
- VERSION = '0.0.2'
2
+ VERSION = '0.2.0.pre.1'
3
3
  end
@@ -0,0 +1,3 @@
1
+ #!/bin/sh -x
2
+
3
+ bundle install --path vendor/bundle
@@ -1,8 +1,5 @@
1
+ require_relative './test_helper'
1
2
  require File.expand_path('../../lib/attr_comparable', __FILE__)
2
- require 'bundler'
3
- Bundler.require(:default)
4
- require 'minitest/autorun'
5
-
6
3
 
7
4
  class ComparableTestOneParameter
8
5
  include AttrComparable
@@ -97,4 +94,52 @@ describe 'AttrComparable' do
97
94
  assert @d2 != @d3
98
95
  end
99
96
  end
97
+
98
+ describe "parameters that are incompatible to order" do
99
+ it "should return nil when the objects contain incompatible attributes" do
100
+ d1 = ComparableTestOneParameter.new(false)
101
+ d2 = ComparableTestOneParameter.new(true)
102
+ d3 = ComparableTestManyParameters.new(false, 'D')
103
+ d4 = ComparableTestManyParameters.new(true, 'D')
104
+ d5 = ComparableTestManyParameters.new('Kelly', false)
105
+ d6 = ComparableTestManyParameters.new('Kelly', true)
106
+
107
+ assert_nil d1 <=> d2
108
+ assert_nil d3 <=> d4
109
+ assert_nil d5 <=> d6
110
+ end
111
+
112
+ # For ComparableTestManyParameters the objects are compared by last_name then first_name
113
+ # If the comparison of last_names returns nil, that should immediately return nil,
114
+ # and not compare the remaining attributes. This code tests that by raising a runtime error
115
+ # if the first_name attribute (later in the compare order) is acessed
116
+
117
+ it "should return immediately return nils, not evaulate further attributes" do
118
+ incompatible_first_attribute = ComparableTestManyParameters.new('Kelly', false)
119
+ compatible_first_and_second_attribute = ComparableTestManyParameters.new(true, 'D')
120
+
121
+ d7 = Minitest::Mock.new
122
+ d8 = Minitest::Mock.new
123
+
124
+ 2.times { d7.expect :last_name, false, [] } # :last_name is used exactly twice per <=> call
125
+ d7.expect :nil?, false, [] # :nil? is used exactly once per <=> call
126
+ assert_nil incompatible_first_attribute <=> d7
127
+
128
+ 2.times { d8.expect :last_name, true, [] }
129
+ 2.times { d8.expect :first_name, 'D', [] }
130
+ d8.expect :nil?, false, []
131
+ assert_equal 0, compatible_first_and_second_attribute <=> d8
132
+
133
+ d7.verify
134
+ d8.verify
135
+ end
136
+
137
+ it "should return nil if the rhs is nil" do
138
+ d1 = ComparableTestOneParameter.new(false)
139
+ d2 = ComparableTestManyParameters.new('Kelly', false)
140
+
141
+ assert_nil d1 <=> nil
142
+ assert_nil d2 <=> nil
143
+ end
144
+ end
100
145
  end
@@ -0,0 +1,6 @@
1
+ require 'minitest/autorun'
2
+ require "minitest/reporters"
3
+ Minitest::Reporters.use! [
4
+ Minitest::Reporters::DefaultReporter.new,
5
+ Minitest::Reporters::JUnitReporter.new
6
+ ]
metadata CHANGED
@@ -1,95 +1,60 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: attr_comparable
3
- version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 0
8
- - 2
9
- version: 0.0.2
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.0.pre.1
10
5
  platform: ruby
11
- authors:
6
+ authors:
12
7
  - Colin Kelley
13
8
  autorequire:
14
9
  bindir: bin
15
10
  cert_chain: []
16
-
17
- date: 2013-08-10 00:00:00 -07:00
18
- default_executable:
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
21
- type: :runtime
22
- version_requirements: &id001 !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- segments:
27
- - 0
28
- version: "0"
29
- name: minitest
30
- requirement: *id001
31
- prerelease: false
32
- - !ruby/object:Gem::Dependency
33
- type: :development
34
- version_requirements: &id002 !ruby/object:Gem::Requirement
35
- requirements:
36
- - - ">="
37
- - !ruby/object:Gem::Version
38
- segments:
39
- - 0
40
- - 9
41
- version: "0.9"
42
- name: rake
43
- requirement: *id002
44
- prerelease: false
11
+ date: 2020-04-08 00:00:00.000000000 Z
12
+ dependencies: []
45
13
  description: AttrComparable
46
- email:
14
+ email:
47
15
  - colindkelley@gmail.com
48
16
  executables: []
49
-
50
17
  extensions: []
51
-
52
18
  extra_rdoc_files: []
53
-
54
- files:
55
- - .gitignore
19
+ files:
20
+ - ".gitignore"
21
+ - ".ruby-version"
56
22
  - Gemfile
57
23
  - Gemfile.lock
24
+ - Jenkinsfile
58
25
  - README.md
59
26
  - Rakefile
60
27
  - attr_comparable.gemspec
61
28
  - lib/attr_comparable.rb
62
29
  - lib/attr_comparable/version.rb
30
+ - semaphore_ci/setup.sh
63
31
  - test/attr_comparable_test.rb
64
- has_rdoc: true
32
+ - test/test_helper.rb
65
33
  homepage: https://github.com/RingRevenue/attr_comparable
66
34
  licenses: []
67
-
35
+ metadata:
36
+ allowed_push_host: https://rubygems.org
68
37
  post_install_message:
69
38
  rdoc_options: []
70
-
71
- require_paths:
39
+ require_paths:
72
40
  - lib
73
- required_ruby_version: !ruby/object:Gem::Requirement
74
- requirements:
41
+ required_ruby_version: !ruby/object:Gem::Requirement
42
+ requirements:
75
43
  - - ">="
76
- - !ruby/object:Gem::Version
77
- segments:
78
- - 0
79
- version: "0"
80
- required_rubygems_version: !ruby/object:Gem::Requirement
81
- requirements:
82
- - - ">="
83
- - !ruby/object:Gem::Version
84
- segments:
85
- - 0
86
- version: "0"
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ required_rubygems_version: !ruby/object:Gem::Requirement
47
+ requirements:
48
+ - - ">"
49
+ - !ruby/object:Gem::Version
50
+ version: 1.3.1
87
51
  requirements: []
88
-
89
- rubyforge_project:
90
- rubygems_version: 1.3.6
52
+ rubygems_version: 3.0.1
91
53
  signing_key:
92
- specification_version: 3
93
- summary: Mix-in to make a value class Comparable. Simply declare the order of attributes to compare and the <=> (as needed by Comparable) is generated for you, including support for nil. Includes Comparable.
94
- test_files:
54
+ specification_version: 4
55
+ summary: Mix-in to make a value class Comparable. Simply declare the order of attributes
56
+ to compare and the <=> (as needed by Comparable) is generated for you, including
57
+ support for nil. Includes Comparable.
58
+ test_files:
95
59
  - test/attr_comparable_test.rb
60
+ - test/test_helper.rb