ro_sham_bo 0.1.1 → 0.1.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3336e5189ae0b7bc49c4c2f9c6c6fc86744344386eb88ad483aadc48aca2aaed
4
- data.tar.gz: 9d454268bb69d507d916b5a5c69defa46501bc37e122d2007dc95a9466c2ac75
3
+ metadata.gz: 18c5694e6c976138f96301fba33a604a8bdea019c83a0a9877aac0dde5d4930a
4
+ data.tar.gz: 00b2827afb8f3e2809b70b884292a2edae559f8518cea936c291b585ab374e31
5
5
  SHA512:
6
- metadata.gz: 9cf0b5e881f2a0fe2ad59a7d85c4ede8a315457a9cd41c1933927e290e09bfb50d2cdff218bee644055ca4af47ad6dd104107d0609638757460c04815f4d4bb2
7
- data.tar.gz: 7b80a054800c6daa814485f38e8d1feeee4a5ca0fd747ca6d2e2f1d2ac97004971369d3965c0a5f863c1d6e73bcf10208ad735123e2c2c9308cf77cd71093d00
6
+ metadata.gz: 9fbc808f35951ea2d74fcdc896266cecf27d1083a5710119f94a7818779d3f615a0e31a262cdfc1ad682bfaacf1e0f9f4b0fab035ddc33d5df6d0e898d2c74fc
7
+ data.tar.gz: 0e494de6e32c446478d73567e0eb48c5ab7fb99e366727276175645e1cf0371a5864f9d68033bc27d22ec3e3137dde1dfb46e83f2a9f64643cd03510bb5bab40
@@ -1,4 +1,4 @@
1
- name: Ruby
1
+ name: Ruby CI
2
2
 
3
3
  on:
4
4
  push:
@@ -11,14 +11,17 @@ jobs:
11
11
 
12
12
  runs-on: ubuntu-latest
13
13
 
14
+ strategy:
15
+ matrix:
16
+ ruby-version: ['3.2', '3.1', '3.0']
17
+
14
18
  steps:
15
- - uses: actions/checkout@v2
16
- - name: Set up Ruby 2.6
17
- uses: actions/setup-ruby@v1
18
- with:
19
- ruby-version: 2.6.x
20
- - name: Build and test with Rake
21
- run: |
22
- gem install bundler
23
- bundle install
24
- bundle exec rake test
19
+ - uses: actions/checkout@v3
20
+ - name: Set up Ruby ${{ matrix.ruby-version }}
21
+ uses: ruby/setup-ruby@ec02537da5712d66d4d50a0f33b7eb52773b5ed1
22
+ with:
23
+ ruby-version: ${{ matrix.ruby-version }}
24
+ - name: Install dependencies
25
+ run: bundle install
26
+ - name: Run tests
27
+ run: bundle exec rake
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ro_sham_bo (0.1.0)
4
+ ro_sham_bo (0.1.2)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -19,6 +19,7 @@ GEM
19
19
  power_assert
20
20
 
21
21
  PLATFORMS
22
+ arm64-darwin-21
22
23
  x86_64-darwin-20
23
24
 
24
25
  DEPENDENCIES
data/README.md CHANGED
@@ -33,6 +33,32 @@ Once you hit `[return]`, your choice will be compared to the computer's choice,
33
33
  and a winner for that round will be chosen based off the classic rules of the
34
34
  game.
35
35
 
36
+ ```
37
+ $ ro_sham_bo
38
+ >> FIRST TO 2 WINS! <<
39
+
40
+ Current score: {:user=>0, :computer=>0}
41
+ What is your choice? (r)ock, (p)aper, or (s)cissors?: p
42
+ > user chose paper
43
+ > computer chose paper
44
+ Round winner: draw
45
+
46
+ Current score: {:user=>0, :computer=>0}
47
+ What is your choice? (r)ock, (p)aper, or (s)cissors?: s
48
+ > user chose scissors
49
+ > computer chose rock
50
+ Round winner: computer
51
+
52
+ Current score: {:user=>0, :computer=>1}
53
+ What is your choice? (r)ock, (p)aper, or (s)cissors?: r
54
+ > user chose rock
55
+ > computer chose paper
56
+ Round winner: computer
57
+
58
+ Game over! Computer won!
59
+ Score was {:user=>0, :computer=>2}
60
+ ```
61
+
36
62
  Cheating is possible, both for the user and the computer. Pass `-c` (or `-c
37
63
  user`) for the user to always win. Pass `-c computer` to make the computer win.
