mastermind_generator 0.1.0 → 0.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f9071f9198d1f4edd135fade0eb8a6e877b4473ecea5ade19ce2b5b2ac0613a3
4
- data.tar.gz: 376419af696ad3c77e136c335c88abe14073f65659384ece2d1fe117bc69e1a6
3
+ metadata.gz: 29e6aefa848cecb0f5d8a2715fa0e18755ac9963a89a203bace224bd8117d3f1
4
+ data.tar.gz: 793b610e4de1d2127d902aa3de246051c3de54f8c756038622fa6a7aceb85a5a
5
5
  SHA512:
6
- metadata.gz: a9e904d612999ef9ce20e10381471175f81ad7b18b4a7afdb9510dc148fd69e6617950680579247873e81540fa6a9513a2e0c1f0554211027118f778645d0d53
7
- data.tar.gz: bb688a3c9f2ab22149949780291b2c11a05b42a37cb1df5eec86d7b04407aba3f4eebdf55c82b9bf55b41a9aaffb9fe8a5757f327e5b8475a1a6340319efef56
6
+ metadata.gz: 5a3a2a54f761d3522e5f97e8c79aef1779993f2f6e904996040e58b4fb961deafc57aa0cc366cc1f4d76266aba111fec4eb5f4fde3b2688cf11443a1c307a461
7
+ data.tar.gz: d3f65f26cd38d2216b86f2a3cf25b1f7ee64e43bec4fc85ee82c9d16adb5ccbf89c793502b6ed8f122dc096746f217b1f61f77b55cf801107f38227f47baa6bd
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- mastermind_generator (0.1.0)
4
+ mastermind_generator (0.2.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/README.md CHANGED
@@ -30,28 +30,23 @@ Or install it yourself as:
30
30
 
31
31
  ## Configuration
32
32
 
33
- Before you use mastermind generator you need to configure it. Two attributes should be supplied as shown below:
34
- * **items:** The items array you want to play with.
35
- * **difficulties:** Difficulty levels of your game. It must be in a ruby hash format.
36
- * For each level,
37
- * **item_count:** players allowed to use how many items.
38
- * **sequence_length:** sequences must be how many characters length.
33
+ Before you use mastermind generator you need to configure it. Two attributes should be supplied like below:
39
34
 
40
35
  ```ruby
41
36
  MastermindGenerator.configure do |config|
42
37
  config.items = %w[red green blue yellow purple orange]
43
38
  config.difficulties = {
44
- beginner: {
39
+ beginner: {
45
40
  item_count: 4,
46
- sequence_length: 4
41
+ sequence_length: 4
47
42
  },
48
- intermediate: {
49
- item_count: 5,
50
- sequence_length: 6
43
+ intermediate: {
44
+ item_count: 5,
45
+ sequence_length: 6
51
46
  },
52
- advanced: {
53
- item_count: 6,
54
- sequence_length: 8
47
+ advanced: {
48
+ item_count: 6,
49
+ sequence_length: 8
55
50
  }
56
51
  }
57
52
  end
@@ -63,12 +58,11 @@ Require the gem and include it in your class definition.
63
58
 
64
59
  ```ruby
65
60
  require 'mastermind_generator'
66
- # If you write your configuration code in a seperate file uncomment the line below:
67
61
  # require "path_to_your_configuration_file"
68
62
 
69
63
  class MastermindGame
70
64
  include MastermindGenerator
71
-
65
+
72
66
  # your code goes here...
73
67
  end
74
68
  ```
@@ -76,139 +70,124 @@ end
76
70
  Now, you can generate game objects...
77
71
 
78
72
  ```ruby
79
- require 'mastermind_generator'
80
- # other requires
73
+ ...
81
74
 
82
- class MastermindGame
83
- include MastermindGenerator
84
-
85
- def start
86
- # You must supply one of the difficulty level as an argument to `Game.new`
87
- @game = Game.new(:beginner)
88
-
89
- # You can add one or two player
90
- @game.add_player("Aaron")
91
- @game.add_player("Celine")
92
-
93
- # You are ready to create a game loop however you want
94
- # An example is shown below
95
- loop do
96
- # Current player takes a guess (chosen automatically)
97
- print "Hey #{game.player.name}! What's your guess?"
98
- guess = gets.strip.downcase
99
- @game.take_a_guess(guess)
100
-
101
- # Check the guess is succeed or fail
102
- if game.finished?
103
- puts "congrats"
104
- break
105
- else
106
- puts "feedback"
75
+ class MastermindGame
76
+ include MastermindGenerator
77
+ attr_reader :game
78
+
79
+ def start
80
+ # You must supply one of the difficulty level as an argument to `Game.new`
81
+ @game = Game.new(:beginner)
82
+
83
+ # You can add one or two player
84
+ game.add_player("Aaron")
85
+ game.add_player("Celine")
86
+
87
+ # You are ready to create a game loop however you want
88
+ # An example is shown below
89
+ loop do
90
+ # Current player takes a guess (chosen automatically)
91
+ print "Hey #{game.player_name}! What's your guess?"
92
+ game.take_a_guess(gets.strip)
93
+
94
+ # Check the guess is succeed or fail
95
+ if game.finished?
96
+ puts "congrats"
97
+ break
98
+ else
99
+ puts "feedback"
100
+ end
101
+
102
+ # if the game is multi-player, you need to call `@game.next_turn`
103
+ game.next_turn if game.players_count > 1
107
104
  end
108
-
109
- # if the game is multi-player, you need to call `@game.next_turn`
110
- @game.next_turn if game.players.length > 1
111
105
  end
112
106
  end
113
- end
114
107
  ```
115
108
 
116
- ## Player Information
117
-
118
- After you added one or two players to the game by using `add_player` method. You can reach some useful information
119
- about player of that turn. Every `MastermindGenerator::Player` instances have these methods:
120
-
121
- * `@game.player.guesses`: All guesses entered by current player. It might be useful to show some historical information.
122
- * `@game.player.guess`: Last guess of the user, returns `MastermindGenerator::Guess` instance.
123
- * `@game.player.winner?`: Returns `true` if player's latest guess is successful, otherwise returns false.
124
- * `@game.player.timer`: Returns a `MastermindGenerator::Timer` object. You can use it to show players how much time they spent to break the code.
125
-
126
- ## Guess Information
127
-
128
- You can access guess instances by players. Every `MastermindGenerator::Guess` instances have these methods:
129
-
130
- * `@game.player.guess.succeed?`: Whether the guess was successful or not.
131
- * `@game.player.guess.correct_element_count`: How many elements were matched with the target sequence.
132
- * `@game.player.guess.correct_position_count`: How many positions were matched with the target sequence.
133
- * `@game.player.guess.correct_position_hints`: You can use it to show the correct positions like `R_BG__`
134
- * `@game.player.guess.statistics`: Returns a hash that it contains all the information about the guess.
135
-
109
+ ## Gathering information
110
+
111
+ You can use following methods to get information about the game.
112
+
136
113
  ```ruby
137
- @game.player.guess.statistics
114
+ game.sequence_value # returns auto-generated target sequence value
115
+
116
+ game.player_name # returns current player's name
117
+
118
+ game.guesses # returns all of guesses of the current player
119
+
120
+ game.guess_stats
121
+ # returns all information about the current player guesses
138
122
  # # => {
139
123
  # value: guess sequence value,
140
- # target: target esequence value,
141
- # status: successful or failed,
142
- # count: how many guesses were made,
124
+ # target: target sequence value,
125
+ # status: successful or fail,
126
+ # count: count of guesses,
143
127
  # element_count: correct element count,
144
- # position_count: correct position count,
145
- # position_hints: correct position hints
128
+ # position_count: correct position count,
129
+ # position_hints: correct position hints,
130
+ # duration: elapsed time,
131
+ # duration_as_text: elapsed time in human readable format,
146
132
  # }
147
- ```
148
-
149
- ## Timer Information
150
-
151
- As we mentioned above, each `MastermindGenerator::Player` instance has a method called `#timer` that can be used to
152
- access that player's timer. However, timers are setting up behind the scenes, you can also start, pause or stop
153
- them by using `@game.player.timer.start`, `@game.player.timer.pause`, and `@game.player.timer.stop` methods.
154
133
 
155
- Main purpose of timer objects is providing duration information like below:
156
-
157
- ```ruby
158
- # returns duration as seconds
159
- @game.player.timer.duration
160
- # 123
161
-
162
- # returns duration as human readable text
163
- @game.player.timer.duration_as_text
164
- # 2 minutes, 3 seconds
134
+ # You can also get some of the statistics by piece
135
+ game.guess_value
136
+ game.guess_count
137
+ game.timer_duration
138
+ game.timer_duration_as_text
165
139
  ```
166
140
 
167
141
  ## Providing Feedbacks
168
142
 
169
- You can give feedbacks to your player by using the methods we mentioned above. A few example might be like these:
143
+ You can give feedbacks to your players by using the methods we mentioned above. An example is given below:
170
144
 
171
145
  ```ruby
172
- ...
173
-
174
- def congrats
175
- player = game.player
176
- puts("Congratulations #{player.name}! You guessed the sequence '#{game.sequence.value.upcase}' in "\
177
- "#{player.guesses.length} guesses over #{player.timer.duration_as_text}.")
178
- end
146
+ def congrats
147
+ print(<<~MSG)
148
+ Congratulations #{game.player_name}! You guessed the sequence '#{game.sequence_value.upcase}' \
149
+ in #{game.guesses_count} guesses over #{game.timer_duration_as_text}.
150
+ MSG
151
+ end
152
+ ```
179
153
 
180
- def feedback
181
- stats = player.guess.statistics
182
- puts("'#{stats[:value].upcase}' has #{stats[:element_count]} of the correct elements with "\
183
- " #{stats[:position_count]} in the correct positions.\nYou've taken #{stats[:count]} guess.")
184
- end
185
- ...
154
+ ```ruby
155
+ def feedback
156
+ stats = game.guess_stats
157
+ print(<<~MSG)
158
+ '#{stats[:value].upcase}' has #{stats[:element_count]} of the correct elements with \
159
+ #{stats[:position_count]} in the correct positions.\nYou've taken #{stats[:count]} guess.
160
+ MSG
161
+ end
186
162
  ```
187
163
 
188
164
  ## Exception Handling
189
165
 
190
- There are four error types defined in the gem with proper `#message` methods.
191
- * SequenceTooLongError
192
- * SequenceTooShortError
193
- * SequenceHasInvalidCharsError
194
- * InvalidDifficultyError
166
+ There are six error types defined in the gem with proper `#message` methods.
167
+
168
+ * SequenceTooLongError
169
+ * SequenceTooShortError
170
+ * SequenceHasInvalidCharsError
171
+ * InvalidDifficultyError
172
+ * TimerNotStartedError
173
+ * TimerNotStoppedError
195
174
 
196
175
  An example usage might be like this:
197
176
 
198
177
  ```ruby
199
- begin
200
- print("Hey #{game.player.name}! What's your guess? > ")
201
- game.take_a_guess(gets.strip.downcase)
202
- rescue SequenceTooLongError, SequenceTooShortError, SequenceHasInvalidCharsError => e
203
- warn("#{e.message}. Try again!")
204
- retry
205
- end
178
+ begin
179
+ print("Hey #{game.player_name}! What's your guess? > ")
180
+ game.take_a_guess(gets.strip)
181
+ rescue SequenceTooLongError, SequenceTooShortError, SequenceHasInvalidCharsError => e
182
+ warn("#{e.message}. Try again!")
183
+ retry
184
+ end
206
185
  ```
207
186
 
208
187
  ## Contributing
209
188
 
210
- Bug reports and pull requests are welcome on GitHub at https://github.com/sbagdat/mastermind_generator. This project
211
- is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to
189
+ Bug reports and pull requests are welcome on GitHub at https://github.com/sbagdat/mastermind_generator. This project is
190
+ intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to
212
191
  the [code of conduct](https://github.com/sbagdat/mastermind_generator/blob/main/CODE_OF_CONDUCT.md).
213
192
 
214
193
  ## License
@@ -218,5 +197,4 @@ The gem is available as open source under the terms of the [MIT License](https:/
218
197
  ## Code of Conduct
219
198
 
220
199
  Everyone interacting in the MastermindGenerator project's codebases, issue trackers, chat rooms and mailing lists is
221
- expected to follow
222
- the [code of conduct](https://github.com/sbagdat/mastermind_generator/blob/main/CODE_OF_CONDUCT.md).
200
+ expected to follow the [code of conduct](https://github.com/sbagdat/mastermind_generator/blob/main/CODE_OF_CONDUCT.md).
data/demo/Gemfile.lock ADDED
@@ -0,0 +1,57 @@
1
+ GEM
2
+ remote: https://rubygems.org/
3
+ specs:
4
+ ansi (1.5.0)
5
+ ast (2.4.2)
6
+ builder (3.2.4)
7
+ docile (1.3.5)
8
+ mastermind_generator (0.2.0)
9
+ minitest (5.14.4)
10
+ minitest-reporters (1.4.3)
11
+ ansi
12
+ builder
13
+ minitest (>= 5.0)
14
+ ruby-progressbar
15
+ parallel (1.20.1)
16
+ parser (3.0.0.0)
17
+ ast (~> 2.4.1)
18
+ rainbow (3.0.0)
19
+ rake (13.0.3)
20
+ regexp_parser (2.1.1)
21
+ rexml (3.2.4)
22
+ rubocop (1.11.0)
23
+ parallel (~> 1.10)
24
+ parser (>= 3.0.0.0)
25
+ rainbow (>= 2.2.2, < 4.0)
26
+ regexp_parser (>= 1.8, < 3.0)
27
+ rexml
28
+ rubocop-ast (>= 1.2.0, < 2.0)
29
+ ruby-progressbar (~> 1.7)
30
+ unicode-display_width (>= 1.4.0, < 3.0)
31
+ rubocop-ast (1.4.1)
32
+ parser (>= 2.7.1.5)
33
+ rubocop-minitest (0.10.3)
34
+ rubocop (>= 0.87, < 2.0)
35
+ ruby-progressbar (1.11.0)
36
+ simplecov (0.21.2)
37
+ docile (~> 1.1)
38
+ simplecov-html (~> 0.11)
39
+ simplecov_json_formatter (~> 0.1)
40
+ simplecov-html (0.12.3)
41
+ simplecov_json_formatter (0.1.2)
42
+ unicode-display_width (2.0.0)
43
+
44
+ PLATFORMS
45
+ x86_64-darwin-20
46
+
47
+ DEPENDENCIES
48
+ mastermind_generator
49
+ minitest (>= 5.14.3)
50
+ minitest-reporters (>= 0.5.0)
51
+ rake (>= 13.0.3)
52
+ rubocop (>= 1.8.1)
53
+ rubocop-minitest (>= 0.10.3)
54
+ simplecov (>= 0.21.2)
55
+
56
+ BUNDLED WITH
57
+ 2.2.5
@@ -59,24 +59,27 @@ class Mastermind # rubocop:disable Metrics/ClassLength
59
59
  else
60
60
  feedback
61
61
  end
62
- game.next_turn if game.players.length > 1
62
+ game.next_turn if game.players_count > 1
63
63
  end
64
64
  end
65
65
 
66
66
  def feedback
67
- stats = player.guess.statistics
68
- cli.print_message("'#{stats[:value].upcase}' has #{stats[:element_count]} of the correct elements with "\
69
- " #{stats[:position_count]} in the correct positions.\nYou've taken #{stats[:count]} guess.")
67
+ stats = game.guess_stats
68
+ cli.print_message(<<~MSG.chomp)
69
+ '#{stats[:value].upcase}' has #{stats[:element_count]} of the correct elements with \
70
+ #{stats[:position_count]} in the correct positions.\nYou've taken #{stats[:count]} guess.
71
+ MSG
70
72
  end
71
73
 
72
74
  def congrats
73
- player = game.player
74
- cli.print_message("Congratulations #{player.name}! You guessed the sequence '#{game.sequence.value.upcase}' in "\
75
- "#{player.guesses.length} guesses over #{player.timer.duration_as_text}.")
75
+ cli.print_message(<<~MSG.chomp)
76
+ Congratulations #{game.player_name}! You guessed the sequence '#{game.sequence_value.upcase}' \
77
+ in #{game.guesses_count} guesses over #{game.timer_duration_as_text}.
78
+ MSG
76
79
  end
77
80
 
78
81
  def take_a_guess
79
- cli.ask_question("Hey #{game.player.name}! What's your guess?")
82
+ cli.ask_question("Hey #{game.player_name}! What's your guess?")
80
83
  begin
81
84
  game.take_a_guess(cli.answer)
82
85
  rescue SequenceTooLongError, SequenceTooShortError, SequenceHasInvalidCharsError => e
@@ -139,3 +142,5 @@ class Mastermind # rubocop:disable Metrics/ClassLength
139
142
  "(#{value[0]})#{value[1..]}"
140
143
  end
141
144
  end
145
+
146
+ Mastermind.new.play
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "forwardable"
3
4
  require_relative "mastermind_generator/version"
4
5
  require_relative "mastermind_generator/configuration"
5
6
  require_relative "mastermind_generator/item"
@@ -2,7 +2,11 @@
2
2
 
3
3
  module MastermindGenerator
4
4
  # Exception for passing invalid difficulty value as an argument to `Difficulty.new`
5
- class InvalidDifficultyError < StandardError; end
5
+ class InvalidDifficultyError < StandardError
6
+ def message
7
+ "Invalid Difficulty: It must be one of the difficulty levels which you specified in configuration"
8
+ end
9
+ end
6
10
 
7
11
  # Reprsents difficulty of the game
8
12
  # It affects of how many items will be used for secret sequences
@@ -5,6 +5,8 @@ module MastermindGenerator
5
5
  class Game
6
6
  attr_reader :difficulty, :sequence, :players
7
7
 
8
+ extend Forwardable
9
+
8
10
  def initialize(difficulty)
9
11
  @difficulty = Difficulty.new(difficulty)
10
12
  @sequence = SequenceGenerator.new(@difficulty).generate
@@ -15,17 +17,11 @@ module MastermindGenerator
15
17
  def take_a_guess(value)
16
18
  seq = Sequence.new(difficulty, value)
17
19
  guess = Guess.new(seq)
18
- player.timer.start
20
+ player.timer_start
19
21
  player.take_a_guess(guess)
20
22
  player.guess.assign_target(sequence)
21
23
  end
22
24
 
23
- def player
24
- return players.first if players.length == 1
25
-
26
- @turn_counter.odd? ? players.first : players.last
27
- end
28
-
29
25
  def add_player(player_name)
30
26
  return if players.length > 1
31
27
 
@@ -35,7 +31,7 @@ module MastermindGenerator
35
31
  def finished?
36
32
  return false unless player.guess.succeed?
37
33
 
38
- player.timer.stop
34
+ player.timer_stop
39
35
  true
40
36
  end
41
37
 
@@ -44,8 +40,23 @@ module MastermindGenerator
44
40
  end
45
41
 
46
42
  def next_turn
47
- player.timer.pause
43
+ player.timer_pause
48
44
  @turn_counter += 1
49
45
  end
46
+
47
+ def player
48
+ return players.first if players_count == 1
49
+
50
+ @turn_counter.odd? ? players.first : players.last
51
+ end
52
+
53
+ def_delegator :@players, :length, :players_count
54
+ def_delegator :@sequence, :value, :sequence_value
55
+
56
+ def_delegator :player, :name, :player_name
57
+ def_delegators :player, :guess_value, :guess_stats, :guesses, :timer_duration, :timer_duration_as_text
58
+
59
+ def_delegator :guesses, :count, :guesses_count
60
+ def_delegator :winner, :name, :winner_name
50
61
  end
51
62
  end
@@ -5,6 +5,8 @@ module MastermindGenerator
5
5
  class Guess
6
6
  attr_reader :sequence, :target
7
7
 
8
+ extend Forwardable
9
+
8
10
  def initialize(sequence)
9
11
  @sequence = sequence
10
12
  @target = nil
@@ -19,23 +21,22 @@ module MastermindGenerator
19
21
  end
20
22
 
21
23
  def correct_element_count
22
- sequence.codes.reduce(0) { |sum, code| sum + [target.value.count(code), sequence.value.count(code)].min }
24
+ sequence_codes.reduce(0) { |sum, code| sum + [target_value.count(code), value.count(code)].min }
23
25
  end
24
26
 
25
27
  def correct_position_count
26
28
  seuence_target_packs.count { _1 == _2 }
27
29
  end
28
30
 
29
- def correct_position_hints
30
- seuence_target_packs.map { _1 == _2 ? _1 : "_" }.join
31
+ def correct_position_hints(mark = "_")
32
+ seuence_target_packs.map { _1 == _2 ? _1 : mark }.join
31
33
  end
32
34
 
33
35
  def statistics
34
36
  {
35
- value: sequence.value,
36
- target: target&.value.to_s,
37
- status: succeed? ? "success" : "fail",
38
- count: guesses.length,
37
+ value: value,
38
+ target: target_value,
39
+ status: status,
39
40
  element_count: correct_element_count,
40
41
  position_count: correct_position_count,
41
42
  position_hints: correct_position_hints
@@ -44,8 +45,16 @@ module MastermindGenerator
44
45
 
45
46
  private
46
47
 
48
+ def status
49
+ { true => "success", false => "fail" }[succeed?]
50
+ end
51
+
47
52
  def seuence_target_packs
48
- sequence.value.chars.zip(target.value.chars)
53
+ value.chars.zip(target_value.chars)
49
54
  end
55
+
56
+ def_delegator :@sequence, :codes, :sequence_codes
57
+ def_delegator :@sequence, :value
58
+ def_delegator :@target, :value, :target_value
50
59
  end
51
60
  end
@@ -5,6 +5,8 @@ module MastermindGenerator
5
5
  class Player
6
6
  attr_reader :name, :guesses, :timer
7
7
 
8
+ extend Forwardable
9
+
8
10
  def initialize(name)
9
11
  @name = name
10
12
  @guesses = []
@@ -22,5 +24,24 @@ module MastermindGenerator
22
24
  def winner?
23
25
  guess.succeed?
24
26
  end
27
+
28
+ def guess_stats
29
+ guess_statistics.merge(
30
+ { count: guesses.count,
31
+ duration: timer_duration,
32
+ duration_as_text: timer_duration_as_text
33
+ }
34
+ )
35
+ end
36
+
37
+ def_delegator :guesses, :count, :guesses_count
38
+ def_delegator :guess, :value, :guess_value
39
+ def_delegator :guess, :statistics, :guess_statistics
40
+
41
+ def_delegator :@timer, :duration, :timer_duration
42
+ def_delegator :@timer, :duration_as_text, :timer_duration_as_text
43
+ def_delegator :@timer, :stop, :timer_stop
44
+ def_delegator :@timer, :start, :timer_start
45
+ def_delegator :@timer, :pause, :timer_pause
25
46
  end
26
47
  end
@@ -2,10 +2,14 @@
2
2
 
3
3
  module MastermindGenerator
4
4
  # Exception for ending timer without starting it before
5
- class TimerNotStartedError < StandardError; end
5
+ class TimerNotStartedError < StandardError
6
+ def message
7
+ "Timer is not started! To stop or pause a timer, you need to start it first."
8
+ end
9
+ end
6
10
 
7
11
  # A simple timer
8
- # Calculates the time between start and end times
12
+ # Calculates the time between start and end
9
13
  class Timer
10
14
  include TimeHelpers
11
15
 
@@ -23,11 +27,14 @@ module MastermindGenerator
23
27
  alias pause stop
24
28
 
25
29
  def duration
26
- stop_time - start_time
30
+ pause
31
+ elapsed_time = stop_time - start_time
32
+ start
33
+ elapsed_time
27
34
  end
28
35
 
29
36
  def duration_as_text
30
- time_in_writing(stop_time - start_time)
37
+ time_in_writing(duration)
31
38
  end
32
39
 
33
40
  private
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module MastermindGenerator
4
- VERSION = "0.1.0"
4
+ VERSION = "0.2.0"
5
5
  end
@@ -9,7 +9,8 @@ Gem::Specification.new do |spec|
9
9
  spec.email = ["sbagdat@gmail.com"]
10
10
 
11
11
  spec.summary = "Fully customizable mastermind game generator."
12
- spec.description = "Mastermind* Generator is a fully customizable mastermind (or master mind) game generator. It supports using custom items other than classic color variations. It can also generate multi-player games."
12
+ spec.description = "Mastermind* Generator is a fully customizable mastermind (or master mind) game generator. "\
13
+ "It supports using custom items other than classic color variations. It can also generate multi-player games."
13
14
  spec.homepage = "https://github.com/sbagdat/mastermind_generator"
14
15
  spec.license = "MIT"
15
16
  spec.required_ruby_version = Gem::Requirement.new(">= 3.0.0")
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mastermind_generator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sıtkı Bağdat
@@ -33,6 +33,7 @@ files:
33
33
  - bin/console
34
34
  - bin/setup
35
35
  - demo/Gemfile
36
+ - demo/Gemfile.lock
36
37
  - demo/README.md
37
38
  - demo/lib/mastermind.rb
38
39
  - demo/lib/mastermind/console_interface.rb