hikiutils 0.2.3.13 → 0.2.3.14
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/hikiutils.gemspec +2 -1
- data/hikiutils_bob/Rakefile +30 -16
- data/hikiutils_bob/code.hiki +9 -30
- data/hikiutils_bob/figs/hikiutils_bob.002.jpeg +0 -0
- data/hikiutils_bob/figs/hikiutils_bob.007.jpeg +0 -0
- data/hikiutils_bob/figs/hikiutils_bob.pdf +0 -0
- data/hikiutils_bob/hikiutils_bob/hikiutils_bob.002.jpeg +0 -0
- data/hikiutils_bob/hikiutils_bob/hikiutils_bob.007.jpeg +0 -0
- data/hikiutils_bob/hikiutils_bob.key +0 -0
- data/hikiutils_bob/latex_all.hiki +33 -8
- data/hikiutils_bob/latex_dir/code.aux +7 -14
- data/hikiutils_bob/latex_dir/code.log +28 -0
- data/hikiutils_bob/latex_dir/code.tex +13 -31
- data/hikiutils_bob/latex_dir/hikiutils_bob.log +59 -50
- data/hikiutils_bob/latex_dir/hikiutils_bob.pdf +0 -0
- data/hikiutils_bob/latex_dir/hikiutils_bob.synctex.gz +0 -0
- data/hikiutils_bob/latex_dir/hikiutils_bob.toc +29 -29
- data/hikiutils_bob/latex_dir/latex_all.aux +19 -16
- data/hikiutils_bob/latex_dir/latex_all.log +28 -0
- data/hikiutils_bob/latex_dir/latex_all.tex +34 -9
- data/hikiutils_bob/latex_dir/sync.aux +16 -16
- data/hikiutils_bob/latex_dir/sync.tex +4 -4
- data/hikiutils_yamane/Rakefile +14 -2
- data/hikiutils_yamane/abstract.hiki +3 -3
- data/hikiutils_yamane/discussion.hiki +9 -0
- data/hikiutils_yamane/hikiutils_yamane.hiki +8 -10
- data/hikiutils_yamane/introduction.hiki +1 -1
- data/hikiutils_yamane/latex_dir/abstract.tex +3 -3
- data/hikiutils_yamane/latex_dir/{%CA%FD/313/241.aux → discussion.aux} +8 -7
- data/hikiutils_yamane/latex_dir/discussion.tex +9 -0
- data/hikiutils_yamane/latex_dir/hikiutils_yamane.aux +3 -6
- data/hikiutils_yamane/latex_dir/hikiutils_yamane.log +50 -59
- data/hikiutils_yamane/latex_dir/hikiutils_yamane.pdf +0 -0
- data/hikiutils_yamane/latex_dir/hikiutils_yamane.synctex.gz +0 -0
- data/hikiutils_yamane/latex_dir/hikiutils_yamane.tex +4 -7
- data/hikiutils_yamane/latex_dir/hikiutils_yamane.toc +21 -21
- data/hikiutils_yamane/latex_dir/introduction.tex +1 -1
- data/hikiutils_yamane/latex_dir/method.aux +46 -0
- data/hikiutils_yamane/latex_dir/method.tex +247 -0
- data/hikiutils_yamane/latex_dir/results.aux +49 -0
- data/hikiutils_yamane/latex_dir/results.tex +249 -0
- data/hikiutils_yamane/method.hiki +234 -0
- data/hikiutils_yamane/results.hiki +225 -0
- data/hikiutils_yamane/toc.hiki +0 -1
- data/lib/hikiutils/version.rb +1 -1
- data/lib/hikiutils_thor.rb~ +37 -37
- data/lib/templates/Rakefile_hiki_sync +32 -17
- data/lib/templates/mi_key_bind_setting +1 -0
- metadata +33 -19
- data/hikiutils_yamane/Rakefile~ +0 -477
- data/hikiutils_yamane/command.hiki +0 -111
- data/hikiutils_yamane/compare.hiki +0 -116
- data/hikiutils_yamane/latex_dir/command.aux +0 -35
- data/hikiutils_yamane/latex_dir/command.log +0 -0
- data/hikiutils_yamane/latex_dir/command.tex +0 -123
- data/hikiutils_yamane/latex_dir/compare.aux +0 -30
- data/hikiutils_yamane/latex_dir/compare.tex +0 -123
- data/hikiutils_yamane/latex_dir/optparse.aux +0 -31
- data/hikiutils_yamane/latex_dir/optparse.tex +0 -119
- data/hikiutils_yamane/latex_dir/thor.aux +0 -32
- data/hikiutils_yamane/latex_dir/thor.tex +0 -110
- data/hikiutils_yamane/optparse.hiki +0 -114
- data/hikiutils_yamane/thor.hiki +0 -107
@@ -1,114 +0,0 @@
|
|
1
|
-
{{toc}}
|
2
|
-
!既存のhikiutilsのコマンド解説
|
3
|
-
既存のhikiutilsはコマンド解析ライブラリのoptparseを用いて,コマンドの処理を行っている.
|
4
|
-
optparseの特徴は,「コマンドの登録,実行method」に分けて記述することが期待されている.
|
5
|
-
また,CLIの起動の仕方が特徴的である.この二つを取り出して,動作とコードを説明する.
|
6
|
-
|
7
|
-
!!コマンドの登録と実行メソッド
|
8
|
-
|
9
|
-
!!!caption:(fig:005)コマンドの登録と実行メソッドの対応.
|
10
|
-
{{attach_view(hikiutils_yamane.005.jpg,hikiutils_yamane)}}
|
11
|
-
|
12
|
-
optparseでは以下の通り,コマンドの登録と実行が行われる.
|
13
|
-
#OptionParserオブジェクトoptを生成
|
14
|
-
#optにコマンドを登録
|
15
|
-
#入力されたコマンドの処理のメソッドへ移動
|
16
|
-
optparseではOptionParserオブジェクトoptの生成を行い,コマンドをoptに登録することでコマンドを作成することができる.しかし,これはコマンドを登録しているだけでコマンドの一覧ではこれを表示することができるが,コマンドの実行を行うためには実行を行うためのメソッドを作成する必要がある.optparseでのコマンドの実行はoptで登録されたコマンドが入力されることでそれぞれのコマンドの処理を行うメソッドに移動し処理を行う.しかし,このコマンド登録はハイフンを付けたコマンドしか登録ができず,ハイフンなしのコマンド登録はまた別の手段でやらなくてはいけない.
|
17
|
-
|
18
|
-
<<< ruby
|
19
|
-
def execute
|
20
|
-
@argv << '--help' if @argv.size==0
|
21
|
-
command_parser = OptionParser.new do |opt|
|
22
|
-
opt.on('-v', '--version','show program Version.') { |v|
|
23
|
-
opt.version = HikiUtils::VERSION
|
24
|
-
puts opt.ver
|
25
|
-
}
|
26
|
-
opt.on('-s', '--show','show sources') {show_sources}
|
27
|
-
opt.on('-a', '--add','add sources info') {add_sources }
|
28
|
-
opt.on('-t', '--target VAL','set target id') {|val| set_target(val)}
|
29
|
-
opt.on('-e', '--edit FILE','open file') {|file| edit_file(file) }
|
30
|
-
|
31
|
-
...省略...
|
32
|
-
|
33
|
-
end
|
34
|
-
begin
|
35
|
-
command_parser.parse!(@argv)
|
36
|
-
rescue=> eval
|
37
|
-
p eval
|
38
|
-
end
|
39
|
-
dump_sources
|
40
|
-
exit
|
41
|
-
end
|
42
|
-
|
43
|
-
def show_sources()
|
44
|
-
printf("target_no:%i\n",@src[:target])
|
45
|
-
printf("editor_command:%s\n",@src[:editor_command])
|
46
|
-
|
47
|
-
...省略...
|
48
|
-
|
49
|
-
end
|
50
|
-
|
51
|
-
以下略
|
52
|
-
|
53
|
-
>>>
|
54
|
-
|
55
|
-
!!CLIの実行プロセス
|
56
|
-
!!!caption:(fig:007)CLIの実行プロセス.
|
57
|
-
{{attach_view(hikiutils_yamane.007.jpg,hikiutils_yamane)}}
|
58
|
-
|
59
|
-
optparseを用いた場合のCLIの実行プロセスは次の通りとなる.
|
60
|
-
#HikiのHikiUtils::Command.run(ARGV)でhikiutils.rbのrunメソッドを呼ぶ
|
61
|
-
#new(argv).executeでexecuteメソッドが実行される
|
62
|
-
|
63
|
-
optparseではHikiutils::Command.run(ARGV)を実行される.requireで呼び出されたhikiutils.rbでrunメソッドが実行される.そこでコマンドを登録しているexecuteメソッドへ移動し入力したコマンドと対応させる.そして,対応したコマンドの処理が行われるメソッドに移動することで実行される.このようにoptparseでは実行を行うためのメソッドが必要であるが,
|
64
|
-
!!コード
|
65
|
-
|
66
|
-
optparseの呼び出し側のexe/hikiのコードは次の通りである.
|
67
|
-
<<< ruby
|
68
|
-
#!/usr/bin/env ruby
|
69
|
-
|
70
|
-
require "hikiutils"
|
71
|
-
|
72
|
-
HikiUtils::Command.run(ARGV)
|
73
|
-
>>>
|
74
|
-
|
75
|
-
また呼び出される側のlib/hikiutils.rbのrunおよびexecute部のコードは次の通りとなる.
|
76
|
-
<<< ruby
|
77
|
-
def self.run(argv=[])
|
78
|
-
print "hikiutils: provide utilities for helping hiki editing.\n"
|
79
|
-
new(argv).execute
|
80
|
-
end
|
81
|
-
|
82
|
-
def execute
|
83
|
-
@argv << '--help' if @argv.size==0
|
84
|
-
command_parser = OptionParser.new do |opt|
|
85
|
-
opt.on('-v', '--version','show program Version.') { |v|
|
86
|
-
opt.version = HikiUtils::VERSION
|
87
|
-
puts opt.ver
|
88
|
-
}
|
89
|
-
opt.on('-s', '--show','show sources') {show_sources}
|
90
|
-
opt.on('-a', '--add','add sources info') {add_sources }
|
91
|
-
opt.on('-t', '--target VAL','set target id') {|val| set_target(val) }
|
92
|
-
opt.on('-e', '--edit FILE','open file') {|file| edit_file(file) }
|
93
|
-
opt.on('-l', '--list [FILE]','list files') {|file| list_files(file) }
|
94
|
-
opt.on('-u', '--update FILE','update file') {|file| update_file(file) }
|
95
|
-
opt.on('-r', '--rsync','rsync files') {rsync_files}
|
96
|
-
opt.on('--database FILE','read database file') {|file| db_file(file)}
|
97
|
-
opt.on('--display FILE','display converted hikifile') {|file| display(f\
|
98
|
-
ile)}
|
99
|
-
opt.on('-c', '--checkdb','check database file') {check_db}
|
100
|
-
opt.on('--remove FILE','remove file') {|file| remove_file(file)}
|
101
|
-
opt.on('--move FILES','move file1,file2',Array) {|files| move_file(file\
|
102
|
-
s)}
|
103
|
-
opt.on('--euc FILE','translate file to euc') {|file| euc_file(file) }
|
104
|
-
opt.on('--initialize','initialize source directory') {dir_init() }
|
105
|
-
end
|
106
|
-
begin
|
107
|
-
command_parser.parse!(@argv)
|
108
|
-
rescue=> eval
|
109
|
-
p eval
|
110
|
-
end
|
111
|
-
dump_sources
|
112
|
-
exit
|
113
|
-
end
|
114
|
-
>>>
|
data/hikiutils_yamane/thor.hiki
DELETED
@@ -1,107 +0,0 @@
|
|
1
|
-
!Thorによる実装
|
2
|
-
手法のところで概観した通り,thorを用いることで記述の簡略化が期待できる.ここでは,実際に書き換える前後,すなわちoptparse版とthor版の対応するコードを比較することで,以下の具体的な違い
|
3
|
-
*クラス初期化
|
4
|
-
*コマンド定義
|
5
|
-
*CLIの実行プロセス
|
6
|
-
について詳しく検討を行う.
|
7
|
-
|
8
|
-
!!クラス初期化
|
9
|
-
!!!caption:Thorのinitializeでのコード
|
10
|
-
{{attach_view(hikiutils_yamane.003.jpg,hikiutils_yamane)}}
|
11
|
-
|
12
|
-
Thorのinitializeでのコードはつぎの通りである.
|
13
|
-
#Hikithor::CLI.start(ARGV)が呼ばれる
|
14
|
-
#initializeメソッドが呼ばれる
|
15
|
-
#これではThorのinitializeメソッドが呼ばれない
|
16
|
-
#superを書くことでThorのinitializeメソッドが呼ばれる
|
17
|
-
optparseではrequireでoptparseを呼びoptparseのinitializeを定義する必要はないが,Thorはinitializeを定義する必要がある.Thorの定義方法はrequireでThorを呼びCLIクラスで継承し,initializeメソッドにsuperを書くことでThorのinitializeが呼ばれる.initializeメソッド内ではThorの初期設定がされていないため,スーパークラスのメソッドを読み出してくれるsuperを書き加えることで図のようにinitializeメソッド内でThorのinitilalizeメソッドが呼ばれ定義される.
|
18
|
-
|
19
|
-
<<< ruby
|
20
|
-
|
21
|
-
module Hikithor
|
22
|
-
|
23
|
-
DATA_FILE=File.join(ENV['HOME'],'.hikirc')
|
24
|
-
attr_accessor :src, :target, :editor_command, :browser, :data_name, :l_dir
|
25
|
-
|
26
|
-
class CLI < Thor
|
27
|
-
def initialize(*args)
|
28
|
-
super
|
29
|
-
@data_name=['nick_name','local_dir','local_uri','global_dir','global_uri']
|
30
|
-
data_path = File.join(ENV['HOME'], '.hikirc')
|
31
|
-
DataFiles.prepare(data_path)
|
32
|
-
|
33
|
-
...以下略...
|
34
|
-
end
|
35
|
-
>>>
|
36
|
-
|
37
|
-
!!コマンド定義
|
38
|
-
|
39
|
-
!!!caption:thorにおけるコマンド記述のひな形.
|
40
|
-
{{attach_view(hikiutils_yamane.004.jpg,hikiutils_yamane)}}
|
41
|
-
|
42
|
-
thorではoptparseのような登録処理はない.図にある通りにコマンドが記述され,それらは以下のように構成される.
|
43
|
-
#desc以降にコマンド名と,その説明が記述される.これらはコマンドhelpで一覧として表示させる
|
44
|
-
#mapによって別のコマンド名でも実行できるように定義される.
|
45
|
-
#defで定義されたメソッドの実行コード
|
46
|
-
|
47
|
-
Thorではdescで一覧を表示されるコマンド名,コマンドの説明を登録する.しかし,ここで記述したコマンドは単に一覧で表示させるためのものであり,実際に実行される時に呼び出すコマンド名は,defで定義された名前である.Thorでは処理実行を行うメソッド名がコマンド名となり,コマンド名1つが対応する.
|
48
|
-
|
49
|
-
これに別名を与えるために利用されるキーワードがmapである.
|
50
|
-
<<<
|
51
|
-
map A => B
|
52
|
-
>>>
|
53
|
-
mapとはBと呼ばれるメソッドをAでも呼べるようにしてくれるものである.
|
54
|
-
よって,これを使うことでコマンドの別名を指定することができる.
|
55
|
-
|
56
|
-
<<< ruby
|
57
|
-
desc 'show,--show', 'show sources'
|
58
|
-
map "--show" => "show"
|
59
|
-
def show
|
60
|
-
printf("target_no:%i\n",@src[:target])
|
61
|
-
printf("editor_command:%s\n",@src[:editor_command])
|
62
|
-
,,,以下略...
|
63
|
-
end
|
64
|
-
>>>
|
65
|
-
|
66
|
-
以上より,Thorではコマンドの指定と処理にはdesc,map,処理メソッドだけで済む.optparseではコマンドを登録するためのメソッドと処理メソッドの両方が必要になっていた.一方Thorでは,処理メソッドが直接コマンド名となるため記述が簡潔になる.
|
67
|
-
|
68
|
-
!!CLIの実行プロセス
|
69
|
-
|
70
|
-
|
71
|
-
!!!caption:CLIの実行プロセス.
|
72
|
-
{{attach_view(hikiutils_yamane.006.jpg,hikiutils_yamane)}}
|
73
|
-
|
74
|
-
Thorにおけるcliの実行プロセスは次の通りである.
|
75
|
-
#hiki_thorのHikithor::CLI.start(ARGV)でhikiutils_thor.rbのCLIクラスを呼ぶ
|
76
|
-
#hikiutils_thor.rbのCLIクラスのメソッドを順に実行していく
|
77
|
-
|
78
|
-
Thorではstart(ARGV)を呼び出すことでCLIを開始する.Hikithor::CLI.start(ARGV)を実行されることによりrequireで呼ばれているhikiutils_thor.rbのCLIコマンドを順に実行する.そして,入力されたコマンドと一致するメソッドを探し,そのコマンドの処理が実行される.
|
79
|
-
|
80
|
-
<<< ruby
|
81
|
-
#!/usr/bin/env ruby
|
82
|
-
|
83
|
-
require "hikiutils_thor"
|
84
|
-
|
85
|
-
Hikithor::CLI.start(ARGV)
|
86
|
-
>>>
|
87
|
-
|
88
|
-
<<< ruby
|
89
|
-
|
90
|
-
module Hikithor
|
91
|
-
|
92
|
-
DATA_FILE=File.join(ENV['HOME'],'.hikirc')
|
93
|
-
attr_accessor :src, :target, :editor_command, :browser, :data_name, :l_dir
|
94
|
-
|
95
|
-
class CLI < Thor
|
96
|
-
def initialize(*args)
|
97
|
-
super
|
98
|
-
@data_name=['nick_name','local_dir','local_uri','global_dir','global_uri']
|
99
|
-
data_path = File.join(ENV['HOME'], '.hikirc')
|
100
|
-
DataFiles.prepare(data_path)
|
101
|
-
...以下略...
|
102
|
-
>>>
|
103
|
-
|
104
|
-
Thorではクラスのメソッドを順に実行していくためrunメソッドとexecuteメソッドは必要ない.また,optparseでの実行手順はメソッドの移動回数が多く複雑であるが,Thorは単純で分かりやすいものとなっている.
|
105
|
-
|
106
|
-
!!optparseとの全体的な比較
|
107
|
-
コードからもThorのほうが短くなっていることが分かる.よって,Thorとoptparseでのコードの違いは以上の部分になるが全体的にもThorのほうがコードが短くなり,コマンドの定義も簡単に行うことができる.また,実行手順も分かりやすくコードが読みやすいため書き換えもすぐ行うことができるので,より直感的なコマンドを実装することも可能となった.
|