38
64
  It will still look real; cheating only actually happens when the non-cheater
@@ -44,24 +70,37 @@ You can play via an IRB/Pry console via the gem's API.
44
70
 
45
71
  ```ruby
46
72
  require 'ro_sham_bo'
73
+ # => true
47
74
 
48
75
  game = RoShamBo.new
49
- game.play(:rock)
50
- # => #<RoShamBo:0x00007fe3011a2070
76
+ # => #<RoShamBo:0x00007f7ffa99a5a8
51
77
  # @cheater=nil,
78
+ # @draws=0,
52
79
  # @points_to_win=2,
53
80
  # @rounds=3,
54
81
  # @score={:user=>0, :computer=>0}>
55
82
 
83
+ game.play(:rock)
84
+ #=> #<RoShamBo:0x00007f7ffa99a5a8
85
+ # @cheater=nil,
86
+ # @computer_choice=:rock,
87
+ # @draws=1,
88
+ # @points_to_win=2,
89
+ # @round_winner=:draw,
90
+ # @rounds=3,
91
+ # @score={:user=>0, :computer=>0},
92
+ # @user_choice=:rock>
93
+
56
94
  game.play(%i[rock paper scissors].sample) until game.over?
57
95
  game
58
- # => #<RoShamBo:0x00007fe3011a2070
96
+ # => #<RoShamBo:0x00007f7ffa99a5a8
59
97
  # @cheater=nil,
60
98
  # @computer_choice=:paper,
99
+ # @draws=3,
61
100
  # @points_to_win=2,
62
101
  # @round_winner=:user,
63
102
  # @rounds=3,
64
- # @score={:user=>2, :computer=>1},
103
+ # @score={:user=>2, :computer=>0},
65
104
  # @user_choice=:scissors,
66
105
  # @winner=:user>
67
106
  ```
data/Rakefile CHANGED
@@ -1,15 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'lib/ro_sham_bo'
4
- require 'bundler/gem_tasks'
5
- require 'rake/testtask'
6
- # require 'rdoc/task'
3
+ require_relative "lib/ro_sham_bo"
4
+ require "bundler/gem_tasks"
5
+ require "rake/testtask"
6
+ require "rdoc/task"
7
7
 
8
8
  Rake::TestTask.new do |t|
9
- t.libs = ['lib']
9
+ t.libs = ["lib"]
10
10
  t.warning = true
11
11
  t.verbose = true
12
- t.test_files = FileList['test/**/*_test.rb']
12
+ t.test_files = FileList["test/**/*_test.rb"]
13
13
  end
14
14
 
15
15
  # TODO: Add documentation.
data/bin/ro_sham_bo CHANGED
@@ -12,7 +12,7 @@ OptionParser.new do |o|
12
12
  abort("Please use an odd number") if f.even?
13
13
  options[:rounds] = f
14
14
  end
15
- o.on('-c', '--cheater [USER]', 'Choose who wins', 'user/computer') do |f|
15
+ o.on('-C', '--cheater [USER]', 'Choose who wins', 'user/computer') do |f|
16
16
  options[:cheater] =
17
17
  if f.nil?
18
18
  :user
@@ -5,23 +5,54 @@ class RoShamBo
5
5
  # Module that contains all gem version information. Follows semantic
6
6
  # versioning. Read: https://semver.org/
7
7
  module Version
8
-
9
8
  ##
10
9
  # Major version.
10
+ #
11
+ # @return [Integer]
11
12
  MAJOR = 0
12
13
 
13
14
  ##
14
15
  # Minor version.
16
+ #
17
+ # @return [Integer]
15
18
  MINOR = 1
16
19
 
17
20
  ##
18
21
  # Patch version.
