hazard 1.1.0 → 1.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 +4 -4
- data/.travis.yml +1 -0
- data/README.md +13 -2
- data/hazard.gemspec +2 -0
- data/lib/hazard/version.rb +1 -1
- data/lib/hazard.rb +9 -2
- data/lib/weighted_table.rb +0 -9
- data/test/hazard_test.rb +17 -0
- data/test/weighted_table_test.rb +20 -6
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 95dbcf77daa7235693220c74d60b47e42ab3e635
|
4
|
+
data.tar.gz: 062155ee83ebdddb008e8c7f6f133b4c4d8292bf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8b77918372e932a63734eabf940a5c06fd6a5263df7f9290c26b88a7ee18f80dbdc004d1aa341b96e5c07d3ec864460cf1a8509338af9a76fd7272f3bfbf54b2
|
7
|
+
data.tar.gz: da19de999a0edcead798d6ffb9716154fbde19288bcda76219dff6edacb7bf9750a0dbc3d8421ad418a3144ac4cf3ef62e3510f1342c139d186f9bf6bee84249
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -16,8 +16,9 @@ Hazard is a very simple dice library for ruby that allows you to :
|
|
16
16
|
1. [Roll multiple dice](#roll-multiple-dice)
|
17
17
|
1. [Advanced Usage](#advanced-usage)
|
18
18
|
1. [Roll dice and get the details](#roll-dice-and-get-the-details)
|
19
|
+
1. [Roll dice from string input](#roll-dice-from-string-input)
|
19
20
|
1. [Some real cases](#some-real-cases)
|
20
|
-
1. [Weighted Tables](#weighted-
|
21
|
+
1. [Weighted Tables](#weighted-tables)
|
21
22
|
1. [If you have the weights](#if-you-have-the-weights)
|
22
23
|
1. [If you don't have the weights (or are to lazy to get them)](#if-you-dont-have-the-weights-or-are-to-lazy-to-get-them)
|
23
24
|
1. [Saving and loading](#saving-and-loading)
|
@@ -27,7 +28,7 @@ Hazard is a very simple dice library for ruby that allows you to :
|
|
27
28
|
Add this line to your application's Gemfile:
|
28
29
|
|
29
30
|
```ruby
|
30
|
-
gem 'hazard'
|
31
|
+
gem 'hazard', '~> 1.2.0'
|
31
32
|
```
|
32
33
|
|
33
34
|
And then execute:
|
@@ -116,6 +117,16 @@ Examples :
|
|
116
117
|
>> Hazard.s2d6
|
117
118
|
=> #<RolledDice:0x007f62e55a0010 @rolls=[1, 6], @result=7>
|
118
119
|
|
120
|
+
### Roll dice from string input
|
121
|
+
|
122
|
+
>> Hazard.from_string( 's<m>d<n>' ) # where m and n are numbers
|
123
|
+
=> Roll m n-sided dice and return a RolledDice object
|
124
|
+
|
125
|
+
Examples :
|
126
|
+
|
127
|
+
>> Hazard.from_string( 'r2d6' )
|
128
|
+
=> 3
|
129
|
+
|
119
130
|
### Some real cases
|
120
131
|
|
121
132
|
Assuming you are playing DD Next
|
data/hazard.gemspec
CHANGED
data/lib/hazard/version.rb
CHANGED
data/lib/hazard.rb
CHANGED
@@ -4,10 +4,18 @@ require_relative 'weighted_table'
|
|
4
4
|
class Hazard
|
5
5
|
|
6
6
|
def self.method_missing( method_name )
|
7
|
-
|
8
7
|
# Transform the method_name to string
|
9
8
|
method_name = method_name.to_s
|
9
|
+
self.roll_dice( method_name )
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.from_string( dice_string )
|
13
|
+
roll_dice( dice_string )
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
10
17
|
|
18
|
+
def self.roll_dice( method_name )
|
11
19
|
# Parse the method name to get how many dice and what size of dice was required
|
12
20
|
dice_match = method_name.to_s.match( /(d|r|m|s)?(\d*)d(\d+)/ )
|
13
21
|
# Raise an error if match fail
|
@@ -32,7 +40,6 @@ class Hazard
|
|
32
40
|
|
33
41
|
# Return a RolledDice otherwise
|
34
42
|
RolledDice.new( rolls )
|
35
|
-
|
36
43
|
end
|
37
44
|
|
38
45
|
end
|
data/lib/weighted_table.rb
CHANGED
@@ -62,15 +62,6 @@ class WeightedTable
|
|
62
62
|
raise 'Rand not in key range'
|
63
63
|
end
|
64
64
|
|
65
|
-
# Load a WeightedTable with data
|
66
|
-
# Data format must be : [ data, data, data ]
|
67
|
-
# Example : [ :foo, :foo, :bar ]
|
68
|
-
#
|
69
|
-
# @return [WeightedTable] the current WeightedTable
|
70
|
-
def from_flat_table( table )
|
71
|
-
from_weighted_table( table.group_by{ |e| e }.map{ |k, v| [ v.count, k ] } )
|
72
|
-
end
|
73
|
-
|
74
65
|
# Save the table to a file
|
75
66
|
# @param filename [String] the filename where to save the table
|
76
67
|
def to_file( filename )
|
data/test/hazard_test.rb
CHANGED
@@ -18,4 +18,21 @@ class HazardTest < Minitest::Test
|
|
18
18
|
|
19
19
|
end
|
20
20
|
|
21
|
+
def test_dice_from_string
|
22
|
+
|
23
|
+
Kernel.stubs( :rand ).returns( 6 )
|
24
|
+
|
25
|
+
assert_equal 6, Hazard.from_string( 'd6' )
|
26
|
+
|
27
|
+
assert_equal 12, Hazard.from_string( 'r2d6' )
|
28
|
+
assert_equal 12, Hazard.from_string( '_2d6' )
|
29
|
+
assert_equal 12, Hazard.from_string( 'm2d6' )
|
30
|
+
assert_equal 12, Hazard.from_string( 'd2d6' )
|
31
|
+
assert_equal 18, Hazard.from_string( 'd3d6' )
|
32
|
+
|
33
|
+
assert_equal RolledDice.new([6, 6 ] ), Hazard.from_string( 's2d6' )
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
|
21
38
|
end
|
data/test/weighted_table_test.rb
CHANGED
@@ -39,24 +39,38 @@ class HazardTest < Minitest::Test
|
|
39
39
|
assert_equal :bar, WeightedTable.from_flat_table( [ :foo, :foo, :foo, :bar ] ).sample
|
40
40
|
|
41
41
|
Kernel.stubs( :rand ).returns( 5 )
|
42
|
-
assert_raises do
|
42
|
+
assert_raises 'Rand not in key range' do
|
43
43
|
WeightedTable.from_weighted_table []
|
44
44
|
end
|
45
|
-
assert_raises do
|
45
|
+
assert_raises 'Rand not in key range' do
|
46
46
|
WeightedTable.from_flat_table []
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
50
|
-
def
|
50
|
+
def test_three_element_table
|
51
|
+
|
52
|
+
Kernel.stubs( :rand ).returns( 1 )
|
53
|
+
assert_equal :foo, WeightedTable.from_weighted_table( [ [ 3, :foo ], [ 1, :bar ], [ 1, :foobar ] ] ).sample
|
54
|
+
assert_equal :foo, WeightedTable.from_flat_table( [ :foo, :foo, :foo, :bar, :foobar ] ).sample
|
55
|
+
|
56
|
+
Kernel.stubs( :rand ).returns( 5 )
|
57
|
+
assert_equal :foobar, WeightedTable.from_weighted_table( [ [ 3, :foo ], [ 1, :bar ], [ 1, :foobar ] ] ).sample
|
58
|
+
assert_equal :foobar, WeightedTable.from_flat_table( [ :foo, :foo, :foo, :bar, :foobar ] ).sample
|
59
|
+
|
60
|
+
end
|
51
61
|
|
62
|
+
def test_statistics
|
52
63
|
wt = WeightedTable.from_weighted_table [ [ 2, :foo ], [ 1, :bar ] ]
|
53
64
|
results = { foo: 0, bar: 0 }
|
54
|
-
|
65
|
+
|
66
|
+
rounds = 1000
|
67
|
+
|
68
|
+
1.upto(rounds).each do
|
55
69
|
results[ wt.sample ] += 1
|
56
70
|
end
|
57
71
|
|
58
|
-
assert_in_delta 0.33, (results[:bar]
|
59
|
-
assert_in_delta 0.66, (results[:foo]
|
72
|
+
assert_in_delta 0.33, (results[:bar].to_f/rounds), 0.1
|
73
|
+
assert_in_delta 0.66, (results[:foo].to_f/rounds), 0.1
|
60
74
|
end
|
61
75
|
|
62
76
|
def test_save_and_load
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hazard
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Cédric ZUGER
|
@@ -87,7 +87,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
87
87
|
requirements:
|
88
88
|
- - ">="
|
89
89
|
- !ruby/object:Gem::Version
|
90
|
-
version: '
|
90
|
+
version: '1.9'
|
91
91
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
92
92
|
requirements:
|
93
93
|
- - ">="
|