character-roller 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (7) hide show
  1. checksums.yaml +7 -0
  2. data/Rakefile +14 -0
  3. data/VERSION +1 -0
  4. data/bin/dice +16 -0
  5. data/character-roller.gemspec +29 -0
  6. data/lib/roller.rb +144 -0
  7. metadata +120 -0
@@ -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
@@ -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
@@ -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
@@ -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: []