hookapp 0.0.7 → 2.0.3

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.
Files changed (78) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -0
  3. data/CHANGELOG.md +14 -0
  4. data/Gemfile +1 -1
  5. data/Gemfile.lock +2 -2
  6. data/LICENSE.md +31 -0
  7. data/OVERVIEW.md +80 -0
  8. data/README.md +282 -21
  9. data/Rakefile +1 -1
  10. data/bin/hook +127 -10
  11. data/buildnotes.md +29 -0
  12. data/hook.rdoc +63 -4
  13. data/hookapp.gemspec +9 -8
  14. data/html/App.html +119 -0
  15. data/html/GLI.html +99 -0
  16. data/html/GLI/Commands.html +99 -0
  17. data/html/GLI/Commands/Doc.html +99 -0
  18. data/html/GLI/Commands/MarkdownDocumentListener.html +717 -0
  19. data/html/Hook.html +113 -0
  20. data/html/HookApp.html +1222 -0
  21. data/html/Hooker.html +119 -0
  22. data/html/README_rdoc.html +328 -0
  23. data/html/String.html +427 -0
  24. data/html/created.rid +9 -0
  25. data/html/css/fonts.css +167 -0
  26. data/html/css/rdoc.css +619 -0
  27. data/html/fonts/Lato-Light.ttf +0 -0
  28. data/html/fonts/Lato-LightItalic.ttf +0 -0
  29. data/html/fonts/Lato-Regular.ttf +0 -0
  30. data/html/fonts/Lato-RegularItalic.ttf +0 -0
  31. data/html/fonts/SourceCodePro-Bold.ttf +0 -0
  32. data/html/fonts/SourceCodePro-Regular.ttf +0 -0
  33. data/html/images/add.png +0 -0
  34. data/html/images/arrow_up.png +0 -0
  35. data/html/images/brick.png +0 -0
  36. data/html/images/brick_link.png +0 -0
  37. data/html/images/bug.png +0 -0
  38. data/html/images/bullet_black.png +0 -0
  39. data/html/images/bullet_toggle_minus.png +0 -0
  40. data/html/images/bullet_toggle_plus.png +0 -0
  41. data/html/images/date.png +0 -0
  42. data/html/images/delete.png +0 -0
  43. data/html/images/find.png +0 -0
  44. data/html/images/loadingAnimation.gif +0 -0
  45. data/html/images/macFFBgHack.png +0 -0
  46. data/html/images/package.png +0 -0
  47. data/html/images/page_green.png +0 -0
  48. data/html/images/page_white_text.png +0 -0
  49. data/html/images/page_white_width.png +0 -0
  50. data/html/images/plugin.png +0 -0
  51. data/html/images/ruby.png +0 -0
  52. data/html/images/tag_blue.png +0 -0
  53. data/html/images/tag_green.png +0 -0
  54. data/html/images/transparent.png +0 -0
  55. data/html/images/wrench.png +0 -0
  56. data/html/images/wrench_orange.png +0 -0
  57. data/html/images/zoom.png +0 -0
  58. data/html/index.html +308 -0
  59. data/html/js/darkfish.js +84 -0
  60. data/html/js/navigation.js +105 -0
  61. data/html/js/navigation.js.gz +0 -0
  62. data/html/js/search.js +110 -0
  63. data/html/js/search_index.js +1 -0
  64. data/html/js/search_index.js.gz +0 -0
  65. data/html/js/searcher.js +229 -0
  66. data/html/js/searcher.js.gz +0 -0
  67. data/html/table_of_contents.html +409 -0
  68. data/lib/completion/hook_completion.bash +22 -0
  69. data/lib/completion/hook_completion.fish +31 -0
  70. data/lib/completion/hook_completion.zsh +22 -0
  71. data/lib/helpers/fuzzyfilefinder +0 -0
  72. data/lib/hook.rb +5 -1
  73. data/lib/hook/hookapp.rb +489 -0
  74. data/lib/hook/hooker.rb +1 -344
  75. data/lib/hook/markdown_document_listener.rb +164 -0
  76. data/lib/hook/string.rb +60 -0
  77. data/lib/hook/version.rb +3 -1
  78. metadata +76 -12
