data_types 1.0.0 → 1.1.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/lib/data_types/pair.rb +60 -3
- data/lib/data_types/triplet.rb +74 -4
- metadata +3 -6
- data/spec/pair_test_cases.rb +0 -53
- data/spec/triplet_test_cases.rb +0 -57
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b32c543113e49bddaced81642323a64dd7070482
|
4
|
+
data.tar.gz: 38722da0ce5a3bfb9e8f0e73901b459fb769b8e6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 793cd05b43b4856f58b625c4adcc47ab718105882fbde3c4be5f6b30b41e22560d4e813683911d5eaeeed033f07631800db0abc2702b69642e950a6eba3ccc64
|
7
|
+
data.tar.gz: 5144e1a2677b04b3dc18c02e7d726f9c2dba98e6397eed633696575e77d6ec510d549e67c4e84975e20d36465f5c57f551c4c8f5b3e178378f8d71fc3c47974c
|
data/lib/data_types/pair.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
|
-
# The Pair class represents a pair of two pieces of data.
|
1
|
+
# The Pair class represents a pair of two pieces of data. The attributes are readers for custom = behavior.
|
2
2
|
class Pair
|
3
3
|
# @return [Object] The left data.
|
4
|
-
|
4
|
+
attr_reader :left
|
5
5
|
|
6
6
|
# @return [Object] The right data.
|
7
|
-
|
7
|
+
attr_reader :right
|
8
8
|
|
9
9
|
# Creates a new pair.
|
10
10
|
# @param left [Object] The left piece of data.
|
@@ -14,6 +14,7 @@ class Pair
|
|
14
14
|
def initialize(left, right)
|
15
15
|
@left = left
|
16
16
|
@right = right
|
17
|
+
@frozen = false
|
17
18
|
end
|
18
19
|
|
19
20
|
# Gets a string representation of the pair.
|
@@ -72,4 +73,60 @@ class Pair
|
|
72
73
|
@right = left
|
73
74
|
self
|
74
75
|
end
|
76
|
+
|
77
|
+
# Returns true if self and other have the same left and right values.
|
78
|
+
# @param other [Pair] The other Pair
|
79
|
+
# @return [Boolean] Whether they are equivalent.
|
80
|
+
def eql?(other)
|
81
|
+
@left == other.left && @right == other.right
|
82
|
+
end
|
83
|
+
|
84
|
+
alias == eql?
|
85
|
+
|
86
|
+
# Returns whether self is frozen.
|
87
|
+
# @return [Boolean] Whether self is frozen.
|
88
|
+
def frozen?
|
89
|
+
@frozen
|
90
|
+
end
|
91
|
+
|
92
|
+
# Deep-freezes the Pair, freezing left and right, as well as the object itself.
|
93
|
+
# @return [Pair] self.
|
94
|
+
def freeze
|
95
|
+
unless frozen?
|
96
|
+
@left.freeze
|
97
|
+
@right.freeze
|
98
|
+
@frozen = true
|
99
|
+
end
|
100
|
+
self
|
101
|
+
end
|
102
|
+
|
103
|
+
# Sets right to the value.
|
104
|
+
# @raise RuntimeError when self is frozen.
|
105
|
+
# @param new [Any] The new right value.
|
106
|
+
# @return [void]
|
107
|
+
def right=(new)
|
108
|
+
if frozen?
|
109
|
+
raise RuntimeError.new("can't modify frozen Pair")
|
110
|
+
else
|
111
|
+
@right = new
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
# Sets left to the value.
|
116
|
+
# @raise RuntimeError when self is frozen.
|
117
|
+
# @param new [Any] The new left value.
|
118
|
+
# @return [void]
|
119
|
+
def left=(new)
|
120
|
+
if frozen?
|
121
|
+
raise RuntimeError.new("can't modify frozen Pair")
|
122
|
+
else
|
123
|
+
@left = new
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
# Returns a new copied version of the Pair, with copied values.
|
128
|
+
# @return [Pair] The new Pair
|
129
|
+
def clone
|
130
|
+
Pair.new(@left.dup, @right.dup)
|
131
|
+
end
|
75
132
|
end
|
data/lib/data_types/triplet.rb
CHANGED
@@ -1,13 +1,13 @@
|
|
1
|
-
# Triplet class represents a set of 3 pieces of data.
|
1
|
+
# Triplet class represents a set of 3 pieces of data. The attributes are readers for custom = behavior.
|
2
2
|
class Triplet
|
3
3
|
# @return [Object] The first data piece.
|
4
|
-
|
4
|
+
attr_reader :left
|
5
5
|
|
6
6
|
# @return [Object] The second data piece.
|
7
|
-
|
7
|
+
attr_reader :middle
|
8
8
|
|
9
9
|
# @return [Object] The third data piece.
|
10
|
-
|
10
|
+
attr_reader :right
|
11
11
|
|
12
12
|
# Creates a new Triplet.
|
13
13
|
# @param left [Object] The first data.
|
@@ -18,6 +18,7 @@ class Triplet
|
|
18
18
|
@left = left
|
19
19
|
@middle = middle
|
20
20
|
@right = right
|
21
|
+
@frozen = false
|
21
22
|
end
|
22
23
|
|
23
24
|
# @return [String] The stringified version of the Triplet.
|
@@ -77,4 +78,73 @@ class Triplet
|
|
77
78
|
@left = right
|
78
79
|
self
|
79
80
|
end
|
81
|
+
|
82
|
+
# Returns true if self and other have the same left and right values.
|
83
|
+
# @param other [Triplet] The other Triplet
|
84
|
+
# @return [Boolean] Whether they are equivalent.
|
85
|
+
def eql?(other)
|
86
|
+
@left == other.left &&@middle == other.middle && @right == other.right
|
87
|
+
end
|
88
|
+
|
89
|
+
alias == eql?
|
90
|
+
|
91
|
+
# Returns whether self is frozen.
|
92
|
+
# @return [Boolean] Whether self is frozen.
|
93
|
+
def frozen?
|
94
|
+
@frozen
|
95
|
+
end
|
96
|
+
|
97
|
+
# Deep-freezes the Triplet, freezing left, middle, and right, as well as the object itself.
|
98
|
+
# @return [Triplet] self.
|
99
|
+
def freeze
|
100
|
+
unless frozen?
|
101
|
+
@left.freeze
|
102
|
+
@middle.freeze
|
103
|
+
@right.freeze
|
104
|
+
@frozen = true
|
105
|
+
end
|
106
|
+
self
|
107
|
+
end
|
108
|
+
|
109
|
+
# Sets right to the value.
|
110
|
+
# @raise RuntimeError when self is frozen.
|
111
|
+
# @param new [Any] The new right value.
|
112
|
+
# @return [void]
|
113
|
+
def right=(new)
|
114
|
+
if frozen?
|
115
|
+
raise RuntimeError.new("can't modify frozen Triplet")
|
116
|
+
else
|
117
|
+
@right = new
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
# Sets middle to the value.
|
122
|
+
# @raise RuntimeError when self is frozen.
|
123
|
+
# @param new [Any] The new middle value.
|
124
|
+
# @return [void]
|
125
|
+
def middle=(new)
|
126
|
+
if frozen?
|
127
|
+
raise RuntimeError.new("can't modify frozen Triplet")
|
128
|
+
else
|
129
|
+
@middle = new
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
# Sets left to the value.
|
134
|
+
# @raise RuntimeError when self is frozen.
|
135
|
+
# @param new [Any] The new left value.
|
136
|
+
# @return [void]
|
137
|
+
def left=(new)
|
138
|
+
if frozen?
|
139
|
+
raise RuntimeError.new("can't modify frozen Triplet")
|
140
|
+
else
|
141
|
+
@left = new
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
# Returns a new copied version of the Triplet, with copied values.
|
146
|
+
# @return [Triplet] The new Triplet
|
147
|
+
def clone
|
148
|
+
Triplet.new(@left.dup, @middle.dup, @right.dup)
|
149
|
+
end
|
80
150
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: data_types
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eli Foster
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-03-14 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description:
|
14
14
|
email: elifosterwy@gmail.com
|
@@ -19,8 +19,6 @@ files:
|
|
19
19
|
- lib/data_types.rb
|
20
20
|
- lib/data_types/pair.rb
|
21
21
|
- lib/data_types/triplet.rb
|
22
|
-
- spec/pair_test_cases.rb
|
23
|
-
- spec/triplet_test_cases.rb
|
24
22
|
homepage: https://github.com/elifoster/data_types
|
25
23
|
licenses:
|
26
24
|
- CC-BY-NC-ND-4.0
|
@@ -42,9 +40,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
42
40
|
version: '0'
|
43
41
|
requirements: []
|
44
42
|
rubyforge_project:
|
45
|
-
rubygems_version: 2.
|
43
|
+
rubygems_version: 2.5.1
|
46
44
|
signing_key:
|
47
45
|
specification_version: 4
|
48
46
|
summary: A Ruby gem that adds new object types like pairs and triplets.
|
49
47
|
test_files: []
|
50
|
-
has_rdoc:
|
data/spec/pair_test_cases.rb
DELETED
@@ -1,53 +0,0 @@
|
|
1
|
-
require 'test/unit'
|
2
|
-
require_relative '../lib/data_types/pair'
|
3
|
-
|
4
|
-
class PairTestCases < Test::Unit::TestCase
|
5
|
-
def test_string
|
6
|
-
pair = Pair.new(1, 2)
|
7
|
-
assert_equal('1, 2', pair.to_s)
|
8
|
-
end
|
9
|
-
|
10
|
-
def test_array
|
11
|
-
pair = Pair.new(1, 2)
|
12
|
-
assert_equal([1, 2], pair.to_a)
|
13
|
-
end
|
14
|
-
|
15
|
-
def test_hash
|
16
|
-
pair = Pair.new(1, 2)
|
17
|
-
assert_equal({ left: 1, right: 2 }, pair.to_h)
|
18
|
-
end
|
19
|
-
|
20
|
-
def test_include?
|
21
|
-
pair = Pair.new(1, 2)
|
22
|
-
assert_equal(true, pair.include?(1))
|
23
|
-
assert_equal(true, pair.include?(2))
|
24
|
-
assert_equal(false, pair.include?(3))
|
25
|
-
end
|
26
|
-
|
27
|
-
def test_flip
|
28
|
-
pair = Pair.new(1, 2)
|
29
|
-
assert_equal(1, pair.flip.right)
|
30
|
-
assert_equal(2, pair.flip.left)
|
31
|
-
end
|
32
|
-
|
33
|
-
def test_flip!
|
34
|
-
pair = Pair.new(1, 2)
|
35
|
-
pair.flip!
|
36
|
-
assert_equal(1, pair.right)
|
37
|
-
assert_equal(2, pair.left)
|
38
|
-
end
|
39
|
-
|
40
|
-
def test_empty?
|
41
|
-
pair = Pair.new(1, 2)
|
42
|
-
assert_equal(false, pair.empty?)
|
43
|
-
pair.clear
|
44
|
-
assert_equal(true, pair.empty?)
|
45
|
-
end
|
46
|
-
|
47
|
-
def test_clear
|
48
|
-
pair = Pair.new(1, 2)
|
49
|
-
pair.clear
|
50
|
-
assert_nil(pair.left)
|
51
|
-
assert_nil(pair.right)
|
52
|
-
end
|
53
|
-
end
|
data/spec/triplet_test_cases.rb
DELETED
@@ -1,57 +0,0 @@
|
|
1
|
-
require 'test/unit'
|
2
|
-
require_relative '../lib/data_types/triplet'
|
3
|
-
|
4
|
-
class TripletTestCases < Test::Unit::TestCase
|
5
|
-
def test_string
|
6
|
-
triplet = Triplet.new(1, 2, 3)
|
7
|
-
assert_equal('1, 2, 3', triplet.to_s)
|
8
|
-
end
|
9
|
-
|
10
|
-
def test_array
|
11
|
-
triplet = Triplet.new(1, 2, 3)
|
12
|
-
assert_equal([1, 2, 3], triplet.to_a)
|
13
|
-
end
|
14
|
-
|
15
|
-
def test_hash
|
16
|
-
triplet = Triplet.new(1, 2, 3)
|
17
|
-
assert_equal({ left: 1, middle: 2, right: 3 }, triplet.to_h)
|
18
|
-
end
|
19
|
-
|
20
|
-
def test_include?
|
21
|
-
triplet = Triplet.new(1, 2, 3)
|
22
|
-
assert_equal(true, triplet.include?(1))
|
23
|
-
assert_equal(true, triplet.include?(2))
|
24
|
-
assert_equal(true, triplet.include?(3))
|
25
|
-
assert_equal(false, triplet.include?(4))
|
26
|
-
end
|
27
|
-
|
28
|
-
def test_flip
|
29
|
-
triplet = Triplet.new(1, 2, 3)
|
30
|
-
assert_equal(1, triplet.flip.right)
|
31
|
-
assert_equal(2, triplet.flip.middle)
|
32
|
-
assert_equal(3, triplet.flip.left)
|
33
|
-
end
|
34
|
-
|
35
|
-
def test_flip!
|
36
|
-
triplet = Triplet.new(1, 2, 3)
|
37
|
-
triplet.flip!
|
38
|
-
assert_equal(1, triplet.right)
|
39
|
-
assert_equal(2, triplet.middle)
|
40
|
-
assert_equal(3, triplet.left)
|
41
|
-
end
|
42
|
-
|
43
|
-
def test_empty?
|
44
|
-
triplet = Triplet.new(1, 2, 3)
|
45
|
-
assert_equal(false, triplet.empty?)
|
46
|
-
triplet.clear
|
47
|
-
assert_equal(true, triplet.empty?)
|
48
|
-
end
|
49
|
-
|
50
|
-
def test_clear
|
51
|
-
triplet = Triplet.new(1, 2, 3)
|
52
|
-
triplet.clear
|
53
|
-
assert_nil(triplet.left)
|
54
|
-
assert_nil(triplet.middle)
|
55
|
-
assert_nil(triplet.right)
|
56
|
-
end
|
57
|
-
end
|