my_help 0.8.5 → 1.1a

Sign up to get free protection for your applications and to get access to all the features.
Files changed (72) hide show
  1. checksums.yaml +4 -4
  2. data/'../test'/.my_help/.my_help_conf.yml +2 -0
  3. data/'../test'/.my_help/emacs.org +50 -0
  4. data/{lib/templates → '../test'/.my_help}/org.org +0 -0
  5. data/{lib/templates → '../test'/.my_help}/todo.org +0 -0
  6. data/.gitignore +9 -1
  7. data/.my_help/example2.org +9 -0
  8. data/.rspec +1 -2
  9. data/.rspec_status +13 -0
  10. data/.yardoc/checksums +3 -3
  11. data/.yardoc/object_types +0 -0
  12. data/.yardoc/objects/root.dat +0 -0
  13. data/Gemfile +10 -5
  14. data/Gemfile.lock +63 -56
  15. data/README.org +35 -29
  16. data/Rakefile +25 -14
  17. data/doc/MyHelp/Control.html +443 -221
  18. data/doc/MyHelp.html +7 -7
  19. data/doc/OrgToYaml.html +12 -10
  20. data/doc/_index.html +7 -7
  21. data/doc/class_list.html +2 -2
  22. data/doc/css/style.css +3 -2
  23. data/doc/file.README.html +29 -29
  24. data/doc/file_list.html +2 -2
  25. data/doc/frames.html +2 -2
  26. data/doc/index.html +29 -29
  27. data/doc/js/app.js +14 -3
  28. data/doc/method_list.html +24 -8
  29. data/doc/top-level-namespace.html +6 -6
  30. data/docs/README.html +218 -0
  31. data/docs/README.org +202 -0
  32. data/docs/old_docs/16b_nasu.pdf +0 -0
  33. data/docs/old_docs/17b_oyagi.pdf +0 -0
  34. data/docs/old_docs/19b_okabata.pdf +0 -0
  35. data/docs/old_docs/19b_yamaguchi.pdf +0 -0
  36. data/docs/old_docs/features/delete.feature +7 -0
  37. data/docs/old_docs/features/edit.feature +7 -0
  38. data/docs/old_docs/features/list.feature +6 -0
  39. data/docs/old_docs/features/new.feature +7 -0
  40. data/docs/old_docs/features/step_definitions/delete_spec.rb +12 -0
  41. data/docs/old_docs/features/step_definitions/edit_spec.rb +14 -0
  42. data/docs/old_docs/features/step_definitions/list_spec.rb +10 -0
  43. data/docs/old_docs/features/step_definitions/new_spec.rb +12 -0
  44. data/docs/old_docs/features/support/env.rb +3 -0
  45. data/docs/old_docs/fukumori_symp/18_human_interface_fukumori_workshop.pdf +0 -0
  46. data/docs/old_docs/fukumori_symp/memo_perp_magician.pdf +0 -0
  47. data/docs/old_docs/fukumori_symp//347/237/245/350/255/230/343/201/256/347/233/264/344/272/244/350/243/234/347/251/272/351/226/223.png +0 -0
  48. data/exe/my_help +1 -92
  49. data/lib/my_help/cli.rb +106 -0
  50. data/lib/my_help/config.rb +70 -0
  51. data/lib/my_help/git_cli.rb +40 -0
  52. data/lib/my_help/init.rb +28 -0
  53. data/lib/my_help/list.rb +76 -0
  54. data/lib/my_help/md2hash.rb +54 -0
  55. data/lib/my_help/modify.rb +33 -0
  56. data/lib/my_help/org2hash.rb +45 -0
  57. data/lib/my_help/org2yml.rb +15 -14
  58. data/lib/my_help/version.rb +3 -1
  59. data/lib/my_help.rb +23 -7
  60. data/lib/templates/emacs.org +13 -14
  61. data/lib/templates/example.md +17 -0
  62. data/lib/templates/example.org +9 -0
  63. data/my_help.gemspec +27 -24
  64. data/tmp.txt +14 -0
  65. metadata +52 -26
  66. data/README.html +0 -443
  67. data/README.rdoc +0 -6
  68. data/bin/my_help_thor +0 -66
  69. data/exe/my_help_gli +0 -82
  70. data/lib/my_help/my_help_controll.rb +0 -220
  71. data/lib/my_help/tomo_help_controll.rb +0 -0
  72. data/lib/templates/help_template.org +0 -8
