YkLib 0.1.0

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 (125) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +11 -0
  3. data/.rspec +3 -0
  4. data/.travis.yml +6 -0
  5. data/CODE_OF_CONDUCT.md +74 -0
  6. data/Gemfile +7 -0
  7. data/Gemfile.lock +34 -0
  8. data/LICENSE.txt +21 -0
  9. data/README.md +44 -0
  10. data/Rakefile +6 -0
  11. data/YkLib.gemspec +29 -0
  12. data/bin/console +14 -0
  13. data/bin/setup +8 -0
  14. data/lib/YkLib/Yk/__advance__.rb +151 -0
  15. data/lib/YkLib/Yk/__defun__.rb +44 -0
  16. data/lib/YkLib/Yk/__hook__.rb +244 -0
  17. data/lib/YkLib/Yk/__minmax__.rb +123 -0
  18. data/lib/YkLib/Yk/__stdlog.rb +329 -0
  19. data/lib/YkLib/Yk/adhocLiterals/email.rb +119 -0
  20. data/lib/YkLib/Yk/adhocLiterals/path.rb +402 -0
  21. data/lib/YkLib/Yk/adhocLiterals/tag.rb +19 -0
  22. data/lib/YkLib/Yk/adhocLiterals/url.rb +36 -0
  23. data/lib/YkLib/Yk/adhocLiterals.rb +199 -0
  24. data/lib/YkLib/Yk/auto_escseq.rb +5 -0
  25. data/lib/YkLib/Yk/auto_pstore.rb +179 -0
  26. data/lib/YkLib/Yk/bsearch.rb +120 -0
  27. data/lib/YkLib/Yk/clambda.rb +309 -0
  28. data/lib/YkLib/Yk/confLine.rb +423 -0
  29. data/lib/YkLib/Yk/create_tty_width_available.rb +24 -0
  30. data/lib/YkLib/Yk/crypt.rb +26 -0
  31. data/lib/YkLib/Yk/debug2 +1 -0
  32. data/lib/YkLib/Yk/debug2.rb +473 -0
  33. data/lib/YkLib/Yk/debugout.rb +139 -0
  34. data/lib/YkLib/Yk/email_tz.rb +533 -0
  35. data/lib/YkLib/Yk/enum_expect.rb +170 -0
  36. data/lib/YkLib/Yk/errlog.rb +5 -0
  37. data/lib/YkLib/Yk/escseq.rb +59 -0
  38. data/lib/YkLib/Yk/eval_alt.rb +281 -0
  39. data/lib/YkLib/Yk/expector.rb +93 -0
  40. data/lib/YkLib/Yk/fetch.rb +556 -0
  41. data/lib/YkLib/Yk/fetch_old.rb +290 -0
  42. data/lib/YkLib/Yk/fib.rb +158 -0
  43. data/lib/YkLib/Yk/file_aux.rb +843 -0
  44. data/lib/YkLib/Yk/file_aux2.rb +919 -0
  45. data/lib/YkLib/Yk/file_aux_old.rb +160 -0
  46. data/lib/YkLib/Yk/filemod.rb +19 -0
  47. data/lib/YkLib/Yk/force_escseq.rb +3 -0
  48. data/lib/YkLib/Yk/generator__.rb +144 -0
  49. data/lib/YkLib/Yk/generator__.rb.org +139 -0
  50. data/lib/YkLib/Yk/indenter/argless_case.rb +46 -0
  51. data/lib/YkLib/Yk/indenter/each_token.rb +671 -0
  52. data/lib/YkLib/Yk/indenter/free_case.rb +313 -0
  53. data/lib/YkLib/Yk/indenter/if_less.rb +53 -0
  54. data/lib/YkLib/Yk/indenter/independent_ensure.rb +23 -0
  55. data/lib/YkLib/Yk/indenter/independent_rescue.rb +23 -0
  56. data/lib/YkLib/Yk/indenter/operand_circumflex.rb +0 -0
  57. data/lib/YkLib/Yk/indenter/operand_period.rb +16 -0
  58. data/lib/YkLib/Yk/indenter/parenless_and.rb +37 -0
  59. data/lib/YkLib/Yk/indenter/post_test.rb +48 -0
  60. data/lib/YkLib/Yk/indenter/token.rb +1525 -0
  61. data/lib/YkLib/Yk/indenter.rb +1382 -0
  62. data/lib/YkLib/Yk/inot.rb +265 -0
  63. data/lib/YkLib/Yk/intf.rb +815 -0
  64. data/lib/YkLib/Yk/io_aux.rb +1332 -0
  65. data/lib/YkLib/Yk/ioctl.rb +60 -0
  66. data/lib/YkLib/Yk/ipcc.rb +87 -0
  67. data/lib/YkLib/Yk/ipcountry.rb +207 -0
  68. data/lib/YkLib/Yk/ipv4adr.rb +318 -0
  69. data/lib/YkLib/Yk/localmail.rb +276 -0
  70. data/lib/YkLib/Yk/method_chain.rb +359 -0
  71. data/lib/YkLib/Yk/misc_tz.rb +1716 -0
  72. data/lib/YkLib/Yk/missing_method.rb +50 -0
  73. data/lib/YkLib/Yk/mojiConv.rb +257 -0
  74. data/lib/YkLib/Yk/nostdlog.rb +4 -0
  75. data/lib/YkLib/Yk/on_marshal.rb +20 -0
  76. data/lib/YkLib/Yk/overrider.rb +47 -0
  77. data/lib/YkLib/Yk/path.rb +293 -0
  78. data/lib/YkLib/Yk/path_aux.rb +883 -0
  79. data/lib/YkLib/Yk/path_aux_alt.rb +0 -0
  80. data/lib/YkLib/Yk/path_rep.rb +1267 -0
  81. data/lib/YkLib/Yk/pg_setup.rb +917 -0
  82. data/lib/YkLib/Yk/procinfo.rb +314 -0
  83. data/lib/YkLib/Yk/proclist.rb +492 -0
  84. data/lib/YkLib/Yk/property.rb +863 -0
  85. data/lib/YkLib/Yk/ranger.rb +606 -0
  86. data/lib/YkLib/Yk/resolv_tz.rb +88 -0
  87. data/lib/YkLib/Yk/rlprompt.rb +73 -0
  88. data/lib/YkLib/Yk/rootexec.rb +48 -0
  89. data/lib/YkLib/Yk/rpm-packageproxy.rb +784 -0
  90. data/lib/YkLib/Yk/rpm-packageproxy2.rb +1430 -0
  91. data/lib/YkLib/Yk/rwhen.rb +21 -0
  92. data/lib/YkLib/Yk/selector.rb +124 -0
  93. data/lib/YkLib/Yk/set.rb +170 -0
  94. data/lib/YkLib/Yk/shellquote.rb +300 -0
  95. data/lib/YkLib/Yk/sio.rb +1001 -0
  96. data/lib/YkLib/Yk/sio0.rb +835 -0
  97. data/lib/YkLib/Yk/sio_aux.rb +1524 -0
  98. data/lib/YkLib/Yk/sio_inot.rb +86 -0
  99. data/lib/YkLib/Yk/sock_aux.rb +42 -0
  100. data/lib/YkLib/Yk/spipe.rb +843 -0
  101. data/lib/YkLib/Yk/sql_table.rb +565 -0
  102. data/lib/YkLib/Yk/stdlog.rb +4 -0
  103. data/lib/YkLib/Yk/syscommand.rb +173 -0
  104. data/lib/YkLib/Yk/sysinit.rb +75 -0
  105. data/lib/YkLib/Yk/ttyFontWidth.rb +46113 -0
  106. data/lib/YkLib/Yk/tty_char.dump +0 -0
  107. data/lib/YkLib/Yk/tty_char.rb +47 -0
  108. data/lib/YkLib/Yk/tty_char_create.rb +437031 -0
  109. data/lib/YkLib/Yk/tty_char_static.rb +437016 -0
  110. data/lib/YkLib/Yk/tty_rewrite.rb +142 -0
  111. data/lib/YkLib/Yk/tty_str.rb +461 -0
  112. data/lib/YkLib/Yk/tty_width.dat.rb +114 -0
  113. data/lib/YkLib/Yk/tty_width.rb +180 -0
  114. data/lib/YkLib/Yk/tty_width_available +569 -0
  115. data/lib/YkLib/Yk/tty_width_list +0 -0
  116. data/lib/YkLib/Yk/tty_width_list.linux +280 -0
  117. data/lib/YkLib/Yk/tty_width_list.windows +324 -0
  118. data/lib/YkLib/Yk/tz_tty +0 -0
  119. data/lib/YkLib/Yk/tz_tty.rb +0 -0
  120. data/lib/YkLib/Yk/uprepos.rb +94 -0
  121. data/lib/YkLib/Yk/userinfo.rb +91 -0
  122. data/lib/YkLib/Yk/with.rb +109 -0
  123. data/lib/YkLib/version.rb +3 -0
  124. data/lib/YkLib.rb +6 -0
  125. metadata +170 -0
