RpgTools 0.4.2 → 0.4.3

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
  SHA1:
3
- metadata.gz: 6d3f130c934c707bd10c9c4a03de612c2ec9cb3a
4
- data.tar.gz: c117b0d8d94df410795a708ddcdc4e824b95db70
3
+ metadata.gz: e037b7e017f13328353e5ace03a8e1b632277562
4
+ data.tar.gz: ef936dccbdcc627153014df1e9fcda723a1ee063
5
5
  SHA512:
6
- metadata.gz: f04383af8b7a1a029e69d31c17ab30691b348859ac4b9aba8f55f0ccfa10594001e0a2d50f0c17898e4b5314ca992f5f3baa87895ee298cbf77a7d08ed266386
7
- data.tar.gz: 1b73e37885c303ab106dfadbede1a7d4189df0c63ac4430219a697f593d88475d2448633d6b9ff8734351ecf1ddab1083cbf77529c523ae202890e3dfb042d41
6
+ metadata.gz: be88a1803c9d1b098a6c7741f868329f3730a7dcc52470fc5af37bb595285816285c9bc63a4527f442cec3de3319f99c7015da0da1c40b45333c0c050b3e870a
7
+ data.tar.gz: 9f494f144a2187090ff63371463fcc4910ebe8ee031606e9fc7f1ce670630139c0c3d08281021805aa86eaa7a9b4bafc331d2c087037395a50a6a0a00f4943a0
@@ -3,18 +3,30 @@ module RpgTools
3
3
  attr_accessor :value, :flips, :heads, :tails
4
4
 
5
5
  def initialize
6
- @value = nil
7
- @flips = 0
8
- @heads = 0
9
- @tails = 0
6
+ @value, @flips, @heads, @tails = nil, 0, 0, 0
10
7
  end
11
8
 
12
9
  def flip
13
10
  @flips += 1
14
11
  @value = rand(2) == 1 ? 'Heads' : 'Tails'
15
- @heads += 1 if @value == 'Heads'
16
- @tails += 1 if @value == 'Tails'
12
+ save_result
17
13
  @value
18
14
  end
15
+ alias_method :flip!, :flip
16
+
17
+ private
18
+
19
+ def save_result
20
+ @heads += 1 if heads?
21
+ @tails += 1 if tails?
22
+ end
23
+
24
+ def heads?
25
+ @value == 'Heads'
26
+ end
27
+
28
+ def tails?
29
+ @value == 'Tails'
30
+ end
19
31
  end
20
32
  end
@@ -3,39 +3,38 @@ module RpgTools
3
3
  attr_accessor :base, :sides, :value, :type, :rolls, :bonus, :malus
4
4
 
5
5
  def initialize(base)
6
- @base = base
7
- base_check
6
+ @base = base.upcase
7
+ @type = fudge_dice? ? 'Fudge' : 'Standard'
8
8
  @value = nil
9
- @type = (@base =~ /^.[fF]$/).nil? ? 'Standard' : 'Fudge'
10
- @sides = @type == 'Fudge' ? 3 : base.gsub(/^./, '').to_i
11
- sides_check
9
+ @sides = fudge_dice? ? 3 : base.gsub(/^./, '').to_i
12
10
  @rolls = 0
13
- set_modifiers if @type == 'Standard'
11
+
12
+ dice_validity_check
13
+ set_modifiers_and_clean_base unless fudge_dice?
14
14
  end
15
15
 
16
16
  def roll
17
- return fudge_roll if @type == 'Fudge'
18
- return standard_roll if @bonus.nil? && @malus.nil?
19
- return roll_with_bonus if @malus.nil?
20
- return roll_with_malus if @bonus.nil?
17
+ @rolls += 1
18
+
19
+ fudge_dice? ? fudge_roll : standard_roll
21
20
  end
21
+ alias_method :roll!, :roll
22
22
 
23
23
  private
24
24
 
25
+ def dice_validity_check
26
+ sides_check
27
+ base_check
28
+ end
29
+
25
30
  def modifier_check
26
- unless @base.gsub(/^[dD]{1}[fF]?\d+|[+-]\d+/, '').empty?
31
+ if (@base =~ /^[D]\d+[+-]?\d*/).nil?
27
32
  raise ArgumentError.new("You can only use + or - as modifiers.")
28
33
  end
29
34
  end
30
35
 
31
- def set_modifiers
32
- modifier_check
33
- @bonus = (@base =~ /[Dd]\d+\+(\d+)/).nil? ? nil : @base.gsub(/[Dd]\d+\+/, '').to_i
34
- @malus = (@base =~ /[Dd]\d+\-(\d+)/).nil? ? nil : @base.gsub(/[Dd]\d+\-/, '').to_i
35
- end
36
-
37
36
  def base_check
38
- unless ['d', 'D', 'f', 'F'].include?(@base[0])
37
+ unless standard_dice? || fudge_dice?
39
38
  raise ArgumentError.new("You can only create strandard and fudge dices.")
40
39
  end
41
40
  end
@@ -46,24 +45,28 @@ module RpgTools
46
45
  end
47
46
  end
48
47
 
48
+ def set_modifiers_and_clean_base
49
+ modifier_check
50
+
51
+ @bonus = @base.gsub(/[D]\d+\+/, '').to_i
52
+ @malus = @base.gsub(/[D]\d+\-/, '').to_i
53
+ @base.gsub!(/[+-]\d+/ , '')
54
+ end
55
+
49
56
  def fudge_roll
50
- @rolls += 1
51
57
  @value = (rand(1..3) - 2)