19
- PATCH = 1
22
+ #
23
+ # @return [Integer]
24
+ PATCH = 2
25
+
26
+ module_function
27
+
28
+ ##
29
+ # Version as +[MAJOR, MINOR, PATCH]+
30
+ #
31
+ # @return [Array<Integer>]
32
+ def to_a
33
+ [MAJOR, MINOR, PATCH]
34
+ end
20
35
 
21
36
  ##
22
37
  # Version as +MAJOR.MINOR.PATCH+
23
- def self.to_s
24
- "#{MAJOR}.#{MINOR}.#{PATCH}"
38
+ #
39
+ # @return [String]
40
+ def to_s
41
+ to_a.join(".")
42
+ end
43
+
44
+ ##
45
+ # Version as +{major: MAJOR, minor: MINOR, patch: PATCH}+
46
+ #
47
+ # @return [Hash]
48
+ def to_h
49
+ %i[major minor patch].zip(to_a).to_h
25
50
  end
26
51
  end
52
+
53
+ ##
54
+ # The version, as a string.
55
+ #
56
+ # @return [String]
57
+ VERSION = Version.to_s
27
58
  end
data/lib/ro_sham_bo.rb CHANGED
@@ -1,10 +1,10 @@
1
- require_relative 'ro_sham_bo/version'
1
+ require_relative "ro_sham_bo/version"
2
2
 
3
3
  class RoShamBo
4
4
  RULES = {
5
- rock: {rock: :draw, paper: :lose, scissors: :win}.freeze,
6
- paper: {rock: :win, paper: :draw, scissors: :lose}.freeze,
7
- scissors: {rock: :lose, paper: :win, scissors: :draw}.freeze,
5
+ rock: {rock: :draw, paper: :lose, scissors: :win}.freeze,
6
+ paper: {rock: :win, paper: :draw, scissors: :lose}.freeze,
7
+ scissors: {rock: :lose, paper: :win, scissors: :draw}.freeze
8
8
  }.freeze
9
9
 
10
10
  attr_reader :cheater
@@ -19,9 +19,9 @@ class RoShamBo
19
19
 
20
20
  def initialize(cheater: nil, rounds: 3)
21
21
  if rounds.even?
22
- raise ArgumentError, 'rounds must be odd'
22
+ raise ArgumentError, "rounds must be odd"
23
23
  elsif ![nil, :user, :computer].include?(cheater)
24
- raise ArgumentError, 'cheater must be :computer or :user'
24
+ raise ArgumentError, "cheater must be :computer or :user"
25
25
  end
26
26
 
27
27
  @cheater = cheater
@@ -32,7 +32,7 @@ class RoShamBo
32
32
  end
33
33
 
34
34
  def play(input)
35
- raise RuntimeError, 'Game Over!' if over?
35
+ raise "Game Over!" if over?
36
36
 
37
37
  @user_choice = sanitized_choice(input)
38
38
  @computer_choice = computer_turn(user_choice)
@@ -49,22 +49,19 @@ class RoShamBo
49
49
  private
50
50
 
51
51
  def determine_round_winner(u_choice, c_choice)
52
- winner =
53
- case RULES[u_choice][c_choice]
54
- when :win then :user
55
- when :lose then :computer
56
- else :draw
57
- end
58
- winner == :draw ? @draws += 1 : score[winner] += 1
59
- winner
52
+ case RULES.dig(u_choice, c_choice)
53
+ when :win then :user
54
+ when :lose then :computer
55
+ else :draw
56
+ end.tap { |winner| (winner == :draw) ? @draws += 1 : score[winner] += 1 }
60
57
  end
61
58
 
62
59
  def sanitized_choice(input)
63
60
  case input
64
- when 'r', 'rock', :r, :rock then :rock
65
- when 'p', 'paper', :p, :paper then :paper
66
- when 's', 'scissors', :s, :scissors then :scissors
67
- else raise ArgumentError, 'Invalid choice [rpsx]'
61
+ when "r", "rock", :r, :rock then :rock
62
+ when "p", "paper", :p, :paper then :paper
63
+ when "s", "scissors", :s, :scissors then :scissors
64
+ else raise ArgumentError, "Invalid choice [rpsx]"
68
65
  end