@@ -0,0 +1,265 @@
1
+
2
+
3
+ if RUBY_PLATFORM =~ /linux/
4
+
5
+ require 'inotify'
6
+ require 'Yk/path_aux'
7
+ require 'thread'
8
+
9
+ class InotD
10
+ @@allList = []
11
+ def initialize (d, wparam, prc, f)
12
+ @int = Inotify.new
13
+ @d = d
14
+ @int.add_watch @d, wparam
15
+ @prcList = Hash.new{|h, k| h[k] = []}
16
+ @prcList[f].push prc
17
+ @m = Mutex.new
18
+ @@allList.push self
19
+ @t = Thread.new do
20
+ begin
21
+ @int.each_event do |ev|
22
+ @prcList.each do |e, aprc|
23
+ if e == ev.name || e == nil
24
+ aprc.each do |prc|
25
+ begin
26
+ prc.call ev.name, ev.mask
27
+ rescue SystemExit
28
+ raise
29
+ rescue Exception => e
30
+ STDERR.write "#{e.class}:#{e}\n"
31
+ e.backtrace.each do |e|
32
+ STDERR.write "\t#{e}\n"
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ ensure
40
+ @closed && @int.close
41
+ @closed = true
42
+ end
43
+ end
44
+ end
45
+ def readd_watch (wparam, prc, f)
46
+ @m.synchronize do
47
+ @int.add_watch @d, wparam
48
+ @prcList[f].push prc
49
+ end
50
+ end
51
+ @@m = Mutex.new
52
+ @@iList = Hash.new
53
+ def self.emerge (d, wparam, prc, f = nil)
54
+ obj = nil
55
+ @@m.synchronize do
56
+ if !(obj = @@iList[d])
57
+ obj = @@iList[d] = InotD.new(d, wparam, prc, f)
58
+ return obj
59
+ end
60
+ end
61
+ obj.readd_watch wparam, prc, f
62
+ obj
63
+ end
64
+ def close_watch (f, prc)
65
+ @m.synchronize do
66
+ (a = @prcList[f]).delete prc
67
+ if a.size == 0
68
+ @prcList.delete f
69
+ end
70
+ if @prcList.size != 0
71
+ return
72
+ end
73
+ end
74
+ Thread.kill @t
75
+ @@m.synchronize do
76
+ @@iList.delete @d
77
+ @int.close
78
+ end
79
+ end
80
+ def join
81
+ @t.join
82
+ end
83
+ def self.join
84
+ @@allList.each do |obj|
85
+ obj.join
86
+ end
87
+ end
88
+ end
89
+ class Inot
90
+ def self.join
91
+ InotD.join
92
+ end
93
+ ACCESS = Inotify::ACCESS
94
+ MODIFY = Inotify::MODIFY
95
+ ATTRIB = Inotify::ATTRIB
96
+ CLOSE_WRITE = Inotify::CLOSE_WRITE
97
+ CLOSE_NOWRITE = Inotify::CLOSE_NOWRITE
98
+ OPEN = Inotify::OPEN
99
+ MOVED_FROM = Inotify::MOVED_FROM
100
+ MOVED_TO = Inotify::MOVED_TO
101
+ CREATE = Inotify::CREATE
102
+ DELETE = Inotify::DELETE
103
+ DELETE_SELF = Inotify::DELETE_SELF
104
+ MOVE_SELF = Inotify::MOVE_SELF
105
+ UNMOUNT = Inotify::UNMOUNT
106
+ Q_OVERFLOW = Inotify::Q_OVERFLOW
107
+ IGNORED = Inotify::IGNORED
108
+ CLOSE = Inotify::CLOSE
109
+ MOVE = Inotify::MOVE
110
+ MASK_ADD = Inotify::MASK_ADD
111
+ ISDIR = Inotify::ISDIR
112
+ ONESHOT = Inotify::ONESHOT
113
+ ALL_EVENTS = Inotify::ALL_EVENTS
114
+ def initialize (path, wparam, prc)
115
+ prc2 = Proc.new do |n, flg|
116
+ args = [n, flg][0..prc.arity - 1]
117
+ if !@base
118
+ prc.call *args
119
+ else
120
+ prc.call *args
121
+ end
122
+ end
123
+ @prc = prc2
124
+ if path.exist?
125
+ rpath = path.realpath
126
+ if path.directory?
127
+ @base = nil
128
+ @inotD = InotD.emerge rpath, wparam, prc2
129
+ else
130
+ @base = rpath.basename
131
+ @inotD = InotD.emerge rpath.dirname, wparam, prc2, @base
132
+ end
133
+ elsif path.dirname.directory?
134
+ rpath = path.dirname.realpath
135
+ @base = path.basename
136
+ @inotD = InotD.emerge rpath, wparam, prc2, @base
137
+ else
138
+ ArgumentError.new "#{path.dirname} does not seem a directory."
139
+ end
140
+ end
141
+ def close
142
+ @inotD.close_watch(@base, @prc)
143
+ end
144
+ def join
145
+ @inotD.join
146
+ end
147
+ class Arr < Array
148
+ def close
149
+ each do |e|
150
+ e.close
151
+ end
152
+ end
153
+ def join
154
+ each do |e|
155
+ e.join
156
+ end
157
+ end
158
+ end
159
+ end
160
+
161
+
162
+ class String
163
+ def at_modified (mode = Inot::MODIFY|Inot::DELETE|Inot::CREATE, &bl)
164
+ Inot.new self, mode, bl
165
+ end
166
+ end
167
+
168
+
169
+ class Array
170
+ def at_modified (mode = Inot::MODIFY|Inot::DELETE|Inot::CREATE, &bl)
171
+ m = Mutex.new
172
+ b2 = Proc.new do |f, msk|
173
+ m.synchronize do
174
+ if bl.arity == 1
175
+ bl.call f
176
+ else
177
+ bl.call f, msk
178
+ end
179
+ end
180
+ end
181
+ ia = Inot::Arr.new
182
+ each do |e|
183
+ ia.push e.at_modified(mode, &b2)
184
+ end
185
+ ia
186
+ end
187
+ end
188
+
189
+
190
+ elsif RUBY_PLATFORM =~ /cygwin/
191
+
192
+ require 'Win32API'
193
+ require 'Yk/path_aux'
194
+
195
+ module Win32
196
+
197
+ INVALID_HANDLE_VALUE = -1
198
+ INFINITE = 0xFFFFFFFF
199
+ WAIT_OBJECT_0 = 0x00000000
200
+ WAIT_TIMEOUT = 0x00000102
201
+ WAIT_FAILED = 0xFFFFFFFF
202
+ FILE_NOTIFY_CHANGE_FILE_NAME = 0x00000001
203
+ FILE_NOTIFY_CHANGE_DIR_NAME = 0x00000002
204
+ FILE_NOTIFY_CHANGE_ATTRIBUTES = 0x00000004
205
+ FILE_NOTIFY_CHANGE_SIZE = 0x00000008
206
+ FILE_NOTIFY_CHANGE_LAST_WRITE = 0x00000010
207
+ FILE_NOTIFY_CHANGE_LAST_ACCESS = 0x00000020
208
+ FILE_NOTIFY_CHANGE_CREATION = 0x00000040
209
+ FILE_NOTIFY_CHANGE_SECURITY = 0x00000100
210
+
211
+ FindFirstChangeNotification = Win32API.new("kernel32", "FindFirstChangeNotification", ['P', 'I', 'L'], 'L')
212
+ FindNextChangeNotification = Win32API.new("kernel32", "FindNextChangeNotification", ['L'], 'I')
213
+ WaitForMultipleObjects = Win32API.new("kernel32", "WaitForMultipleObjects", ['L', 'P', 'I', 'L'], 'L')
214
+ WaitForSingleObject = Win32API.new("kernel32", "WaitForSingleObject", ['P', 'L'], 'L')
215
+ CloseHandle = Win32API.new("kernel32", "CloseHandle", ['P'], 'L')
216
+
217
+ module Event
218
+
219
+ def self.FindChangeNotification(dir_name='.', is_watch_subtree=false)
220
+ dir_name = %W{cygpath -w #{dir_name}}.read_p.chomp
221
+ # 指定のディレクトリ中の変更を監視する。
222
+ # 変更があったら、ブロックの有無によりyieldまたはreturn
223
+ h =
224
+ FindFirstChangeNotification.Call(
225
+ dir_name, (is_watch_subtree ? 1 : 0),
226
+ FILE_NOTIFY_CHANGE_LAST_WRITE |
227
+ FILE_NOTIFY_CHANGE_CREATION |
228
+ FILE_NOTIFY_CHANGE_FILE_NAME
229
+ )
230
+ return nil if h == INVALID_HANDLE_VALUE
231
+
232
+ begin
233
+ loop {
234
+ wait_start = Time.now
235
+ return nil if WAIT_FAILED == WaitForSingleObject.Call(h, INFINITE)
236
+ if block_given?
237
+ yield if Time.now - wait_start > 0.1
238
+ else
239
+ return true
240
+ end
241
+ return nil if 0 == FindNextChangeNotification.Call(h)
242
+ }
243
+ ensure
244
+ CloseHandle.call(h)
245
+ end
246
+ end
247
+
248
+ end
249
+
250
+ end
251
+
252
+
253
+ class String
254
+ def at_modified
255
+ Thread.new do
256
+ Win32::Event::FindChangeNotification self do
257
+ yield
258
+ end
259
+ end
260
+ end
261
+ end
262
+
263
+
264
+ end
265
+