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.
Files changed (64) hide show
  1. checksums.yaml +4 -4
  2. data/hikiutils.gemspec +2 -1
  3. data/hikiutils_bob/Rakefile +30 -16
  4. data/hikiutils_bob/code.hiki +9 -30
  5. data/hikiutils_bob/figs/hikiutils_bob.002.jpeg +0 -0
  6. data/hikiutils_bob/figs/hikiutils_bob.007.jpeg +0 -0
  7. data/hikiutils_bob/figs/hikiutils_bob.pdf +0 -0
  8. data/hikiutils_bob/hikiutils_bob/hikiutils_bob.002.jpeg +0 -0
  9. data/hikiutils_bob/hikiutils_bob/hikiutils_bob.007.jpeg +0 -0
  10. data/hikiutils_bob/hikiutils_bob.key +0 -0
  11. data/hikiutils_bob/latex_all.hiki +33 -8
  12. data/hikiutils_bob/latex_dir/code.aux +7 -14
  13. data/hikiutils_bob/latex_dir/code.log +28 -0
  14. data/hikiutils_bob/latex_dir/code.tex +13 -31
  15. data/hikiutils_bob/latex_dir/hikiutils_bob.log +59 -50
  16. data/hikiutils_bob/latex_dir/hikiutils_bob.pdf +0 -0
  17. data/hikiutils_bob/latex_dir/hikiutils_bob.synctex.gz +0 -0
  18. data/hikiutils_bob/latex_dir/hikiutils_bob.toc +29 -29
  19. data/hikiutils_bob/latex_dir/latex_all.aux +19 -16
  20. data/hikiutils_bob/latex_dir/latex_all.log +28 -0
  21. data/hikiutils_bob/latex_dir/latex_all.tex +34 -9
  22. data/hikiutils_bob/latex_dir/sync.aux +16 -16
  23. data/hikiutils_bob/latex_dir/sync.tex +4 -4
  24. data/hikiutils_yamane/Rakefile +14 -2
  25. data/hikiutils_yamane/abstract.hiki +3 -3
  26. data/hikiutils_yamane/discussion.hiki +9 -0
  27. data/hikiutils_yamane/hikiutils_yamane.hiki +8 -10
  28. data/hikiutils_yamane/introduction.hiki +1 -1
  29. data/hikiutils_yamane/latex_dir/abstract.tex +3 -3
  30. data/hikiutils_yamane/latex_dir/{%CA%FD/313/241.aux → discussion.aux} +8 -7
  31. data/hikiutils_yamane/latex_dir/discussion.tex +9 -0
  32. data/hikiutils_yamane/latex_dir/hikiutils_yamane.aux +3 -6
  33. data/hikiutils_yamane/latex_dir/hikiutils_yamane.log +50 -59
  34. data/hikiutils_yamane/latex_dir/hikiutils_yamane.pdf +0 -0
  35. data/hikiutils_yamane/latex_dir/hikiutils_yamane.synctex.gz +0 -0
  36. data/hikiutils_yamane/latex_dir/hikiutils_yamane.tex +4 -7
  37. data/hikiutils_yamane/latex_dir/hikiutils_yamane.toc +21 -21
  38. data/hikiutils_yamane/latex_dir/introduction.tex +1 -1
  39. data/hikiutils_yamane/latex_dir/method.aux +46 -0
  40. data/hikiutils_yamane/latex_dir/method.tex +247 -0
  41. data/hikiutils_yamane/latex_dir/results.aux +49 -0
  42. data/hikiutils_yamane/latex_dir/results.tex +249 -0
  43. data/hikiutils_yamane/method.hiki +234 -0
  44. data/hikiutils_yamane/results.hiki +225 -0
  45. data/hikiutils_yamane/toc.hiki +0 -1
  46. data/lib/hikiutils/version.rb +1 -1
  47. data/lib/hikiutils_thor.rb~ +37 -37
  48. data/lib/templates/Rakefile_hiki_sync +32 -17
  49. data/lib/templates/mi_key_bind_setting +1 -0
  50. metadata +33 -19
  51. data/hikiutils_yamane/Rakefile~ +0 -477
  52. data/hikiutils_yamane/command.hiki +0 -111
  53. data/hikiutils_yamane/compare.hiki +0 -116
  54. data/hikiutils_yamane/latex_dir/command.aux +0 -35
  55. data/hikiutils_yamane/latex_dir/command.log +0 -0
  56. data/hikiutils_yamane/latex_dir/command.tex +0 -123
  57. data/hikiutils_yamane/latex_dir/compare.aux +0 -30
  58. data/hikiutils_yamane/latex_dir/compare.tex +0 -123
  59. data/hikiutils_yamane/latex_dir/optparse.aux +0 -31
  60. data/hikiutils_yamane/latex_dir/optparse.tex +0 -119
  61. data/hikiutils_yamane/latex_dir/thor.aux +0 -32
  62. data/hikiutils_yamane/latex_dir/thor.tex +0 -110
  63. data/hikiutils_yamane/optparse.hiki +0 -114
  64. 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
- >>>
@@ -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のほうがコードが短くなり,コマンドの定義も簡単に行うことができる.また,実行手順も分かりやすくコードが読みやすいため書き換えもすぐ行うことができるので,より直感的なコマンドを実装することも可能となった.