@@ -0,0 +1,113 @@
1
+ <!DOCTYPE html>
2
+
3
+ <html>
4
+ <head>
5
+ <meta charset="UTF-8">
6
+
7
+ <title>module Hook - hookapp</title>
8
+
9
+ <script type="text/javascript">
10
+ var rdoc_rel_prefix = "./";
11
+ var index_rel_prefix = "./";
12
+ </script>
13
+
14
+ <script src="./js/navigation.js" defer></script>
15
+ <script src="./js/search.js" defer></script>
16
+ <script src="./js/search_index.js" defer></script>
17
+ <script src="./js/searcher.js" defer></script>
18
+ <script src="./js/darkfish.js" defer></script>
19
+
20
+ <link href="./css/fonts.css" rel="stylesheet">
21
+ <link href="./css/rdoc.css" rel="stylesheet">
22
+
23
+
24
+
25
+
26
+ <body id="top" role="document" class="module">
27
+ <nav role="navigation">
28
+ <div id="project-navigation">
29
+ <div id="home-section" role="region" title="Quick navigation" class="nav-section">
30
+ <h2>
31
+ <a href="./index.html" rel="home">Home</a>
32
+ </h2>
33
+
34
+ <div id="table-of-contents-navigation">
35
+ <a href="./table_of_contents.html#pages">Pages</a>
36
+ <a href="./table_of_contents.html#classes">Classes</a>
37
+ <a href="./table_of_contents.html#methods">Methods</a>
38
+ </div>
39
+ </div>
40
+
41
+ <div id="search-section" role="search" class="project-section initially-hidden">
42
+ <form action="#" method="get" accept-charset="utf-8">
43
+ <div id="search-field-wrapper">
44
+ <input id="search-field" role="combobox" aria-label="Search"
45
+ aria-autocomplete="list" aria-controls="search-results"
46
+ type="text" name="search" placeholder="Search" spellcheck="false"
47
+ title="Type to search, Up and Down to navigate, Enter to load">
48
+ </div>
49
+
50
+ <ul id="search-results" aria-label="Search Results"
51
+ aria-busy="false" aria-expanded="false"
52
+ aria-atomic="false" class="initially-hidden"></ul>
53
+ </form>
54
+ </div>
55
+
56
+ </div>
57
+
58
+
59
+
60
+ <div id="class-metadata">
61
+
62
+
63
+
64
+
65
+
66
+ </div>
67
+ </nav>
68
+
69
+ <main role="main" aria-labelledby="module-Hook">
70
+ <h1 id="module-Hook" class="module">
71
+ module Hook
72
+ </h1>
73
+
74
+ <section class="description">
75
+
76
+ </section>
77
+
78
+
79
+ <section id="5Buntitled-5D" class="documentation-section">
80
+
81
+
82
+
83
+
84
+
85
+ <section class="constants-list">
86
+ <header>
87
+ <h3>Constants</h3>
88
+ </header>
89
+ <dl>
90
+
91
+ <dt id="VERSION">VERSION
92
+
93
+ <dd>
94
+
95
+
96
+ </dl>
97
+ </section>
98
+
99
+
100
+
101
+
102
+
103
+ </section>
104
+
105
+ </main>
106
+
107
+
108
+ <footer id="validator-badges" role="contentinfo">
109
+ <p><a href="https://validator.w3.org/check/referer">Validate</a>
110
+ <p>Generated by <a href="https://ruby.github.io/rdoc/">RDoc</a> 6.2.1.
111
+ <p>Based on <a href="http://deveiate.org/projects/Darkfish-RDoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
112
+ </footer>
113
+
@@ -0,0 +1,1222 @@
1
+ <!DOCTYPE html>
2
+
3
+ <html>
4
+ <head>
5
+ <meta charset="UTF-8">
6
+
7
+ <title>module HookApp - hookapp</title>
8
+
9
+ <script type="text/javascript">
10
+ var rdoc_rel_prefix = "./";
11
+ var index_rel_prefix = "./";
12
+ </script>
13
+
14
+ <script src="./js/navigation.js" defer></script>
15
+ <script src="./js/search.js" defer></script>
16
+ <script src="./js/search_index.js" defer></script>
17
+ <script src="./js/searcher.js" defer></script>
18
+ <script src="./js/darkfish.js" defer></script>
19
+
20
+ <link href="./css/fonts.css" rel="stylesheet">
21
+ <link href="./css/rdoc.css" rel="stylesheet">
22
+
23
+
24
+
25
+
26
+ <body id="top" role="document" class="module">
27
+ <nav role="navigation">
28
+ <div id="project-navigation">
29
+ <div id="home-section" role="region" title="Quick navigation" class="nav-section">
30
+ <h2>
31
+ <a href="./index.html" rel="home">Home</a>
32
+ </h2>
33
+
34
+ <div id="table-of-contents-navigation">
35
+ <a href="./table_of_contents.html#pages">Pages</a>
36
+ <a href="./table_of_contents.html#classes">Classes</a>
37
+ <a href="./table_of_contents.html#methods">Methods</a>
38
+ </div>
39
+ </div>
40
+
41
+ <div id="search-section" role="search" class="project-section initially-hidden">
42
+ <form action="#" method="get" accept-charset="utf-8">
43
+ <div id="search-field-wrapper">
44
+ <input id="search-field" role="combobox" aria-label="Search"
45
+ aria-autocomplete="list" aria-controls="search-results"
46
+ type="text" name="search" placeholder="Search" spellcheck="false"
47
+ title="Type to search, Up and Down to navigate, Enter to load">
48
+ </div>
49
+
50
+ <ul id="search-results" aria-label="Search Results"
51
+ aria-busy="false" aria-expanded="false"
52
+ aria-atomic="false" class="initially-hidden"></ul>
53
+ </form>
54
+ </div>
55
+
56
+ </div>
57
+
58
+
59
+
60
+ <div id="class-metadata">
61
+
62
+
63
+
64
+
65
+ <!-- Method Quickref -->
66
+ <div id="method-list-section" class="nav-section">
67
+ <h3>Methods</h3>
68
+
69
+ <ul class="link-list" role="directory">
70
+
71
+ <li ><a href="#method-i-all_bookmarks">#all_bookmarks</a>
72
+
73
+ <li ><a href="#method-i-bookmark_for">#bookmark_for</a>
74
+
75
+ <li ><a href="#method-i-bookmark_from_app">#bookmark_from_app</a>
76
+
77
+ <li ><a href="#method-i-clip_bookmark">#clip_bookmark</a>
78
+
79
+ <li ><a href="#method-i-clone_hooks">#clone_hooks</a>
80
+
81
+ <li ><a href="#method-i-copy_bookmark">#copy_bookmark</a>
82
+
83
+ <li ><a href="#method-i-delete_all_hooks">#delete_all_hooks</a>
84
+
85
+ <li ><a href="#method-i-delete_hooks">#delete_hooks</a>
86
+
87
+ <li ><a href="#method-i-format_regex">#format_regex</a>
88
+
89
+ <li ><a href="#method-i-get_hooks">#get_hooks</a>
90
+
91
+ <li ><a href="#method-i-link_all">#link_all</a>
92
+
93
+ <li ><a href="#method-i-link_files">#link_files</a>
94
+
95
+ <li ><a href="#method-i-linked_bookmarks">#linked_bookmarks</a>
96
+
97
+ <li ><a href="#method-i-open_gui">#open_gui</a>
98
+
99
+ <li ><a href="#method-i-open_linked">#open_linked</a>
100
+
101
+ <li ><a href="#method-i-output_array">#output_array</a>
102
+
103
+ <li ><a href="#method-i-search_bookmarks">#search_bookmarks</a>
104
+
105
+ <li ><a href="#method-i-search_name">#search_name</a>
106
+
107
+ <li ><a href="#method-i-search_path_or_address">#search_path_or_address</a>
108
+
109
+ <li ><a href="#method-i-select_hook">#select_hook</a>
110
+
111
+ <li ><a href="#method-i-validate_format">#validate_format</a>
112
+
113
+ </ul>
114
+ </div>
115
+
116
+ </div>
117
+ </nav>
118
+
119
+ <main role="main" aria-labelledby="module-HookApp">
120
+ <h1 id="module-HookApp" class="module">
121
+ module HookApp
122
+ </h1>
123
+
124
+ <section class="description">
125
+
126
+ <p>Hook.app functions</p>
127
+
128
+ </section>
129
+
130
+
131
+ <section id="5Buntitled-5D" class="documentation-section">
132
+
133
+
134
+
135
+
136
+
137
+
138
+
139
+
140
+
141
+ <section id="public-instance-5Buntitled-5D-method-details" class="method-section">
142
+ <header>
143
+ <h3>Public Instance Methods</h3>
144
+ </header>
145
+
146
+
147
+ <div id="method-i-all_bookmarks" class="method-detail ">
148
+
149
+ <div class="method-heading">
150
+ <span class="method-name">all_bookmarks</span><span
151
+ class="method-args">()</span>
152
+
153
+ <span class="method-click-advice">click to toggle source</span>
154
+
155
+ </div>
156
+
157
+
158
+ <div class="method-description">
159
+
160
+ <p>Get all known bookmarks. Return array of bookmark hashes.</p>
161
+
162
+
163
+
164
+
165
+ <div class="method-source-code" id="all_bookmarks-source">
166
+ <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 140</span>
167
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">all_bookmarks</span>
168
+ <span class="ruby-string">`osascript &lt;&lt;&#39;APPLESCRIPT&#39;
169
+ tell application &quot;Hook&quot;
170
+ set _marks to every bookmark
171
+ set _out to {}
172
+ repeat with _hook in _marks
173
+ set _out to _out &amp; (name of _hook &amp; &quot;||&quot; &amp; address of _hook &amp; &quot;||&quot; &amp; path of _hook)
174
+ end repeat
175
+ set {astid, AppleScript&#39;s text item delimiters} to {AppleScript&#39;s text item delimiters, &quot;^^&quot;}
176
+ set _output to _out as string
177
+ set AppleScript&#39;s text item delimiters to astid
178
+ return _output
179
+ end tell
180
+ APPLESCRIPT`</span>.<span class="ruby-identifier">strip</span>.<span class="ruby-identifier">split_hooks</span>
181
+ <span class="ruby-keyword">end</span></pre>
182
+ </div>
183
+
184
+ </div>
185
+
186
+
187
+
188
+
189
+ </div>
190
+
191
+
192
+ <div id="method-i-bookmark_for" class="method-detail ">
193
+
194
+ <div class="method-heading">
195
+ <span class="method-name">bookmark_for</span><span
196
+ class="method-args">(url)</span>
197
+
198
+ <span class="method-click-advice">click to toggle source</span>
199
+
200
+ </div>
201
+
202
+
203
+ <div class="method-description">
204
+
205
+ <p>Get a <a href="Hook.html"><code>Hook</code></a> bookmark for file or URL. Return bookmark hash.</p>
206
+
207
+
208
+
209
+
210
+ <div class="method-source-code" id="bookmark_for-source">
211
+ <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 32</span>
212
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">bookmark_for</span>(<span class="ruby-identifier">url</span>)
213
+ <span class="ruby-identifier">url</span>.<span class="ruby-identifier">valid_hook!</span>
214
+ <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Invalid target: #{url}&quot;</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">url</span>
215
+
216
+ <span class="ruby-keyword">begin</span>
217
+ <span class="ruby-identifier">mark</span> = <span class="ruby-node">`osascript &lt;&lt;&#39;APPLESCRIPT&#39;
218
+ tell application &quot;Hook&quot;
219
+ set _hook to make bookmark with data &quot;#{url}&quot;
220
+ if _hook is missing value
221
+ return &quot;&quot;
222
+ else
223
+ return name of _hook &amp; &quot;||&quot; &amp; address of _hook &amp; &quot;||&quot; &amp; path of _hook
224
+ end if
225
+ end tell
226
+ APPLESCRIPT`</span>.<span class="ruby-identifier">strip</span>
227
+ <span class="ruby-keyword">rescue</span> <span class="ruby-identifier">p</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">e</span>
228
+ <span class="ruby-identifier">raise</span> <span class="ruby-identifier">e</span>
229
+ <span class="ruby-keyword">end</span>
230
+
231
+ <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Error getting bookmark for #{url}&quot;</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">mark</span>.<span class="ruby-identifier">empty?</span>
232
+ <span class="ruby-identifier">mark</span>.<span class="ruby-identifier">split_hook</span>
233
+ <span class="ruby-keyword">end</span></pre>
234
+ </div>
235
+
236
+ </div>
237
+
238
+
239
+
240
+
241
+ </div>
242
+
243
+
244
+ <div id="method-i-bookmark_from_app" class="method-detail ">
245
+
246
+ <div class="method-heading">
247
+ <span class="method-name">bookmark_from_app</span><span
248
+ class="method-args">(app, opts)</span>
249
+
250
+ <span class="method-click-advice">click to toggle source</span>
251
+
252
+ </div>
253
+
254
+
255
+ <div class="method-description">
256
+
257
+ <p>Get a bookmark from the foreground document of specified app.</p>
258
+
259
+
260
+
261
+
262
+ <div class="method-source-code" id="bookmark_from_app-source">
263
+ <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 81</span>
264
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">bookmark_from_app</span>(<span class="ruby-identifier">app</span>, <span class="ruby-identifier">opts</span>)
265
+ <span class="ruby-identifier">mark</span> = <span class="ruby-node">`osascript &lt;&lt;&#39;APPLESCRIPT&#39;
266
+ tell application &quot;System Events&quot; to set front_app to name of first application process whose frontmost is true
267
+ tell application &quot;#{app}&quot; to activate
268
+ delay 2
269
+ tell application &quot;Hook&quot;
270
+ set _hook to (bookmark from active window)
271
+ set _output to (name of _hook &amp; &quot;||&quot; &amp; address of _hook &amp; &quot;||&quot; &amp; path of _hook)
272
+ end tell
273
+ tell application front_app to activate
274
+ return _output
275
+ APPLESCRIPT`</span>.<span class="ruby-identifier">strip</span>.<span class="ruby-identifier">split_hook</span>
276
+ <span class="ruby-identifier">title</span> = <span class="ruby-identifier">mark</span>[<span class="ruby-value">:name</span>].<span class="ruby-identifier">empty?</span> <span class="ruby-operator">?</span> <span class="ruby-node">&quot;#{app.cap} link&quot;</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">mark</span>[<span class="ruby-value">:name</span>]
277
+ <span class="ruby-identifier">output</span> = <span class="ruby-identifier">opts</span>[<span class="ruby-value">:markdown</span>] <span class="ruby-operator">?</span> <span class="ruby-node">&quot;[#{title}](#{mark[:url]})&quot;</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">mark</span>[<span class="ruby-value">:url</span>]
278
+
279
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">opts</span>[<span class="ruby-value">:copy</span>]
280
+ <span class="ruby-node">&quot;Copied Markdown link for &#39;#{title}&#39; to clipboard&quot;</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">output</span>.<span class="ruby-identifier">clip</span>
281
+ <span class="ruby-keyword">else</span>
282
+ <span class="ruby-identifier">output</span>
283
+ <span class="ruby-keyword">end</span>
284
+ <span class="ruby-keyword">end</span></pre>
285
+ </div>
286
+
287
+ </div>
288
+
289
+
290
+
291
+
292
+ </div>
293
+
294
+
295
+ <div id="method-i-clip_bookmark" class="method-detail ">
296
+
297
+ <div class="method-heading">
298
+ <span class="method-name">clip_bookmark</span><span
299
+ class="method-args">(url, opts)</span>
300
+
301
+ <span class="method-click-advice">click to toggle source</span>
302
+
303
+ </div>
304
+
305
+
306
+ <div class="method-description">
307
+
308
+ <p>Create a bookmark for specified file/url and copy to the clipboard.</p>
309
+
310
+
311
+
312
+
313
+ <div class="method-source-code" id="clip_bookmark-source">
314
+ <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 181</span>
315
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">clip_bookmark</span>(<span class="ruby-identifier">url</span>, <span class="ruby-identifier">opts</span>)
316
+ <span class="ruby-identifier">mark</span> = <span class="ruby-identifier">bookmark_for</span>(<span class="ruby-identifier">url</span>)
317
+ <span class="ruby-identifier">copy_bookmark</span>(<span class="ruby-identifier">mark</span>[<span class="ruby-value">:name</span>], <span class="ruby-identifier">mark</span>[<span class="ruby-value">:url</span>], <span class="ruby-identifier">opts</span>)
318
+ <span class="ruby-keyword">end</span></pre>
319
+ </div>
320
+
321
+ </div>
322
+
323
+
324
+
325
+
326
+ </div>
327
+
328
+
329
+ <div id="method-i-clone_hooks" class="method-detail ">
330
+
331
+ <div class="method-heading">
332
+ <span class="method-name">clone_hooks</span><span
333
+ class="method-args">(args)</span>
334
+
335
+ <span class="method-click-advice">click to toggle source</span>
336
+
337
+ </div>
338
+
339
+
340
+ <div class="method-description">
341
+
342
+ <p>Copy all hooks from source file to target file</p>
343
+
344
+
345
+
346
+
347
+ <div class="method-source-code" id="clone_hooks-source">
348
+ <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 314</span>
349
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">clone_hooks</span>(<span class="ruby-identifier">args</span>)
350
+ <span class="ruby-identifier">target</span> = <span class="ruby-identifier">args</span>.<span class="ruby-identifier">pop</span>.<span class="ruby-identifier">valid_hook</span>
351
+ <span class="ruby-identifier">source</span> = <span class="ruby-identifier">args</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">valid_hook</span>
352
+
353
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">target</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">source</span>
354
+ <span class="ruby-identifier">hooks</span> = <span class="ruby-identifier">get_hooks</span>(<span class="ruby-identifier">source</span>)
355
+ <span class="ruby-identifier">hooks</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">hook</span><span class="ruby-operator">|</span>
356
+ <span class="ruby-node">`osascript &lt;&lt;&#39;APPLESCRIPT&#39;
357
+ tell application &quot;Hook&quot;
358
+ set _mark1 to make bookmark with data &quot;#{hook[:url]}&quot;
359
+ set _mark2 to make bookmark with data &quot;#{target}&quot;
360
+ hook _mark1 and _mark2
361
+ return true
362
+ end tell
363
+ APPLESCRIPT`</span>
364
+ <span class="ruby-keyword">end</span>
365
+ <span class="ruby-node">&quot;Hooks from #{source} cloned to #{target}&quot;</span>
366
+ <span class="ruby-keyword">else</span>
367
+ <span class="ruby-identifier">raise</span> <span class="ruby-string">&#39;Invalid file specified&#39;</span>
368
+ <span class="ruby-keyword">end</span>
369
+ <span class="ruby-keyword">end</span></pre>
370
+ </div>
371
+
372
+ </div>
373
+
374
+
375
+
376
+
377
+ </div>
378
+
379
+
380
+ <div id="method-i-copy_bookmark" class="method-detail ">
381
+
382
+ <div class="method-heading">
383
+ <span class="method-name">copy_bookmark</span><span
384
+ class="method-args">(title, url, opts)</span>
385
+
386
+ <span class="method-click-advice">click to toggle source</span>
387
+
388
+ </div>
389
+
390
+
391
+ <div class="method-description">
392
+
393
+ <p>Create a bookmark from specified title and url and copy to the clipboard.</p>
394
+
395
+
396
+
397
+
398
+ <div class="method-source-code" id="copy_bookmark-source">
399
+ <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 187</span>
400
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">copy_bookmark</span>(<span class="ruby-identifier">title</span>, <span class="ruby-identifier">url</span>, <span class="ruby-identifier">opts</span>)
401
+ <span class="ruby-identifier">raise</span> <span class="ruby-string">&quot;No URL found&quot;</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">url</span>.<span class="ruby-identifier">empty?</span>
402
+ <span class="ruby-identifier">title</span> = <span class="ruby-identifier">title</span>.<span class="ruby-identifier">empty?</span> <span class="ruby-operator">?</span> <span class="ruby-string">&#39;No title&#39;</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">title</span>
403
+ <span class="ruby-identifier">output</span> = <span class="ruby-identifier">opts</span>[<span class="ruby-value">:markdown</span>] <span class="ruby-operator">?</span> <span class="ruby-node">&quot;[#{title}](#{url})&quot;</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">url</span>
404
+ <span class="ruby-identifier">output</span>.<span class="ruby-identifier">clip</span>
405
+ <span class="ruby-node">%(Copied #{opts[:markdown] ? &#39;Markdown link&#39; : &#39;Hook URL&#39;} for &#39;#{title}&#39; to clipboard)</span>
406
+ <span class="ruby-keyword">end</span></pre>
407
+ </div>
408
+
409
+ </div>
410
+
411
+
412
+
413
+
414
+ </div>
415
+
416
+
417
+ <div id="method-i-delete_all_hooks" class="method-detail ">
418
+
419
+ <div class="method-heading">
420
+ <span class="method-name">delete_all_hooks</span><span
421
+ class="method-args">(url)</span>
422
+
423
+ <span class="method-click-advice">click to toggle source</span>
424
+
425
+ </div>
426
+
427
+
428
+ <div class="method-description">
429
+
430
+ <p>Delete all hooked files/urls from target file</p>
431
+
432
+
433
+
434
+
435
+ <div class="method-source-code" id="delete_all_hooks-source">
436
+ <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 337</span>
437
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">delete_all_hooks</span>(<span class="ruby-identifier">url</span>)
438
+ <span class="ruby-constant">STDERR</span>.<span class="ruby-identifier">print</span> <span class="ruby-node">&quot;Are you sure you want to delete ALL hooks from #{url} (y/N)? &quot;</span>
439
+ <span class="ruby-identifier">res</span> = <span class="ruby-constant">STDIN</span>.<span class="ruby-identifier">gets</span>.<span class="ruby-identifier">strip</span>
440
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">res</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp">/^y/i</span>
441
+ <span class="ruby-identifier">get_hooks</span>(<span class="ruby-identifier">url</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">hook</span><span class="ruby-operator">|</span>
442
+ <span class="ruby-node">`osascript &lt;&lt;&#39;APPLESCRIPT&#39;
443
+ tell application &quot;Hook&quot;
444
+ set _mark1 to make bookmark with data &quot;#{hook[:url]}&quot;
445
+ set _mark2 to make bookmark with data &quot;#{url}&quot;
446
+ unhook _mark1 and _mark2
447
+ return true
448
+ end tell
449
+ APPLESCRIPT`</span>
450
+ <span class="ruby-keyword">end</span>
451
+ <span class="ruby-node">&quot;Removed all hooks from #{url}&quot;</span>
452
+ <span class="ruby-keyword">end</span>
453
+ <span class="ruby-keyword">end</span></pre>
454
+ </div>
455
+
456
+ </div>
457
+
458
+
459
+
460
+
461
+ </div>
462
+
463
+
464
+ <div id="method-i-delete_hooks" class="method-detail ">
465
+
466
+ <div class="method-heading">
467
+ <span class="method-name">delete_hooks</span><span
468
+ class="method-args">(args, opts)</span>
469
+
470
+ <span class="method-click-advice">click to toggle source</span>
471
+
472
+ </div>
473
+
474
+
475
+ <div class="method-description">
476
+
477
+ <p>Delete hooks between two files/urls</p>
478
+
479
+
480
+
481
+
482
+ <div class="method-source-code" id="delete_hooks-source">
483
+ <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 356</span>
484
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">delete_hooks</span>(<span class="ruby-identifier">args</span>, <span class="ruby-identifier">opts</span>)
485
+ <span class="ruby-identifier">urls</span> = <span class="ruby-identifier">args</span>.<span class="ruby-identifier">map</span>(<span class="ruby-operator">&amp;</span><span class="ruby-value">:valid_hook</span>).<span class="ruby-identifier">delete_if</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">url</span><span class="ruby-operator">|</span> <span class="ruby-operator">!</span><span class="ruby-identifier">url</span> }
486
+ <span class="ruby-identifier">output</span> = []
487
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">opts</span>[<span class="ruby-value">:all</span>]
488
+ <span class="ruby-identifier">urls</span>.<span class="ruby-identifier">each_with_index</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">url</span>, <span class="ruby-identifier">i</span><span class="ruby-operator">|</span>
489
+ <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Invalid target: #{args[i]}&quot;</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">url</span>
490
+
491
+ <span class="ruby-identifier">output</span>.<span class="ruby-identifier">push</span>(<span class="ruby-identifier">delete_all_hooks</span>(<span class="ruby-identifier">url</span>))
492
+ <span class="ruby-keyword">end</span>
493
+ <span class="ruby-keyword">return</span> <span class="ruby-identifier">output</span>.<span class="ruby-identifier">join</span>(<span class="ruby-string">&quot;\n&quot;</span>)
494
+ <span class="ruby-keyword">end</span>
495
+
496
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">urls</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">==</span> <span class="ruby-value">2</span>
497
+ <span class="ruby-identifier">source</span> = <span class="ruby-identifier">urls</span>[<span class="ruby-value">0</span>]
498
+ <span class="ruby-identifier">target</span> = <span class="ruby-identifier">urls</span>[<span class="ruby-value">1</span>]
499
+ <span class="ruby-node">`osascript &lt;&lt;&#39;APPLESCRIPT&#39;
500
+ tell application &quot;Hook&quot;
501
+ set _mark1 to make bookmark with data &quot;#{source}&quot;
502
+ set _mark2 to make bookmark with data &quot;#{target}&quot;
503
+ unhook _mark1 and _mark2
504
+ return true
505
+ end tell
506
+ APPLESCRIPT`</span>
507
+ <span class="ruby-node">&quot;Hook removed between #{source} and #{target}&quot;</span>
508
+ <span class="ruby-keyword">else</span>
509
+ <span class="ruby-identifier">raise</span> <span class="ruby-string">&#39;Invalid number of URLs or files specified&#39;</span>
510
+ <span class="ruby-keyword">end</span>
511
+ <span class="ruby-keyword">end</span></pre>
512
+ </div>
513
+
514
+ </div>
515
+
516
+
517
+
518
+
519
+ </div>
520
+
521
+
522
+ <div id="method-i-format_regex" class="method-detail ">
523
+
524
+ <div class="method-heading">
525
+ <span class="method-name">format_regex</span><span
526
+ class="method-args">(options)</span>
527
+
528
+ <span class="method-click-advice">click to toggle source</span>
529
+
530
+ </div>
531
+
532
+
533
+ <div class="method-description">
534
+
535
+ <p>Create a single regex for validation of an array by first char or full match.</p>
536
+
537
+
538
+
539
+
540
+ <div class="method-source-code" id="format_regex-source">
541
+ <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 9</span>
542
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">format_regex</span>(<span class="ruby-identifier">options</span>)
543
+ <span class="ruby-identifier">fmt_rx_array</span> = []
544
+ <span class="ruby-identifier">options</span>.<span class="ruby-identifier">map</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">fmt</span><span class="ruby-operator">|</span> <span class="ruby-identifier">fmt_rx_array</span>.<span class="ruby-identifier">push</span>(<span class="ruby-identifier">fmt</span>.<span class="ruby-identifier">sub</span>(<span class="ruby-regexp">/^(.)(.*?)$/</span>, <span class="ruby-string">&#39;\1(\2)?&#39;</span>)) }
545
+ <span class="ruby-constant">Regexp</span>.<span class="ruby-identifier">new</span>(<span class="ruby-node">&quot;^(#{fmt_rx_array.join(&#39;|&#39;)})$&quot;</span>,<span class="ruby-string">&#39;i&#39;</span>)
546
+ <span class="ruby-keyword">end</span></pre>
547
+ </div>
548
+
549
+ </div>
550
+
551
+
552
+
553
+
554
+ </div>
555
+
556
+
557
+ <div id="method-i-get_hooks" class="method-detail ">
558
+
559
+ <div class="method-heading">
560
+ <span class="method-name">get_hooks</span><span
561
+ class="method-args">(url)</span>
562
+
563
+ <span class="method-click-advice">click to toggle source</span>
564
+
565
+ </div>
566
+
567
+
568
+ <div class="method-description">
569
+
570
+ <p>Get bookmarks hooked to file or URL. Return array of bookmark hashes.</p>
571
+
572
+
573
+
574
+
575
+ <div class="method-source-code" id="get_hooks-source">
576
+ <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 56</span>
577
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">get_hooks</span>(<span class="ruby-identifier">url</span>)
578
+ <span class="ruby-identifier">url</span>.<span class="ruby-identifier">valid_hook!</span>
579
+ <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Invalid target: #{url}&quot;</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">url</span>
580
+
581
+ <span class="ruby-identifier">hooks</span> = <span class="ruby-node">`osascript &lt;&lt;&#39;APPLESCRIPT&#39;
582
+ tell application &quot;Hook&quot;
583
+ set _mark to make bookmark with data &quot;#{url}&quot;
584
+ if _mark is missing value
585
+ return &quot;&quot;
586
+ end if
587
+ set _hooks to hooked bookmarks of _mark
588
+ set _out to {}
589
+ repeat with _hook in _hooks
590
+ set _out to _out &amp; (name of _hook &amp; &quot;||&quot; &amp; address of _hook &amp; &quot;||&quot; &amp; path of _hook)
591
+ end repeat
592
+ set {astid, AppleScript&#39;s text item delimiters} to {AppleScript&#39;s text item delimiters, &quot;^^&quot;}
593
+ set _output to _out as string
594
+ set AppleScript&#39;s text item delimiters to astid
595
+ return _output
596
+ end tell
597
+ APPLESCRIPT`</span>.<span class="ruby-identifier">strip</span>
598
+ <span class="ruby-identifier">hooks</span>.<span class="ruby-identifier">split_hooks</span>
599
+ <span class="ruby-keyword">end</span></pre>
600
+ </div>
601
+
602
+ </div>
603
+
604
+
605
+
606
+
607
+ </div>
608
+
609
+
610
+ <div id="method-i-link_all" class="method-detail ">
611
+
612
+ <div class="method-heading">
613
+ <span class="method-name">link_all</span><span
614
+ class="method-args">(args)</span>
615
+
616
+ <span class="method-click-advice">click to toggle source</span>
617
+
618
+ </div>
619
+
620
+
621
+ <div class="method-description">
622
+
623
+ <p>Create bi-directional links between every file/url in the list of arguments</p>
624
+
625
+
626
+
627
+
628
+ <div class="method-source-code" id="link_all-source">
629
+ <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 386</span>
630
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">link_all</span>(<span class="ruby-identifier">args</span>)
631
+ <span class="ruby-identifier">args</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">file</span><span class="ruby-operator">|</span>
632
+ <span class="ruby-identifier">source</span> = <span class="ruby-identifier">file</span>.<span class="ruby-identifier">valid_hook</span>
633
+ <span class="ruby-identifier">link_to</span> = <span class="ruby-identifier">args</span>.<span class="ruby-identifier">dup</span>.<span class="ruby-identifier">map</span>(<span class="ruby-operator">&amp;</span><span class="ruby-value">:valid_hook</span>).<span class="ruby-identifier">reject</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">url</span><span class="ruby-operator">|</span> <span class="ruby-identifier">url</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">source</span> }
634
+ <span class="ruby-identifier">link_to</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">url</span><span class="ruby-operator">|</span>
635
+ <span class="ruby-node">`osascript &lt;&lt;&#39;APPLESCRIPT&#39;
636
+ tell application &quot;Hook&quot;
637
+ set _mark1 to make bookmark with data &quot;#{source}&quot;
638
+ set _mark2 to make bookmark with data &quot;#{url}&quot;
639
+ hook _mark1 and _mark2
640
+ return true
641
+ end tell
642
+ APPLESCRIPT`</span>
643
+ <span class="ruby-keyword">end</span>
644
+ <span class="ruby-keyword">end</span>
645
+ <span class="ruby-node">&quot;Linked #{args.length} files to each other&quot;</span>
646
+ <span class="ruby-keyword">end</span></pre>
647
+ </div>
648
+
649
+ </div>
650
+
651
+
652
+
653
+
654
+ </div>
655
+
656
+
657
+ <div id="method-i-link_files" class="method-detail ">
658
+
659
+ <div class="method-heading">
660
+ <span class="method-name">link_files</span><span
661
+ class="method-args">(args)</span>
662
+
663
+ <span class="method-click-advice">click to toggle source</span>
664
+
665
+ </div>
666
+
667
+
668
+ <div class="method-description">
669
+
670
+ <p>Link 2 or more files/urls with bi-directional hooks.</p>
671
+
672
+
673
+
674
+
675
+ <div class="method-source-code" id="link_files-source">
676
+ <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 291</span>
677
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">link_files</span>(<span class="ruby-identifier">args</span>)
678
+ <span class="ruby-identifier">target</span> = <span class="ruby-identifier">args</span>.<span class="ruby-identifier">pop</span>
679
+ <span class="ruby-identifier">target</span>.<span class="ruby-identifier">valid_hook!</span>
680
+ <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Invalid target: #{target}&quot;</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">target</span>
681
+
682
+ <span class="ruby-identifier">args</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">file</span><span class="ruby-operator">|</span>
683
+ <span class="ruby-identifier">file</span>.<span class="ruby-identifier">valid_hook!</span>
684
+ <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Invalid target: #{file}&quot;</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">file</span>
685
+
686
+ <span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;Linking #{file} and #{target}...&quot;</span>
687
+ <span class="ruby-node">`osascript &lt;&lt;&#39;APPLESCRIPT&#39;
688
+ tell application &quot;Hook&quot;
689
+ set _mark1 to make bookmark with data &quot;#{file}&quot;
690
+ set _mark2 to make bookmark with data &quot;#{target}&quot;
691
+ hook _mark1 and _mark2
692
+ return true
693
+ end tell
694
+ APPLESCRIPT`</span>
695
+ <span class="ruby-keyword">end</span>
696
+ <span class="ruby-node">&quot;Linked #{args.length} files to #{target}&quot;</span>
697
+ <span class="ruby-keyword">end</span></pre>
698
+ </div>
699
+
700
+ </div>
701
+
702
+
703
+
704
+
705
+ </div>
706
+
707
+
708
+ <div id="method-i-linked_bookmarks" class="method-detail ">
709
+
710
+ <div class="method-heading">
711
+ <span class="method-name">linked_bookmarks</span><span
712
+ class="method-args">(args, opts)</span>
713
+
714
+ <span class="method-click-advice">click to toggle source</span>
715
+
716
+ </div>
717
+
718
+
719
+ <div class="method-description">
720
+
721
+ <p>Get a list of all hooks on a file/url.</p>
722
+
723
+
724
+
725
+
726
+ <div class="method-source-code" id="linked_bookmarks-source">
727
+ <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 405</span>
728
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">linked_bookmarks</span>(<span class="ruby-identifier">args</span>, <span class="ruby-identifier">opts</span>)
729
+ <span class="ruby-identifier">result</span> = []
730
+
731
+ <span class="ruby-identifier">separator</span> = <span class="ruby-identifier">args</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">==</span> <span class="ruby-value">1</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">opts</span>[<span class="ruby-value">:format</span>] <span class="ruby-operator">==</span> <span class="ruby-string">&#39;paths&#39;</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">opts</span>[<span class="ruby-value">:null_separator</span>] <span class="ruby-operator">?</span> <span class="ruby-string">&quot;\0&quot;</span> <span class="ruby-operator">:</span> <span class="ruby-string">&quot;\n&quot;</span>
732
+
733
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">args</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">args</span>.<span class="ruby-identifier">empty?</span>
734
+ <span class="ruby-identifier">result</span> = <span class="ruby-identifier">output_array</span>(<span class="ruby-identifier">all_bookmarks</span>, <span class="ruby-identifier">opts</span>)
735
+ <span class="ruby-keyword">else</span>
736
+ <span class="ruby-identifier">args</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">url</span><span class="ruby-operator">|</span>
737
+ <span class="ruby-identifier">source_mark</span> = <span class="ruby-identifier">bookmark_for</span>(<span class="ruby-identifier">url</span>)
738
+ <span class="ruby-identifier">filename</span> = <span class="ruby-identifier">source_mark</span>[<span class="ruby-value">:name</span>]
739
+
740
+ <span class="ruby-keyword">case</span> <span class="ruby-identifier">opts</span>[<span class="ruby-value">:format</span>]
741
+ <span class="ruby-keyword">when</span> <span class="ruby-regexp">/^m/</span>
742
+ <span class="ruby-identifier">filename</span> = <span class="ruby-node">&quot;[#{source_mark[:name]}](#{source_mark[:url]})&quot;</span>
743
+ <span class="ruby-identifier">filename</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot; &lt;file://#{CGI.escape(source_mark[:path])}&gt;&quot;</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">source_mark</span>[<span class="ruby-value">:path</span>]
744
+ <span class="ruby-keyword">when</span> <span class="ruby-regexp">/^p/</span>
745
+ <span class="ruby-identifier">filename</span> = <span class="ruby-node">&quot;File: #{source_mark[:name]}&quot;</span>
746
+ <span class="ruby-identifier">filename</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot; (#{source_mark[:path]})&quot;</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">source_mark</span>[<span class="ruby-value">:path</span>]
747
+ <span class="ruby-keyword">when</span> <span class="ruby-regexp">/^h/</span>
748
+ <span class="ruby-identifier">filename</span> = <span class="ruby-node">&quot;File: #{source_mark[:name]}&quot;</span>
749
+ <span class="ruby-identifier">filename</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot; (#{source_mark[:url]})&quot;</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">source_mark</span>[<span class="ruby-value">:url</span>]
750
+ <span class="ruby-keyword">else</span>
751
+ <span class="ruby-identifier">filename</span> = <span class="ruby-node">&quot;Bookmarks attached to #{source_mark[:path] || source_mark[:url]}&quot;</span>
752
+ <span class="ruby-keyword">end</span>
753
+
754
+ <span class="ruby-identifier">hooks_arr</span> = <span class="ruby-identifier">get_hooks</span>(<span class="ruby-identifier">url</span>)
755
+
756
+ <span class="ruby-identifier">output</span> = <span class="ruby-identifier">output_array</span>(<span class="ruby-identifier">hooks_arr</span>, <span class="ruby-identifier">opts</span>)
757
+ <span class="ruby-identifier">result</span>.<span class="ruby-identifier">push</span>({ <span class="ruby-value">file:</span> <span class="ruby-identifier">filename</span>, <span class="ruby-value">links:</span> <span class="ruby-identifier">output</span>.<span class="ruby-identifier">join</span>(<span class="ruby-identifier">separator</span>) })
758
+ <span class="ruby-keyword">end</span>
759
+
760
+
761
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">result</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">1</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">opts</span>[<span class="ruby-value">:format</span>] <span class="ruby-operator">==</span> <span class="ruby-string">&#39;verbose&#39;</span>
762
+ <span class="ruby-identifier">result</span>.<span class="ruby-identifier">map!</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">res</span><span class="ruby-operator">|</span>
763
+ <span class="ruby-node">&quot;#{res[:file]}\n\n#{res[:links]}\n&quot;</span>
764
+ <span class="ruby-keyword">end</span>
765
+ <span class="ruby-keyword">else</span>
766
+ <span class="ruby-identifier">result</span>.<span class="ruby-identifier">map!</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">res</span><span class="ruby-operator">|</span>
767
+ <span class="ruby-identifier">res</span>[<span class="ruby-value">:links</span>]
768
+ <span class="ruby-keyword">end</span>
769
+ <span class="ruby-keyword">end</span>
770
+ <span class="ruby-keyword">end</span>
771
+ <span class="ruby-identifier">result</span>.<span class="ruby-identifier">join</span>(<span class="ruby-identifier">separator</span>)
772
+ <span class="ruby-keyword">end</span></pre>
773
+ </div>
774
+
775
+ </div>
776
+
777
+
778
+
779
+
780
+ </div>
781
+
782
+
783
+ <div id="method-i-open_gui" class="method-detail ">
784
+
785
+ <div class="method-heading">
786
+ <span class="method-name">open_gui</span><span
787
+ class="method-args">(url)</span>
788
+
789
+ <span class="method-click-advice">click to toggle source</span>
790
+
791
+ </div>
792
+
793
+
794
+ <div class="method-description">
795
+
796
+ <p>Open the <a href="Hook.html"><code>Hook</code></a> GUI for browsing/performing actions on a file or url</p>
797
+
798
+
799
+
800
+
801
+ <div class="method-source-code" id="open_gui-source">
802
+ <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 262</span>
803
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">open_gui</span>(<span class="ruby-identifier">url</span>)
804
+ <span class="ruby-identifier">result</span> = <span class="ruby-node">`osascript &lt;&lt;&#39;APPLESCRIPT&#39;
805
+ tell application &quot;Hook&quot;
806
+ set _mark to make bookmark with data &quot;#{url.valid_hook}&quot;
807
+ if _mark is missing value
808
+ return &quot;Failed to create bookmark for #{url}&quot;
809
+ else
810
+ invoke on _mark
811
+ return &quot;&quot;
812
+ end if
813
+ end tell
814
+ APPLESCRIPT`</span>.<span class="ruby-identifier">strip</span>
815
+ <span class="ruby-identifier">raise</span> <span class="ruby-identifier">result</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">result</span>.<span class="ruby-identifier">empty?</span>
816
+ <span class="ruby-keyword">end</span></pre>
817
+ </div>
818
+
819
+ </div>
820
+
821
+
822
+
823
+
824
+ </div>
825
+
826
+
827
+ <div id="method-i-open_linked" class="method-detail ">
828
+
829
+ <div class="method-heading">
830
+ <span class="method-name">open_linked</span><span
831
+ class="method-args">(url)</span>
832
+
833
+ <span class="method-click-advice">click to toggle source</span>
834
+
835
+ </div>
836
+
837
+
838
+ <div class="method-description">
839
+
840
+ <p>Select from a menu of available hooks and open using macOS `open`.</p>
841
+
842
+
843
+
844
+
845
+ <div class="method-source-code" id="open_linked-source">
846
+ <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 278</span>
847
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">open_linked</span>(<span class="ruby-identifier">url</span>)
848
+ <span class="ruby-identifier">marks</span> = <span class="ruby-identifier">get_hooks</span>(<span class="ruby-identifier">url</span>)
849
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">marks</span>.<span class="ruby-identifier">empty?</span>
850
+ <span class="ruby-identifier">warn</span> <span class="ruby-node">&quot;No hooks found for #{url}&quot;</span>
851
+ <span class="ruby-keyword">else</span>
852
+ <span class="ruby-identifier">res</span> = <span class="ruby-identifier">select_hook</span>(<span class="ruby-identifier">marks</span>)
853
+ <span class="ruby-identifier">res</span>.<span class="ruby-identifier">each</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">mark</span><span class="ruby-operator">|</span>
854
+ <span class="ruby-node">`open &#39;#{mark[:url]}&#39;`</span>
855
+ }
856
+ <span class="ruby-keyword">end</span>
857
+ <span class="ruby-keyword">end</span></pre>
858
+ </div>
859
+
860
+ </div>
861
+
862
+
863
+
864
+
865
+ </div>
866
+
867
+
868
+ <div id="method-i-output_array" class="method-detail ">
869
+
870
+ <div class="method-heading">
871
+ <span class="method-name">output_array</span><span
872
+ class="method-args">(hooks_arr, opts)</span>
873
+
874
+ <span class="method-click-advice">click to toggle source</span>
875
+
876
+ </div>
877
+
878
+
879
+ <div class="method-description">
880
+
881
+ <p>Output an array of hooks in the given format.</p>
882
+
883
+
884
+
885
+
886
+ <div class="method-source-code" id="output_array-source">
887
+ <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 452</span>
888
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">output_array</span>(<span class="ruby-identifier">hooks_arr</span>, <span class="ruby-identifier">opts</span>)
889
+ <span class="ruby-keyword">if</span> <span class="ruby-operator">!</span><span class="ruby-identifier">hooks_arr</span>.<span class="ruby-identifier">empty?</span>
890
+ <span class="ruby-identifier">hooks_arr</span>.<span class="ruby-identifier">reject!</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">h</span><span class="ruby-operator">|</span> <span class="ruby-identifier">h</span>[<span class="ruby-value">:path</span>].<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">h</span>[<span class="ruby-value">:path</span>] <span class="ruby-operator">==</span> <span class="ruby-string">&#39;&#39;</span> } <span class="ruby-keyword">if</span> <span class="ruby-identifier">opts</span>[<span class="ruby-value">:files_only</span>]
891
+
892
+ <span class="ruby-identifier">output</span> = []
893
+
894
+ <span class="ruby-keyword">case</span> <span class="ruby-identifier">opts</span>[<span class="ruby-value">:format</span>]
895
+ <span class="ruby-keyword">when</span> <span class="ruby-regexp">/^m/</span>
896
+ <span class="ruby-identifier">hooks_arr</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">h</span><span class="ruby-operator">|</span>
897
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">h</span>[<span class="ruby-value">:name</span>].<span class="ruby-identifier">empty?</span>
898
+ <span class="ruby-identifier">title</span> = <span class="ruby-identifier">h</span>[<span class="ruby-value">:url</span>]
899
+ <span class="ruby-keyword">else</span>
900
+ <span class="ruby-identifier">title</span> = <span class="ruby-identifier">h</span>[<span class="ruby-value">:name</span>]
901
+ <span class="ruby-keyword">end</span>
902
+ <span class="ruby-identifier">output</span>.<span class="ruby-identifier">push</span>(<span class="ruby-node">&quot;- [#{title}](#{h[:url]})&quot;</span>)
903
+ <span class="ruby-keyword">end</span>
904
+ <span class="ruby-keyword">when</span> <span class="ruby-regexp">/^p/</span>
905
+ <span class="ruby-identifier">hooks_arr</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">h</span><span class="ruby-operator">|</span>
906
+ <span class="ruby-identifier">output</span>.<span class="ruby-identifier">push</span>(<span class="ruby-identifier">h</span>[<span class="ruby-value">:path</span>].<span class="ruby-identifier">nil?</span> <span class="ruby-operator">?</span> <span class="ruby-identifier">h</span>[<span class="ruby-value">:url</span>] <span class="ruby-operator">:</span> <span class="ruby-identifier">h</span>[<span class="ruby-value">:path</span>])
907
+ <span class="ruby-keyword">end</span>
908
+ <span class="ruby-keyword">when</span> <span class="ruby-regexp">/^h/</span>
909
+ <span class="ruby-identifier">hooks_arr</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">h</span><span class="ruby-operator">|</span>
910
+ <span class="ruby-identifier">output</span>.<span class="ruby-identifier">push</span>(<span class="ruby-identifier">h</span>[<span class="ruby-value">:url</span>])
911
+ <span class="ruby-keyword">end</span>
912
+ <span class="ruby-keyword">else</span>
913
+ <span class="ruby-identifier">hooks_arr</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">h</span><span class="ruby-operator">|</span>
914
+ <span class="ruby-identifier">output</span>.<span class="ruby-identifier">push</span>(<span class="ruby-node">&quot;Title: #{h[:name]}\nPath: #{h[:path]}\nAddress: #{h[:url]}\n---------------------&quot;</span>)
915
+ <span class="ruby-keyword">end</span>
916
+ <span class="ruby-keyword">end</span>
917
+ <span class="ruby-keyword">else</span>
918
+ <span class="ruby-identifier">output</span> = [<span class="ruby-string">&#39;No bookmarks&#39;</span>]
919
+ <span class="ruby-keyword">end</span>
920
+
921
+ <span class="ruby-identifier">output</span>
922
+ <span class="ruby-keyword">end</span></pre>
923
+ </div>
924
+
925
+ </div>
926
+
927
+
928
+
929
+
930
+ </div>
931
+
932
+
933
+ <div id="method-i-search_bookmarks" class="method-detail ">
934
+
935
+ <div class="method-heading">
936
+ <span class="method-name">search_bookmarks</span><span
937
+ class="method-args">(search, opts)</span>
938
+
939
+ <span class="method-click-advice">click to toggle source</span>
940
+
941
+ </div>
942
+
943
+
944
+ <div class="method-description">
945
+
946
+ <p>Search bookmarks, using both names and addresses unless options contain “:names_only”. Return results as formatted list.</p>
947
+
948
+
949
+
950
+
951
+ <div class="method-source-code" id="search_bookmarks-source">
952
+ <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 158</span>
953
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">search_bookmarks</span>(<span class="ruby-identifier">search</span>, <span class="ruby-identifier">opts</span>)
954
+ <span class="ruby-keyword">unless</span> <span class="ruby-identifier">search</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">search</span>.<span class="ruby-identifier">empty?</span>
955
+ <span class="ruby-identifier">result</span> = <span class="ruby-identifier">search_name</span>(<span class="ruby-identifier">search</span>)
956
+ <span class="ruby-keyword">unless</span> <span class="ruby-identifier">opts</span>[<span class="ruby-value">:names_only</span>]
957
+ <span class="ruby-identifier">more_results</span> = <span class="ruby-identifier">search_path_or_address</span>(<span class="ruby-identifier">search</span>)
958
+ <span class="ruby-identifier">result</span> = <span class="ruby-identifier">result</span>.<span class="ruby-identifier">concat</span>(<span class="ruby-identifier">more_results</span>).<span class="ruby-identifier">uniq</span>
959
+ <span class="ruby-keyword">end</span>
960
+ <span class="ruby-keyword">else</span>
961
+ <span class="ruby-identifier">result</span> = <span class="ruby-identifier">all_bookmarks</span>
962
+ <span class="ruby-keyword">end</span>
963
+
964
+ <span class="ruby-identifier">separator</span> = <span class="ruby-identifier">opts</span>[<span class="ruby-value">:format</span>] <span class="ruby-operator">==</span> <span class="ruby-string">&#39;paths&#39;</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">opts</span>[<span class="ruby-value">:null_separator</span>] <span class="ruby-operator">?</span> <span class="ruby-string">&quot;\0&quot;</span> <span class="ruby-operator">:</span> <span class="ruby-string">&quot;\n&quot;</span>
965
+
966
+ <span class="ruby-identifier">output</span> = <span class="ruby-identifier">output_array</span>(<span class="ruby-identifier">result</span>, <span class="ruby-identifier">opts</span>)
967
+
968
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">opts</span>[<span class="ruby-value">:format</span>] <span class="ruby-operator">=~</span> <span class="ruby-regexp">/^v/</span>
969
+ <span class="ruby-node">&quot;Search results for: #{search}\n---------\n&quot;</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">output</span>.<span class="ruby-identifier">join</span>(<span class="ruby-string">&quot;\n&quot;</span>)
970
+ <span class="ruby-keyword">else</span>
971
+ <span class="ruby-identifier">output</span>.<span class="ruby-identifier">join</span>(<span class="ruby-identifier">separator</span>)
972
+ <span class="ruby-keyword">end</span>
973
+ <span class="ruby-keyword">end</span></pre>
974
+ </div>
975
+
976
+ </div>
977
+
978
+
979
+
980
+
981
+ </div>
982
+
983
+
984
+ <div id="method-i-search_name" class="method-detail ">
985
+
986
+ <div class="method-heading">
987
+ <span class="method-name">search_name</span><span
988
+ class="method-args">(search)</span>
989
+
990
+ <span class="method-click-advice">click to toggle source</span>
991
+
992
+ </div>
993
+
994
+
995
+ <div class="method-description">
996
+
997
+ <p>Search boomark names/titles. Return array of bookmark hashes.</p>
998
+
999
+
1000
+
1001
+
1002
+ <div class="method-source-code" id="search_name-source">
1003
+ <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 104</span>
1004
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">search_name</span>(<span class="ruby-identifier">search</span>)
1005
+ <span class="ruby-node">`osascript &lt;&lt;&#39;APPLESCRIPT&#39;
1006
+ set searchString to &quot;#{search.strip}&quot;
1007
+ tell application &quot;Hook&quot;
1008
+ set _marks to every bookmark whose name contains searchString
1009
+ set _out to {}
1010
+ repeat with _hook in _marks
1011
+ set _out to _out &amp; (name of _hook &amp; &quot;||&quot; &amp; address of _hook &amp; &quot;||&quot; &amp; path of _hook)
1012
+ end repeat
1013
+ set {astid, AppleScript&#39;s text item delimiters} to {AppleScript&#39;s text item delimiters, &quot;^^&quot;}
1014
+ set _output to _out as string
1015
+ set AppleScript&#39;s text item delimiters to astid
1016
+ return _output
1017
+ end tell
1018
+ APPLESCRIPT`</span>.<span class="ruby-identifier">strip</span>.<span class="ruby-identifier">split_hooks</span>
1019
+ <span class="ruby-keyword">end</span></pre>
1020
+ </div>
1021
+
1022
+ </div>
1023
+
1024
+
1025
+
1026
+
1027
+ </div>
1028
+
1029
+
1030
+ <div id="method-i-search_path_or_address" class="method-detail ">
1031
+
1032
+ <div class="method-heading">
1033
+ <span class="method-name">search_path_or_address</span><span
1034
+ class="method-args">(search)</span>
1035
+
1036
+ <span class="method-click-advice">click to toggle source</span>
1037
+
1038
+ </div>
1039
+
1040
+
1041
+ <div class="method-description">
1042
+
1043
+ <p>Search bookmark paths and addresses. Return array of bookmark hashes.</p>
1044
+
1045
+
1046
+
1047
+
1048
+ <div class="method-source-code" id="search_path_or_address-source">
1049
+ <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 122</span>
1050
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">search_path_or_address</span>(<span class="ruby-identifier">search</span>)
1051
+ <span class="ruby-node">`osascript &lt;&lt;&#39;APPLESCRIPT&#39;
1052
+ set searchString to &quot;#{search.strip}&quot;
1053
+ tell application &quot;Hook&quot;
1054
+ set _marks to every bookmark whose path contains searchString or address contains searchString
1055
+ set _out to {}
1056
+ repeat with _hook in _marks
1057
+ set _out to _out &amp; (name of _hook &amp; &quot;||&quot; &amp; address of _hook &amp; &quot;||&quot; &amp; path of _hook)
1058
+ end repeat
1059
+ set {astid, AppleScript&#39;s text item delimiters} to {AppleScript&#39;s text item delimiters, &quot;^^&quot;}
1060
+ set _output to _out as string
1061
+ set AppleScript&#39;s text item delimiters to astid
1062
+ return _output
1063
+ end tell
1064
+ APPLESCRIPT`</span>.<span class="ruby-identifier">strip</span>.<span class="ruby-identifier">split_hooks</span>
1065
+ <span class="ruby-keyword">end</span></pre>
1066
+ </div>
1067
+
1068
+ </div>
1069
+
1070
+
1071
+
1072
+
1073
+ </div>
1074
+
1075
+
1076
+ <div id="method-i-select_hook" class="method-detail ">
1077
+
1078
+ <div class="method-heading">
1079
+ <span class="method-name">select_hook</span><span
1080
+ class="method-args">(marks)</span>
1081
+
1082
+ <span class="method-click-advice">click to toggle source</span>
1083
+
1084
+ </div>
1085
+
1086
+
1087
+ <div class="method-description">
1088
+
1089
+ <p>Generate a menu of available hooks for selecting one or more hooks to operate on. Revamped to use `fzf`, which is embedded as `lib/helpers/fuzzyfilefinder` to avoid any conflicts. Allows multiple selections with tab key, and type-ahead fuzzy filtering of results.</p>
1090
+
1091
+
1092
+
1093
+
1094
+ <div class="method-source-code" id="select_hook-source">
1095
+ <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 198</span>
1096
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">select_hook</span>(<span class="ruby-identifier">marks</span>)
1097
+ <span class="ruby-comment"># intpad = marks.length.to_s.length + 1</span>
1098
+ <span class="ruby-comment"># marks.each_with_index do |mark, i|</span>
1099
+ <span class="ruby-comment"># STDERR.printf &quot;%#{intpad}d) %s\n&quot;, i + 1, mark[:name]</span>
1100
+ <span class="ruby-comment"># end</span>
1101
+ <span class="ruby-comment"># STDERR.print &#39;Open which bookmark: &#39;</span>
1102
+ <span class="ruby-comment"># sel = STDIN.gets.strip.to_i</span>
1103
+ <span class="ruby-comment"># raise &#39;Invalid selection&#39; unless sel.positive? &amp;&amp; sel &lt;= marks.length</span>
1104
+
1105
+ <span class="ruby-comment"># marks[sel - 1]</span>
1106
+
1107
+ <span class="ruby-identifier">options</span> = <span class="ruby-identifier">marks</span>.<span class="ruby-identifier">map</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">mark</span><span class="ruby-operator">|</span>
1108
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">mark</span>[<span class="ruby-value">:name</span>]
1109
+ <span class="ruby-identifier">id</span> = <span class="ruby-identifier">mark</span>[<span class="ruby-value">:name</span>]
1110
+ <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">mark</span>[<span class="ruby-value">:path</span>]
1111
+ <span class="ruby-identifier">id</span> = <span class="ruby-identifier">mark</span>[<span class="ruby-value">:path</span>]
1112
+ <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">mark</span>[<span class="ruby-value">:url</span>]
1113
+ <span class="ruby-identifier">id</span> = <span class="ruby-identifier">mark</span>[<span class="ruby-value">:url</span>]
1114
+ <span class="ruby-keyword">else</span>
1115
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">false</span>
1116
+ <span class="ruby-keyword">end</span>
1117
+
1118
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">mark</span>[<span class="ruby-value">:path</span>]
1119
+ <span class="ruby-identifier">loc</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">dirname</span>(<span class="ruby-identifier">mark</span>[<span class="ruby-value">:path</span>])
1120
+ <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">mark</span>[<span class="ruby-value">:url</span>]
1121
+ <span class="ruby-identifier">url</span> = <span class="ruby-constant">URI</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-identifier">mark</span>[<span class="ruby-value">:url</span>])
1122
+ <span class="ruby-identifier">id</span> = <span class="ruby-identifier">mark</span>[<span class="ruby-value">:url</span>]
1123
+ <span class="ruby-identifier">loc</span> = <span class="ruby-identifier">url</span>.<span class="ruby-identifier">scheme</span> <span class="ruby-operator">+</span> <span class="ruby-string">&quot; - &quot;</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">url</span>.<span class="ruby-identifier">hostname</span>
1124
+ <span class="ruby-keyword">else</span>
1125
+ <span class="ruby-identifier">loc</span> = <span class="ruby-string">&quot;&quot;</span>
1126
+ <span class="ruby-keyword">end</span>
1127
+
1128
+ <span class="ruby-node">&quot;#{id}\t#{mark[:path]}\t#{mark[:url]}\t#{loc}&quot;</span>
1129
+ }.<span class="ruby-identifier">delete_if</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">mark</span><span class="ruby-operator">|</span> <span class="ruby-operator">!</span><span class="ruby-identifier">mark</span> }
1130
+
1131
+ <span class="ruby-identifier">raise</span> <span class="ruby-string">&quot;Error processing available hooks&quot;</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">options</span>.<span class="ruby-identifier">empty?</span>
1132
+
1133
+ <span class="ruby-identifier">args</span> = [<span class="ruby-string">&#39;--layout=reverse-list&#39;</span>,
1134
+ <span class="ruby-string">&#39;--header=&quot;esc: cancel, tab: multi-select, return: open &gt; &quot;&#39;</span>,
1135
+ <span class="ruby-string">&#39;--prompt=&quot; Select hooks &gt; &quot;&#39;</span>,
1136
+ <span class="ruby-string">&#39;--multi&#39;</span>,
1137
+ <span class="ruby-string">&#39;--tabstop=4&#39;</span>,
1138
+ <span class="ruby-string">&#39;--delimiter=&quot;\t&quot;&#39;</span>,
1139
+ <span class="ruby-string">&#39;--with-nth=1,4&#39;</span>,
1140
+ <span class="ruby-string">&#39;--height=60%&#39;</span>,
1141
+ <span class="ruby-string">&#39;--min-height=10&#39;</span>
1142
+ ]
1143
+
1144
+ <span class="ruby-identifier">fzf</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">join</span>(<span class="ruby-constant">File</span>.<span class="ruby-identifier">dirname</span>(<span class="ruby-keyword">__FILE__</span>), <span class="ruby-string">&#39;../helpers/fuzzyfilefinder&#39;</span>)
1145
+
1146
+ <span class="ruby-identifier">sel</span> = <span class="ruby-node">`echo #{Shellwords.escape(options.join(&quot;\n&quot;))} | &#39;#{fzf}&#39; #{args.join(&#39; &#39;)}`</span>.<span class="ruby-identifier">chomp</span>
1147
+ <span class="ruby-identifier">res</span> = <span class="ruby-identifier">sel</span>.<span class="ruby-identifier">split</span>(<span class="ruby-regexp">/\n/</span>).<span class="ruby-identifier">map</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">s</span><span class="ruby-operator">|</span>
1148
+ <span class="ruby-identifier">ps</span> = <span class="ruby-identifier">s</span>.<span class="ruby-identifier">split</span>(<span class="ruby-regexp">/\t/</span>)
1149
+ { <span class="ruby-value">name:</span> <span class="ruby-identifier">ps</span>[<span class="ruby-value">0</span>], <span class="ruby-value">path:</span> <span class="ruby-identifier">ps</span>[<span class="ruby-value">1</span>], <span class="ruby-value">url:</span> <span class="ruby-identifier">ps</span>[<span class="ruby-value">2</span>] }
1150
+ }
1151
+
1152
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">res</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>
1153
+ <span class="ruby-identifier">raise</span> <span class="ruby-string">&#39;Cancelled (empty response)&#39;</span>
1154
+ <span class="ruby-keyword">end</span>
1155
+
1156
+ <span class="ruby-identifier">res</span>
1157
+ <span class="ruby-keyword">end</span></pre>
1158
+ </div>
1159
+
1160
+ </div>
1161
+
1162
+
1163
+
1164
+
1165
+ </div>
1166
+
1167
+
1168
+ <div id="method-i-validate_format" class="method-detail ">
1169
+
1170
+ <div class="method-heading">
1171
+ <span class="method-name">validate_format</span><span
1172
+ class="method-args">(fmt, options)</span>
1173
+
1174
+ <span class="method-click-advice">click to toggle source</span>
1175
+
1176
+ </div>
1177
+
1178
+
1179
+ <div class="method-description">
1180
+
1181
+ <p>Check if format fully matches or matches the first character of available options. Return full valid format or nil</p>
1182
+
1183
+
1184
+
1185
+
1186
+ <div class="method-source-code" id="validate_format-source">
1187
+ <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 18</span>
1188
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">validate_format</span>(<span class="ruby-identifier">fmt</span>, <span class="ruby-identifier">options</span>)
1189
+ <span class="ruby-identifier">valid_format_rx</span> = <span class="ruby-identifier">options</span>.<span class="ruby-identifier">map</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">format</span><span class="ruby-operator">|</span> <span class="ruby-identifier">format</span>.<span class="ruby-identifier">sub</span>(<span class="ruby-regexp">/^(.)(.*)$/</span>, <span class="ruby-string">&#39;^\1(\2)?$&#39;</span>) }
1190
+ <span class="ruby-identifier">valid_format</span> = <span class="ruby-keyword">nil</span>
1191
+ <span class="ruby-identifier">valid_format_rx</span>.<span class="ruby-identifier">each_with_index</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">rx</span>, <span class="ruby-identifier">i</span><span class="ruby-operator">|</span>
1192
+ <span class="ruby-identifier">cmp</span> = <span class="ruby-constant">Regexp</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">rx</span>, <span class="ruby-string">&#39;i&#39;</span>)
1193
+ <span class="ruby-keyword">next</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">fmt</span> <span class="ruby-operator">=~</span> <span class="ruby-identifier">cmp</span>
1194
+
1195
+ <span class="ruby-identifier">valid_format</span> = <span class="ruby-identifier">options</span>[<span class="ruby-identifier">i</span>]
1196
+ <span class="ruby-keyword">break</span>
1197
+ <span class="ruby-keyword">end</span>
1198
+ <span class="ruby-identifier">valid_format</span>
1199
+ <span class="ruby-keyword">end</span></pre>
1200
+ </div>
1201
+
1202
+ </div>
1203
+
1204
+
1205
+
1206
+
1207
+ </div>
1208
+
1209
+
1210
+ </section>
1211
+
1212
+ </section>
1213
+
1214
+ </main>
1215
+
1216
+
1217
+ <footer id="validator-badges" role="contentinfo">
1218
+ <p><a href="https://validator.w3.org/check/referer">Validate</a>
1219
+ <p>Generated by <a href="https://ruby.github.io/rdoc/">RDoc</a> 6.2.1.
1220
+ <p>Based on <a href="http://deveiate.org/projects/Darkfish-RDoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
1221
+ </footer>
1222
+