69
66
  end
70
67
 
@@ -79,7 +76,7 @@ class RoShamBo
79
76
  end
80
77
 
81
78
  def cheat(input, win_or_lose)
82
- rand >= 0.33 ? RULES[input].key(win_or_lose) : RULES[input].key(:draw)
79
+ (rand >= 0.33) ? RULES[input].key(win_or_lose) : RULES[input].key(:draw)
83
80
  end
84
81
 
85
82
  def about_to_win?(user)
data/ro_sham_bo.gemspec CHANGED
@@ -1,34 +1,33 @@
1
- require_relative 'lib/ro_sham_bo/version'
1
+ require_relative "lib/ro_sham_bo/version"
2
2
 
3
3
  Gem::Specification.new do |spec|
4
- spec.name = 'ro_sham_bo'
5
- spec.version = RoShamBo::Version.to_s
6
- spec.authors = ['Evan Gray']
7
- spec.email = 'evanthegrayt@vivaldi.net'
8
- spec.license = 'MIT'
9
- spec.date = Time.now.strftime('%Y-%m-%d')
4
+ spec.name = "ro_sham_bo"
5
+ spec.version = RoShamBo::VERSION
6
+ spec.authors = ["Evan Gray"]
7
+ spec.email = "evanthegrayt@vivaldi.net"
8
+ spec.license = "MIT"
10
9
 
11
- spec.summary = %q{Rock Paper Scissors in Ruby}
12
- spec.description = %q{Play rock paper scissors from the command line}
13
- spec.homepage = 'https://evanthegrayt.github.io/ro_sham_bo/'
10
+ spec.summary = %(Rock Paper Scissors in Ruby)
11
+ spec.description = %(Play rock paper scissors from the command line)
12
+ spec.homepage = "https://evanthegrayt.github.io/ro_sham_bo/"
14
13
 
15
14
  unless spec.respond_to?(:metadata)
16
- raise 'RubyGems 2.0 or newer is required to protect against ' \
17
- 'public gem pushes.'
15
+ raise "RubyGems 2.0 or newer is required to protect against " \
16
+ "public gem pushes."
18
17
  end
19
18
 
20
- spec.metadata['allowed_push_host'] = 'https://rubygems.org'
21
- spec.metadata['homepage_uri'] = spec.homepage
22
- spec.metadata['source_code_uri'] =
23
- 'https://github.com/evanthegrayt/ro_sham_bo'
19
+ spec.metadata["allowed_push_host"] = "https://rubygems.org"
20
+ spec.metadata["homepage_uri"] = spec.homepage
21
+ spec.metadata["source_code_uri"] =
22
+ "https://github.com/evanthegrayt/ro_sham_bo"
24
23
 
25
24
  spec.files = `git ls-files -z`.split("\x0").reject do |f|
26
25
  f.match(%r{^(test|spec|features)/})
27
26
  end
28
- spec.bindir = 'bin'
29
- spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
30
- spec.require_paths = ['lib']
31
- spec.add_development_dependency 'rake', '~> 13.0', '>= 13.0.1'
32
- spec.add_development_dependency 'test-unit', '~> 3.3', '>= 3.3.5'
33
- spec.add_development_dependency 'simplecov'
27
+ spec.bindir = "bin"
28
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
29
+ spec.require_paths = ["lib"]
30
+ spec.add_development_dependency "rake", "~> 13.0", ">= 13.0.1"
31
+ spec.add_development_dependency "test-unit", "~> 3.3", ">= 3.3.5"
32
+ spec.add_development_dependency "simplecov"
34
33
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ro_sham_bo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Evan Gray
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-05-04 00:00:00.000000000 Z
11
+ date: 2023-06-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -104,7 +104,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
104
104
  - !ruby/object:Gem::Version
105
105
  version: '0'
106
106
  requirements: []
107
- rubygems_version: 3.2.3
107
+ rubygems_version: 3.3.7
108
108
  signing_key:
109
109
  specification_version: 4
110
110
  summary: Rock Paper Scissors in Ruby