data/docs/README.html ADDED
@@ -0,0 +1,218 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
3
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4
+ <html xmlns="http://www.w3.org/1999/xhtml" lang="jp" xml:lang="jp">
5
+ <head>
6
+ <!-- 2023-01-05 Thu 15:58 -->
7
+ <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
8
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
9
+ <title>my_help 開発メモ</title>
10
+ <meta name="author" content="Shigeto R. Nishitani" />
11
+ <meta name="generator" content="Org Mode" />
12
+ <link rel="stylesheet" type="text/css" href="https://fniessen.github.io/org-html-themes/src/readtheorg_theme/css/htmlize.css"/>
13
+ <link rel="stylesheet" type="text/css" href="https://fniessen.github.io/org-html-themes/src/readtheorg_theme/css/readtheorg.css"/>
14
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
15
+ <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
16
+ <script type="text/javascript" src="https://fniessen.github.io/org-html-themes/src/lib/js/jquery.stickytableheaders.min.js"></script>
17
+ <script type="text/javascript" src="https://fniessen.github.io/org-html-themes/src/readtheorg_theme/js/readtheorg.js"></script>
18
+ </head>
19
+ <body>
20
+ <div id="content" class="content">
21
+ <h1 class="title">my_help 開発メモ</h1>
22
+ <div id="table-of-contents" role="doc-toc">
23
+ <h2>Table of Contents</h2>
24
+ <div id="text-table-of-contents" role="doc-toc">
25
+ <ul>
26
+ <li><a href="#orge4fa5d5">1. <span class="timestamp-wrapper"><span class="timestamp">&lt;2022-12-15 Thu&gt; </span></span> subcommand and options</a></li>
27
+ <li><a href="#org66ec027">2. <span class="timestamp-wrapper"><span class="timestamp">&lt;2022-12-15 Thu&gt; </span></span> rspecでerror</a>
28
+ <ul>
29
+ <li><a href="#orgab3a666">2.1. 解決!!</a></li>
30
+ </ul>
31
+ </li>
32
+ <li><a href="#org18dc25e">3. <span class="timestamp-wrapper"><span class="timestamp">&lt;2021-10-18 Mon&gt; </span></span> conf_pathの追加</a></li>
33
+ <li><a href="#org2aec50d">4. <span class="timestamp-wrapper"><span class="timestamp">&lt;2021-11-08 Mon&gt; </span></span> conf_pathをactivate</a></li>
34
+ <li><a href="#org20943ec">5. <span class="timestamp-wrapper"><span class="timestamp">&lt;2021-11-08 Mon&gt; </span></span> bundle exec exe/my_help editでエラー</a></li>
35
+ </ul>
36
+ </div>
37
+ </div>
38
+
39
+ <div id="outline-container-orge4fa5d5" class="outline-2">
40
+ <h2 id="orge4fa5d5"><span class="section-number-2">1.</span> <span class="timestamp-wrapper"><span class="timestamp">&lt;2022-12-15 Thu&gt; </span></span> subcommand and options</h2>
41
+ <div class="outline-text-2" id="text-1">
42
+ <ul class="org-ul">
43
+ <li><a href="https://hawksnowlog.blogspot.com/2020/09/ruby-thor-tutorial.html#hello-thor">Ruby thor で CLI ツールの開発に入門してみる</a></li>
44
+ </ul>
45
+ </div>
46
+ </div>
47
+
48
+ <div id="outline-container-org66ec027" class="outline-2">
49
+ <h2 id="org66ec027"><span class="section-number-2">2.</span> <span class="timestamp-wrapper"><span class="timestamp">&lt;2022-12-15 Thu&gt; </span></span> rspecでerror</h2>
50
+ <div class="outline-text-2" id="text-2">
51
+ <p>
52
+ Arubaでrspecするとpwd directoryが/tmp/arubaになる?
53
+ そうすると今のままではrspecが通らなくなる.
54
+ example2.orgの置き場が不定.
55
+ spec側で強引に作るか...
56
+ </p>
57
+
58
+ <p>
59
+ それもsmartにしたいよね.
60
+ newでは後ろにoptionがあって,#{temp_dir}での作成とできるが,
61
+ これをその他のoptionsでやるのは難しそう.
62
+ </p>
63
+ </div>
64
+
65
+ <div id="outline-container-orgab3a666" class="outline-3">
66
+ <h3 id="orgab3a666"><span class="section-number-3">2.1.</span> 解決!!</h3>
67
+ <div class="outline-text-3" id="text-2-1">
68
+ <p>
69
+ Arubaだけの問題なので,テストの時用にhelp_dirを
70
+ Thorのoptionとして引けるようにした.
71
+ </p>
72
+ <div class="org-src-container">
73
+ <pre class="src src-ruby"><span class="linenr"> 1: </span> desc <span style="color: #8b7355;">"list [HELP] [ITEM]"</span>, <span style="color: #8b7355;">"list helps"</span>
74
+ <span class="linenr"> 2: </span> option <span style="color: #6e8b3d;">:help_dir</span>, <span style="color: #6e8b3d;">:type</span> =&gt; <span style="color: #6e8b3d;">:string</span>
75
+ <span class="linenr"> 3: </span> <span style="color: #7f7f7f;"># </span><span style="color: #7f7f7f;">use method_options [[https://github.com/rails/thor/wiki/Method-Options]]</span>
76
+ <span class="linenr"> 4: </span> <span style="color: #1c86ee;">def</span> <span style="color: #cd9b1d;">list</span>(*args)
77
+ <span class="linenr"> 5: </span> config = get_config(args).config
78
+ <span class="linenr"> 6: </span> help_dir = options[<span style="color: #8b7355;">"help_dir"</span>] || config[<span style="color: #6e8b3d;">:local_help_dir</span>]
79
+ <span class="linenr"> 7: </span> <span style="color: #cd6600;">puts</span> <span style="color: #00688b;">List</span>.new(help_dir,
80
+ <span class="linenr"> 8: </span> config[<span style="color: #6e8b3d;">:ext</span>]).list(*args.join(<span style="color: #8b7355;">" "</span>))
81
+ <span class="linenr"> 9: </span> <span style="color: #1c86ee;">end</span>
82
+ <span class="linenr">10: </span>...
83
+ <span class="linenr">11: </span> context <span style="color: #8b7355;">"list command"</span> <span style="color: #1c86ee;">do</span>
84
+ <span class="linenr">12: </span> temp_dir = <span style="color: #00688b;">Dir</span>.pwd
85
+ <span class="linenr">13: </span> let(<span style="color: #6e8b3d;">:help_name</span>) { <span style="color: #8b7355;">"example"</span> }
86
+ <span class="linenr">14: </span> let(<span style="color: #6e8b3d;">:help_dir</span>) { <span style="color: #00688b;">File</span>.join(temp_dir, <span style="color: #8b7355;">"lib"</span>, <span style="color: #8b7355;">"templates"</span>) }
87
+ <span class="linenr">15: </span>
88
+ <span class="linenr">16: </span> it <span style="color: #8b7355;">"list with name"</span> <span style="color: #1c86ee;">do</span>
89
+ <span class="linenr">17: </span> run_command(<span style="color: #8b7355;">"my_help list </span><span style="color: #2e8b57;">#{help_name}</span><span style="color: #8b7355;"> a_item --help_dir=</span><span style="color: #2e8b57;">#{help_dir}</span><span style="color: #8b7355;">"</span>)
90
+ <span class="linenr">18: </span> stop_all_commands
91
+ <span class="linenr">19: </span> expect(last_command_started).to have_output(<span style="color: #8b7355;">/a_item/</span>)
92
+ <span class="linenr">20: </span> <span style="color: #1c86ee;">end</span>
93
+ <span class="linenr">21: </span> <span style="color: #1c86ee;">end</span>
94
+ <span class="linenr">22: </span>
95
+ </pre>
96
+ </div>
97
+ </div>
98
+ </div>
99
+ </div>
100
+
101
+ <div id="outline-container-org18dc25e" class="outline-2">
102
+ <h2 id="org18dc25e"><span class="section-number-2">3.</span> <span class="timestamp-wrapper"><span class="timestamp">&lt;2021-10-18 Mon&gt; </span></span> conf_pathの追加</h2>
103
+ <div class="outline-text-2" id="text-3">
104
+ <p>
105
+ my_help.confの場所を指定するconf_pathをnewで指定できるようにする.
106
+ </p>
107
+
108
+ <div class="org-src-container">
109
+ <pre class="src src-diff"><span class="linenr"> 1: </span><span style="color: #22aa22; background-color: #ddffdd;">&gt;</span><span style="background-color: #ddffdd;"> git diff</span>
110
+ <span class="linenr"> 2: </span><span style="background-color: #d9d9d9;">--- </span><span style="background-color: #bfbfbf; font-weight: bold;">a/lib/my_help/my_help_controll.rb</span>
111
+ <span class="linenr"> 3: </span><span style="background-color: #d9d9d9;">+++ </span><span style="background-color: #bfbfbf; font-weight: bold;">b/lib/my_help/my_help_controll.rb</span>
112
+ <span class="linenr"> 4: </span><span style="background-color: #d9d9d9;">@@ -5,13 +5,14 @@</span><span style="background-color: #d9d9d9;"> require 'yaml'</span>
113
+ <span class="linenr"> 5: </span> module MyHelp
114
+ <span class="linenr"> 6: </span> class Control
115
+ <span class="linenr"> 7: </span> attr_accessor :local_help_dir, :editor
116
+ <span class="linenr"> 8: </span><span style="color: #aa2222; background-color: #ffdddd;">-</span><span style="background-color: #ffdddd;"> def initialize()</span>
117
+ <span class="linenr"> 9: </span><span style="color: #22aa22; background-color: #ddffdd;">+</span><span style="background-color: #ddffdd;"> def initialize(</span><span style="background-color: #aaffaa;">conf_path=nil</span><span style="background-color: #ddffdd;">)</span>
118
+ <span class="linenr">10: </span> # for configuration setups
119
+ <span class="linenr">11: </span> # see https://stackoverflow.com/questions/6233124/where-to-place-access-config-file-in-gem
120
+ <span class="linenr">12: </span><span style="color: #aa2222; background-color: #ffdddd;">-</span>
121
+ <span class="linenr">13: </span><span style="color: #22aa22; background-color: #ddffdd;">+</span><span style="background-color: #ddffdd;"> </span><span style="background-color: #aaffaa;">@conf_path = conf_path || ENV['HOME']</span>
122
+ <span class="linenr">14: </span> @template_dir = File.expand_path("../../templates", __FILE__)
123
+ <span class="linenr">15: </span> @exe_dir = File.expand_path("../../exe", __FILE__)
124
+ <span class="linenr">16: </span><span style="color: #aa2222; background-color: #ffdddd;">-</span><span style="background-color: #ffdddd;"> @local_help_dir = File.join(</span><span style="background-color: #ffbbbb;">ENV[</span><span style="background-color: #ffdddd;">'</span><span style="background-color: #ffbbbb;">HOME</span><span style="background-color: #ffdddd;">'</span><span style="background-color: #ffbbbb;">]</span><span style="background-color: #ffdddd;">,'.my_help')</span>
125
+ <span class="linenr">17: </span><span style="color: #22aa22; background-color: #ddffdd;">+</span><span style="background-color: #ddffdd;"> @local_help_dir = File.join(</span><span style="background-color: #aaffaa;">@conf_path,</span><span style="background-color: #ddffdd;"> '</span><span style="background-color: #aaffaa;">.my_help</span><span style="background-color: #ddffdd;">'</span><span style="background-color: #aaffaa;">)</span><span style="background-color: #aaffaa;">
126
+ <span class="linenr">18: </span></span><span style="color: #22aa22; background-color: #aaffaa;">+</span><span style="background-color: #aaffaa;"> @conf_file = File.join(@local_help_dir</span><span style="background-color: #ddffdd;">, '.my_help</span><span style="background-color: #aaffaa;">_conf.yml</span><span style="background-color: #ddffdd;">')</span>
127
+ <span class="linenr">19: </span> @editor = ENV['EDITOR'] || 'emacs' #'code', 'emacs' #'vim' #default editor
128
+ <span class="linenr">20: </span> # @mini_account = File
129
+ <span class="linenr">21: </span> set_help_dir_if_not_exists
130
+ <span class="linenr">22: </span><span style="background-color: #d9d9d9;">@@ -28,9 +29,6 @@</span><span style="background-color: #d9d9d9;"> module MyHelp</span>
131
+ <span class="linenr">23: </span> end
132
+ <span class="linenr">24: </span>
133
+ <span class="linenr">25: </span> def load_conf
134
+ <span class="linenr">26: </span><span style="color: #aa2222; background-color: #ffdddd;">-</span><span style="background-color: #ffdddd;"> file_name = '.my_help_conf.yml'</span>
135
+ <span class="linenr">27: </span><span style="color: #aa2222; background-color: #ffdddd;">-</span><span style="background-color: #ffdddd;"> # @conf_file = File.join(Dir.pwd, file_name)</span>
136
+ <span class="linenr">28: </span><span style="color: #aa2222; background-color: #ffdddd;">-</span><span style="background-color: #ffdddd;"> @conf_file = File.join(@local_help_dir, file_name)</span>
137
+ <span class="linenr">29: </span> begin
138
+ <span class="linenr">30: </span> conf = YAML.load_file(@conf_file)
139
+ <span class="linenr">31: </span> @editor = conf[:editor]
140
+ </pre>
141
+ </div>
142
+
143
+ <p>
144
+ 変更箇所は次の通り.
145
+ </p>
146
+ <ul class="org-ul">
147
+ <li>initializeはconf_pathを受け取るが,指定されてない時はnil</li>
148
+ <li>これを@conf_pathに受け渡すが,defaultをENV['HOME']に指定</li>
149
+ <li>これでデフォルトのconfigurationを変更していく
150
+ やり方は,
151
+ <a href="https://stackoverflow.com/questions/6233124/where-to-place-access-config-file-in-gem">Where to place/access config file in gem?</a>
152
+ を参照する.</li>
153
+ </ul>
154
+
155
+ <p>
156
+ これによってTest::unitでのtest環境独自のmy_help環境を構築することが
157
+ できる.
158
+ </p>
159
+ </div>
160
+ </div>
161
+
162
+ <div id="outline-container-org2aec50d" class="outline-2">
163
+ <h2 id="org2aec50d"><span class="section-number-2">4.</span> <span class="timestamp-wrapper"><span class="timestamp">&lt;2021-11-08 Mon&gt; </span></span> conf_pathをactivate</h2>
164
+ <div class="outline-text-2" id="text-4">
165
+ <p>
166
+ testが進んできたので,conf_pathをactivateした.
167
+ そのためのテストが必要かも.
168
+ </p>
169
+
170
+ <ol class="org-ol">
171
+ <li>ENV['HOME']で指定した時と...</li>
172
+ <li>pwdで何もない時のoptionsがどうなっている?</li>
173
+ </ol>
174
+
175
+ <div class="org-src-container">
176
+ <pre class="src src-yaml"><span style="color: #2e8b57;">config</span>:
177
+ <span style="color: #2e8b57;">:template_dir</span>: <span style="color: #8b7355;">"/Users/bob/git_hub/my_help/lib/templates"</span>
178
+ <span style="color: #2e8b57;">:local_help_dir</span>: <span style="color: #8b7355;">"/Users/bob/git_hub/my_help/test/.my_help"</span>
179
+ <span style="color: #2e8b57;">:conf_file</span>: <span style="color: #8b7355;">"/Users/bob/git_hub/my_help/test/.my_help/.my_help_conf.yml"</span>
180
+ <span style="color: #2e8b57;">:editor</span>: emacs
181
+ </pre>
182
+ </div>
183
+ </div>
184
+ </div>
185
+
186
+ <div id="outline-container-org20943ec" class="outline-2">
187
+ <h2 id="org20943ec"><span class="section-number-2">5.</span> <span class="timestamp-wrapper"><span class="timestamp">&lt;2021-11-08 Mon&gt; </span></span> bundle exec exe/my_help editでエラー</h2>
188
+ <div class="outline-text-2" id="text-5">
189
+ <div class="org-src-container">
190
+ <pre class="src src-shell">Could not find ffi-1.15.4<span style="color: #1c86ee;"> in</span> any of the sources
191
+ Run <span style="color: #ff00ff;">`bundle install`</span> to install missing gems.
192
+ </pre>
193
+ </div>
194
+ <p>
195
+ とのエラー.
196
+ なんだろう.
197
+ </p>
198
+
199
+ <p>
200
+ さらに,command_lineで呼ぶと,
201
+ </p>
202
+ <pre class="example">
203
+ emacs: standard input is not a tty
204
+ </pre>
205
+
206
+ <p>
207
+ というエラーが出る.これまたなんだろう???
208
+ </p>
209
+ </div>
210
+ </div>
211
+ </div>
212
+ <div id="postamble" class="status">
213
+ <p class="author">Author: Shigeto R. Nishitani</p>
214
+ <p class="date">Created: 2023-01-05 Thu 15:58</p>
215
+ <p class="validation"><a href="https://validator.w3.org/check?uri=referer">Validate</a></p>
216
+ </div>
217
+ </body>
218
+ </html>
data/docs/README.org ADDED
@@ -0,0 +1,202 @@
1
+ #+qiita_teams: 5e172c4b5167abe35a3e
2
+ #+qiita_private: 6487b0b54e4eda26e9f6
3
+ #+OPTIONS: ^:{}
4
+ #+STARTUP: indent nolineimages
5
+ #+TITLE: my_help 開発メモ
6
+ #+AUTHOR: Shigeto R. Nishitani
7
+ #+EMAIL: (concat "shigeto_nishitani@mac.com")
8
+ #+LANGUAGE: jp
9
+ #+OPTIONS: H:4 toc:t num:2
10
+ # +OPTIONS: toc:nil
11
+ #+TAG: ruby, test, my_help
12
+ #+TWITTER: off
13
+ #+SETUPFILE: https://fniessen.github.io/org-html-themes/org/theme-readtheorg.setup
14
+
15
+ * <2023-01-06 Fri> get_configの置き場所
16
+ thorのsubcommandを使って
17
+ * <2023-01-05 Thu> cli directory指定
18
+ ** directory指定
19
+ テスト環境と本番環境でのhelp_dirあるいはconfig_dir指定の
20
+ 差異の吸収メモ.
21
+ - --help_dirでcliはhelp_dirを指定できる.
22
+ - 全て変更したはず.
23
+ - configが混乱しやすい...config[:ext]なんかを自動で返すといいが.
24
+ - rspec/unitでは
25
+ - config_spec.rb, modify_spec.rbではtmp_confをtemp_dirに作成
26
+ - list_spec.rbではtemplates_pathを絶対パスで参照
27
+
28
+ ** Thorでのdirectory指定の変更
29
+ Thorのdirectory指定をしっかりやってみる.
30
+
31
+ #+begin_src bash
32
+ bundle exec rspec --format documentation -e list spec/cli_spec.rb --help_dir='./tmp/.my_Help'
33
+ invalid option: --help_dir=./tmp/.my_Help
34
+
35
+ Please use --help for a listing of valid options
36
+ #+end_src
37
+ これはだめ.なぜなら,--help_dirはmy_helpのlistのoptionであって,
38
+ rspecは解釈してくれない.
39
+
40
+ ここは,cli_spec.rbで
41
+ #+begin_src ruby
42
+ temp_dir = Dir.pwd
43
+ let(:help_name) { "example" }
44
+ let(:help_dir) { File.join(temp_dir, "lib", "templates") }
45
+
46
+ it "list with name" do
47
+ run_command("my_help list #{help_name} a_item --help_dir=#{help_dir}")
48
+ stop_all_commands
49
+ expect(last_command_started).to have_output(/a_item/)
50
+ end
51
+ #+end_src
52
+ とすべき.
53
+
54
+ そうすると
55
+ #+begin_src bash
56
+ bundle exec exe/my_help list --help_dir='/Users/bob/git_hub/my_help/lib/templates'
57
+ #+end_src
58
+ でも動く.
59
+ そうしておいて,optionsを移動.
60
+
61
+ 今は,
62
+ #+begin_src bash
63
+ > bundle exec exe/my_help help list
64
+ Usage:
65
+ my_help list [HELP] [ITEM]
66
+
67
+ Options:
68
+ [--help-dir=HELP_DIR]
69
+ [--layer=N]
70
+
71
+ list helps
72
+ #+end_src
73
+ となっていたが,
74
+
75
+ #+begin_src bash
76
+ bundle exec exe/my_help
77
+ Commands:
78
+ my_help delete [HELP] # delete HELP
79
+ my_help edit [HELP] # edit help
80
+ ...
81
+ Options:
82
+ [--help-dir=HELP_DIR]
83
+ #+end_src
84
+ とclass_optionとすることで,共通して指定できるように変更.
85
+
86
+ * <2022-12-15 Thu> subcommand and options
87
+ - [[https://hawksnowlog.blogspot.com/2020/09/ruby-thor-tutorial.html#hello-thor][Ruby thor で CLI ツールの開発に入門してみる]]
88
+
89
+ * <2022-12-15 Thu> rspecでerror
90
+ Arubaでrspecするとpwd directoryが/tmp/arubaになる?
91
+ そうすると今のままではrspecが通らなくなる.
92
+ example2.orgの置き場が不定.
93
+ spec側で強引に作るか...
94
+
95
+ それもsmartにしたいよね.
96
+ newでは後ろにoptionがあって,#{temp_dir}での作成とできるが,
97
+ これをその他のoptionsでやるのは難しそう.
98
+
99
+ ** 解決!!
100
+ Arubaだけの問題なので,テストの時用にhelp_dirを
101
+ Thorのoptionとして引けるようにした.
102
+ #+begin_src ruby -n
103
+ desc "list [HELP] [ITEM]", "list helps"
104
+ option :help_dir, :type => :string
105
+ # use method_options [[https://github.com/rails/thor/wiki/Method-Options]]
106
+ def list(*args)
107
+ config = get_config(args).config
108
+ help_dir = options["help_dir"] || config[:local_help_dir]
109
+ puts List.new(help_dir,
110
+ config[:ext]).list(*args.join(" "))
111
+ end
112
+ ...
113
+ context "list command" do
114
+ temp_dir = Dir.pwd
115
+ let(:help_name) { "example" }
116
+ let(:help_dir) { File.join(temp_dir, "lib", "templates") }
117
+
118
+ it "list with name" do
119
+ run_command("my_help list #{help_name} a_item --help_dir=#{help_dir}")
120
+ stop_all_commands
121
+ expect(last_command_started).to have_output(/a_item/)
122
+ end
123
+ end
124
+
125
+ #+end_src
126
+
127
+ * <2021-10-18 月> conf_pathの追加
128
+ my_help.confの場所を指定するconf_pathをnewで指定できるようにする.
129
+
130
+ #+begin_src diff -n -i
131
+ > git diff
132
+ --- a/lib/my_help/my_help_controll.rb
133
+ +++ b/lib/my_help/my_help_controll.rb
134
+ @@ -5,13 +5,14 @@ require 'yaml'
135
+ module MyHelp
136
+ class Control
137
+ attr_accessor :local_help_dir, :editor
138
+ - def initialize()
139
+ + def initialize(conf_path=nil)
140
+ # for configuration setups
141
+ # see https://stackoverflow.com/questions/6233124/where-to-place-access-config-file-in-gem
142
+ -
143
+ + @conf_path = conf_path || ENV['HOME']
144
+ @template_dir = File.expand_path("../../templates", __FILE__)
145
+ @exe_dir = File.expand_path("../../exe", __FILE__)
146
+ - @local_help_dir = File.join(ENV['HOME'],'.my_help')
147
+ + @local_help_dir = File.join(@conf_path, '.my_help')
148
+ + @conf_file = File.join(@local_help_dir, '.my_help_conf.yml')
149
+ @editor = ENV['EDITOR'] || 'emacs' #'code', 'emacs' #'vim' #default editor
150
+ # @mini_account = File
151
+ set_help_dir_if_not_exists
152
+ @@ -28,9 +29,6 @@ module MyHelp
153
+ end
154
+
155
+ def load_conf
156
+ - file_name = '.my_help_conf.yml'
157
+ - # @conf_file = File.join(Dir.pwd, file_name)
158
+ - @conf_file = File.join(@local_help_dir, file_name)
159
+ begin
160
+ conf = YAML.load_file(@conf_file)
161
+ @editor = conf[:editor]
162
+ #+end_src
163
+
164
+ 変更箇所は次の通り.
165
+ - initializeはconf_pathを受け取るが,指定されてない時はnil
166
+ - これを@conf_pathに受け渡すが,defaultをENV['HOME']に指定
167
+ - これでデフォルトのconfigurationを変更していく
168
+ やり方は,
169
+ [[https://stackoverflow.com/questions/6233124/where-to-place-access-config-file-in-gem][Where to place/access config file in gem?]]
170
+ を参照する.
171
+
172
+ これによってTest::unitでのtest環境独自のmy_help環境を構築することが
173
+ できる.
174
+
175
+ * <2021-11-08 月> conf_pathをactivate
176
+ testが進んできたので,conf_pathをactivateした.
177
+ そのためのテストが必要かも.
178
+
179
+ 1. ENV['HOME']で指定した時と...
180
+ 1. pwdで何もない時のoptionsがどうなっている?
181
+
182
+ #+begin_src yaml
183
+ config:
184
+ :template_dir: "/Users/bob/git_hub/my_help/lib/templates"
185
+ :local_help_dir: "/Users/bob/git_hub/my_help/test/.my_help"
186
+ :conf_file: "/Users/bob/git_hub/my_help/test/.my_help/.my_help_conf.yml"
187
+ :editor: emacs
188
+ #+end_src
189
+
190
+ * <2021-11-08 月> bundle exec exe/my_help editでエラー
191
+ #+begin_src shell
192
+ Could not find ffi-1.15.4 in any of the sources
193
+ Run `bundle install` to install missing gems.
194
+ #+end_src
195
+ とのエラー.
196
+ なんだろう.
197
+
198
+ さらに,command_lineで呼ぶと,
199
+ : emacs: standard input is not a tty
200
+ というエラーが出る.これまたなんだろう???
201
+
202
+
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,7 @@
1
+ Feature: helpの削除
2
+
3
+ Scenario: help を1つ削除する.
4
+ Given `$ bundle exec bin/my_help_thor list`でnew_helpが1つ存在する.
5
+ When `$ bundle exec bin/my_help_thor delete new_help`を実行する.
6
+ And `$ bundle exec bin/my_help_thor list`を実行する.
7
+ Then new_helpが存在しない.
@@ -0,0 +1,7 @@
1
+ Feature: helpの編集
2
+
3
+ Scenario: help を編集する.
4
+ Given `$ bundle exec bin/my_help_thor list`でnew_helpが存在しない.
5
+ When `$ bundle exec bin/my_help_thor new new_help`を実行する.
6
+ And `$ bundle exec bin/my_help_thor edit new_help`実行して、全ての記述を削除する.
7
+ Then ~/.my_help/new_help.orgが空ファイルである.
@@ -0,0 +1,6 @@
1
+ Feature: helpの一覧表示
2
+
3
+ Scenario: help の一覧を表示する
4
+ Given `$ find ~/.my_help -name "*.org" | xargs head -n 1 | grep -v '#+STARTUP: indent nolineimages'`で確認できるhelpがファイルが~/.my_helpに存在する.
5
+ When `$ bundle exec bin/my_help_thor list`を実行する.
6
+ Then ~/.my_helpのファイル名相当の項目がlistに全て存在する.
@@ -0,0 +1,7 @@
1
+ Feature: helpの作成
2
+
3
+ Scenario: help を1つ作成する.
4
+ Given `$ bundle exec bin/my_help_thor list`でnew_helpが存在しない.
5
+ When `$ bundle exec bin/my_help_thor new new_help`を実行する.
6
+ And `$ bundle exec bin/my_help_thor list`を実行する.
7
+ Then new_helpが存在する.
@@ -0,0 +1,12 @@
1
+ # -*- coding: utf-8 -*-
2
+ Given("sample_new.yml file を削除したい") do
3
+
4
+ end
5
+
6
+ When("{string} と入力") do |string|
7
+
8
+ end
9
+
10
+ Then("file を削除する") do
11
+ MyHelp::Control.new.delete_help("sample_new")
12
+ end
@@ -0,0 +1,14 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ Given("sampleファイルを編集したい") do
4
+ end
5
+
6
+ When("{string} と入力する") do |string|
7
+ end
8
+
9
+ Then("sampleファイルが開く") do
10
+ MyHelp::Control.new.edit_help("sample")
11
+ end
12
+
13
+ And("sampleファイルを書き換える") do
14
+ end
@@ -0,0 +1,10 @@
1
+ # -*- coding: utf-8 -*-
2
+ Given("file 一覧を表示させたい") do
3
+ end
4
+
5
+ When("{string}と入力する") do |string|
6
+ end
7
+
8
+ Then("file 一覧が表示される") do
9
+ MyHelp::Control.new.list_all
10
+ end
@@ -0,0 +1,12 @@
1
+ # -*- coding: utf-8 -*-
2
+ Given("sample_new.yml file を作成したい") do
3
+
4
+ end
5
+
6
+ When("{string} と入力する") do |string|
7
+
8
+ end
9
+
10
+ Then("sample_new file が作成される") do
11
+ MyHelp::Control.new.init_help("sample_new")
12
+ end
@@ -0,0 +1,3 @@
1
+ # -*- coding: utf-8 -*-
2
+ $LOAD_PATH.unshift File.expand_path('../../lib' , __FILE__)
3
+ require 'my_help'
data/exe/my_help CHANGED
@@ -1,95 +1,4 @@
1
1
  #!/usr/bin/env ruby
2
- require 'thor'
3
2
  require 'my_help'
4
- require 'colorize'
5
- require 'command_line/global'
6
3
 
7
- class MyCLI < Thor
8
- desc('setup', 'set up the test database')
9
- def setup(*args)
10
- $control = MyHelp::Control.new()
11
- end
12
-
13
- desc "list [HELP] [ITEM]", "list all helps, specific HELP, or ITEM"
14
- def list(*args)
15
- invoke :setup
16
- file = args[0]
17
- item = args[1]
18
- if file.nil?
19
- puts $control.list_all.blue # list []
20
- elsif item.nil?
21
- begin
22
- puts $control.list_help(file) # list [file]
23
- rescue => e
24
- puts e.to_s.red
25
- end
26
- else
27
- begin
28
- puts $control.show_item(file, item) # list [file] [item]
29
- rescue => e
30
- puts e.to_s.red
31
- end
32
- end
33
- end
34
-
35
- desc "version", "show version"
36
- def version
37
- invoke :setup
38
- puts MyHelp::VERSION
39
- end
40
-
41
- desc "set_editor EDITOR_NAME", "set editor to EDITOR_NAME"
42
- def set_editor(editor_name)
43
- invoke :setup
44
- $control.set_editor(editor_name)
45
- end
46
-
47
- desc "edit HELP", "edit HELP"
48
- def edit(help_name)
49
- invoke :setup
50
- $control.edit_help(help_name)
51
- end
52
-
53
- desc "new HELP", "make new HELP"
54
- def new(help_name)
55
- invoke :setup
56
- $control.init_help(help_name)
57
- end
58
-
59
- desc "delete HELP", "delete HELP"
60
- def delete(help_name)
61
- invoke :setup
62
- $control.delete_help(help_name)
63
- end
64
- desc "git [push|pull]", "git push or pull"
65
- def git(push_or_pull)
66
- p push_or_pull
67
- invoke :setup
68
- dir = $control.local_help_dir
69
- Dir.chdir(dir) do
70
- case push_or_pull
71
- when 'push'
72
- comms = ['git add -A',
73
- "git commit -m 'git push from my_help'",
74
- "git push origin master"]
75
- when 'pull'
76
- comms = ['git pull origin master']
77
- else
78
- raise "my_help git was called by the other than 'push or pull'"
79
- end
80
- comms.each do |comm|
81
- c = command_line(comm)
82
- puts c.stdout.blue
83
- puts c.stderr.red
84
- end
85
- end
86
- end
87
-
88
- # desc "search {find_char}", "search FIND_CHAR"
89
- # def search(find_char)
90
- # invoke :setup
91
- # $control.search_help(find_char)
92
- # end
93
- end
94
-
95
- MyCLI.start(ARGV)
4
+ MyHelp::CLI.start(ARGV)