fiftytwo 0.0.1

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.
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module FiftyTwo
4
+ describe Hand do
5
+ # covered by tests for FiftyTwo::Deck
6
+ end
7
+ end
@@ -0,0 +1,128 @@
1
+ # frozen_string_literal: true
2
+
3
+ module FiftyTwo
4
+ describe Rank do
5
+ describe "::ALL" do
6
+ let(:subject) { described_class::ALL }
7
+
8
+ it "has a list of all available ranks" do
9
+ expect(subject.length).to eq 13
10
+ subject.each { |r| expect(r).to be_a described_class }
11
+ end
12
+
13
+ it "has all values represented" do
14
+ expect(subject.map(&:value)).to eq (2..14).to_a
15
+ end
16
+ end
17
+
18
+ context "numbers" do
19
+ let(:subject) { described_class::ALL.select(&:pip?).reject(&:ace?) }
20
+
21
+ it "is composed of rank objects" do
22
+ expect(subject.count).to eq 9
23
+ subject.each { |r| expect(r).to be_a described_class }
24
+ end
25
+
26
+ it "has pips 2-10" do
27
+ (2..10).each do |value|
28
+ rank = subject[value - 2]
29
+ expect(rank.value).to eq value
30
+ expect(rank.name).to eq value.to_s
31
+ expect(rank.to_s).to eq rank.name
32
+ expect(rank.code).to eq rank.name
33
+ expect(rank.identifier).to eq rank.name
34
+ expect(rank).to be_pip
35
+ expect(rank).not_to be_face
36
+ expect(rank).not_to be_jack
37
+ expect(rank).not_to be_queen
38
+ expect(rank).not_to be_king
39
+ expect(rank).not_to be_ace
40
+ end
41
+ end
42
+ end
43
+
44
+ context "faces" do
45
+ let(:subject) { described_class::ALL.select(&:face?) }
46
+
47
+ it "is composed of rank objects" do
48
+ expect(subject.count).to eq 3
49
+ subject.each { |r| expect(r).to be_a described_class }
50
+ end
51
+
52
+ it "has a jack" do
53
+ rank = subject[0]
54
+ expect(rank.value).to eq 11
55
+ expect(rank.name).to eq "jack"
56
+ expect(rank.to_s).to eq "Jack"
57
+ expect(rank.code).to eq "J"
58
+ expect(rank.identifier).to eq "J"
59
+ expect(rank).not_to be_pip
60
+ expect(rank).to be_face
61
+ expect(rank).to be_jack
62
+ expect(rank).not_to be_queen
63
+ expect(rank).not_to be_king
64
+ expect(rank).not_to be_ace
65
+ end
66
+
67
+ it "has a queen" do
68
+ rank = subject[1]
69
+ expect(rank.value).to eq 12
70
+ expect(rank.name).to eq "queen"
71
+ expect(rank.to_s).to eq "Queen"
72
+ expect(rank.code).to eq "Q"
73
+ expect(rank.identifier).to eq "Q"
74
+ expect(rank).not_to be_pip
75
+ expect(rank).to be_face
76
+ expect(rank).not_to be_jack
77
+ expect(rank).to be_queen
78
+ expect(rank).not_to be_king
79
+ expect(rank).not_to be_ace
80
+ end
81
+
82
+ it "has a king" do
83
+ rank = subject[2]
84
+ expect(rank.value).to eq 13
85
+ expect(rank.name).to eq "king"
86
+ expect(rank.to_s).to eq "King"
87
+ expect(rank.code).to eq "K"
88
+ expect(rank.identifier).to eq "K"
89
+ expect(rank).not_to be_pip
90
+ expect(rank).to be_face
91
+ expect(rank).not_to be_jack
92
+ expect(rank).not_to be_queen
93
+ expect(rank).to be_king
94
+ expect(rank).not_to be_ace
95
+ end
96
+ end
97
+
98
+ context "aces" do
99
+ let(:subject) { described_class::ACE }
100
+
101
+ it "is a rank object" do
102
+ expect(subject).to be_a described_class
103
+ end
104
+
105
+ it "is an ace through and through" do
106
+ expect(subject.value).to eq 14
107
+ expect(subject.name).to eq "ace"
108
+ expect(subject.to_s).to eq "Ace"
109
+ expect(subject.code).to eq "A"
110
+ expect(subject.identifier).to eq "A"
111
+ expect(subject).to be_pip
112
+ expect(subject).not_to be_face
113
+ expect(subject).not_to be_jack
114
+ expect(subject).not_to be_queen
115
+ expect(subject).not_to be_king
116
+ expect(subject).to be_ace
117
+ end
118
+ end
119
+
120
+ context "comparable" do
121
+ let(:subject) { described_class::ALL.shuffle }
122
+
123
+ it "knows how to sort ranks" do
124
+ expect(subject.sort.map(&:value)).to eq (2..14).to_a
125
+ end
126
+ end
127
+ end
128
+ end
@@ -0,0 +1,107 @@
1
+ # frozen_string_literal: true
2
+
3
+ module FiftyTwo
4
+ describe Suit do
5
+ describe "::ALL" do
6
+ let(:subject) { described_class::ALL }
7
+
8
+ it "has 4 suits" do
9
+ expect(subject.length).to eq 4
10
+ subject.each { |s| expect(s).to be_a described_class }
11
+ expect(subject.map(&:name)).to eq %w[clubs diamonds hearts spades]
12
+ end
13
+ end
14
+
15
+ describe "::CLUBS" do
16
+ let(:subject) { described_class::CLUBS }
17
+
18
+ it "is color-aware" do
19
+ expect(subject).to be_black
20
+ expect(subject).not_to be_red
21
+ end
22
+
23
+ it "is suit-aware" do
24
+ expect(subject).to be_clubs
25
+ expect(subject).not_to be_diamonds
26
+ expect(subject).not_to be_hearts
27
+ expect(subject).not_to be_spades
28
+ end
29
+
30
+ it "has known serializations" do
31
+ expect(subject.to_s).to eq "Clubs"
32
+ expect(subject.identifier).to eq "C"
33
+ end
34
+ end
35
+
36
+ describe "::DIAMONDS" do
37
+ let(:subject) { described_class::DIAMONDS }
38
+
39
+ it "is color-aware" do
40
+ expect(subject).not_to be_black
41
+ expect(subject).to be_red
42
+ end
43
+
44
+ it "is suit-aware" do
45
+ expect(subject).not_to be_clubs
46
+ expect(subject).to be_diamonds
47
+ expect(subject).not_to be_hearts
48
+ expect(subject).not_to be_spades
49
+ end
50
+
51
+ it "has known serializations" do
52
+ expect(subject.to_s).to eq "Diamonds"
53
+ expect(subject.identifier).to eq "D"
54
+ end
55
+ end
56
+
57
+ describe "::HEARTS" do
58
+ let(:subject) { described_class::HEARTS }
59
+
60
+ it "is color-aware" do
61
+ expect(subject).not_to be_black
62
+ expect(subject).to be_red
63
+ end
64
+
65
+ it "is suit-aware" do
66
+ expect(subject).not_to be_clubs
67
+ expect(subject).not_to be_diamonds
68
+ expect(subject).to be_hearts
69
+ expect(subject).not_to be_spades
70
+ end
71
+
72
+ it "has known serializations" do
73
+ expect(subject.to_s).to eq "Hearts"
74
+ expect(subject.identifier).to eq "H"
75
+ end
76
+ end
77
+
78
+ describe "::SPADES" do
79
+ let(:subject) { described_class::SPADES }
80
+
81
+ it "is color-aware" do
82
+ expect(subject).to be_black
83
+ expect(subject).not_to be_red
84
+ end
85
+
86
+ it "is suit-aware" do
87
+ expect(subject).not_to be_clubs
88
+ expect(subject).not_to be_diamonds
89
+ expect(subject).not_to be_hearts
90
+ expect(subject).to be_spades
91
+ end
92
+
93
+ it "has known serializations" do
94
+ expect(subject.to_s).to eq "Spades"
95
+ expect(subject.identifier).to eq "S"
96
+ end
97
+ end
98
+
99
+ context "comparable" do
100
+ let(:subject) { described_class::ALL.shuffle }
101
+
102
+ it "knows the logical order of suits" do
103
+ expect(subject.sort.map(&:identifier)).to eq %w[C D H S]
104
+ end
105
+ end
106
+ end
107
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "simplecov"
4
+ SimpleCov.start
5
+
6
+ require "fiftytwo"
7
+
8
+ RSpec.configure do |config|
9
+ config.expect_with :rspec do |expectations|
10
+ expectations.include_chain_clauses_in_custom_matcher_descriptions = true
11
+ end
12
+
13
+ config.mock_with :rspec do |mocks|
14
+ mocks.verify_partial_doubles = true
15
+ end
16
+ end
metadata ADDED
@@ -0,0 +1,229 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fiftytwo
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Kevin McDonald
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2021-07-30 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activesupport
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: colorize
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: pry
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: pry-byebug
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rack-test
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rake
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rspec
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: simplecov
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: standard
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: yard
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ description: A deck of cards, written in Ruby
168
+ email:
169
+ - kevinstuffandthings@gmail.com
170
+ executables: []
171
+ extensions: []
172
+ extra_rdoc_files: []
173
+ files:
174
+ - ".github/workflows/gem-push.yml"
175
+ - ".github/workflows/ruby.yml"
176
+ - ".gitignore"
177
+ - ".rspec"
178
+ - ".yardopts"
179
+ - CODE_OF_CONDUCT.md
180
+ - Gemfile
181
+ - LICENSE.txt
182
+ - README.md
183
+ - Rakefile
184
+ - fiftytwo.gemspec
185
+ - lib/fiftytwo.rb
186
+ - lib/fiftytwo/card.rb
187
+ - lib/fiftytwo/deck.rb
188
+ - lib/fiftytwo/hand.rb
189
+ - lib/fiftytwo/has_cards.rb
190
+ - lib/fiftytwo/rank.rb
191
+ - lib/fiftytwo/suit.rb
192
+ - lib/fiftytwo/suit/color.rb
193
+ - lib/fiftytwo/version.rb
194
+ - spec/lib/fiftytwo/card_spec.rb
195
+ - spec/lib/fiftytwo/deck_spec.rb
196
+ - spec/lib/fiftytwo/hand_spec.rb
197
+ - spec/lib/fiftytwo/rank_spec.rb
198
+ - spec/lib/fiftytwo/suit_spec.rb
199
+ - spec/spec_helper.rb
200
+ homepage: https://github.com/kevinstuffandthings/fiftytwo
201
+ licenses:
202
+ - MIT
203
+ metadata: {}
204
+ post_install_message:
205
+ rdoc_options: []
206
+ require_paths:
207
+ - lib
208
+ required_ruby_version: !ruby/object:Gem::Requirement
209
+ requirements:
210
+ - - ">="
211
+ - !ruby/object:Gem::Version
212
+ version: '0'
213
+ required_rubygems_version: !ruby/object:Gem::Requirement
214
+ requirements:
215
+ - - ">="
216
+ - !ruby/object:Gem::Version
217
+ version: '0'
218
+ requirements: []
219
+ rubygems_version: 3.0.3.1
220
+ signing_key:
221
+ specification_version: 4
222
+ summary: A deck of cards, written in Ruby
223
+ test_files:
224
+ - spec/lib/fiftytwo/card_spec.rb
225
+ - spec/lib/fiftytwo/deck_spec.rb
226
+ - spec/lib/fiftytwo/hand_spec.rb
227
+ - spec/lib/fiftytwo/rank_spec.rb
228
+ - spec/lib/fiftytwo/suit_spec.rb
229
+ - spec/spec_helper.rb