perquackey 0.7.1 → 0.7.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,4 +1,10 @@
1
- == Git
1
+ == 0.7.2 -- 2010-04-21
2
+ * Clean up command-line options.
3
+ * Write a perquackey(1) man page.
4
+ * `gem check --test perquackey` should work now!
5
+ * Require at least Ruby 1.8.7 -- building on 1.8.6 fails.
6
+
7
+ == 0.7.1 -- 2010-04-15
2
8
  * Refactor Dictionary to have Ruby parts, with a C extension starting at the fgets on the IO stream.
3
9
  * Reorganize code for autoloading.
4
10
  * Reorganize code to properly use datadir.
data/Gemfile CHANGED
@@ -1,8 +1,9 @@
1
1
  source :rubygems
2
2
 
3
- gem 'perquackey', :path => File.expand_path('.')
3
+ gem 'sinatra'
4
4
 
5
5
  group :development do
6
6
  gem 'redgreen'
7
- gem 'shoe', '0.5.0'
7
+ gem 'ronn'
8
+ gem 'shoe'
8
9
  end
@@ -0,0 +1,43 @@
1
+ ---
2
+ dependencies:
3
+ shoe:
4
+ group:
5
+ - :development
6
+ version: ">= 0"
7
+ ronn:
8
+ group:
9
+ - :development
10
+ version: ">= 0"
11
+ sinatra:
12
+ group:
13
+ - :default
14
+ version: ">= 0"
15
+ redgreen:
16
+ group:
17
+ - :development
18
+ version: ">= 0"
19
+ specs:
20
+ - rake:
21
+ version: 0.8.7
22
+ - configuration:
23
+ version: 1.1.0
24
+ - hpricot:
25
+ version: 0.8.2
26
+ - launchy:
27
+ version: 0.3.5
28
+ - rack:
29
+ version: 1.1.0
30
+ - rdiscount:
31
+ version: 1.6.3.1
32
+ - redgreen:
33
+ version: 1.2.2
34
+ - ronn:
35
+ version: "0.5"
36
+ - shoe:
37
+ version: 0.6.0
38
+ - sinatra:
39
+ version: "1.0"
40
+ hash: 43e16f41a78020948379f93caebbae6705f7a82c
41
+ sources:
42
+ - Rubygems:
43
+ uri: http://gemcutter.org
data/TODO.rdoc CHANGED
@@ -1,4 +1,3 @@
1
- * Dictionary should take some kind of IO object.
2
1
  * Include the C extension in the rdoc.
3
2
  * Use the web interface for in-game support:
4
3
  * Capture words
@@ -1,4 +1,18 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require 'perquackey'
3
+ begin
4
+ require 'perquackey'
5
+ rescue LoadError
6
+ raise unless $!.message =~ /\bperquackey$/
7
+
8
+ lib = File.expand_path('../../lib', __FILE__)
9
+ if !$:.include?(lib)
10
+ warn "WARN: #{$!}.\n Trying again with #{lib} on the $LOAD_PATH..."
11
+ $:.unshift(lib)
12
+ retry
13
+ end
14
+
15
+ raise
16
+ end
17
+
4
18
  Perquackey::Application.run!(ARGV)
@@ -2,11 +2,13 @@
2
2
  <input name="letters"
3
3
  value="<%= letters %>"
4
4
  autocomplete="on"
5
+ autosave="perquackey"
5
6
  autofocus="on"
6
7
  maxlength="13"
7
8
  pattern="[a-z]{10}([a-z]{3})?"
8
9
  placeholder="Type your letters here."
9
10
  required="on"
11
+ results="12"
10
12
  title="Perquackey rolls are 10 or 13 letters."
11
13
  type="search"
12
14
  />
@@ -3,7 +3,7 @@ require 'rbconfig'
3
3
  require 'rbconfig/datadir'
4
4
 
5
5
  module Perquackey
6
- VERSION = '0.7.1'
6
+ VERSION = '0.7.2'
7
7
 
8
8
  autoload :Anagrams, 'perquackey/anagrams'
9
9
  autoload :Application,'perquackey/application'
@@ -14,6 +14,13 @@ module Perquackey
14
14
  autoload :WordTable, 'perquackey/word_table'
15
15
 
16
16
  def self.datadir
