rarg 0.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.
- data/lib/rarg.rb +112 -0
- data/license.txt +281 -0
- data/rakefile.rb +44 -0
- data/readme_en.txt +50 -0
- data/readme_ja.txt +54 -0
- data/setup.rb +1585 -0
- data/spec/main.rb +74 -0
- metadata +59 -0
data/lib/rarg.rb
ADDED
@@ -0,0 +1,112 @@
|
|
1
|
+
# encoding: us-ascii
|
2
|
+
#-----------------------------------------------------------
|
3
|
+
# RArg - utility for validating named arguments
|
4
|
+
#
|
5
|
+
# Version: 0.1 (2009-01-31)
|
6
|
+
# Author: Dice <tetradice.1011@gmail.com>
|
7
|
+
# License: NYSL 0.9982 <http://www.kmonos.net/nysl/>
|
8
|
+
# (this license is like Public Domain)
|
9
|
+
#-----------------------------------------------------------
|
10
|
+
|
11
|
+
module RArg
|
12
|
+
VERSION = '0.1'
|
13
|
+
VERSION_NUMBER = 0.1
|
14
|
+
|
15
|
+
class << self
|
16
|
+
# parse arguments with definition block. Return: ParseResult
|
17
|
+
def parse(args, &definition)
|
18
|
+
context = DefinitionContext.new
|
19
|
+
context.instance_eval(&definition)
|
20
|
+
context.parse(args)
|
21
|
+
end
|
22
|
+
|
23
|
+
alias parse_named_arguments parse
|
24
|
+
end
|
25
|
+
|
26
|
+
# error of definition or parsing
|
27
|
+
class Error < ::StandardError
|
28
|
+
end
|
29
|
+
|
30
|
+
|
31
|
+
class DefinitionContext
|
32
|
+
def initialize
|
33
|
+
@required = []
|
34
|
+
@defaults = {}
|
35
|
+
@aliases = {}
|
36
|
+
end
|
37
|
+
|
38
|
+
def parse(args)
|
39
|
+
base = {}
|
40
|
+
|
41
|
+
@defaults.each_pair do |name, value|
|
42
|
+
unless args.include?(name) then
|
43
|
+
base[name] = value
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
args.each_pair do |name, value|
|
48
|
+
# solve aliases
|
49
|
+
if @aliases.include?(name) then
|
50
|
+
real_name = @aliases[name]
|
51
|
+
else
|
52
|
+
real_name = name
|
53
|
+
end
|
54
|
+
|
55
|
+
# check defined or not
|
56
|
+
if not @required.include?(real_name) and not @defaults.include?(real_name) then
|
57
|
+
raise Error, "'#{real_name}' is not defined"
|
58
|
+
end
|
59
|
+
|
60
|
+
base[real_name] = value
|
61
|
+
end
|
62
|
+
|
63
|
+
if (missing = @required.find{|x| not base.include?(x)}) then
|
64
|
+
raise Error, "argument of '#{missing}' is required, but missing"
|
65
|
+
end
|
66
|
+
|
67
|
+
|
68
|
+
|
69
|
+
return ParseResult.new(base)
|
70
|
+
end
|
71
|
+
|
72
|
+
private
|
73
|
+
|
74
|
+
# define a required argument
|
75
|
+
def require_arg(*names)
|
76
|
+
@required.concat(names)
|
77
|
+
end
|
78
|
+
|
79
|
+
# define a default argument, name and value
|
80
|
+
def default_arg(name, value = nil)
|
81
|
+
@defaults[name] = value
|
82
|
+
end
|
83
|
+
|
84
|
+
# define an alias of argument
|
85
|
+
def alias_arg(new, orig)
|
86
|
+
if @required.include?(orig) or @defaults.include?(orig) then
|
87
|
+
@aliases[new] = orig
|
88
|
+
else
|
89
|
+
raise Error, "alias: '#{orig}' -> '#{new}', but '#{orig}' is not defined"
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
# return of parsing
|
95
|
+
class ParseResult
|
96
|
+
attr_reader :base
|
97
|
+
alias arguments base
|
98
|
+
|
99
|
+
def initialize(base)
|
100
|
+
@base = base
|
101
|
+
end
|
102
|
+
|
103
|
+
def [](name)
|
104
|
+
if @base.include?(name) then
|
105
|
+
@base[name]
|
106
|
+
else
|
107
|
+
raise Error, "argument name '#{name}' is not defined"
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
end
|
112
|
+
end
|
data/license.txt
ADDED
@@ -0,0 +1,281 @@
|
|
1
|
+
|
2
|
+
ライセンス本文
|
3
|
+
==================================================
|
4
|
+
|
5
|
+
|
6
|
+
NYSL Version 0.9982
|
7
|
+
----------------------------------------
|
8
|
+
|
9
|
+
A. 本ソフトウェアは Everyone'sWare です。このソフトを手にした一人一人が、
|
10
|
+
ご自分の作ったものを扱うのと同じように、自由に利用することが出来ます。
|
11
|
+
|
12
|
+
A-1. フリーウェアです。作者からは使用料等を要求しません。
|
13
|
+
A-2. 有料無料や媒体の如何を問わず、自由に転載・再配布できます。
|
14
|
+
A-3. いかなる種類の 改変・他プログラムでの利用 を行っても構いません。
|
15
|
+
A-4. 変更したものや部分的に使用したものは、あなたのものになります。
|
16
|
+
公開する場合は、あなたの名前の下で行って下さい。
|
17
|
+
|
18
|
+
B. このソフトを利用することによって生じた損害等について、作者は
|
19
|
+
責任を負わないものとします。各自の責任においてご利用下さい。
|
20
|
+
|
21
|
+
C. 著作者人格権は Dice に帰属します。著作権は放棄します。
|
22
|
+
|
23
|
+
D. 以上の3項は、ソース・実行バイナリの双方に適用されます。
|
24
|
+
|
25
|
+
|
26
|
+
NYSL Version 0.9982 (en) (Unofficial)
|
27
|
+
----------------------------------------
|
28
|
+
A. This software is "Everyone'sWare". It means:
|
29
|
+
Anybody who has this software can use it as if you're
|
30
|
+
the author.
|
31
|
+
|
32
|
+
A-1. Freeware. No fee is required.
|
33
|
+
A-2. You can freely redistribute this software.
|
34
|
+
A-3. You can freely modify this software. And the source
|
35
|
+
may be used in any software with no limitation.
|
36
|
+
A-4. When you release a modified version to public, you
|
37
|
+
must publish it with your name.
|
38
|
+
|
39
|
+
B. The author is not responsible for any kind of damages or loss
|
40
|
+
while using or misusing this software, which is distributed
|
41
|
+
"AS IS". No warranty of any kind is expressed or implied.
|
42
|
+
You use AT YOUR OWN RISK.
|
43
|
+
|
44
|
+
C. Copyrighted to Dice.
|
45
|
+
|
46
|
+
D. Above three clauses are applied both to source and binary
|
47
|
+
form of this software.
|
48
|
+
|
49
|
+
|
50
|
+
|
51
|
+
|
52
|
+
|
53
|
+
|
54
|
+
|
55
|
+
参考文書
|
56
|
+
==================================================
|
57
|
+
|
58
|
+
|
59
|
+
このテキストファイルに関する情報
|
60
|
+
----------------------------------------
|
61
|
+
|
62
|
+
このファイルは http://www.kmonos.net/nysl/ の情報をまとめたものです。
|
63
|
+
ardry <ardry at users dot sourceforge dot jp> 氏の提案を受けて
|
64
|
+
k.inaba <kiki at kmonos dot net> がまとめました。
|
65
|
+
|
66
|
+
|
67
|
+
はじめに
|
68
|
+
----------------------------------------
|
69
|
+
http://www.kmonos.net/nysl/readme.html
|
70
|
+
|
71
|
+
* NYSL とは?
|
72
|
+
|
73
|
+
ソフトウェアの使用許諾条件、いわゆる"ライセンス"の一種です。主な特徴
|
74
|
+
としては、『NYSLのもとで公開されているソフトやソースコードは、誰でもそ
|
75
|
+
れを自由に使用して別の新しいソフトを作ることができる』こと。
|
76
|
+
|
77
|
+
この世の中には、いろいろなソフトウェア・ライセンスが存在します。その
|
78
|
+
違いは主に作者の方々の思想の違いに由来しています。あるいは同じ作者のソ
|
79
|
+
フトであっても、製作動機や完成度やその時の気分のせいで、異なる利用条件
|
80
|
+
を持っていることもあります。まあ、当たり前のことですね。
|
81
|
+
|
82
|
+
NYSLの場合は、「自分一人でソースを抱え込んでるより、他の人にいろいろ
|
83
|
+
いじり倒してもらう方が面白い!」という単純な考え方に基づいています。
|
84
|
+
もっと言うと「そのいじり倒した結果が自分に帰って来るかどうかは関係ない。
|
85
|
+
自分の振ったネタからどこかで何かが始まるとしたら、それだけで楽しいじゃ
|
86
|
+
ん?」という気分。
|
87
|
+
|
88
|
+
* ススメ
|
89
|
+
上に書いた「気分」、甘っちょろすぎる考えかたかもしれません。例えば商
|
90
|
+
売としてソフトを売っているとか、シェアウェアとして有料で公開していると
|
91
|
+
いった場合ならば、そうほいほいと全てをフリーにしてしまうのは現実的では
|
92
|
+
ないでしょう。それはそういうものだと思います。けれどもし、趣味で作って
|
93
|
+
趣味で公開してるようなソフトなら、ホビープログラマがみんなしてオープン
|
94
|
+
になることも可能なのではないかと、そうすれば結構楽しいことになるのでは
|
95
|
+
ないかと、妄想しています。
|
96
|
+
|
97
|
+
You may say I'm a dreamer,
|
98
|
+
but I'm not the only one.
|
99
|
+
I hope someday you'll join us,
|
100
|
+
and the world will be as one.
|
101
|
+
-- John Lennon, "Imagine"
|
102
|
+
|
103
|
+
もし貴方がフリーウェア作者さんなら、是非オープンなソフトを公開してみ
|
104
|
+
ませんか?
|
105
|
+
|
106
|
+
|
107
|
+
FAQ
|
108
|
+
----------------------------------------
|
109
|
+
http://www.kmonos.net/nysl/faq.html
|
110
|
+
編者注:リンクがある場合は<http://url/>の書式を挿入しています。
|
111
|
+
原文のリンク先が移転している場合は、<移http://url>としてます。
|
112
|
+
|
113
|
+
基本的に「ご自分の作ったものを扱うのと同じように」。これに尽きます。
|
114
|
+
|
115
|
+
* 具体的な話
|
116
|
+
Q. 転載・再配布自由とありますが、作者への事後報告等も不要ですか?
|
117
|
+
A. 不要です。もちろん連絡して下さっても構いません。自分の作ったソフ
|
118
|
+
トが広まっていくのを知るのは嬉しいことです。
|
119
|
+
|
120
|
+
Q. NYSL下で公開されてるソースを使ったプログラムを公開する場合、その
|
121
|
+
ソースを使った旨を記述しなければなりませんか?
|
122
|
+
A. いいえ。特に何も書かなくてOKです。謝辞等に元ソースの作者の名前
|
123
|
+
を載っけたりする必要もありません。(載っけてもOKですが。) ご
|
124
|
+
自分の作ったものと同じように、他人の名前の掲載を強制されるはずが
|
125
|
+
ありません。
|
126
|
+
|
127
|
+
Q. NYSL下で公開されてるソースを使ったプログラムは、 NYSLライセンス
|
128
|
+
で公開しなくてはならないのですか?
|
129
|
+
A. そんなことはありません。なんなりと好きなライセンスを選んで下さい。
|
130
|
+
|
131
|
+
Q. 自分の作ったソフトをNYSLに従って配布したいのですが、よろしいです
|
132
|
+
か?
|
133
|
+
A. 大歓迎です。C.項の名前部分を埋めて使ってやって下さい。ですが、例
|
134
|
+
えば zlib ライセンス <http://www.kmonos.net/nysl/zlib.html> など
|
135
|
+
の方がそのプログラムには適しているかもしれませんよ? もう一度じっ
|
136
|
+
くりと検討してみることをオススメします。
|
137
|
+
また、単に「NYSLライセンス( http://www.kmonos.net/nysl/ )に従
|
138
|
+
います。」とだけ書いてソフトを公開するのはおすすめしません。とい
|
139
|
+
うのは、その URL の指すページの内容は、私 k.inaba がいつでも勝手
|
140
|
+
に書き換える可能性があるからです。 k.inaba の決定した NYSL のバー
|
141
|
+
ジョンアップに無条件に追随する覚悟があれば、 URL のみの提示でも
|
142
|
+
問題はありません。不安があれば、NYSLの全文をコピーするか、
|
143
|
+
「NYSL 0.9981に従います」のように、バージョン番号を明示指定して
|
144
|
+
おくが吉です。
|
145
|
+
|
146
|
+
Q. NYSLを微妙に変えたライセンスで自作プログラムを配布したいのですが。
|
147
|
+
A. ご自由にどうぞ。NYSL自体はNYSDL
|
148
|
+
<http://www.kmonos.net/nysl/nysdl.html>のもとで「ご自分の作った
|
149
|
+
ものを扱うのと同じように」利用できます。
|
150
|
+
|
151
|
+
Q. NYSLのような俺々ライセンスは使えない。
|
152
|
+
A. 確かに、そのような場面は多々あります。「既に広く利用されているラ
|
153
|
+
イセンスでないと信頼性に欠ける」「公式な英語版ライセンスが必要」
|
154
|
+
「オープンソース(TM)プロジェクトのホスティングサービスを利用した
|
155
|
+
いが、OSIに認定されたライセンスしか選択肢にない」「名前が嫌だ」
|
156
|
+
など。このような場合は無理にNYSLを使うこともないでしょう。
|
157
|
+
|
158
|
+
参考までに、私自身は、そのような場合には zlib ライセンスを採用する
|
159
|
+
ことにしています。OSI認定ライセンスの中でも非常によく知られている
|
160
|
+
ものの一つであり、課す条件も非常に緩いというのがその理由です。
|
161
|
+
|
162
|
+
* 抽象的な話
|
163
|
+
Q. A-4はどういう意味ですか?
|
164
|
+
A. どこか改良して公開するときは、変更が加えられている旨を記述してく
|
165
|
+
ださい、ということです。原作者が作ったのではない部分について原作
|
166
|
+
者に問い合わせ等が来ても困りますので、そういうことが起きないよう
|
167
|
+
にしてね、と。
|
168
|
+
|
169
|
+
Q. 著作者人格権を保持するってことは、同一性保持権(勝手に改変しちゃ
|
170
|
+
ダメと言える権利)は捨てないということだから、自由とは言えないの
|
171
|
+
では?
|
172
|
+
A. 同一性保持権というのは、「(著作者の)意に反してこれらの変更、切
|
173
|
+
除その他の改変を受けないものとする」という権利です
|
174
|
+
(著20<http://www.houko.com/00/01/S45/048.HTM#s2.3.2>)。
|
175
|
+
ところが、著作者のの「意」はNYSLに記した通りです。どんな変更を加
|
176
|
+
えても著作者の意には反しません。つまり結局の所、好きなように改変
|
177
|
+
することができるわけです。
|
178
|
+
|
179
|
+
Q. しかしそうは言っても、著作者人格権も誰にも帰属してない方が良いと
|
180
|
+
思う。
|
181
|
+
A. 日本の法律では著作者人格権は誰にも譲渡できないことになっています
|
182
|
+
(著59<http://www.houko.com/00/01/S45/048.HTM#s2.5>)。更にそこか
|
183
|
+
ら、著作者人格権は放棄できない、とする解釈が一般的です。「できな
|
184
|
+
い」ものなのに「著作者人格権は放棄したものとして扱って下さい」と
|
185
|
+
書いて済ませてしまうのは無意味と考え、現在の形態をとることにしま
|
186
|
+
した。繰り返しますが、どんな変更を加えても著作者の意には反しませ
|
187
|
+
ん、のでご心配なく。
|
188
|
+
|
189
|
+
著作権は、著61<http://www.houko.com/00/01/S45/048.HTM#s2.6>より、
|
190
|
+
権利者が自由に譲渡や処分できる財産権であると解釈されているため、
|
191
|
+
日本法の下でも放棄することが可能であるとし、NYSLではこれを放棄し
|
192
|
+
ています。(注:「著作権は放棄可能か?」という問題についてはこれ
|
193
|
+
とは異なる説
|
194
|
+
<移http://www.sekidou.com/law/cyber/intlprop/intpro11.shtml>も存
|
195
|
+
在しますが、得られる結果はどちらの解釈でも同じです。)
|
196
|
+
|
197
|
+
Q. 自分の作ったものと同じなら、そのプログラムで使われている技術で特
|
198
|
+
許を受けても構いませんよね?
|
199
|
+
A. 誰の作ったものだろうと、それは無理です。その技術は著作者が既に一
|
200
|
+
般に公開しているため、日本で言えば特29
|
201
|
+
<http://www.houko.com/00/01/S34/121.HTM#s2>「三 特許出願前に日本
|
202
|
+
国内又は外国において、頒布された刊行物に記載された発明又は電気通
|
203
|
+
信回線を通じて公衆に利用可能となつた発明」に該当しますので。残念
|
204
|
+
でした。
|
205
|
+
|
206
|
+
Q. 自分の作ったものということで、そのプログラムに対して著作権を主張
|
207
|
+
してもいいですか?
|
208
|
+
A. あなたが、例えば Noah
|
209
|
+
<http://www.vector.co.jp/soft/win95/util/se106079.html>をご自分
|
210
|
+
で改良したプログラムについて述べているのなら、その著作権はあなた
|
211
|
+
に帰属します。しかし、例えば今私がこのサイトで公開している Noah
|
212
|
+
そのものについて言うならば、ダメです。
|
213
|
+
|
214
|
+
まず現実問題として、実際にあなたが作ったのではない以上、あなたに
|
215
|
+
は著作権は発生しません。それにも関わらずあなたが著作権を主張する
|
216
|
+
ためには、元の権利者である私からの著作権の譲渡という手続きを踏む
|
217
|
+
必要があります。しかし、C. に書いたように、私は既に著作権を放棄
|
218
|
+
しています。ゆえに、あなたに譲渡することも出来ません。
|
219
|
+
∴あなたは著作権を主張できません。
|
220
|
+
|
221
|
+
「それでは自分の作ったものと同様に自由、とは言えないではないか?」
|
222
|
+
という意見もあるかと思います。しかしお待ち下さい。あくまで同様に
|
223
|
+
自由に「利用できる」のです。プログラムを実行するのも、ソースを切っ
|
224
|
+
たり貼ったりして他のソースと組み合わせて使うのも、「利用」です。
|
225
|
+
しかし、それに対して権利を主張するというのは「利用」とは言えませ
|
226
|
+
ん。
|
227
|
+
|
228
|
+
Q. NYSLと著作権に関してもうちょい詳しく。
|
229
|
+
A. 例えばNoahのexeをそのまま持っていって、作者名とソフト名だけ付け
|
230
|
+
替えて Haon というソフトとして公開し、それに対し著作権を主張する、
|
231
|
+
という行為は禁止されません。他のライセンスでは禁止されていること
|
232
|
+
が多いですし、法律的にも NYSL のこの主張は通らないかもしれない
|
233
|
+
(未調査)のですが、少なくともNYSLとしては、この行為を禁じません。
|
234
|
+
|
235
|
+
一つ上の A. との違いは何でしょう?それは、上では「Haonに関する著
|
236
|
+
作権」ではなく「Noahに関する著作権」は主張できないことを証明して
|
237
|
+
いる点です。Haon に関する著作権を持っていたとしても、別の著作物
|
238
|
+
である Noah の頒布を制限したり、 Noahの翻案を禁じたりすることは
|
239
|
+
できません。NYSLの下では逆もまた真です。つまり、 Haonの著作権と
|
240
|
+
Noahの著作権は全く異なる別個の権利です。
|
241
|
+
|
242
|
+
HaonとNoahが同じ内容を持っている、ということはここでは無関係です。
|
243
|
+
依拠のない同一の著作物
|
244
|
+
<http://www.netlaw.co.jp/booklet_2/9.html#96> がそれぞれ別個に著
|
245
|
+
作権法の保護を受けることができるのと同様ですね。
|
246
|
+
|
247
|
+
* さらに抽象的な話
|
248
|
+
Q. なぜ「フリーウェア」や「Everyones'Ware」という言葉を使うのですか?
|
249
|
+
(「フリーソフトウェア」や「オープンソース(TM)ソフトウェア」では
|
250
|
+
ないのですか?)
|
251
|
+
|
252
|
+
A. 私が確認した限りではNYSLは「フリーソフトウェア」の定義にも「オー
|
253
|
+
プンソース(TM)」の定義にも合致していますので、機械的にそう呼ぶこ
|
254
|
+
とには、問題はありません。
|
255
|
+
|
256
|
+
ですが、例えばGPLのようにCopyleftな、私にとって 自由でない ライ
|
257
|
+
センスを許してしまう「フリーソフトウェア」の定義にはバグがあると
|
258
|
+
考え、この用語は使用していません。「オープンソース(TM)」の定義に
|
259
|
+
は特に問題を感じているわけではありませんが、この定義は「ソース
|
260
|
+
コードが公けになっている」よりはかなり強い意味を持っていて、その
|
261
|
+
定義の意味の言葉を使いたいことが一度もなかったので、この単語は使
|
262
|
+
用していません。
|
263
|
+
|
264
|
+
「フリーウェア」という言葉は厳密な定義はなされていませんが、
|
265
|
+
「無料(Free)で使用してよいソフト」と解釈されることが一般的なため、
|
266
|
+
その意味で用いています。
|
267
|
+
|
268
|
+
Q. このFAQの法的な意味は?
|
269
|
+
A. このFAQの内容は、NYSLライセンスの一部ではありません。従って、仮に
|
270
|
+
NYSLの内容とこのFAQの内容とが矛盾していたとしても、利用条件として
|
271
|
+
適用されるのは、あくまで NYSLの方です。(つまり、"このFAQではダメ
|
272
|
+
と書かれているけれど、NYSLを厳密に解釈すると実はその行為はやって
|
273
|
+
も大丈夫" という抜け穴を発見した方は、 NYSLに違反することなくその
|
274
|
+
行為を実行することができます。)
|
275
|
+
|
276
|
+
ですが、このFAQはNYSLの文面と日本国の法律から導出可能な内容につい
|
277
|
+
て述べているので、理論上はそのような矛盾はないと思われます。
|
278
|
+
|
279
|
+
* ところで
|
280
|
+
Q. NYSLって何の略ですか?
|
281
|
+
A. 煮るなり焼くなり好きにしろライセンス。
|
data/rakefile.rb
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
# encoding: us-ascii
|
2
|
+
require 'rubygems'
|
3
|
+
require 'rake/gempackagetask'
|
4
|
+
require 'spec/rake/spectask'
|
5
|
+
|
6
|
+
RARG_VERSION = '0.1'
|
7
|
+
SRCS = FileList['lib/*', 'spec/*', '*.rb', '*.txt']
|
8
|
+
|
9
|
+
task :default => :package
|
10
|
+
|
11
|
+
spec = Gem::Specification.new do |s|
|
12
|
+
s.platform = Gem::Platform::RUBY
|
13
|
+
s.summary = "Small library for validating a Hash as named arguments"
|
14
|
+
s.author = 'Dice'
|
15
|
+
s.email = 'tetradice.1011@gmail.com'
|
16
|
+
s.homepage = 'http://rubyforge.org/projects/rarg/'
|
17
|
+
s.name = 'rarg'
|
18
|
+
s.rubyforge_project = 'rarg'
|
19
|
+
s.version = '0.1'
|
20
|
+
s.files = SRCS
|
21
|
+
s.description = <<EOF
|
22
|
+
RArg is simple and small library for validating a Hash as named arguments (keyword arguments).
|
23
|
+
It has three functions, requiring arguments, setting default arguments, and aliasing argument name.
|
24
|
+
EOF
|
25
|
+
end
|
26
|
+
|
27
|
+
Rake::GemPackageTask.new(spec) do |pkg|
|
28
|
+
end
|
29
|
+
|
30
|
+
task :package => "rarg-#{RARG_VERSION}.zip"
|
31
|
+
|
32
|
+
task :repackage => [:clobber, :package]
|
33
|
+
|
34
|
+
file "rarg-#{RARG_VERSION}.zip" => SRCS do |task|
|
35
|
+
src_list = SRCS.to_a.map{|x| %Q|"#{x}"|}.join(' ')
|
36
|
+
sh "zip #{task.name} #{src_list}"
|
37
|
+
end
|
38
|
+
|
39
|
+
|
40
|
+
Spec::Rake::SpecTask.new do |tasklib|
|
41
|
+
tasklib.libs << ['./lib']
|
42
|
+
tasklib.spec_files = FileList['spec/*.rb']
|
43
|
+
tasklib.ruby_opts = %w(-Ku)
|
44
|
+
end
|
data/readme_en.txt
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
RArg - utility for validating named arguments
|
2
|
+
|
3
|
+
Version: 0.1 (2009-01-31)
|
4
|
+
Author: Dice <tetradice.1011@gmail.com>
|
5
|
+
License: NYSL 0.9982 <http://www.kmonos.net/nysl/>
|
6
|
+
(this license is like Public Domain)
|
7
|
+
|
8
|
+
|
9
|
+
Summary
|
10
|
+
=======
|
11
|
+
RArg is simple and small library for validating a Hash as named arguments
|
12
|
+
(keyword arguments). It has three functions, requiring arguments, setting
|
13
|
+
default arguments, and aliasing argument name.
|
14
|
+
|
15
|
+
|
16
|
+
Auto Installing
|
17
|
+
===============
|
18
|
+
% ruby setup.rb
|
19
|
+
|
20
|
+
|
21
|
+
Example
|
22
|
+
=======
|
23
|
+
require 'rarg'
|
24
|
+
|
25
|
+
class Foo
|
26
|
+
attr_reader :r1, :r2, :d1
|
27
|
+
|
28
|
+
def initialize(options = {})
|
29
|
+
re = RArg.parse(options) do
|
30
|
+
require_arg :r1, :r2
|
31
|
+
default_arg :d1, 0
|
32
|
+
alias_arg :a1, :r1
|
33
|
+
end
|
34
|
+
|
35
|
+
@r1, @r2, @d1 = re[:r1], re[:r2], re[:d1]
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
Foo.new({}) # Exception: argument of 'r1' is required, but missing (RArg::Error)
|
40
|
+
Foo.new({:r1 => nil}) # Exception: argument of 'r2' is required, but missing (RArg::Error)
|
41
|
+
Foo.new({:r1 => nil, :r2 => 10, :nd => 20}) # Exception: 'nd' is not defined (RArg::Error)
|
42
|
+
Foo.new({:r1 => nil, :r2 => 10}) # No Exception
|
43
|
+
|
44
|
+
foo = Foo.new({:r1 => 'R1', :r2 => 'R2'})
|
45
|
+
p foo.r2 #=> 'R2'
|
46
|
+
p foo.d1 #=> 0 (default)
|
47
|
+
|
48
|
+
foo = Foo.new({:a1 => 'R1', :r2 => nil, :d1 => 'D1'})
|
49
|
+
p foo.d1 #=> 'D1' (overwritten)
|
50
|
+
p foo.r1 #=> 'R1' (alias definition: r1 => a1)
|