games_dice 0.3.6 → 0.3.7

Sign up to get free protection for your applications and to get access to all the features.
data/.yardopts ADDED
@@ -0,0 +1,7 @@
1
+ lib/**/*.rb
2
+ --exclude ext
3
+ --no-private
4
+ -
5
+ README.md
6
+ LICENSE.txt
7
+ CHANGELOG.md
data/CHANGELOG.md ADDED
@@ -0,0 +1,53 @@
1
+ # GamesDice Changelog
2
+
3
+ ## 0.3.7
4
+
5
+ * Compatibility between pure Ruby and native extension code when handling bad method params
6
+ * Added this changelog to documentation
7
+
8
+ ## 0.3.6
9
+
10
+ * Extension building skipped, with fallback to pure Ruby, for JRuby compatibility
11
+
12
+ ## 0.3.5
13
+
14
+ * Adjust C code to avoid warnings about C90 compatibility (warnings seen on Travis)
15
+ * Note MIT license in gemspec
16
+ * Add class method GamesDice::Probabilities.implemented_in
17
+
18
+ ## 0.3.3
19
+
20
+ * Standardised code for Ruby 1.8.7 compatibility in GamesDice::Probabilities
21
+ * Bug fix for probability calculations where distributions are added with mulipliers e.g. '2d6 - 1d8'
22
+
23
+ ## 0.3.2
24
+
25
+ * Bug fix for Ruby 1.8.7 compatibility in GamesDice::Probabilities
26
+
27
+ ## 0.3.1
28
+
29
+ * Bug fix for Ruby 1.8.7 compatibility in GamesDice::Probabilities
30
+
31
+ ## 0.3.0
32
+
33
+ * Implemented GamesDice::Probabilities as native extension
34
+
35
+ ## 0.2.4
36
+
37
+ * Minor speed improvements to GamesDice::Probabilities
38
+
39
+ ## 0.2.3
40
+
41
+ * More YARD documentation
42
+
43
+ ## 0.2.2
44
+
45
+ * Extended YARD documentation
46
+
47
+ ## 0.2.1
48
+
49
+ * Started basic YARD documentation
50
+
51
+ ## 0.2.0
52
+
53
+ * First version with a complete feature set
@@ -744,6 +744,8 @@ VALUE probabilities_for_fair_die( VALUE self, VALUE sides ) {
744
744
  }
745
745
 