17
- Pathname.new RbConfig.datadir('perquackey')
17
+ @@datadir ||= begin
18
+ datadir = RbConfig.datadir('perquackey')
19
+ if !File.exist?(datadir)
20
+ warn "WARN: #{datadir} does not exist.\n Trying again with relative data directory..."
21
+ datadir = File.expand_path('../../data/perquackey', __FILE__)
22
+ end
23
+ Pathname.new(datadir)
24
+ end
18
25
  end
19
26
  end
@@ -7,35 +7,34 @@ module Perquackey
7
7
  end
8
8
 
9
9
  def initialize
10
- @mode = :console
10
+ @defaults = %w(--console)
11
11
 
12
- @options = OptionParser.new do |opts|
13
- opts.banner = "Usage: #{File.basename($0)} [OPTIONS]"
12
+ @options = OptionParser.new do |opts|
13
+ opts.banner = "Usage: #{File.basename($0)} [-c|-s]"
14
+ opts.version = Perquackey::VERSION
14
15
  opts.separator ''
15
- opts.separator 'Specific options:'
16
16
 
17
- opts.on('-s', '--server [PORT]', 'Run a web server.') do |port|
17
+ opts.on('-c', '--console', 'Run an interactive console.') do
18
+ @mode = :console
19
+ end
20
+
21
+ opts.on('-s', '--server[=port]', 'Run an http server.') do |port|
18
22
  @mode = :server
19
23
  @port = port || 3000
20
24
  end
21
25
 
22
26
  opts.separator ''
23
- opts.separator 'Common options:'
24
-
25
- opts.on_tail('-h', '--help', 'Show this message.') do
26
- puts opts
27
- exit
28
- end
29
-
30
- opts.on_tail('-v', '--version', 'Print version and exit.') do
31
- puts "perquackey #{Perquackey::VERSION}"
32
- exit
33
- end
27
+ opts.separator 'Defaults:'
28
+ opts.separator "#{opts.summary_indent}#{@defaults.join(' ')}"
34
29
  end
35
30
  end
36
31
 
37
32
  def run!(argv)
38
- @options.parse!(argv)
33
+ begin
34
+ @options.parse(@defaults.dup.concat(argv))
35
+ rescue OptionParser::ParseError
36
+ @options.abort($!)
37
+ end
39
38
 
40
39
  case @mode
41
40
  when :console