52
58
  end
53
59
 
54
60
  def standard_roll
55
- @rolls += 1
56
- @value = rand(1..@sides)
61
+ @value = rand(1..@sides) + @bonus - @malus
57
62
  end
58
63
 
59
- def roll_with_bonus
60
- @rolls += 1
61
- @value = rand(1..@sides) + @bonus
64
+ def fudge_dice?
65
+ @base == 'DF'
62
66
  end
63
67
 
64
- def roll_with_malus
65
- @rolls += 1
66
- @value = rand(1..@sides) - @malus
68
+ def standard_dice?
69
+ @base.gsub(/^D\d*[+-]?[\d]+$/, '').empty?
67
70
  end
68
71
  end
69
72
  end
@@ -3,26 +3,18 @@ module RpgTools
3
3
  attr_accessor :base, :dices, :rolls, :set, :total
4
4
 
5
5
  def initialize(base)
6
- @base = base
7
- @dices = set_bag_content(@base.gsub(/[dD].+/, '').to_i)
6
+ @base = base.upcase
7
+ @dices = set_bag_content(@base.gsub(/[D].+/, '').to_i)
8
8
  @rolls = 0
9
- @set = nil
9
+ @set = []
10
10
  @total = 0
11
11
  end
12
12
 
13
13
  def roll
14
- @dices.each do |dice|
15
- dice.roll
16
- end
17
-
18
- @set = [].tap do |response|
19
- @dices.each do |dice|
20
- response << dice.value
21
- end
22
- end
23
- @total = @set.inject{ |sum, x| sum + x }
24
- @set
14
+ @set = roll_dices_set
15
+ calculate_total_and_show_set
25
16
  end
17
+ alias_method :roll!, :roll
26
18
 
27
19
  private
28
20
 
@@ -34,11 +26,27 @@ module RpgTools
34
26
 
35
27
  def set_bag_content(dice_number)
36
28
  empty_bag_check(dice_number)
29
+
37
30
  [].tap do |bag|
38
- dice_number.times do |dice|
31
+ dice_number.times do
39
32
  bag << Dice.new(@base.gsub(/^\d+/, ''))
40
33
  end
41
34
  end
42
35
  end
36
+
37
+ def roll_dices_set
38
+ @dices.each do |dice|
39
+ dice.roll
40
+ end
41
+
42
+ @dices.each_with_object([]) do |dice, response|
43
+ response << dice.value
44
+ end
45
+ end
46
+
47
+ def calculate_total_and_show_set
48
+ @total = @set.inject{ |sum, x| sum + x }
49
+ @set
50
+ end
43
51
  end
44
52
  end
@@ -11,18 +11,24 @@ module RpgTools
11
11
 
12
12
  def card
13
13
  @card_picks += 1
14
- if @type == 52
15
- @value = joker_pick_check == true ? 'Joker' : standard_card
16
- else
17
- @value = standard_card
18
- end
14
+
15
+ @value =
16
+ if @type == 52
17
+ joker_picked? ? 'Joker' : standard_card
18
+ else
19
+ standard_card
20
+ end
19
21
  end
20
22
 
21
23
  def hand
22
24
  [].tap do |hand|
23
25
  until hand.count == 5
24
26
  card = standard_card
25
- hand << card unless hand.include?(card) || hand.count('Joker') == 2
27
+
28
+ unless hand.include?(card) || hand.count('Joker') == 2
29
+ hand << card
30
+ @card_picks += 1
31
+ end
26
32
  end
27
33
  end
28
34
  end
@@ -35,7 +41,7 @@ module RpgTools
35
41
  end
36
42
  end
37
43
 
38
- def joker_pick_check
44
+ def joker_picked?
39
45
  [0, 1].include?((0..54).to_a.sample(1).first)
40
46
  end
41
47
 
@@ -52,7 +58,6 @@ module RpgTools
52
58
  end
53
59
 
54
60
  def standard_card
55
- @card_picks += 1
56
61
  @value = [number, color].join(' of ')
57
62
  end
58
63
  end
@@ -1,10 +1,10 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = %q{RpgTools}
3
- s.version = '0.4.2'
3
+ s.version = '0.4.3'
4
4
  s.author = 'Yohan Piron'
5
5
  s.email = 'yinfei84@gmail.com'
6
- s.date = %q{2015-03-04}
7
- s.summary = %q{RpgTools is a toolbox for tabletop games and RPGs}
6
+ s.date = '2015-08-03'
7
+ s.summary = 'RpgTools is a toolbox for tabletop games and RPGs'
8
8
  s.description = 'RpgTools gives you tools for your RPGs : dices, coins, cards...'
9
9
  s.homepage = 'https://github.com/Yinfei/rpg_tools.git'
10
10
  s.license = 'MIT'
@@ -35,4 +35,10 @@ describe RpgTools::Dice do
35
35
  it "doesn't create a dice with an odd symbol" do
36
36
  expect { described_class.new('d6%2') }.to raise_error(ArgumentError)
37
37
  end
38
+
39
+ it "doesn't create very odd dices" do
40
+ expect { described_class.new('dDOGE') }.to raise_error(ArgumentError)
41
+ expect { described_class.new('dfoo') }.to raise_error(ArgumentError)
42
+ expect { described_class.new('foobarbaz') }.to raise_error(ArgumentError)
43
+ end
38
44
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: RpgTools
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.2
4
+ version: 0.4.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yohan Piron
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-03-04 00:00:00.000000000 Z
11
+ date: 2015-08-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake