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.
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: []