@@ -0,0 +1,84 @@
1
+ .\" generated with Ronn/v0.5
2
+ .\" http://github.com/rtomayko/ronn/
3
+ .
4
+ .TH "PERQUACKEY" "1" "April 2010" "Matthew Todd" "RubyGems Manual"
5
+ .
6
+ .SH "NAME"
7
+ \fBperquackey\fR \-\- print a list of anagrams
8
+ .
9
+ .SH "SYNOPSIS"
10
+ \fBperquackey\fR
11
+ .
12
+ .br
13
+ \fBperquackey\fR \-\-server[=\fIport\fR]
14
+ .
15
+ .SH "DESCRIPTION"
16
+ \fBperquackey\fR prints a list of anagrams for a given letter set, arranged in
17
+ columns by length. It's designed as a companion to the Perquackey word game,
18
+ vindicating you on the tough rolls and taunting you when you're blind to the \fII\fR \fIN\fR \fIG\fR right in front of your nose. Use with caution.
19
+ .
20
+ .SH "OPTIONS"
21
+ By default, \fBperquackey\fR runs an interactive console for you to type in your
22
+ letters. You can change that with the following options:
23
+ .
24
+ .TP
25
+ \fB\-c\fR, \fB\-\-console\fR
26
+ Run an interactive console. Being the default mode, this option exists
27
+ purely for the sake of symmetry.
28
+ .
29
+ .TP
30
+ \fB\-s\fR, \fB\-\-server\fR[=\fIport\fR]
31
+ Run an http server. You can then type your letters in and see results at \fIhttp://localhost:port/\fR, where \fIport\fR defaults to \fI3000\fR.
32
+ .
33
+ .P
34
+ \fBperquackey\fR also responds to the following standard options:
35
+ .
36
+ .TP
37
+ \fB\-h\fR, \fB\-\-help\fR
38
+ Print a help message and exit.
39
+ .
40
+ .TP
41
+ \fB\-v\fR, \fB\-\-version\fR[=all]
42
+ Print \fBperquackey\fR's version number and exit. If \fB=all\fR is given, also
43
+ print version numbers of \fBperquackey\fR's dependencies. (This is standard \fBoptparse\fR behavior that deserves more attention!)
44
+ .
45
+ .SH "EXAMPLE"
46
+ Run an interactive console session, look up anagrams for "amwortixet," and exit:
47
+ .
48
+ .IP "" 4
49
+ .
50
+ .nf
51
+
52
+ $ perquackey
53
+ Type ctrl\-d or quit to exit.
54
+ > amwortixet
55
+ aim aero aimer attire omitter amoretti
56
+ air airt amort extort toxemia
57
+ ait amie armet imaret tritoma
58
+ ami amir axiom matier wartime
59
+ are atom axite matrix
60
+ arm emir extra matter
61
+ art emit irate ratite
62
+ ate exam ixora remixt
63
+ att exit mater rotate
64
+
65
+ (...and so on...)
66
+
67
+ > quit
68
+ Goodbye.
69
+ .
70
+ .fi
71
+ .
72
+ .IP "" 0
73
+ .
74
+ .SH "BUGS"
75
+ Anagrams are generated from an internal copy of TWL06, the standard accepted
76
+ word list at North American Scrabble tournaments. You're going to see some
77
+ weird ones. ("Ixora"?!)
78
+ .
79
+ .SH "AUTHOR"
80
+ Matthew Todd, \fI@matthewtodd\fR on GitHub and Twitter. Do drop me a line if you
81
+ use \fBperquackey\fR \-\- I'd love to hear from you!
82
+ .
83
+ .SH "SEE ALSO"
84
+ \fIhttp://en.wikipedia.org/wiki/Perquackey\fR, \fIhttp://en.wikipedia.org/wiki/Tournament_Word_List\fR, \fIhttp://perquackey.matthewtodd.org/\fR
@@ -0,0 +1,76 @@
1
+ perquackey(1) -- print a list of anagrams
2
+ =========================================
3
+
4
+ ## SYNOPSIS
5
+
6
+ `perquackey`
7
+ `perquackey` --server[=_port_]
8
+
9
+ ## DESCRIPTION
10
+
11
+ `perquackey` prints a list of anagrams for a given letter set, arranged in
12
+ columns by length. It's designed as a companion to the Perquackey word game,
13
+ vindicating you on the tough rolls and taunting you when you're blind to the
14
+ _I_ _N_ _G_ right in front of your nose. Use with caution.
15
+
16
+ ## OPTIONS
17
+
18
+ By default, `perquackey` runs an interactive console for you to type in your
19
+ letters. You can change that with the following options:
20
+
21
+ * `-c`, `--console`:
22
+ Run an interactive console. Being the default mode, this option exists
23
+ purely for the sake of symmetry.
24
+
25
+ * `-s`, `--server`[=_port_]:
26
+ Run an http server. You can then type your letters in and see results at
27
+ <http://localhost:port/>, where <port> defaults to _3000_.
28
+
29
+ `perquackey` also responds to the following standard options:
30
+
31
+ * `-h`, `--help`:
32
+ Print a help message and exit.
33
+
34
+ * `-v`, `--version`[=all]:
35
+ Print `perquackey`'s version number and exit. If `=all` is given, also
36
+ print version numbers of `perquackey`'s dependencies. (This is standard
37
+ `optparse` behavior that deserves more attention!)
38
+
39
+ ## EXAMPLE
40
+
41
+ Run an interactive console session, look up anagrams for "amwortixet," and exit:
42
+
43
+ $ perquackey
44
+ Type ctrl-d or quit to exit.
45
+ > amwortixet
46
+ aim aero aimer attire omitter amoretti
47
+ air airt amort extort toxemia
48
+ ait amie armet imaret tritoma
49
+ ami amir axiom matier wartime
50
+ are atom axite matrix
51
+ arm emir extra matter
52
+ art emit irate ratite
53
+ ate exam ixora remixt
54
+ att exit mater rotate
55
+
56
+ (...and so on...)
57
+
58
+ > quit
59
+ Goodbye.
60
+
61
+ ## BUGS
62
+
63
+ Anagrams are generated from an internal copy of TWL06, the standard accepted
64
+ word list at North American Scrabble tournaments. You're going to see some
65
+ weird ones. ("Ixora"?!)
66
+
67
+ ## AUTHOR
68
+
69
+ Matthew Todd, _@matthewtodd_ on GitHub and Twitter. Do drop me a line if you
70
+ use `perquackey` -- I'd love to hear from you!
71
+
72
+ ## SEE ALSO
73
+
74
+ <http://en.wikipedia.org/wiki/Perquackey>,
75
+ <http://en.wikipedia.org/wiki/Tournament_Word_List>,
76
+ <http://perquackey.matthewtodd.org/>
@@ -11,8 +11,10 @@ Gem::Specification.new do |spec|
11
11
  spec.email = 'matthew.todd@gmail.com'
12
12
  spec.homepage = 'http://github.com/matthewtodd/perquackey'
13
13
 
14
+ spec.required_ruby_version = '>= 1.8.7'
14
15
  spec.add_runtime_dependency 'sinatra'
15
16
  spec.add_development_dependency 'redgreen'
17
+ spec.add_development_dependency 'ronn'
16
18
  spec.add_development_dependency 'shoe'
17
19
 
18
20
  def spec.git_files(glob=nil)
@@ -1,6 +1,9 @@
1
- require 'perquackey'
2
1
  require 'test/unit'
2
+ require 'perquackey'
3
3
 
4
- if $stdout.tty?
5
- require 'redgreen'
4
+ begin
5
+ require 'redgreen' if $stdout.tty?
6
+ rescue LoadError
7
+ # It's nice not to have hard dependencies on any gems for testing, so that
8
+ # it's super-easy for your users to run `gem check --test perquackey.`
6
9
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 7
8
- - 1
9
- version: 0.7.1
8
+ - 2
9
+ version: 0.7.2
10
10
  platform: ruby
11
11
  authors:
12
12
  - Matthew Todd
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-04-16 00:00:00 +03:00
17
+ date: 2010-04-21 00:00:00 +03:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -42,7 +42,7 @@ dependencies:
42
42
  type: :development
43
43
  version_requirements: *id002
44
44
  - !ruby/object:Gem::Dependency
45
- name: shoe
45
+ name: ronn
46
46
  prerelease: false
47
47
  requirement: &id003 !ruby/object:Gem::Requirement
48
48
  requirements:
@@ -53,6 +53,18 @@ dependencies:
53
53
  version: "0"
54
54
  type: :development
55
55
  version_requirements: *id003
56
+ - !ruby/object:Gem::Dependency
57
+ name: shoe
58
+ prerelease: false
59
+ requirement: &id004 !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ segments:
64
+ - 0
65
+ version: "0"
66
+ type: :development
67
+ version_requirements: *id004
56
68
  description: Provides console session and simple webapp for looking up Perquackey word matches
57
69
  email: matthew.todd@gmail.com
58
70
  executables:
@@ -67,6 +79,7 @@ files:
67
79
  - .gitignore
68
80
  - CHANGELOG.rdoc
69
81
  - Gemfile
82
+ - Gemfile.lock
70
83
  - README.rdoc
71
84
  - Rakefile
72
85
  - TODO.rdoc
@@ -83,6 +96,8 @@ files:
83
96
  - lib/perquackey/game.rb
84
97
  - lib/perquackey/server.rb
85
98
  - lib/perquackey/word_table.rb
99
+ - man/perquackey.1
100
+ - man/perquackey.1.ronn
86
101
  - perquackey.gemspec
87
102
  - test/dictionary_test.rb
88
103
  - test/helper.rb
@@ -96,7 +111,7 @@ rdoc_options:
96
111
  - --main
97
112
  - README.rdoc
98
113
  - --title
99
- - perquackey-0.7.1
114
+ - perquackey-0.7.2
100
115
  - --inline-source
101
116
  require_paths:
102
117
  - lib
@@ -105,8 +120,10 @@ required_ruby_version: !ruby/object:Gem::Requirement
105
120
  - - ">="
106
121
  - !ruby/object:Gem::Version
107
122
  segments:
108
- - 0
109
- version: "0"
123
+ - 1
124
+ - 8
125
+ - 7
126
+ version: 1.8.7
110
127
  required_rubygems_version: !ruby/object:Gem::Requirement
111
128
  requirements:
112
129
  - - ">="