data_types 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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: d10672d37ed9a9d9078f149f3b5461b0832d87af
4
+ data.tar.gz: 35f5997085de9732c2de7b2a65c976a9a28cc7f1
5
+ SHA512:
6
+ metadata.gz: 895dde9c53db720c9daf23bf8dfd2610d9ffd276f1cb505154b7bf3901d689ba7f6bc288633cf6512f450494e56845018269e43b38aa15382edbb190eee33d29
7
+ data.tar.gz: 9948ee9c1429accbdcf45d30a2df553d68da1ad7651468b6250ff58e7b59adab62f4af44c543c3ff5cfbefde087763ebfaec0d893634bea43e311e9a8934c5de
data/lib/data_types.rb ADDED
@@ -0,0 +1,2 @@
1
+ require_relative 'data_types/pair'
2
+ require_relative 'data_types/triplet'
@@ -0,0 +1,75 @@
1
+ # The Pair class represents a pair of two pieces of data.
2
+ class Pair
3
+ # @return [Object] The left data.
4
+ attr_accessor :left
5
+
6
+ # @return [Object] The right data.
7
+ attr_accessor :right
8
+
9
+ # Creates a new pair.
10
+ # @param left [Object] The left piece of data.
11
+ # @param right [Object] The right piece of data.
12
+ # @return [Pair<Object, Object>] The new pair created with these pieces of
13
+ # data.
14
+ def initialize(left, right)
15
+ @left = left
16
+ @right = right
17
+ end
18
+
19
+ # Gets a string representation of the pair.
20
+ # @return [String] The stringified version of the pair.
21
+ def to_s
22
+ "#{@left}, #{@right}"
23
+ end
24
+
25
+ # Removes all of the values in the pair..
26
+ # @return [void]
27
+ def clear
28
+ remove_instance_variable(:@left)
29
+ remove_instance_variable(:@right)
30
+ end
31
+
32
+ # Gets the Pair as an array.
33
+ # @return [Array<Object>] The array with the pair pieces.
34
+ def to_a
35
+ [@left, @right]
36
+ end
37
+
38
+ # Gets the Pair as a hash with left and right keys.
39
+ # @return [Hash<Symbol, Object>] The hash with the pair pieces.
40
+ def to_h
41
+ {
42
+ left: @left,
43
+ right: @right
44
+ }
45
+ end
46
+
47
+ # Returns true if the given object is present in self.
48
+ # @param data [Object]
49
+ # @return [Boolean]
50
+ def include?(data)
51
+ @left == data || @right == data
52
+ end
53
+
54
+ # Gets whether the pair is empty.
55
+ # @return [Boolean] True if all values are nil.
56
+ def empty?
57
+ @left.nil? && @right.nil?
58
+ end
59
+
60
+ # Flips the pair.
61
+ # @return [Pair] A new pair with the left and right values flipped.
62
+ def flip
63
+ Pair.new(@right, @left)
64
+ end
65
+
66
+ # Flips the pair in place.
67
+ # @return [Pair] Returns self.
68
+ def flip!
69
+ right = @right
70
+ left = @left
71
+ @left = right
72
+ @right = left
73
+ self
74
+ end
75
+ end
@@ -0,0 +1,80 @@
1
+ # Triplet class represents a set of 3 pieces of data.
2
+ class Triplet
3
+ # @return [Object] The first data piece.
4
+ attr_accessor :left
5
+
6
+ # @return [Object] The second data piece.
7
+ attr_accessor :middle
8
+
9
+ # @return [Object] The third data piece.
10
+ attr_accessor :right
11
+
12
+ # Creates a new Triplet.
13
+ # @param left [Object] The first data.
14
+ # @param middle [Object] The middle data.
15
+ # @param right [Object] The last data.
16
+ # @return [Triplet<Object, Object, Object>] The new Triplet.
17
+ def initialize(left, middle, right)
18
+ @left = left
19
+ @middle = middle
20
+ @right = right
21
+ end
22
+
23
+ # @return [String] The stringified version of the Triplet.
24
+ def to_s
25
+ "#{@left}, #{@middle}, #{@right}"
26
+ end
27
+
28
+ # Removes all of the values in the triplet.
29
+ # @return [void]
30
+ def clear
31
+ remove_instance_variable(:@left)
32
+ remove_instance_variable(:@middle)
33
+ remove_instance_variable(:@right)
34
+ end
35
+
36
+ # Gets the Triplet as an array.
37
+ # @return [Array<Object>] The array with the triplet pieces.
38
+ def to_a
39
+ [@left, @middle, @right]
40
+ end
41
+
42
+ # Gets the Triplet as a hash with left, middle, and right keys.
43
+ # @return [Hash<Symbol, Object>] The hash with the triplet pieces.
44
+ def to_h
45
+ {
46
+ left: @left,
47
+ middle: @middle,
48
+ right: @right
49
+ }
50
+ end
51
+
52
+ # Returns true if the given object is present in self.
53
+ # @param data [Object]
54
+ # @return [Boolean]
55
+ def include?(data)
56
+ @left == data || @middle == data || @right == data
57
+ end
58
+
59
+ # Gets whether the triplet is empty.
60
+ # @return [Boolean] True if all values are nil.
61
+ def empty?
62
+ @left.nil? && @middle.nil? && @right.nil?
63
+ end
64
+
65
+ # Flips the Triplet into a new Triplet.
66
+ # @return [Triplet] The new triplet with the flipped data.
67
+ def flip
68
+ Triplet.new(@right, @middle, @left)
69
+ end
70
+
71
+ # Flips the triplet in place.
72
+ # @return [Triplet] The Triplet with the left and right values flipped.
73
+ def flip!
74
+ left = @left
75
+ right = @right
76
+ @right = left
77
+ @left = right
78
+ self
79
+ end
80
+ end
@@ -0,0 +1,53 @@
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
@@ -0,0 +1,57 @@
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
metadata ADDED
@@ -0,0 +1,50 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: data_types
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Eli Foster
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-12-26 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description:
14
+ email: elifosterwy@gmail.com
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/data_types.rb
20
+ - lib/data_types/pair.rb
21
+ - lib/data_types/triplet.rb
22
+ - spec/pair_test_cases.rb
23
+ - spec/triplet_test_cases.rb
24
+ homepage: https://github.com/elifoster/data_types
25
+ licenses:
26
+ - CC-BY-NC-ND-4.0
27
+ metadata:
28
+ issue_tracker: https://github.com/elifoster/data_types/issues
29
+ post_install_message:
30
+ rdoc_options: []
31
+ require_paths:
32
+ - lib
33
+ required_ruby_version: !ruby/object:Gem::Requirement
34
+ requirements:
35
+ - - ">="
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ required_rubygems_version: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: '0'
43
+ requirements: []
44
+ rubyforge_project:
45
+ rubygems_version: 2.4.5.1
46
+ signing_key:
47
+ specification_version: 4
48
+ summary: A Ruby gem that adds new object types like pairs and triplets.
49
+ test_files: []
50
+ has_rdoc: