dragongoserver 0.3.1 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.dgs_default_add_game.yml +16 -0
- data/History.txt +5 -0
- data/Manifest.txt +60 -0
- data/README.txt +32 -28
- data/Rakefile +37 -0
- data/bin/dgs +14 -1
- data/bin/dragongoserver +8 -0
- data/lib/dragongoserver/dragongoserver.rb +132 -2
- data/lib/dragongoserver.rb +46 -6
- data/spec/dragongoserver_spec.rb +7 -0
- data/spec/spec_helper.rb +16 -0
- data/tasks/ann.rake +80 -0
- data/tasks/bones.rake +20 -0
- data/tasks/gem.rake +201 -0
- data/tasks/git.rake +40 -0
- data/tasks/notes.rake +27 -0
- data/tasks/post_load.rake +34 -0
- data/tasks/rdoc.rake +51 -0
- data/tasks/rubyforge.rake +55 -0
- data/tasks/setup.rb +292 -0
- data/tasks/spec.rake +54 -0
- data/tasks/svn.rake +47 -0
- data/tasks/test.rake +40 -0
- data/tasks/zentest.rake +36 -0
- data/test/.test_dragongoserver.rb.swp +0 -0
- data/test/test_dragongoserver.rb +90 -90
- data/test/test_helper.rb +1 -1
- metadata +52 -18
- data/lib/dragongoserver/game.rb +0 -10
- data/lib/dragongoserver/version.rb +0 -9
@@ -0,0 +1,16 @@
|
|
1
|
+
---
|
2
|
+
:number_of_games: 3
|
3
|
+
:size: 19
|
4
|
+
:main_time:
|
5
|
+
- 15
|
6
|
+
- :days
|
7
|
+
:japanese_byoyomi:
|
8
|
+
- 1
|
9
|
+
- :hours
|
10
|
+
- 24
|
11
|
+
- :extra_periods
|
12
|
+
:rated_game: true
|
13
|
+
:clock_runs_on_weekend: false
|
14
|
+
:require_rated_opponent: true
|
15
|
+
:relative_range: 9
|
16
|
+
:comment: added by dragongoserver ruby gem
|
data/History.txt
CHANGED
data/Manifest.txt
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
History.txt
|
2
|
+
License.txt
|
3
|
+
Manifest.txt
|
4
|
+
PostInstall.txt
|
5
|
+
README.rdoc
|
6
|
+
README.txt
|
7
|
+
Rakefile
|
8
|
+
TODO
|
9
|
+
bin/dgs
|
10
|
+
config/hoe.rb
|
11
|
+
config/requirements.rb
|
12
|
+
examples/example1.rb
|
13
|
+
examples/id.dat
|
14
|
+
examples/userlist.out
|
15
|
+
examples/userlist.rb
|
16
|
+
examples/userlist2.rb
|
17
|
+
lib/dragongoserver.rb
|
18
|
+
lib/dragongoserver/dragongoserver.rb
|
19
|
+
lib/dragongoserver/game.rb
|
20
|
+
lib/dragongoserver/version.rb
|
21
|
+
log/debug.log
|
22
|
+
pkg/dragongoserver-0.3.0.gem
|
23
|
+
pkg/dragongoserver-0.3.0.tgz
|
24
|
+
pkg/dragongoserver-0.3.0/History.txt
|
25
|
+
pkg/dragongoserver-0.3.0/License.txt
|
26
|
+
pkg/dragongoserver-0.3.0/Manifest.txt
|
27
|
+
pkg/dragongoserver-0.3.0/README.txt
|
28
|
+
pkg/dragongoserver-0.3.0/Rakefile
|
29
|
+
pkg/dragongoserver-0.3.0/bin/dgs
|
30
|
+
pkg/dragongoserver-0.3.0/config/hoe.rb
|
31
|
+
pkg/dragongoserver-0.3.0/config/requirements.rb
|
32
|
+
pkg/dragongoserver-0.3.0/examples/example1.rb
|
33
|
+
pkg/dragongoserver-0.3.0/lib/dragongoserver.rb
|
34
|
+
pkg/dragongoserver-0.3.0/lib/dragongoserver/dragongoserver.rb
|
35
|
+
pkg/dragongoserver-0.3.0/lib/dragongoserver/game.rb
|
36
|
+
pkg/dragongoserver-0.3.0/lib/dragongoserver/version.rb
|
37
|
+
pkg/dragongoserver-0.3.0/log/debug.log
|
38
|
+
pkg/dragongoserver-0.3.0/script/destroy
|
39
|
+
pkg/dragongoserver-0.3.0/script/generate
|
40
|
+
pkg/dragongoserver-0.3.0/setup.rb
|
41
|
+
pkg/dragongoserver-0.3.0/tasks/deployment.rake
|
42
|
+
pkg/dragongoserver-0.3.0/tasks/environment.rake
|
43
|
+
pkg/dragongoserver-0.3.0/tasks/website.rake
|
44
|
+
pkg/dragongoserver-0.3.0/test/test_dragongoserver.rb
|
45
|
+
pkg/dragongoserver-0.3.0/test/test_helper.rb
|
46
|
+
script/console
|
47
|
+
script/destroy
|
48
|
+
script/generate
|
49
|
+
script/txt2html
|
50
|
+
setup.rb
|
51
|
+
tasks/deployment.rake
|
52
|
+
tasks/environment.rake
|
53
|
+
tasks/website.rake
|
54
|
+
test/test_dragongoserver.rb
|
55
|
+
test/test_helper.rb
|
56
|
+
website/index.html
|
57
|
+
website/index.txt
|
58
|
+
website/javascripts/rounded_corners_lite.inc.js
|
59
|
+
website/stylesheets/screen.css
|
60
|
+
website/template.rhtml
|
data/README.txt
CHANGED
@@ -1,44 +1,48 @@
|
|
1
|
-
|
1
|
+
dragongoserver
|
2
|
+
by Thomas Preymesser
|
3
|
+
http://dragongoserver.rubyforge.org/
|
2
4
|
|
3
|
-
|
4
|
-
require 'dragongoserver'
|
5
|
-
require 'gorank'
|
5
|
+
== DESCRIPTION:
|
6
6
|
|
7
|
-
|
7
|
+
The dragongoserver gem allows you to use the Go Server (http://www.dragongoserver.net) from ruby programs.
|
8
8
|
|
9
|
-
|
9
|
+
== FEATURES/PROBLEMS:
|
10
10
|
|
11
|
-
|
12
|
-
puts "your user-id: #{id}"
|
11
|
+
* test (list of features or problems)
|
13
12
|
|
14
|
-
|
13
|
+
== SYNOPSIS:
|
15
14
|
|
16
|
-
|
15
|
+
test (code sample of usage)
|
17
16
|
|
18
|
-
|
19
|
-
p rank.to_s
|
17
|
+
== REQUIREMENTS:
|
20
18
|
|
21
|
-
|
19
|
+
* test (list of requirements)
|
22
20
|
|
23
|
-
|
21
|
+
== INSTALL:
|
24
22
|
|
25
|
-
|
26
|
-
p infos
|
23
|
+
* sudo gem install dragongoserver
|
27
24
|
|
28
|
-
|
25
|
+
== LICENSE:
|
29
26
|
|
30
|
-
|
27
|
+
(The MIT License)
|
31
28
|
|
32
|
-
|
33
|
-
p wg
|
29
|
+
Copyright (c) 2007,2008,2009
|
34
30
|
|
31
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
32
|
+
a copy of this software and associated documentation files (the
|
33
|
+
'Software'), to deal in the Software without restriction, including
|
34
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
35
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
36
|
+
permit persons to whom the Software is furnished to do so, subject to
|
37
|
+
the following conditions:
|
35
38
|
|
36
|
-
|
37
|
-
|
38
|
-
user_8000 = dgs.userinfo(8000)
|
39
|
+
The above copyright notice and this permission notice shall be
|
40
|
+
included in all copies or substantial portions of the Software.
|
39
41
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
42
|
+
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
43
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
44
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
45
|
+
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
46
|
+
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
47
|
+
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
48
|
+
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/Rakefile
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
# Look in the tasks/setup.rb file for the various options that can be
|
2
|
+
# configured in this Rakefile. The .rake files in the tasks directory
|
3
|
+
# are where the options are used.
|
4
|
+
|
5
|
+
begin
|
6
|
+
require 'bones'
|
7
|
+
Bones.setup
|
8
|
+
rescue LoadError
|
9
|
+
begin
|
10
|
+
load 'tasks/setup.rb'
|
11
|
+
rescue LoadError
|
12
|
+
raise RuntimeError, '### please install the "bones" gem ###'
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
ensure_in_path 'lib'
|
17
|
+
require 'dragongoserver'
|
18
|
+
|
19
|
+
task :default => 'spec:run'
|
20
|
+
|
21
|
+
PROJ.name = 'dragongoserver'
|
22
|
+
PROJ.authors = 'Thomas Preymesser'
|
23
|
+
PROJ.email = 'thopre@gmail.com'
|
24
|
+
PROJ.url = 'http://dragongoserver.rubyforge.org/'
|
25
|
+
PROJ.version = Dragongoserver::VERSION
|
26
|
+
PROJ.rubyforge.name = 'dragongoserver'
|
27
|
+
PROJ.gem.executables = ['dgs']
|
28
|
+
PROJ.gem.dependencies = [
|
29
|
+
['mechanize', '>= 0.9.2'],
|
30
|
+
['go-rank', '>= 0.0.1'],
|
31
|
+
['choice', '>= 0.1.2'],
|
32
|
+
['hpricot', '>= 0.6'],
|
33
|
+
]
|
34
|
+
|
35
|
+
PROJ.spec.opts << '--color'
|
36
|
+
|
37
|
+
# EOF
|
data/bin/dgs
CHANGED
@@ -5,7 +5,7 @@ require 'rubygems'
|
|
5
5
|
require 'dragongoserver'
|
6
6
|
require 'choice'
|
7
7
|
|
8
|
-
version = Dragongoserver::VERSION
|
8
|
+
version = Dragongoserver::VERSION
|
9
9
|
Choice.options do
|
10
10
|
# header ''
|
11
11
|
# header 'Specific options:'
|
@@ -91,6 +91,12 @@ Choice.options do
|
|
91
91
|
default 1
|
92
92
|
end
|
93
93
|
|
94
|
+
option :add_game do
|
95
|
+
short '-a'
|
96
|
+
long '--add-game'
|
97
|
+
desc 'Add a new game in the waiting room'
|
98
|
+
end
|
99
|
+
|
94
100
|
end
|
95
101
|
|
96
102
|
if Choice.choices['check_timeout_finished']
|
@@ -121,6 +127,7 @@ opt_finished_games = Choice.choices['finished_games'] # true/false
|
|
121
127
|
$opt_with_name = Choice.choices['with_name'] # true/false
|
122
128
|
@opt_osd = Choice.choices['osd'] # true/false
|
123
129
|
opt_waitingloop = Choice.choices['waitingloop'] # true/false
|
130
|
+
opt_add_game = Choice.choices['add_game'] # true/false
|
124
131
|
if opt_waiting
|
125
132
|
dgs = Dgs.new
|
126
133
|
waiting_games = dgs.waiting_games
|
@@ -322,3 +329,9 @@ if opt_waitingloop
|
|
322
329
|
end
|
323
330
|
|
324
331
|
end
|
332
|
+
|
333
|
+
if opt_add_game
|
334
|
+
dgs = Dgs.new
|
335
|
+
dgs.add_game
|
336
|
+
puts "1 Game(s) added to the waiting room"
|
337
|
+
end
|
data/bin/dragongoserver
ADDED
@@ -5,10 +5,17 @@ require 'hpricot'
|
|
5
5
|
#require 'pp'
|
6
6
|
|
7
7
|
class Dgs
|
8
|
+
# text if not logged in
|
8
9
|
LOGGED_IN="Sorry, you have to be logged in to do that"
|
10
|
+
# your turn message
|
9
11
|
YOUR_TURN="Your turn to move in the following games"
|
12
|
+
# DGS Status page
|
10
13
|
DGS_STATUS_PAGE = 'http://www.dragongoserver.net/status.php/'
|
14
|
+
# DGS Index page
|
11
15
|
DGS_INDEX_PAGE = 'http://www.dragongoserver.net/index.php'
|
16
|
+
# DGS Waiting room page
|
17
|
+
DGS_WAITING_ROOM_PAGE = 'http://www.dragongoserver.net/waiting_room.php'
|
18
|
+
# User agent
|
12
19
|
USER_AGENT_ALIAS = 'Mac Safari' # should work with every browser type
|
13
20
|
|
14
21
|
SAVE_WAIT = 15 # wait n seconds before each request
|
@@ -196,9 +203,9 @@ class Dgs
|
|
196
203
|
form.sf1 = user_id.to_s
|
197
204
|
|
198
205
|
page = agent.submit(form)
|
199
|
-
# page = agent.click page.links.text("#{user_id}")
|
206
|
+
# page = agent.click page.links.text("#{user_id}")
|
200
207
|
page = agent.click page.link_with(:text => "#{user_id}")
|
201
|
-
# page = agent.click page.links.text("Show finished games")
|
208
|
+
# page = agent.click page.links.text("Show finished games")
|
202
209
|
page = agent.click page.link_with(:text => "Show finished games")
|
203
210
|
end
|
204
211
|
if !page.body.include?("Finished games for")
|
@@ -447,6 +454,129 @@ Time remaining: 9 days and 6 hours</td>
|
|
447
454
|
def games
|
448
455
|
[4,5,6]
|
449
456
|
end
|
457
|
+
|
458
|
+
# Create one or more games in the waiting room
|
459
|
+
# Default values are taken from the file
|
460
|
+
# ~/.dgs_default_add_game.yml if it exists
|
461
|
+
# (if not the DGS form is just submitted)
|
462
|
+
def add_game
|
463
|
+
dgs_default_add_game = File.join(ENV['HOME'],".dgs_default_add_game.yml")
|
464
|
+
save_wait
|
465
|
+
my_rank = get_rank
|
466
|
+
my_rank_org = my_rank.dup
|
467
|
+
|
468
|
+
@waiting_room = DGS_WAITING_ROOM_PAGE
|
469
|
+
agent = WWW::Mechanize.new
|
470
|
+
agent.user_agent_alias = USER_AGENT_ALIAS
|
471
|
+
default_default_comment = 'added by dragongoserver ruby gem'
|
472
|
+
#--
|
473
|
+
# default = {
|
474
|
+
# :number_of_games => 3,
|
475
|
+
# :size => 19,
|
476
|
+
# :main_time => [15, :days], # or: :main_time => [15, :days]
|
477
|
+
# # or: :main_time => [24, :hours]
|
478
|
+
# # or: :main_time => [6, :months]
|
479
|
+
# :japanese_byoyomi => [1, :hours, 24, :extra_periods],
|
480
|
+
# # :canadian_byoyomi => false
|
481
|
+
# # :fischer_time => false
|
482
|
+
#
|
483
|
+
# :rated_game => true,
|
484
|
+
# :clock_runs_on_weekend => false,
|
485
|
+
# :require_rated_opponent => true,
|
486
|
+
# :relative_range => 9,
|
487
|
+
# :comment => default_default_comment,
|
488
|
+
# }
|
489
|
+
# open(File.join(ENV['HOME'],".dgs_default_add_game.yml"),"w") { |f|
|
490
|
+
# YAML.dump(default,f)
|
491
|
+
# }
|
492
|
+
begin
|
493
|
+
default = open(File.join(ENV['HOME'],".dgs_default_add_game.yml")) { |f|
|
494
|
+
YAML.load(f)
|
495
|
+
}
|
496
|
+
rescue Errno::ENOENT
|
497
|
+
# Datei nicht vorhanden.
|
498
|
+
# Auch nicht schlimm, dann nehmen wir die Default-Werte von DGS
|
499
|
+
end
|
500
|
+
#--
|
501
|
+
page = agent.get(@waiting_room)
|
502
|
+
if page.body.include?(LOGGED_IN)
|
503
|
+
# dann erst zum Einloggen gehen
|
504
|
+
page = login(agent)
|
505
|
+
page = agent.get(DGS_WAITING_ROOM_PAGE)
|
506
|
+
end
|
507
|
+
form = page.form("addgame")
|
508
|
+
if default
|
509
|
+
# wenn default Konfiguration nicht vorhanden,
|
510
|
+
# dann Formular in DGS einfach so lassen und bestätigen
|
511
|
+
# => 1 Spiel, 3 Monate, ...
|
512
|
+
if default[:number_of_games]
|
513
|
+
form.fields.find {|f| f.name == 'nrGames'}.value = default[:number_of_games]
|
514
|
+
end
|
515
|
+
if default[:size]
|
516
|
+
form.fields.find {|f| f.name == 'size'}.value = default[:size]
|
517
|
+
end
|
518
|
+
if default[:main_time]
|
519
|
+
form.fields.find {|f| f.name == 'timevalue'}.value = default[:main_time][0]
|
520
|
+
form.fields.find {|f| f.name == 'timeunit'}.value = default[:main_time][1].to_s
|
521
|
+
end
|
522
|
+
if default[:japanese_byoyomi]
|
523
|
+
# form.radiobuttons_with(:name => 'box')[1].check
|
524
|
+
|
525
|
+
form.radiobuttons_with(:name => 'byoyomitype')[0].check #e = 'JAP'
|
526
|
+
form.fields.find {|f| f.name == 'byotimevalue_jap'}.value =
|
527
|
+
default[:japanese_byoyomi][0]
|
528
|
+
form.fields.find {|f| f.name == 'timeunit_jap'}.value =
|
529
|
+
default[:japanese_byoyomi][1].to_s
|
530
|
+
form.fields.find {|f| f.name == 'byoperiods_jap'}.value =
|
531
|
+
default[:japanese_byoyomi][2]
|
532
|
+
# :japanese_byoyomi => [1, :hours, 24, :extra_periods],
|
533
|
+
|
534
|
+
end
|
535
|
+
|
536
|
+
|
537
|
+
if default[:comment]
|
538
|
+
form.fields.find {|f| f.name == 'comment'}.value = default[:comment]
|
539
|
+
end
|
540
|
+
if default[:require_rated_opponent]
|
541
|
+
form.checkbox_with(:name => 'must_be_rated').check
|
542
|
+
else
|
543
|
+
form.checkbox_with(:name => 'must_be_rated').uncheck
|
544
|
+
end
|
545
|
+
if default[:clock_runs_on_weekend]
|
546
|
+
form.checkbox_with(:name => 'weekendclock').check
|
547
|
+
else
|
548
|
+
form.checkbox_with(:name => 'weekendclock').uncheck
|
549
|
+
end
|
550
|
+
if default[:rated_game]
|
551
|
+
form.checkbox_with(:name => 'rated').check
|
552
|
+
else
|
553
|
+
form.checkbox_with(:name => 'rated').uncheck
|
554
|
+
end
|
555
|
+
if default[:relative_range]
|
556
|
+
r = default[:relative_range]
|
557
|
+
begin
|
558
|
+
rating1 = my_rank - r
|
559
|
+
rescue IndexError
|
560
|
+
rating1 = GoRank.new 30, :kyu
|
561
|
+
end
|
562
|
+
my_rank = my_rank_org
|
563
|
+
begin
|
564
|
+
rating2 = my_rank + r
|
565
|
+
rescue IndexError
|
566
|
+
rating2 = GoRank.new 6, :dan # go-rank max 6 dan, dgs max 9 dan TODO:
|
567
|
+
end
|
568
|
+
form.fields.find {|f| f.name == 'rating1'}.value = rating1.to_s
|
569
|
+
form.fields.find {|f| f.name == 'rating2'}.value = rating2.to_s
|
570
|
+
end
|
571
|
+
end # if default
|
572
|
+
unless default
|
573
|
+
form.fields.find {|f| f.name == 'comment'}.value = default_default_comment
|
574
|
+
end
|
575
|
+
page = agent.submit(form, form.buttons.first)
|
576
|
+
# puts "neue Einladung erstellt" if page.body.include? 'Game added!'
|
577
|
+
|
578
|
+
page.body.include? 'Game added!'
|
579
|
+
end
|
450
580
|
|
451
581
|
private
|
452
582
|
|
data/lib/dragongoserver.rb
CHANGED
@@ -1,9 +1,49 @@
|
|
1
|
-
$:.unshift(File.dirname(__FILE__)) unless
|
2
|
-
$:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
|
3
1
|
|
4
2
|
module Dragongoserver
|
5
|
-
end
|
6
3
|
|
7
|
-
|
8
|
-
|
9
|
-
|
4
|
+
# :stopdoc:
|
5
|
+
VERSION = '0.4.0'
|
6
|
+
LIBPATH = ::File.expand_path(::File.dirname(__FILE__)) + ::File::SEPARATOR
|
7
|
+
PATH = ::File.dirname(LIBPATH) + ::File::SEPARATOR
|
8
|
+
# :startdoc:
|
9
|
+
|
10
|
+
# Returns the version string for the library.
|
11
|
+
#
|
12
|
+
def self.version
|
13
|
+
VERSION
|
14
|
+
end
|
15
|
+
|
16
|
+
# Returns the library path for the module. If any arguments are given,
|
17
|
+
# they will be joined to the end of the libray path using
|
18
|
+
# <tt>File.join</tt>.
|
19
|
+
#
|
20
|
+
def self.libpath( *args )
|
21
|
+
args.empty? ? LIBPATH : ::File.join(LIBPATH, args.flatten)
|
22
|
+
end
|
23
|
+
|
24
|
+
# Returns the lpath for the module. If any arguments are given,
|
25
|
+
# they will be joined to the end of the path using
|
26
|
+
# <tt>File.join</tt>.
|
27
|
+
#
|
28
|
+
def self.path( *args )
|
29
|
+
args.empty? ? PATH : ::File.join(PATH, args.flatten)
|
30
|
+
end
|
31
|
+
|
32
|
+
# Utility method used to require all files ending in .rb that lie in the
|
33
|
+
# directory below this file that has the same name as the filename passed
|
34
|
+
# in. Optionally, a specific _directory_ name can be passed in such that
|
35
|
+
# the _filename_ does not have to be equivalent to the directory.
|
36
|
+
#
|
37
|
+
def self.require_all_libs_relative_to( fname, dir = nil )
|
38
|
+
dir ||= ::File.basename(fname, '.*')
|
39
|
+
search_me = ::File.expand_path(
|
40
|
+
::File.join(::File.dirname(fname), dir, '**', '*.rb'))
|
41
|
+
|
42
|
+
Dir.glob(search_me).sort.each {|rb| require rb}
|
43
|
+
end
|
44
|
+
|
45
|
+
end # module Dragongoserver
|
46
|
+
|
47
|
+
Dragongoserver.require_all_libs_relative_to(__FILE__)
|
48
|
+
|
49
|
+
# EOF
|