myrurema 0.0.3 → 0.0.4
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.
- data/VERSION +1 -1
- data/bin/rurema +1 -201
- data/main.rb +19 -0
- data/spec/commands.rb +68 -0
- data/src/myrurema.rb +205 -0
- metadata +9 -6
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.4
|
data/bin/rurema
CHANGED
@@ -1,204 +1,4 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
require
|
3
|
-
require 'pathname'
|
4
|
-
require 'shellwords'
|
5
|
-
|
6
|
-
class Pathname; alias / +; end
|
7
|
-
|
8
|
-
class Options
|
9
|
-
def initialize(argv)
|
10
|
-
@command = nil
|
11
|
-
@open_browser = false
|
12
|
-
@port = nil
|
13
|
-
@dry_run = false
|
14
|
-
@ruremadir = Pathname("~/.rurema").expand_path
|
15
|
-
@rubyver = RUBY_VERSION
|
16
|
-
@query = ""
|
17
|
-
|
18
|
-
@optionparser = OptionParser.new{|o|
|
19
|
-
o.on("--init",
|
20
|
-
"initialize rurema"){
|
21
|
-
@command = :init
|
22
|
-
}
|
23
|
-
o.on("--update",
|
24
|
-
"update documents and database"){
|
25
|
-
@command = :update
|
26
|
-
}
|
27
|
-
o.on("--server",
|
28
|
-
"start web server"){
|
29
|
-
@command = :server
|
30
|
-
}
|
31
|
-
|
32
|
-
o.on("--port=N",
|
33
|
-
"port number of the web browser (only meaningful with --server)"){|n|
|
34
|
-
@port = n.to_i
|
35
|
-
}
|
36
|
-
o.on("--browser",
|
37
|
-
"open web browser (only meaningful with --server)"){
|
38
|
-
@open_browser = true
|
39
|
-
}
|
40
|
-
o.on("--dry-run",
|
41
|
-
"show commands only"){
|
42
|
-
@dry_run = true
|
43
|
-
}
|
44
|
-
o.on("--ruremadir=PATH",
|
45
|
-
"specify rurema directory (default: #{@ruremadir})"){|path|
|
46
|
-
@ruremadir = Pathname(path)
|
47
|
-
}
|
48
|
-
o.on("--rubyver=STR",
|
49
|
-
"specify Ruby version (default: #{@rubyver})"){|str|
|
50
|
-
@rubyver = str
|
51
|
-
}
|
52
|
-
o.on("--version",
|
53
|
-
"show version of myrurema"){
|
54
|
-
puts MyRurema::VERSION
|
55
|
-
exit
|
56
|
-
}
|
57
|
-
o.on("--help",
|
58
|
-
"show this message"){
|
59
|
-
puts o
|
60
|
-
exit
|
61
|
-
}
|
62
|
-
}
|
63
|
-
@query, @num = @optionparser.parse(argv)
|
64
|
-
@query = "" if @query.nil?
|
65
|
-
@num = @num.to_i if @num
|
66
|
-
end
|
67
|
-
attr_reader :dry_run, :ruremadir, :rubyver, :open_browser
|
68
|
-
attr_reader :command, :query, :num, :port
|
69
|
-
|
70
|
-
def usage
|
71
|
-
puts @optionparser
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
|
-
class MyRurema
|
76
|
-
VERSION = File.read((Pathname(__FILE__).dirname/"../VERSION").expand_path)
|
77
|
-
SVN_URL = "http://jp.rubyist.net/svn/rurema"
|
78
|
-
|
79
|
-
def initialize(opt=Options.new(ARGV))
|
80
|
-
@opt = opt
|
81
|
-
end
|
82
|
-
|
83
|
-
def run
|
84
|
-
case
|
85
|
-
when @opt.command
|
86
|
-
send(@opt.command)
|
87
|
-
when @opt.query.empty?
|
88
|
-
@opt.usage
|
89
|
-
when @opt.num
|
90
|
-
search_num(@opt.query, @opt.num, @opt.rubyver)
|
91
|
-
else
|
92
|
-
search(@opt.query, @opt.rubyver)
|
93
|
-
end
|
94
|
-
end
|
95
|
-
|
96
|
-
def init
|
97
|
-
sh "svn co -rHEAD #{SVN_URL}/doctree/trunk #{doctree_path}"
|
98
|
-
sh "svn co -rHEAD #{SVN_URL}/bitclust/trunk #{bitclust_path}"
|
99
|
-
init_db(@opt.rubyver)
|
100
|
-
end
|
101
|
-
|
102
|
-
def update
|
103
|
-
sh "svn up #{doctree_path}"
|
104
|
-
refresh_db(@opt.rubyver)
|
105
|
-
end
|
106
|
-
|
107
|
-
def search(query, ver)
|
108
|
-
should_have_db(ver)
|
109
|
-
|
110
|
-
sh "#{bitclust_path/'bin/refe.rb'}" +
|
111
|
-
" #{Shellwords.escape query} -d #{db_path(ver)}", :silent => true
|
112
|
-
end
|
113
|
-
|
114
|
-
def search_num(query, num, ver)
|
115
|
-
should_have_db(ver)
|
116
|
-
|
117
|
-
result = `#{bitclust_path/'bin/refe.rb'} #{query} -d #{db_path(ver)}`
|
118
|
-
word = result.split[num-1]
|
119
|
-
if word
|
120
|
-
word.gsub!(/\.#/, ".") # avoid multi-hit for a module function
|
121
|
-
puts "searching #{word}"
|
122
|
-
search(word, ver)
|
123
|
-
else
|
124
|
-
error "less than #{num} entries found"
|
125
|
-
end
|
126
|
-
end
|
127
|
-
|
128
|
-
def server
|
129
|
-
port = @opt.port || default_port(@opt.rubyver)
|
130
|
-
th = Thread.new{
|
131
|
-
sh "#{bitclust_path/'standalone.rb'}" +
|
132
|
-
" --baseurl=http://localhost:#{port}" +
|
133
|
-
" --port=#{port}" +
|
134
|
-
" --database=#{db_path(@opt.rubyver)}" +
|
135
|
-
" --debug"
|
136
|
-
}
|
137
|
-
if @opt.open_browser
|
138
|
-
sleep 1 # wait for the server to start
|
139
|
-
cmd = (/mswin/ =~ RUBY_PLATFORM) ? "start" : "open"
|
140
|
-
sh "#{cmd} http://localhost:#{port}/view/"
|
141
|
-
end
|
142
|
-
th.join
|
143
|
-
end
|
144
|
-
|
145
|
-
private
|
146
|
-
|
147
|
-
def default_port(ver)
|
148
|
-
"10" + ver.scan(/\d/).join
|
149
|
-
end
|
150
|
-
|
151
|
-
def init_db(ver)
|
152
|
-
sh "#{bitclust_path/'bin/bitclust.rb'}" +
|
153
|
-
" -d #{db_path(ver)} init version=#{ver} encoding=euc-jp"
|
154
|
-
|
155
|
-
refresh_db(ver)
|
156
|
-
end
|
157
|
-
|
158
|
-
def refresh_db(ver)
|
159
|
-
puts "Updating Rurema database:"
|
160
|
-
puts "This will take a few minutes. Please be patient."
|
161
|
-
sh "#{bitclust_path/'bin/bitclust.rb'}" +
|
162
|
-
" -d #{db_path(ver)}" +
|
163
|
-
" update --stdlibtree=#{doctree_path/'refm/api/src'}"
|
164
|
-
end
|
165
|
-
|
166
|
-
def bitclust_path
|
167
|
-
@opt.ruremadir / "bitclust"
|
168
|
-
end
|
169
|
-
|
170
|
-
def doctree_path
|
171
|
-
@opt.ruremadir / "doctree"
|
172
|
-
end
|
173
|
-
|
174
|
-
def should_have_db(ver)
|
175
|
-
unless has_db?(ver)
|
176
|
-
puts "You don't have a database for ruby #{ver}."
|
177
|
-
puts "Make it now? [y/n]"
|
178
|
-
if $stdin.gets.chomp.downcase == "y"
|
179
|
-
init_db(ver)
|
180
|
-
else
|
181
|
-
exit
|
182
|
-
end
|
183
|
-
end
|
184
|
-
end
|
185
|
-
|
186
|
-
def has_db?(ver)
|
187
|
-
db_path(ver).directory?
|
188
|
-
end
|
189
|
-
|
190
|
-
def db_path(ver)
|
191
|
-
@opt.ruremadir / "db" / ver
|
192
|
-
end
|
193
|
-
|
194
|
-
def sh(cmd, opt={})
|
195
|
-
puts cmd unless opt[:silent]
|
196
|
-
system cmd unless @opt.dry_run
|
197
|
-
end
|
198
|
-
|
199
|
-
def error(msg)
|
200
|
-
$stderr.puts msg
|
201
|
-
end
|
202
|
-
end
|
2
|
+
require File.expand_path("../src/myrurema", File.dirname(__FILE__))
|
203
3
|
|
204
4
|
MyRurema.new.run
|
data/main.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'pathname'
|
3
|
+
require 'rubygems'
|
4
|
+
require 'ruby-station'; RubyStation.parse_argv
|
5
|
+
require File.expand_path("src/myrurema", File.dirname(__FILE__))
|
6
|
+
|
7
|
+
opt = Options.new(ARGV)
|
8
|
+
ruremadir = Pathname(RubyStation.data_dir)
|
9
|
+
|
10
|
+
if ruremadir.entries.size == 2
|
11
|
+
opt.command = :init
|
12
|
+
opt.ruremadir = RubyStation.data_dir
|
13
|
+
MyRurema.new(opt).run
|
14
|
+
end
|
15
|
+
|
16
|
+
opt.command = :server
|
17
|
+
opt.ruremadir = RubyStation.data_dir
|
18
|
+
opt.port = RubyStation.port
|
19
|
+
MyRurema.new(opt).run
|
data/spec/commands.rb
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
require File.expand_path("../src/myrurema", File.dirname(__FILE__))
|
2
|
+
|
3
|
+
class MyRurema
|
4
|
+
def sh(cmd, opt={})
|
5
|
+
@cmds ||= []
|
6
|
+
@cmds << cmd
|
7
|
+
end
|
8
|
+
attr_reader :cmds
|
9
|
+
end
|
10
|
+
|
11
|
+
CASES = {
|
12
|
+
"rurema --init" => [
|
13
|
+
%r{svn co .*doctree},
|
14
|
+
%r{svn co .*bitclust},
|
15
|
+
%r{bitclust.*init},
|
16
|
+
%r{bitclust.*update},
|
17
|
+
],
|
18
|
+
|
19
|
+
"rurema --init --rubyver=1.8.7" => [
|
20
|
+
%r{bitclust.*init version=1.8.7}
|
21
|
+
],
|
22
|
+
|
23
|
+
"rurema --init --ruremadir=/tmp" => [
|
24
|
+
%r{svn co .*/tmp}
|
25
|
+
],
|
26
|
+
|
27
|
+
"rurema --update" => [
|
28
|
+
%r{svn up},
|
29
|
+
%r{bitclust.*update}
|
30
|
+
],
|
31
|
+
|
32
|
+
"rurema Array" => [
|
33
|
+
%r{refe.*Array},
|
34
|
+
],
|
35
|
+
|
36
|
+
"rurema --server" => [
|
37
|
+
%r{standalone},
|
38
|
+
],
|
39
|
+
|
40
|
+
"rurema --server --port=9898" => [
|
41
|
+
%r{standalone.*--port=9898},
|
42
|
+
],
|
43
|
+
|
44
|
+
"rurema --server --browser" => [
|
45
|
+
%r{standalone},
|
46
|
+
%r{(start|open) http://localhost:}
|
47
|
+
],
|
48
|
+
}
|
49
|
+
|
50
|
+
describe MyRurema do
|
51
|
+
it "should execute expected commands" do
|
52
|
+
CASES.each do |command, expects|
|
53
|
+
opt = Options.new(command.split[1..-1])
|
54
|
+
my = MyRurema.new(opt)
|
55
|
+
my.run
|
56
|
+
|
57
|
+
cmds = my.cmds
|
58
|
+
i = 0
|
59
|
+
expects.each do |pattern|
|
60
|
+
pattern.should satisfy{
|
61
|
+
i = cmds[i..-1].index{|cmd| pattern =~ cmd}
|
62
|
+
not i.nil?
|
63
|
+
}
|
64
|
+
i += 1
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
data/src/myrurema.rb
ADDED
@@ -0,0 +1,205 @@
|
|
1
|
+
require 'optparse'
|
2
|
+
require 'pathname'
|
3
|
+
require 'shellwords'
|
4
|
+
|
5
|
+
class Pathname; alias / +; end
|
6
|
+
|
7
|
+
class Options
|
8
|
+
def initialize(argv)
|
9
|
+
@command = nil
|
10
|
+
@open_browser = false
|
11
|
+
@port = nil
|
12
|
+
@dry_run = false
|
13
|
+
@ruremadir = Pathname("~/.rurema").expand_path
|
14
|
+
@rubyver = RUBY_VERSION
|
15
|
+
@query = ""
|
16
|
+
|
17
|
+
@optionparser = OptionParser.new{|o|
|
18
|
+
o.on("--init",
|
19
|
+
"initialize rurema"){
|
20
|
+
@command = :init
|
21
|
+
}
|
22
|
+
o.on("--update",
|
23
|
+
"update documents and database"){
|
24
|
+
@command = :update
|
25
|
+
}
|
26
|
+
o.on("--server",
|
27
|
+
"start web server"){
|
28
|
+
@command = :server
|
29
|
+
}
|
30
|
+
|
31
|
+
o.on("--port=N",
|
32
|
+
"port number of the web browser (only meaningful with --server)"){|n|
|
33
|
+
@port = n.to_i
|
34
|
+
}
|
35
|
+
o.on("--browser",
|
36
|
+
"open web browser (only meaningful with --server)"){
|
37
|
+
@open_browser = true
|
38
|
+
}
|
39
|
+
o.on("--dry-run",
|
40
|
+
"show commands only"){
|
41
|
+
@dry_run = true
|
42
|
+
}
|
43
|
+
o.on("--ruremadir=PATH",
|
44
|
+
"specify rurema directory (default: #{@ruremadir})"){|path|
|
45
|
+
@ruremadir = Pathname(path)
|
46
|
+
}
|
47
|
+
o.on("--rubyver=STR",
|
48
|
+
"specify Ruby version (default: #{@rubyver})"){|str|
|
49
|
+
@rubyver = str
|
50
|
+
}
|
51
|
+
o.on("--version",
|
52
|
+
"show version of myrurema"){
|
53
|
+
puts MyRurema::VERSION
|
54
|
+
exit
|
55
|
+
}
|
56
|
+
o.on("--help",
|
57
|
+
"show this message"){
|
58
|
+
puts o
|
59
|
+
exit
|
60
|
+
}
|
61
|
+
}
|
62
|
+
@query, @num = @optionparser.parse(argv)
|
63
|
+
@query = "" if @query.nil?
|
64
|
+
@num = @num.to_i if @num
|
65
|
+
end
|
66
|
+
attr_accessor :dry_run, :ruremadir, :rubyver, :open_browser
|
67
|
+
attr_accessor :command, :query, :num, :port
|
68
|
+
|
69
|
+
def ruremadir=(dir)
|
70
|
+
@ruremadir = Pathname(dir)
|
71
|
+
end
|
72
|
+
|
73
|
+
def usage
|
74
|
+
puts @optionparser
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
class MyRurema
|
79
|
+
VERSION = File.read((Pathname(__FILE__).dirname/"../VERSION").expand_path)
|
80
|
+
SVN_URL = "http://jp.rubyist.net/svn/rurema"
|
81
|
+
|
82
|
+
def initialize(opt=Options.new(ARGV))
|
83
|
+
@opt = opt
|
84
|
+
end
|
85
|
+
|
86
|
+
def run
|
87
|
+
case
|
88
|
+
when @opt.command
|
89
|
+
send(@opt.command)
|
90
|
+
when @opt.query.empty?
|
91
|
+
@opt.usage
|
92
|
+
when @opt.num
|
93
|
+
search_num(@opt.query, @opt.num, @opt.rubyver)
|
94
|
+
else
|
95
|
+
search(@opt.query, @opt.rubyver)
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
def init
|
100
|
+
sh "svn co -rHEAD #{SVN_URL}/doctree/trunk #{doctree_path}"
|
101
|
+
sh "svn co -rHEAD #{SVN_URL}/bitclust/trunk #{bitclust_path}"
|
102
|
+
init_db(@opt.rubyver)
|
103
|
+
end
|
104
|
+
|
105
|
+
def update
|
106
|
+
sh "svn up #{doctree_path}"
|
107
|
+
refresh_db(@opt.rubyver)
|
108
|
+
end
|
109
|
+
|
110
|
+
def search(query, ver)
|
111
|
+
should_have_db(ver)
|
112
|
+
|
113
|
+
sh "#{bitclust_path/'bin/refe.rb'}" +
|
114
|
+
" #{Shellwords.escape query} -d #{db_path(ver)}", :silent => true
|
115
|
+
end
|
116
|
+
|
117
|
+
def search_num(query, num, ver)
|
118
|
+
should_have_db(ver)
|
119
|
+
|
120
|
+
result = `#{bitclust_path/'bin/refe.rb'} #{query} -d #{db_path(ver)}`
|
121
|
+
word = result.split[num-1]
|
122
|
+
if word
|
123
|
+
word.gsub!(/\.#/, ".") # avoid multi-hit for a module function
|
124
|
+
puts "searching #{word}"
|
125
|
+
search(word, ver)
|
126
|
+
else
|
127
|
+
error "less than #{num} entries found"
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
def server
|
132
|
+
port = @opt.port || default_port(@opt.rubyver)
|
133
|
+
th = Thread.new{
|
134
|
+
sh "#{bitclust_path/'standalone.rb'}" +
|
135
|
+
" --baseurl=http://localhost:#{port}" +
|
136
|
+
" --port=#{port}" +
|
137
|
+
" --database=#{db_path(@opt.rubyver)}" +
|
138
|
+
" --debug"
|
139
|
+
}
|
140
|
+
if @opt.open_browser
|
141
|
+
sleep 1 # wait for the server to start
|
142
|
+
cmd = (/mswin/ =~ RUBY_PLATFORM) ? "start" : "open"
|
143
|
+
sh "#{cmd} http://localhost:#{port}/view/"
|
144
|
+
end
|
145
|
+
th.join
|
146
|
+
end
|
147
|
+
|
148
|
+
private
|
149
|
+
|
150
|
+
def default_port(ver)
|
151
|
+
"10" + ver.scan(/\d/).join
|
152
|
+
end
|
153
|
+
|
154
|
+
def init_db(ver)
|
155
|
+
sh "#{bitclust_path/'bin/bitclust.rb'}" +
|
156
|
+
" -d #{db_path(ver)} init version=#{ver} encoding=euc-jp"
|
157
|
+
|
158
|
+
refresh_db(ver)
|
159
|
+
end
|
160
|
+
|
161
|
+
def refresh_db(ver)
|
162
|
+
puts "Updating Rurema database:"
|
163
|
+
puts "This will take a few minutes. Please be patient."
|
164
|
+
sh "#{bitclust_path/'bin/bitclust.rb'}" +
|
165
|
+
" -d #{db_path(ver)}" +
|
166
|
+
" update --stdlibtree=#{doctree_path/'refm/api/src'}"
|
167
|
+
end
|
168
|
+
|
169
|
+
def bitclust_path
|
170
|
+
@opt.ruremadir / "bitclust"
|
171
|
+
end
|
172
|
+
|
173
|
+
def doctree_path
|
174
|
+
@opt.ruremadir / "doctree"
|
175
|
+
end
|
176
|
+
|
177
|
+
def should_have_db(ver)
|
178
|
+
unless has_db?(ver)
|
179
|
+
puts "You don't have a database for ruby #{ver}."
|
180
|
+
puts "Make it now? [y/n]"
|
181
|
+
if $stdin.gets.chomp.downcase == "y"
|
182
|
+
init_db(ver)
|
183
|
+
else
|
184
|
+
exit
|
185
|
+
end
|
186
|
+
end
|
187
|
+
end
|
188
|
+
|
189
|
+
def has_db?(ver)
|
190
|
+
db_path(ver).directory?
|
191
|
+
end
|
192
|
+
|
193
|
+
def db_path(ver)
|
194
|
+
@opt.ruremadir / "db" / ver
|
195
|
+
end
|
196
|
+
|
197
|
+
def sh(cmd, opt={})
|
198
|
+
puts cmd unless opt[:silent]
|
199
|
+
system cmd unless @opt.dry_run
|
200
|
+
end
|
201
|
+
|
202
|
+
def error(msg)
|
203
|
+
$stderr.puts msg
|
204
|
+
end
|
205
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: myrurema
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 23
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 4
|
10
|
+
version: 0.0.4
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Yutaka HARA
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-
|
18
|
+
date: 2010-09-01 00:00:00 +09:00
|
19
19
|
default_executable: rurema
|
20
20
|
dependencies: []
|
21
21
|
|
@@ -33,6 +33,9 @@ files:
|
|
33
33
|
- VERSION
|
34
34
|
- bin/rurema
|
35
35
|
- features/basic_commands.feature
|
36
|
+
- main.rb
|
37
|
+
- spec/commands.rb
|
38
|
+
- src/myrurema.rb
|
36
39
|
has_rdoc: true
|
37
40
|
homepage: http://github.com/yhara/myrurema
|
38
41
|
licenses: []
|
@@ -67,5 +70,5 @@ rubygems_version: 1.3.7
|
|
67
70
|
signing_key:
|
68
71
|
specification_version: 3
|
69
72
|
summary: A tool for Rurema (the new Japanese Ruby reference manual)
|
70
|
-
test_files:
|
71
|
-
|
73
|
+
test_files:
|
74
|
+
- spec/commands.rb
|