[#42624] Ruby インストールできません — 水野 あゆみ <chaaneko@...>
Ruby超初心者です。
9 messages
2006/08/07
[#42629] Re: Ruby インストールできません
— Takahiro Kambe <taca@...>
2006/08/07
In message <20060807042520.90137.qmail@web3002.mail.tnz.yahoo.co.jp>
[#42643] メールのSMTP認証の方法(質問) — "Hisashi Yahata" <yahatah@...>
お世話になります。
34 messages
2006/08/09
[#42645] Re: メールのSMTP認証の方法(質問)
— WATANABE Tetsuya <Tetsuya.WATANABE@...>
2006/08/09
渡辺哲也です。
[#42649] Re: メールのSMTP認証の方法(質問)
— OHARA Shigeki <os@...>
2006/08/09
大原です。
[#42650] Re: メールのSMTP認証の方法(質問)
— "Hisashi Yahata" <yahatah@...>
2006/08/09
大原様
[#42651] Re: メールのSMTP認証の方法(質問)
— 植田裕之 <ueda@...>
2006/08/09
植田と申します。
[#42654] Re: メールのSMTP認証の方法(質問)
— "Hisashi Yahata" <yahatah@...>
2006/08/09
植田 裕之様
[#42655] Re: メールのSMTP認証の方法(質問)
— 植田裕之 <ueda@...>
2006/08/09
植田です。
[#42656] Re: メールのSMTP認証の方法(質問)
— "Hisashi Yahata" <yahatah@...>
2006/08/09
植田様
[#42657] Re: メールのSMTP認証の方法(質問)
— WATANABE Tetsuya <Tetsuya.WATANABE@...>
2006/08/09
渡辺哲也です。
[#42659] Re: メールのSMTP認証の方法(質問)
— Kazuhiro NISHIYAMA <zn@...>
2006/08/09
西山和広です。
[#42664] Re: メールのSMTP認証の方法(質問)
— "Hisashi Yahata" <yahatah@...>
2006/08/10
西山和広様
[#42674] Re: メールのSMTP認証の方法(質問)
— Kazuhiro NISHIYAMA <zn@...>
2006/08/11
西山和広です。
[#42665] 組み合わせを作るrubyらしい方法 — しん <dezawa@...>
出沢です
7 messages
2006/08/10
[#42682] Javaの interfaceのようなもの — Yuumi Yoshida <yuumi3@...>
こんにちは、 yuumi3です。
5 messages
2006/08/13
[#42690] StringScanner と case の相性 & メソッド上書きの方法 — take_tk <ggb03124@...>
たけ(tk)です
7 messages
2006/08/15
[#42691] リンクを抜き出す正規表現について — Yosuke Suzuki <yosuke@...>
suzukiといいます。
10 messages
2006/08/15
[#42693] in演算子の提案 — <rubyist@...>
はじめまして。diceと申します。
8 messages
2006/08/15
[#42715] n次元配列#each_index — Sato Hiroshi <hirocy.f01@...>
hirocyです.
4 messages
2006/08/17
[#42720] ベクターに登録されている Windows 用Rubyバイナリ — KIMURA Koichi <kbk@...>
木村です。
6 messages
2006/08/18
[#42724] エスケープシーケンスの画面制御について — リックス <rubyer4649@...>
りっくすです
7 messages
2006/08/19
[#42737] rexmlでのUTF-16の扱いについて — 石田 三英 <ishida@...>
石田と申します。
9 messages
2006/08/22
[#42758] eval substirution with variable — KIRIYAMA Kazuhiko <kiri@...>
桐山です.
6 messages
2006/08/28
[#42765] ?がメソッド名の途中にあるのはNG? — Daisuke Yamazaki <yamajaki@...>
こんにちは.山崎です.
6 messages
2006/08/29
[ruby-list:42772] Re: ?がメソッド名の途中にあるのはNG?(サマリ)
From:
Daisuke Yamazaki <yamajaki@...>
Date:
2006-08-31 02:01:38 UTC
List:
ruby-list #42772
こんにちは.山崎です.
本件ですがひとまず解決しましたので,サマリを報告します.
やりたかったこと:
irbのcompletionとrefeを統合したい.
irb> String.new.to_s.doc?
↑こんなのでString#to_sのドキュメントが出たらうれしい
解決方法:
method_missingを使う方法は?付きのメソッドが拾えなかったので,
irbのプリプロセスでフィルタリングしてirbに渡してやる.
具体的には下記irb_doc_extention.rbを適当なディレクトリにおいて
% irb -r 'irb/completion' -I 適当なディレクトリ -r irb_doc_extention
を実行.
irb> String.new mdoc?
メソッドとしてのドキュメント(String#newのドキュメントが出力)
irb> String.new cdoc?
クラスとしてのドキュメント(Stringクラスのドキュメントが出力)
上記のようにすればmdoc?でメソッドのドキュメントcdoc?でクラスの
ドキュメントが出力されるようになりました.
得た知見:
- メソッド名の途中に?があるのはRuby的にNG(最後はOK)
- refeはクラスツリーをさかのぼってメソッドのドキュメントを探してくれる.
http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=ReFe
最後になりましたが,アドバイスいただいたるびきちさん,
どうもありがとうございました.
# irb_doc_extention.rb
require 'irb/ruby-lex'
require 'test/unit/assertions'
require 'stringio'
$nullout = StringIO.new
$debugout = $nullout
class Module
public :define_method
end
module IRB
module InputFilter
extend Test::Unit::Assertions
FilterNotFound = Class.new(RuntimeError)
FILTERS_DEFAULT = [
[ /^(.+)\s+(mdoc|cdoc)\?\s+$/ ,
proc{|l,m|
cmd = m[1].strip
type = m[2]
case type
when "mdoc" then
if (cmd =~ /(.+)\.(.+)$/)
"#{$1}.doc_(:#{$2})\n"
else
"#{cmd}.doc_\n"
end
when "cdoc" then
"#{cmd}.doc_\n"
else
l
end
}
],
]
# @pre: l[-1,1] == "\n"
def self.input_filter(l)
raise Exception unless "\n" == l[-1,1]
begin
match = nil
x = FILTERS_DEFAULT.find{|re, str| match = l.match(re)}[1]
rescue
return l
end
s = x.call(l,match)
$debugout.puts "input_filter:#{s}"
s
end
end
end
class RubyLex
alias :set_input_original :set_input
def set_input(*args,&block)
set_input_original(*args,&block)
input_original = @input
@input = lambda{
l = input_original.call
if self.indent == 0 && l.respond_to?(:replace)
l.replace(IRB::InputFilter.input_filter(l))
end
(l.nil?)? l: l.sub(/^\s+/,"")
}
end
end
module IRB
NULLPROC = lambda{}
IRB.conf[:PRE_PROC]=NULLPROC
IRB.conf[:POST_PROC]=NULLPROC
IrbOriginal = Irb
remove_const :Irb
class Irb < IrbOriginal
def prompt(prompt, ltype, indent, line_no)
if prompt==@context.prompt_i && indent == 0
super
else
""
end
end
end
ContextOriginal = Context
remove_const :Context
class Context < ContextOriginal
def evaluate(line, lineno)
line.replace "IRB.conf[:POST_PROC].call; IRB.conf[:PRE_PROC].call; #{line}"
super
end
end
end
class Object
def doc_(method_name=nil)
if method_name.nil? # case for class doc
class_name = self.class.name
if (class_name == "Class")
class_name = self.name
end
cmd = "refe #{class_name}"
else
class_name = self.class.name
real_method_name = method_name.to_s # for Symbol
if class_name == "Class" # if class method
class_name = self.name
cmd = "refe #{class_name}.#{real_method_name}"
else
cmd ="refe #{class_name},#{real_method_name}"
end
end
print `#{cmd}`
end
end
--
Daisuke Yamazaki <yamajaki@gmail.com>