746
746
  VALUE probabilities_from_h( VALUE self, VALUE hash ) {
747
+ Check_Type( hash, T_HASH );
748
+
747
749
  VALUE obj = pl_alloc( Probabilities );
748
750
  ProbabilityList *pl = get_probability_list( obj );
749
751
  double error;
@@ -68,7 +68,7 @@ class GamesDice::Parser < Parslet::Parser
68
68
  root :expressions
69
69
 
70
70
  # Parses a string description in the dice mini-language, and returns data for feeding into
71
- # GamesDice::Dice constructore.
71
+ # GamesDice::Dice constructor.
72
72
  # @param [String] dice_description Text to parse e.g. '1d6'
73
73
  # @return [Hash] Analysis of dice_description
74
74
  def parse dice_description
@@ -27,7 +27,7 @@ class GamesDice::Probabilities
27
27
  def initialize( probs = [1.0], offset = 0 )
28
28
  # This should *probably* be validated in future, but that would impact performance
29
29
  @probs = check_probs_array probs.clone
30
- @offset = offset
30
+ @offset = Integer(offset)
31
31
  end
32
32
 
33
33
  # @!visibility private
@@ -41,7 +41,7 @@ class GamesDice::Probabilities
41
41
  # @yieldparam [Float] probability Probability of result, in range 0.0..1.0
42
42
  # @return [GamesDice::Probabilities] this object
43
43
  def each
44
- @probs.each_with_index { |p,i| yield( i+@offset, p ) }
44
+ @probs.each_with_index { |p,i| yield( i+@offset, p ) if p > 0.0 }
45
45
  return self
46
46
  end
47
47
 
@@ -156,6 +156,7 @@ class GamesDice::Probabilities
156
156
  # and the matching value is probability of getting that result
157
157
  # @return [GamesDice::Probabilities]
158
158
  def self.from_h prob_hash
159
+ raise TypeError, "from_h expected a Hash" unless prob_hash.is_a? Hash
159
160
  probs, offset = prob_h_to_ao( prob_hash )
160
161
  GamesDice::Probabilities.new( probs, offset )
161
162
  end
@@ -166,6 +167,7 @@ class GamesDice::Probabilities
166
167
  def self.for_fair_die sides
167
168
  sides = Integer(sides)
168
169
  raise ArgumentError, "sides must be at least 1" unless sides > 0
170
+ raise ArgumentError, "sides can be at most 100000" if sides > 100000
169
171
  GamesDice::Probabilities.new( Array.new( sides, 1.0/sides ), 1 )
170
172
  end
171
173
 
@@ -175,6 +177,10 @@ class GamesDice::Probabilities
175
177
  # @param [GamesDice::Probabilities] pd_b Second distribution
176
178
  # @return [GamesDice::Probabilities]
177
179
  def self.add_distributions pd_a, pd_b
180
+ unless pd_a.is_a?( GamesDice::Probabilities ) && pd_b.is_a?( GamesDice::Probabilities )
181
+ raise TypeError, "parameter to add_distributions is not a GamesDice::Probabilities"
182
+ end
183
+
178
184
  combined_min = pd_a.min + pd_b.min
179
185
  combined_max = pd_a.max + pd_b.max
180
186
  new_probs = Array.new( 1 + combined_max - combined_min, 0.0 )
@@ -199,6 +205,13 @@ class GamesDice::Probabilities
199
205
  # @param [GamesDice::Probabilities] pd_b Second distribution
200
206
  # @return [GamesDice::Probabilities]
201
207
  def self.add_distributions_mult m_a, pd_a, m_b, pd_b
208
+ unless pd_a.is_a?( GamesDice::Probabilities ) && pd_b.is_a?( GamesDice::Probabilities )
209
+ raise TypeError, "parameter to add_distributions_mult is not a GamesDice::Probabilities"
210
+ end
211
+
212
+ m_a = Integer(m_a)
213
+ m_b = Integer(m_b)
214
+
202
215
  combined_min, combined_max = [
203
216
  m_a * pd_a.min + m_b * pd_b.min, m_a * pd_a.max + m_b * pd_b.min,
204
217
  m_a * pd_a.min + m_b * pd_b.max, m_a * pd_a.max + m_b * pd_b.max,
@@ -232,6 +245,7 @@ class GamesDice::Probabilities
232
245
  def repeat_sum n
233
246
  n = Integer( n )
234
247
  raise "Cannot combine probabilities less than once" if n < 1
248
+ raise "Probability distribution too large" if ( n * @probs.count ) > 1000000
235
249
  revbin = n.to_s(2).reverse.each_char.to_a.map { |c| c == '1' }
236
250
  pd_power = self
237
251
  pd_result = nil
@@ -259,6 +273,8 @@ class GamesDice::Probabilities
259
273
  n = Integer( n )
260
274
  k = Integer( k )
261
275
  raise "Cannot combine probabilities less than once" if n < 1
276
+ # Technically this is a limitation of C code, but Ruby version is most likely slow and inaccurate beyond 170
277
+ raise "Too many dice to calculate numbers of arrangements" if n > 170
262
278
  if k >= n
263
279
  return repeat_sum( n )
264
280
  end
@@ -294,6 +310,7 @@ class GamesDice::Probabilities
294
310
  private
295
311
 
296
312
  def check_probs_array probs_array
313
+ raise TypeError unless probs_array.is_a?( Array )
297
314
  probs_array.map!{ |n| Float(n) }
298
315
  total = probs_array.inject(0.0) do |t,x|
299
316
  if x < 0.0 || x > 1.0
@@ -351,8 +368,10 @@ class GamesDice::Probabilities
351
368
  def self.prob_h_to_ao h
352
369
  rmin,rmax = h.keys.minmax
353
370
  o = rmin
354
- a = Array.new( 1 + rmax - rmin, 0.0 )
355
- h.each { |k,v| a[k-rmin] = v }
371
+ s = 1 + rmax - rmin
372
+ raise ArgumentError, "Range of possible results too large" if s > 1000000
373
+ a = Array.new( s, 0.0 )
374
+ h.each { |k,v| a[k-rmin] = Float(v) }
356
375
  [a,o]
357
376
  end
358
377
 
@@ -1,3 +1,3 @@
1
1
  module GamesDice
2
- VERSION = "0.3.6"
2
+ VERSION = "0.3.7"
3
3
  end
@@ -9,6 +9,20 @@ describe GamesDice::Probabilities do
9
9
  pr.should be_a GamesDice::Probabilities
10
10
  pr.to_h.should be_valid_distribution
11
11
  end
12
+
13
+ it "should raise an error if passed incorrect parameter types" do
14
+ lambda { GamesDice::Probabilities.new( [ nil ], 20 ) }.should raise_error TypeError
15
+ lambda { GamesDice::Probabilities.new( [0.3,nil,0.5], 7 ) }.should raise_error TypeError
16
+ lambda { GamesDice::Probabilities.new( [0.3,0.2,0.5], {} ) }.should raise_error TypeError
17
+ lambda { GamesDice::Probabilities.new( {:x=>:y}, 17 ) }.should raise_error TypeError
18
+ end
19
+
20
+ it "should raise an error if distribution is incomplete or inaccurate" do
21
+ lambda { GamesDice::Probabilities.new( [0.3,0.2,0.6], 3 ) }.should raise_error ArgumentError
22
+ lambda { GamesDice::Probabilities.new( [], 1 ) }.should raise_error ArgumentError
23
+ lambda { GamesDice::Probabilities.new( [0.9], 1 ) }.should raise_error ArgumentError
24
+ lambda { GamesDice::Probabilities.new( [-0.9,0.2,0.9], 1 ) }.should raise_error ArgumentError
25
+ end
12
26
  end
13
27
 
14
28
  describe "#for_fair_die" do
@@ -25,6 +39,15 @@ describe GamesDice::Probabilities do
25
39
  h.values.each { |v| v.should be_within(1e-10).of 1.0/sides }
26
40
  end
27
41
  end
42
+
43
+ it "should raise an error if number of sides is not an integer" do
44
+ lambda { GamesDice::Probabilities.for_fair_die( {} ) }.should raise_error TypeError
45
+ end
46
+
47
+ it "should raise an error if number of sides is too low or too high" do
48
+ lambda { GamesDice::Probabilities.for_fair_die( 0 ) }.should raise_error ArgumentError
49
+ lambda { GamesDice::Probabilities.for_fair_die( 1000001 ) }.should raise_error ArgumentError
50
+ end
28
51
  end
29
52
 
30
53
  describe "#add_distributions" do
@@ -52,6 +75,13 @@ describe GamesDice::Probabilities do
52
75
  h[11].should be_within(1e-9).of 2.0/36
53
76
  h[12].should be_within(1e-9).of 1.0/36
54
77
  end
78
+
79
+ it "should raise an error if either parameter is not a GamesDice::Probabilities object" do
80
+ d10 = GamesDice::Probabilities.for_fair_die( 10 )
81
+ lambda { GamesDice::Probabilities.add_distributions( '', 6 ) }.should raise_error TypeError
82
+ lambda { GamesDice::Probabilities.add_distributions( d10, 6 ) }.should raise_error TypeError
83
+ lambda { GamesDice::Probabilities.add_distributions( '', d10 ) }.should raise_error TypeError
84
+ end
55
85
  end
56
86
 
57
87
  describe "#add_distributions_mult" do
@@ -90,6 +120,20 @@ describe GamesDice::Probabilities do
90
120
  h[10].should be_within(1e-9).of 0.7 * 0.2 + 0.3 * 0.3
91
121
  h[12].should be_within(1e-9).of 0.3 * 0.2
92
122
  end
123
+
124
+ it "should raise an error if passed incorrect objects for distributions" do
125
+ d10 = GamesDice::Probabilities.for_fair_die( 10 )
126
+ lambda { GamesDice::Probabilities.add_distributions_mult( 1, '', -1, 6 ) }.should raise_error TypeError
127
+ lambda { GamesDice::Probabilities.add_distributions_mult( 2, d10, 3, 6 ) }.should raise_error TypeError
128
+ lambda { GamesDice::Probabilities.add_distributions_mult( 1, '', -1, d10 ) }.should raise_error TypeError
129
+ end
130
+
131
+ it "should raise an error if passed incorrect objects for multipliers" do
132
+ d10 = GamesDice::Probabilities.for_fair_die( 10 )
133
+ lambda { GamesDice::Probabilities.add_distributions_mult( {}, d10, [], d10 ) }.should raise_error TypeError
134
+ lambda { GamesDice::Probabilities.add_distributions_mult( [7], d10, 3, d10 ) }.should raise_error TypeError
135
+ lambda { GamesDice::Probabilities.add_distributions_mult( 1, d10, {}, d10 ) }.should raise_error TypeError
136
+ end
93
137
  end
94
138
 
95
139
  describe "#from_h" do
@@ -99,9 +143,21 @@ describe GamesDice::Probabilities do
99
143
  end
100
144
 
101
145
  it "should raise an ArgumentError when called with a non-valid hash" do
102
- # lambda { GamesDice::Probabilities.from_h( :foo ) }.should raise_error ArgumentError
103
146
  lambda { GamesDice::Probabilities.from_h( { 7 => 0.5, 9 => 0.6 } ) }.should raise_error ArgumentError
104
147
  end
148
+
149
+ it "should raise an TypeError when called with data that is not a hash" do
150
+ lambda { GamesDice::Probabilities.from_h( :foo ) }.should raise_error TypeError
151
+ end
152
+
153
+ it "should raise a TypeError when called when keys and values are not all integers and floats" do
154
+ lambda { GamesDice::Probabilities.from_h( { 'x' => 0.5, 9 => 0.5 } ) }.should raise_error
155
+ lambda { GamesDice::Probabilities.from_h( { 7 => [], 9 => 0.5 } ) }.should raise_error TypeError
156
+ end
157
+
158
+ it "should raise an ArgumentError when results are spread very far apart" do
159
+ lambda { GamesDice::Probabilities.from_h( { 0 => 0.5, 2000000 => 0.5 } ) }.should raise_error ArgumentError
160
+ end
105
161
  end
106
162
 
107
163
  describe "#implemented_in" do
@@ -120,7 +176,20 @@ describe GamesDice::Probabilities do
120
176
  let(:pr10) { GamesDice::Probabilities.for_fair_die( 10 ) }
121
177
  let(:pra) { GamesDice::Probabilities.new( [ 0.4, 0.2, 0.4 ], -1 ) }
122
178
 
123
- # TODO: each
179
+ describe "#each" do
180
+ it "should iterate through all result/probability pairs" do
181
+ yielded = []
182
+ pr4.each { |r,p| yielded << [r,p] }
183
+ yielded.should == [ [1,0.25], [2,0.25], [3,0.25], [4,0.25] ]
184
+ end
185
+
186
+ it "should skip zero probabilities" do
187
+ pr_plus_minus = GamesDice::Probabilities.new( [ 0.5, 0.0, 0.5 ], -1 )
188
+ yielded = []
189
+ pr_plus_minus .each { |r,p| yielded << [r,p] }
190
+ yielded.should == [ [-1,0.5], [1,0.5] ]
191
+ end
192
+ end
124
193
 
125
194
  describe "#p_eql" do
126
195
  it "should return probability of getting a number inside the range" do
@@ -138,6 +207,10 @@ describe GamesDice::Probabilities do
138
207
  pr10.p_eql(11).should == 0.0
139
208
  pra.p_eql(2).should == 0.0
140
209
  end
210
+
211
+ it "should raise a TypeError if asked for probability of non-Integer" do
212
+ lambda { pr2.p_eql( [] ) }.should raise_error TypeError
213
+ end
141
214
  end # describe "#p_eql"
142
215
 
143
216
  describe "#p_gt" do
@@ -169,6 +242,10 @@ describe GamesDice::Probabilities do
169
242
  pr10.p_gt(-200).should == 1.0
170
243
  pra.p_gt(-2).should == 1.0
171
244
  end
245
+
246
+ it "should raise a TypeError if asked for probability of non-Integer" do
247
+ lambda { pr2.p_gt( {} ) }.should raise_error TypeError
248
+ end
172
249
  end # describe "#p_gt"
173
250
 
174
251
  describe "#p_ge" do
@@ -192,6 +269,10 @@ describe GamesDice::Probabilities do
192
269
  pr6.p_ge(1).should == 1.0
193
270
  pr10.p_ge(-200).should == 1.0
194
271
  end
272
+
273
+ it "should raise a TypeError if asked for probability of non-Integer" do
274
+ lambda { pr4.p_ge( {} ) }.should raise_error TypeError
275
+ end
195
276
  end # describe "#p_ge"
196
277
 
197
278
  describe "#p_le" do
@@ -215,6 +296,10 @@ describe GamesDice::Probabilities do
215
296
  pr6.p_le(0).should == 0.0
216
297
  pr10.p_le(-200).should == 0.0
217
298
  end
299
+
300
+ it "should raise a TypeError if asked for probability of non-Integer" do
301
+ lambda { pr4.p_le( [] ) }.should raise_error TypeError
302
+ end
218
303
  end # describe "#p_le"
219
304
 
220
305
  describe "#p_lt" do
@@ -238,6 +323,10 @@ describe GamesDice::Probabilities do
238
323
  pr6.p_lt(1).should == 0.0
239
324
  pr10.p_lt(-200).should == 0.0
240
325
  end
326
+
327
+ it "should raise a TypeError if asked for probability of non-Integer" do
328
+ lambda { pr6.p_lt( {} ) }.should raise_error TypeError
329
+ end
241
330
  end # describe "#p_lt"
242
331
 
243
332
  describe "#to_h" do
@@ -281,7 +370,7 @@ describe GamesDice::Probabilities do
281
370
  end
282
371
 
283
372
  describe "#given_ge" do
284
- it "should return a new distribution with probabilities calculated assuming value is >= target" do
373
+ it "should return a new distribution with probabilities calculated assuming value is >= target" do
285
374
  pd = pr2.given_ge(2)
286
375
  pd.to_h.should == { 2 => 1.0 }
287
376
  pd = pr10.given_ge(4)
@@ -289,10 +378,14 @@ describe GamesDice::Probabilities do
289
378
  pd.p_eql( 3 ).should == 0.0
290
379
  pd.p_eql( 10 ).should be_within(1.0e-9).of 0.1/0.7
291
380
  end
381
+
382
+ it "should raise a TypeError if asked for probability of non-Integer" do
383
+ lambda { pr10.given_ge( [] ) }.should raise_error TypeError
384
+ end
292
385
  end
293
386
 
294
387
  describe "#given_le" do
295
- it "should return a new distribution with probabilities calculated assuming value is <= target" do
388
+ it "should return a new distribution with probabilities calculated assuming value is <= target" do
296
389
  pd = pr2.given_le(2)
297
390
  pd.to_h.should == { 1 => 0.5, 2 => 0.5 }
298
391
  pd = pr10.given_le(4)
@@ -300,6 +393,10 @@ describe GamesDice::Probabilities do
300
393
  pd.p_eql( 3 ).should be_within(1.0e-9).of 0.1/0.4
301
394
  pd.p_eql( 10 ).should == 0.0
302
395
  end
396
+
397
+ it "should raise a TypeError if asked for probability of non-Integer" do
398
+ lambda { pr10.given_le( {} ) }.should raise_error TypeError
399
+ end
303
400
  end
304
401
 
305
402
  describe "#repeat_sum" do
@@ -312,6 +409,16 @@ describe GamesDice::Probabilities do
312
409
  pr.to_h.should be_valid_distribution
313
410
  end
314
411
 
412
+ it "should raise an error if any param is unexpected type" do
413
+ d6 = GamesDice::Probabilities.for_fair_die( 6 )
414
+ lambda{ d6.repeat_sum( {} ) }.should raise_error TypeError
415
+ end
416
+
417
+ it "should raise an error if distribution would have more than a million results" do
418
+ d1000 = GamesDice::Probabilities.for_fair_die( 1000 )
419
+ lambda{ d1000.repeat_sum( 11000 ) }.should raise_error
420
+ end
421
+
315
422
  it "should calculate a '3d6' distribution accurately" do
316
423
  d6 = GamesDice::Probabilities.for_fair_die( 6 )
317
424
  pr = d6.repeat_sum( 3 )
@@ -346,6 +453,17 @@ describe GamesDice::Probabilities do
346
453
  pr.to_h.should be_valid_distribution
347
454
  end
348
455
 
456
+ it "should raise an error if any param is unexpected type" do
457
+ d6 = GamesDice::Probabilities.for_fair_die( 6 )
458
+ lambda{ d6.repeat_n_sum_k( {}, 10 ) }.should raise_error TypeError
459
+ lambda{ d6.repeat_n_sum_k( 10, {} ) }.should raise_error TypeError
460
+ end
461
+
462
+ it "should raise an error if n is greater than 170" do
463
+ d6 = GamesDice::Probabilities.for_fair_die( 6 )
464
+ lambda{ d6.repeat_n_sum_k( 171, 10 ) }.should raise_error
465
+ end
466
+
349
467
  it "should calculate a '4d6 keep best 3' distribution accurately" do
350
468
  d6 = GamesDice::Probabilities.for_fair_die( 6 )
351
469
  pr = d6.repeat_n_sum_k( 4, 3 )
metadata CHANGED
@@ -1,123 +1,138 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: games_dice
3
- version: !ruby/object:Gem::Version
4
- version: 0.3.6
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
5
  prerelease:
6
+ segments:
7
+ - 0
8
+ - 3
9
+ - 7
10
+ version: 0.3.7
6
11
  platform: ruby
7
- authors:
12
+ authors:
8
13
  - Neil Slater
9
14
  autorequire:
10
15
  bindir: bin
11
16
  cert_chain: []
12
- date: 2013-07-15 00:00:00.000000000 Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
17
+
18
+ date: 2013-07-17 00:00:00 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
15
21
  name: rspec
16
- requirement: !ruby/object:Gem::Requirement
17
- none: false
18
- requirements:
19
- - - ! '>='
20
- - !ruby/object:Gem::Version
21
- version: 2.13.0
22
- type: :development
23
22
  prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
23
+ requirement: &id001 !ruby/object:Gem::Requirement
25
24
  none: false
26
- requirements:
27
- - - ! '>='
28
- - !ruby/object:Gem::Version
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ hash: 59
29
+ segments:
30
+ - 2
31
+ - 13
32
+ - 0
29
33
  version: 2.13.0
30
- - !ruby/object:Gem::Dependency
31
- name: rake
32
- requirement: !ruby/object:Gem::Requirement
33
- none: false
34
- requirements:
35
- - - ! '>='
36
- - !ruby/object:Gem::Version
37
- version: 1.9.1
38
34
  type: :development
35
+ version_requirements: *id001
36
+ - !ruby/object:Gem::Dependency
37
+ name: rake
39
38
  prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
39
+ requirement: &id002 !ruby/object:Gem::Requirement
41
40
  none: false
42
- requirements:
43
- - - ! '>='
44
- - !ruby/object:Gem::Version
41
+ requirements:
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ hash: 49
45
+ segments:
46
+ - 1
47
+ - 9
48
+ - 1
45
49
  version: 1.9.1
46
- - !ruby/object:Gem::Dependency
47
- name: yard
48
- requirement: !ruby/object:Gem::Requirement
49
- none: false
50
- requirements:
51
- - - ! '>='
52
- - !ruby/object:Gem::Version
53
- version: 0.8.6
54
50
  type: :development
51
+ version_requirements: *id002
52
+ - !ruby/object:Gem::Dependency
53
+ name: yard
55
54
  prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
55
+ requirement: &id003 !ruby/object:Gem::Requirement
57
56
  none: false
58
- requirements:
59
- - - ! '>='
60
- - !ruby/object:Gem::Version
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ hash: 51
61
+ segments:
62
+ - 0
63
+ - 8
64
+ - 6
61
65
  version: 0.8.6
62
- - !ruby/object:Gem::Dependency
63
- name: rake-compiler
64
- requirement: !ruby/object:Gem::Requirement
65
- none: false
66
- requirements:
67
- - - ! '>='
68
- - !ruby/object:Gem::Version
69
- version: '0'
70
66
  type: :development
67
+ version_requirements: *id003
68
+ - !ruby/object:Gem::Dependency
69
+ name: rake-compiler
71
70
  prerelease: false
72
- version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
- requirements:
75
- - - ! '>='
76
- - !ruby/object:Gem::Version
77
- version: '0'
78
- - !ruby/object:Gem::Dependency
79
- name: redcarpet
80
- requirement: !ruby/object:Gem::Requirement
71
+ requirement: &id004 !ruby/object:Gem::Requirement
81
72
  none: false
82
- requirements:
83
- - - ! '>='
84
- - !ruby/object:Gem::Version
85
- version: 2.3.0
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ hash: 3
77
+ segments:
78
+ - 0
79
+ version: "0"
86
80
  type: :development
81
+ version_requirements: *id004
82
+ - !ruby/object:Gem::Dependency
83
+ name: redcarpet
87
84
  prerelease: false
88
- version_requirements: !ruby/object:Gem::Requirement
85
+ requirement: &id005 !ruby/object:Gem::Requirement
89
86
  none: false
90
- requirements:
91
- - - ! '>='
92
- - !ruby/object:Gem::Version
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ hash: 3
91
+ segments:
92
+ - 2
93
+ - 3
94
+ - 0
93
95
  version: 2.3.0
94
- - !ruby/object:Gem::Dependency
96
+ - - <
97
+ - !ruby/object:Gem::Version
98
+ hash: 7
99
+ segments:
100
+ - 3
101
+ - 0
102
+ - 0
103
+ version: 3.0.0
104
+ type: :development
105
+ version_requirements: *id005
106
+ - !ruby/object:Gem::Dependency
95
107
  name: parslet
96
- requirement: !ruby/object:Gem::Requirement
97
- none: false
98
- requirements:
99
- - - ! '>='
100
- - !ruby/object:Gem::Version
101
- version: 1.5.0
102
- type: :runtime
103
108
  prerelease: false
104
- version_requirements: !ruby/object:Gem::Requirement
109
+ requirement: &id006 !ruby/object:Gem::Requirement
105
110
  none: false
106
- requirements:
107
- - - ! '>='
108
- - !ruby/object:Gem::Version
111
+ requirements:
112
+ - - ">="
113
+ - !ruby/object:Gem::Version
114
+ hash: 3
115
+ segments:
116
+ - 1
117
+ - 5
118
+ - 0
109
119
  version: 1.5.0
110
- description: A library for simulating dice. Use it to construct dice-rolling systems
111
- used in role-playing and board games.
112
- email:
120
+ type: :runtime
121
+ version_requirements: *id006
122
+ description: A library for simulating dice. Use it to construct dice-rolling systems used in role-playing and board games.
123
+ email:
113
124
  - slobo777@gmail.com
114
125
  executables: []
115
- extensions:
126
+
127
+ extensions:
116
128
  - ext/games_dice/extconf.rb
117
129
  extra_rdoc_files: []
118
- files:
130
+
131
+ files:
119
132
  - .gitignore
120
133
  - .travis.yml
134
+ - .yardopts
135
+ - CHANGELOG.md
121
136
  - Gemfile
122
137
  - LICENSE.txt
123
138
  - README.md
@@ -151,38 +166,39 @@ files:
151
166
  - spec/readme_spec.rb
152
167
  - spec/reroll_rule_spec.rb
153
168
  homepage: https://github.com/neilslater/games_dice
154
- licenses:
169
+ licenses:
155
170
  - MIT
156
171
  post_install_message:
157
172
  rdoc_options: []
158
- require_paths:
173
+
174
+ require_paths:
159
175
  - lib
160
- required_ruby_version: !ruby/object:Gem::Requirement
176
+ required_ruby_version: !ruby/object:Gem::Requirement
161
177
  none: false
162
- requirements:
163
- - - ! '>='
164
- - !ruby/object:Gem::Version
165
- version: '0'
166
- segments:
178
+ requirements:
179
+ - - ">="
180
+ - !ruby/object:Gem::Version
181
+ hash: 3
182
+ segments:
167
183
  - 0
168
- hash: 2590599779471533886
169
- required_rubygems_version: !ruby/object:Gem::Requirement
184
+ version: "0"
185
+ required_rubygems_version: !ruby/object:Gem::Requirement
170
186
  none: false
171
- requirements:
172
- - - ! '>='
173
- - !ruby/object:Gem::Version
174
- version: '0'
175
- segments:
187
+ requirements:
188
+ - - ">="
189
+ - !ruby/object:Gem::Version
190
+ hash: 3
191
+ segments:
176
192
  - 0
177
- hash: 2590599779471533886
193
+ version: "0"
178
194
  requirements: []
195
+
179
196
  rubyforge_project:
180
197
  rubygems_version: 1.8.24
181
198
  signing_key:
182
199
  specification_version: 3
183
- summary: Simulates and explains dice rolls from simple "1d6" to complex "roll 7 ten-sided
184
- dice, take best 3, results of 10 roll again and add on".
185
- test_files:
200
+ summary: Simulates and explains dice rolls from simple "1d6" to complex "roll 7 ten-sided dice, take best 3, results of 10 roll again and add on".
201
+ test_files:
186
202
  - spec/bunch_spec.rb
187
203
  - spec/complex_die_spec.rb
188
204
  - spec/dice_spec.rb