character-roller 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 +7 -0
- data/Rakefile +14 -0
- data/VERSION +1 -0
- data/bin/dice +16 -0
- data/character-roller.gemspec +29 -0
- data/lib/roller.rb +144 -0
- metadata +120 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: fccf0f1dd3bcc12039b3390d717cafe525ec6184
|
4
|
+
data.tar.gz: 6a953b3c9ac04bbb1f632b9bae57614a01aa426b
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: a1e7fabca4816e1c3c705b2d07fb59edeffa4e4162bf1f915208bc74c8807f8ec5679cd4e4e4b83cbfdbfeef000024b1be139f0fcd3a7ca7a8cb1c6d7c4eece5
|
7
|
+
data.tar.gz: b358f16a86ab5615e7c3e576da8f3aa27f2a03b34955b0ee95fdf3b9c28e3b204bed85b71ab2e27efd43cf51b9830479ae6d0684f5c3e02d29d90edfcceffeba
|
data/Rakefile
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler'
|
3
|
+
|
4
|
+
Bundler::GemHelper.install_tasks
|
5
|
+
|
6
|
+
desc 'Delete all built gems inside pkg directory'
|
7
|
+
task :clean do
|
8
|
+
require 'fileutils'
|
9
|
+
|
10
|
+
Dir.glob(File.join(File.dirname(__FILE__), 'pkg', '*.gem')).each do |file|
|
11
|
+
FileUtils.rm file
|
12
|
+
puts "Removed #{File.basename(file)}"
|
13
|
+
end
|
14
|
+
end
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.1.2
|
data/bin/dice
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
$:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
|
4
|
+
require 'roller'
|
5
|
+
|
6
|
+
unless ARGV.empty?
|
7
|
+
if ARGV.first =~ /\d+[dD]\d+/
|
8
|
+
Roller.new.roll(ARGV.first)
|
9
|
+
else
|
10
|
+
Roller.start
|
11
|
+
end
|
12
|
+
else
|
13
|
+
Roller.start
|
14
|
+
end
|
15
|
+
|
16
|
+
# vim: set ft=ruby ts=2 sw=2 expandtab :
|
@@ -0,0 +1,29 @@
|
|
1
|
+
Gem::Specification.new do |s|
|
2
|
+
s.name = "character-roller"
|
3
|
+
s.version = File.read File.join(File.dirname(__FILE__), 'VERSION')
|
4
|
+
s.summary = "Random d20 character ability score generator and dice roller"
|
5
|
+
s.author = "Mike Green"
|
6
|
+
s.email = "mike.is.green@gmail.com"
|
7
|
+
s.license = "MIT"
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.bindir = 'bin'
|
10
|
+
s.executables << 'dice'
|
11
|
+
s.files = %w(
|
12
|
+
VERSION
|
13
|
+
Rakefile
|
14
|
+
character-roller.gemspec
|
15
|
+
)
|
16
|
+
s.files += Dir.glob("bin/**/*")
|
17
|
+
s.files += Dir.glob("lib/**/*")
|
18
|
+
|
19
|
+
s.description = <<-END_DESC
|
20
|
+
A Thor-based CLI script for generating d20 character ability scores randomly.
|
21
|
+
END_DESC
|
22
|
+
|
23
|
+
s.add_development_dependency "rake"
|
24
|
+
s.add_development_dependency "pry"
|
25
|
+
s.add_development_dependency "watson-ruby"
|
26
|
+
|
27
|
+
s.add_runtime_dependency "thor"
|
28
|
+
s.add_runtime_dependency "true-random"
|
29
|
+
end
|
data/lib/roller.rb
ADDED
@@ -0,0 +1,144 @@
|
|
1
|
+
require 'thor'
|
2
|
+
require 'true-random'
|
3
|
+
|
4
|
+
class Roller < Thor
|
5
|
+
include Thor::Actions
|
6
|
+
|
7
|
+
default_task :version
|
8
|
+
|
9
|
+
class_option :show_results,
|
10
|
+
type: :boolean,
|
11
|
+
default: false,
|
12
|
+
desc: "Show each die roll result",
|
13
|
+
aliases: [ '-s' ]
|
14
|
+
|
15
|
+
desc 'version', 'Display version information'
|
16
|
+
def version
|
17
|
+
ver = File.read(File.join(File.dirname(__FILE__), '..', 'VERSION')).chomp!
|
18
|
+
say "Character Roller v#{ver.to_s}"
|
19
|
+
end
|
20
|
+
|
21
|
+
desc 'roll NdN', 'Rolls N, N-sided dice and returns the total result'
|
22
|
+
def roll(ndn)
|
23
|
+
match_reg = %r{(\d+)[dD](\d+)}
|
24
|
+
matches = match_reg.match ndn
|
25
|
+
|
26
|
+
if matches.length === 3
|
27
|
+
dice = matches[1].to_i
|
28
|
+
sides = matches[2].to_i
|
29
|
+
|
30
|
+
rolls = roll_dice dice, sides
|
31
|
+
total = rolls.reduce :+
|
32
|
+
|
33
|
+
p rolls if options.show_results
|
34
|
+
say total
|
35
|
+
else
|
36
|
+
say "Invalid input", :red
|
37
|
+
exit
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
desc 'ability_score', 'Rolls an ability score (4d6, discard lowest, re-roll 1s)'
|
42
|
+
method_option :bonus,
|
43
|
+
type: :boolean,
|
44
|
+
desc: "Show the score's bonus",
|
45
|
+
default: false,
|
46
|
+
aliases: %w( -b )
|
47
|
+
def ability_score
|
48
|
+
roll = roll_ability_score
|
49
|
+
|
50
|
+
if options.show_results
|
51
|
+
print roll[:results].to_s + " = "
|
52
|
+
end
|
53
|
+
|
54
|
+
print roll[:total].to_s
|
55
|
+
|
56
|
+
if options.bonus
|
57
|
+
bonus = calculate_bonus res[:total], true
|
58
|
+
print "\t(#{bonus})\n"
|
59
|
+
else
|
60
|
+
print "\n"
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
desc 'ability_scores', 'Rolls 6 ability scores'
|
65
|
+
method_option :bonuses,
|
66
|
+
type: :boolean,
|
67
|
+
desc: "Show the scores' bonuses",
|
68
|
+
default: false,
|
69
|
+
aliases: %w( -b )
|
70
|
+
def ability_scores
|
71
|
+
6.times do
|
72
|
+
res = roll_ability_score
|
73
|
+
|
74
|
+
if options.show_results
|
75
|
+
print res[:results].to_s + " = "
|
76
|
+
end
|
77
|
+
|
78
|
+
print res[:total]
|
79
|
+
|
80
|
+
if options.bonuses
|
81
|
+
bonus = calculate_bonus res[:total], true
|
82
|
+
print "\t(#{bonus})\n"
|
83
|
+
else
|
84
|
+
print "\n"
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
desc 'bonus SCORE', 'Show the bonus granted by an ability score'
|
90
|
+
def bonus(score)
|
91
|
+
|
92
|
+
begin
|
93
|
+
score = score.to_i
|
94
|
+
rescue
|
95
|
+
say 'Score must be an integer!', :red
|
96
|
+
exit 1
|
97
|
+
end
|
98
|
+
|
99
|
+
if score < 1
|
100
|
+
say 'Score must be greater than 0!', :red
|
101
|
+
exit 2
|
102
|
+
end
|
103
|
+
|
104
|
+
bonus = calculate_bonus score, true
|
105
|
+
say bonus
|
106
|
+
end
|
107
|
+
|
108
|
+
private
|
109
|
+
|
110
|
+
def roll_dice(ndice = 1, nsides = 6, ignore_ones = false)
|
111
|
+
rander = TrueRandom::Random.new
|
112
|
+
start_num = if ignore_ones then 2 else 1 end
|
113
|
+
results = rander.integer ndice, start_num, nsides
|
114
|
+
results
|
115
|
+
end
|
116
|
+
|
117
|
+
def roll_ability_score
|
118
|
+
results = {
|
119
|
+
results: [],
|
120
|
+
total: 0
|
121
|
+
}
|
122
|
+
|
123
|
+
results[:results] = roll_dice 4, 6, true
|
124
|
+
|
125
|
+
results[:results].sort!.shift
|
126
|
+
results[:total] = results[:results].reduce :+
|
127
|
+
|
128
|
+
results
|
129
|
+
end
|
130
|
+
|
131
|
+
def calculate_bonus(score, as_string = false)
|
132
|
+
bonus = score / 2 - 5
|
133
|
+
|
134
|
+
if as_string
|
135
|
+
str = if bonus > 0 then "+" else "" end
|
136
|
+
str += bonus.to_s
|
137
|
+
return str
|
138
|
+
end
|
139
|
+
|
140
|
+
bonus
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
# vim: set ts=2 sw=2 expandtab :
|
metadata
ADDED
@@ -0,0 +1,120 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: character-roller
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Mike Green
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-06-29 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rake
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: pry
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: watson-ruby
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: thor
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: true-random
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
description: |2
|
84
|
+
A Thor-based CLI script for generating d20 character ability scores randomly.
|
85
|
+
email: mike.is.green@gmail.com
|
86
|
+
executables:
|
87
|
+
- dice
|
88
|
+
extensions: []
|
89
|
+
extra_rdoc_files: []
|
90
|
+
files:
|
91
|
+
- Rakefile
|
92
|
+
- VERSION
|
93
|
+
- bin/dice
|
94
|
+
- character-roller.gemspec
|
95
|
+
- lib/roller.rb
|
96
|
+
homepage:
|
97
|
+
licenses:
|
98
|
+
- MIT
|
99
|
+
metadata: {}
|
100
|
+
post_install_message:
|
101
|
+
rdoc_options: []
|
102
|
+
require_paths:
|
103
|
+
- lib
|
104
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
105
|
+
requirements:
|
106
|
+
- - ">="
|
107
|
+
- !ruby/object:Gem::Version
|
108
|
+
version: '0'
|
109
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
110
|
+
requirements:
|
111
|
+
- - ">="
|
112
|
+
- !ruby/object:Gem::Version
|
113
|
+
version: '0'
|
114
|
+
requirements: []
|
115
|
+
rubyforge_project:
|
116
|
+
rubygems_version: 2.2.2
|
117
|
+
signing_key:
|
118
|
+
specification_version: 4
|
119
|
+
summary: Random d20 character ability score generator and dice roller
|
120
|
+
test_files: []
|