git-game 1.1

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 (3) hide show
  1. checksums.yaml +7 -0
  2. data/bin/git-game +105 -0
  3. metadata +74 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 96f42dd0ad05a6a336ad92902ea9890d75a2ea58
4
+ data.tar.gz: ef730b842c7bf61d503d382fb4946b195b247b7d
5
+ SHA512:
6
+ metadata.gz: 8298f04c95a02487698618b9fbf6cb5b5d6b0969b30f58fe45a8f43753141e3f16c9fabedc0be5f6f27b5405ed9db0104880c9f4302a7b1185a010ab81b0dc02
7
+ data.tar.gz: 2a4b531d5cf7e99829605211d82c0256f2ee1fff47ebe65581bdb1a4e276de52a03baf4c463095a1f065e5b3cb1f8b1495e979006b9bacd306db2ff6b34368bf
data/bin/git-game ADDED
@@ -0,0 +1,105 @@
1
+ #!/usr/bin/ruby
2
+
3
+ # -- Exit gracefully --
4
+ Signal.trap("INT") {
5
+ print "bye "
6
+ exit 0
7
+ }
8
+
9
+ def print_header
10
+ puts "----------------------------------------------------------"
11
+ puts " THE GIT GAME "
12
+ puts "----------------------------------------------------------"
13
+ puts "Welcome! The goal of the git game is to guess committers"
14
+ puts "based on their commit messages.\n\n"
15
+ end
16
+
17
+ def print_help
18
+ puts "----------------------------------------------------------"
19
+ puts " USAGE "
20
+ puts "----------------------------------------------------------"
21
+ puts "git game [extra git log options]"
22
+ puts "EX: git game --after={2014-08-08}"
23
+ puts "(This script already uses --no-merges and --pretty."
24
+ puts "For more valid options see: http://gitref.org/inspect/)"
25
+ end
26
+
27
+ # -- Usage Text --
28
+ if ARGV.count > 0 && (input = ARGV.shift) == 'help'
29
+ print_header
30
+ print_help
31
+ exit 0
32
+ end
33
+
34
+ # -- Parse commits --
35
+ COMMIT_DELIMITER = "XXXCOMMITXXX"
36
+ FIELD_DELIMITER = "|||"
37
+
38
+ commit_format = ["%an", "%ar", "%B"].join(FIELD_DELIMITER)
39
+
40
+ raw_commits = `git log --no-merges --pretty="#{COMMIT_DELIMITER}#{commit_format}" #{input if input}`.split("#{COMMIT_DELIMITER}")
41
+ commits = []
42
+ raw_commits.each do |c|
43
+ next if c.strip.empty?
44
+
45
+ fields = c.split(FIELD_DELIMITER)
46
+ commits << {:author => fields[0], :date => fields[1], :message => fields[2]}
47
+ end
48
+
49
+ committers = commits.map { |c| c[:author] }.compact.uniq
50
+
51
+ # -- Show welcome message --
52
+ system('clear')
53
+
54
+ print_header
55
+ puts "You're playing in a repo with #{commits.size} commits and #{committers.size}"
56
+ puts "distinct committers.\n\n"
57
+
58
+ committers.each do |committer|
59
+ puts committer
60
+ end
61
+
62
+ puts "\n"
63
+ puts "When guessing, all you have to do is type part of the"
64
+ puts "committer's name. It's case-insensitive. So for instance"
65
+ puts "if the committer was James Somers, you could write 'james'"
66
+ puts "or 'jam' or even 'j' to get full credit.\n\n"
67
+
68
+ puts "Ready? PRESS ANY KEY TO START PLAYING (Ctrl-C to quit)"
69
+
70
+ gets
71
+
72
+ system('clear')
73
+
74
+ # -- Game loop --
75
+ streak = 0
76
+
77
+ loop do
78
+ commit = commits.shuffle.pop
79
+ message = commit[:message]
80
+ author = commit[:author]
81
+
82
+ next if message.nil? || message.empty? || author.nil? || author.empty?
83
+
84
+ puts "(#{commit[:date]})\n"
85
+ puts "#{message.strip}\n\n"
86
+ print "Who wrote it (current streak: #{streak})? "
87
+
88
+ guess = gets
89
+
90
+ while guess.strip.empty?
91
+ print "Who wrote it (current streak: #{streak})? "
92
+ guess = gets
93
+ end
94
+
95
+ if author.downcase.include?(guess.strip.downcase) && !guess.strip.empty?
96
+ streak += 1
97
+ puts "Got it!"
98
+ else
99
+ streak = 0
100
+ puts "Actually, it was #{author}."
101
+ end
102
+
103
+ sleep 1
104
+ system('clear')
105
+ end
metadata ADDED
@@ -0,0 +1,74 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: git-game
3
+ version: !ruby/object:Gem::Version
4
+ version: '1.1'
5
+ platform: ruby
6
+ authors:
7
+ - jsomers
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-02-26 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.7'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.7'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ description:
42
+ email:
43
+ executables:
44
+ - git-game
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - bin/git-game
49
+ homepage: https://github.com/jsomers/git-game
50
+ licenses:
51
+ - MIT
52
+ metadata: {}
53
+ post_install_message:
54
+ rdoc_options: []
55
+ require_paths:
56
+ - lib
57
+ required_ruby_version: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ required_rubygems_version: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
67
+ requirements: []
68
+ rubyforge_project:
69
+ rubygems_version: 2.0.0
70
+ signing_key:
71
+ specification_version: 4
72
+ summary: The git committer guessing game!
73
+ test_files: []
74
+ has_rdoc: