wdm 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 42324b28d084d3fadb3ff952786996753889da0d
4
- data.tar.gz: 639e1295f205ef26b9ace900da3b2e13440739fe
2
+ SHA256:
3
+ metadata.gz: 7f5bc4036f1b56e0370c04974f657cd432f1d307bd99cc20ba810e50d6c57102
4
+ data.tar.gz: e33f1f814957cdaa4b33a8487edeb3fbbef34ccb54c5bbf86441bba65f23a39c
5
5
  SHA512:
6
- metadata.gz: 981ba46dedb120aeef138ab2099ed26cd6ee88dda49df3d4b7669fe60307e25adca78286e95756f82e9e30fb44350e695b8c7fa4fa0207c097276320ddee665e
7
- data.tar.gz: eda26e7284c30e459298c98404c0b7a6d1617f91b531a36b0fa163ec231e1289f7d6f91206efcdf82bbf7d620554a9db813bc79cb0264202d409916ef2f174ee
6
+ metadata.gz: 8eeeda975721567490a22da0986dbf0724821521629b94401f74d14d87922051669c8dea18d4994210155d5df6ce634d2fb2f01f50ccc0eccf4753893dc8f23c
7
+ data.tar.gz: 68b01dbf2b75454ccda41a98023626131ea93d525bc0affe98b4f813f813e3a40de7963f8bd7ca799116fdc523523ab74a9e78934e1a7132d3c84c01d168a48c
checksums.yaml.gz.sig ADDED
Binary file
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2012 Maher Sallam
1
+ Copyright (c) 2015 Maher Sallam
2
2
 
3
3
  MIT License
4
4
 
data/README.md CHANGED
@@ -4,15 +4,14 @@ Windows Directory Monitor (WDM) is a thread-safe ruby library which can be used
4
4
 
5
5
  It's mostly implemented in C and uses the Win32 API for a better performance.
6
6
 
7
- **Important**: WDM only runs on ruby versions >= *1.9.2*!
8
-
9
7
  ## Installation
10
8
 
11
9
  If you are using Bundler, add the following line to your application's Gemfile:
12
10
 
13
11
  gem 'wdm'
14
12
 
15
- And then execute:
13
+ Although wdm is only usable on Windows, it can be installed on Linux and Macos as well, so that no :platform option is necessary.
14
+ Then execute:
16
15
 
17
16
  $ bundle
18
17
 
@@ -35,6 +34,7 @@ You can find a comparison of different ruby libraries for watching directory cha
35
34
  To start watching directories, you need an instance of `WDM::Monitor`:
36
35
 
37
36
  ```ruby
37
+ require "wdm"
38
38
  monitor = WDM::Monitor.new
39
39
  ```
40
40
 
@@ -57,103 +57,17 @@ monitor.watch('C:\Users\Maher\Desktop', :default, :directories)
57
57
 
58
58
  The supported options are:
59
59
 
60
- <table>
61
- <thead>
62
- <tr>
63
- <th>Value</th>
64
- <th>Meaning</th>
65
- </tr>
66
- </thead>
67
- <tbody>
68
- <tr>
69
- <td>:default</td>
70
-
71
- <td>
72
- The default set of options for watching directories. It's a combination of the :files, :directories and the :last_write options.
73
- </td>
74
- </tr>
75
-
76
- <tr>
77
- <td>:files</td>
78
-
79
- <td>
80
- Any file name change in the watched directory or subtree causes a change
81
- notification wait operation to return. Changes include renaming, creating, or
82
- deleting a file.
83
- </td>
84
- </tr>
85
-
86
- <tr>
87
- <td>:directories</td>
88
-
89
- <td>
90
- Any directory-name change in the watched directory or subtree causes a
91
- change notification wait operation to return. Changes include creating or
92
- deleting a directory.
93
- </td>
94
- </tr>
95
-
96
- <tr>
97
- <td>:attributes</td>
98
-
99
- <td>
100
- Any attribute change in the watched directory or subtree causes a change
101
- notification wait operation to return.
102
- </td>
103
- </tr>
104
-
105
- <tr>
106
- <td>:size</td>
107
-
108
- <td>
109
- Any file-size change in the watched directory or subtree causes a change
110
- notification wait operation to return. The operating system detects a change in
111
- file size only when the file is written to the disk. For operating systems that
112
- use extensive caching, detection occurs only when the cache is sufficiently
113
- flushed.
114
- </td>
115
- </tr>
116
-
117
- <tr>
118
- <td>:last_write</td>
119
-
120
- <td>
121
- Any change to the last write-time of files in the watched directory or
122
- subtree causes a change notification wait operation to return. The operating
123
- system detects a change to the last write-time only when the file is written to
124
- the disk. For operating systems that use extensive caching, detection occurs
125
- only when the cache is sufficiently flushed.
126
- </td>
127
- </tr>
128
-
129
- <tr>
130
- <td>:last_access</td>
131
-
132
- <td>
133
- Any change to the last access time of files in the watched directory or
134
- subtree causes a change notification wait operation to return.
135
- </td>
136
- </tr>
137
-
138
- <tr>
139
- <td>:creation</td>
140
-
141
- <td>
142
- Any change to the creation time of files in the watched directory or subtree
143
- causes a change notification wait operation to return.
144
- </td>
145
- </tr>
146
-
147
- <tr>
148
- <td>:security</td>
149
-
150
- <td>
151
- Any security-descriptor change in the watched directory or subtree causes a
152
- change notification wait operation to return.
153
- </td>
154
- </tr>
155
- </tbody>
156
- </table>
60
+ | Value | Meaning |
61
+ |-------|---------|
62
+ | :default | The default set of options for watching directories. It's a combination of the :files, :directories and the :last_write options. |
63
+ | :files | Any file name change in the watched directory or subtree causes a change notification wait operation to return. Changes include renaming, creating, or deleting a file. |
64
+ | :directories | Any directory-name change in the watched directory or subtree causes a change notification wait operation to return. Changes include creating or deleting a directory. |
65
+ | :attributes | Any attribute change in the watched directory or subtree causes a change notification wait operation to return. |
66
+ | :size | Any file-size change in the watched directory or subtree causes a change notification wait operation to return. The operating system detects a change in file size only when the file is written to the disk. For operating systems that use extensive caching, detection occurs only when the cache is sufficiently flushed.|
67
+ | :last_write | Any change to the last write-time of files in the watched directory or subtree causes a change notification wait operation to return. The operating system detects a change to the last write-time only when the file is written to the disk. For operating systems that use extensive caching, detection occurs only when the cache is sufficiently flushed. |
68
+ | :last_access | Any change to the last access time of files in the watched directory or subtree causes a change notification wait operation to return. |
69
+ | :creation | Any change to the creation time of files in the watched directory or subtree causes a change notification wait operation to return. |
70
+ | :security | Any security-descriptor change in the watched directory or subtree causes a change notification wait operation to return. |
157
71
 
158
72
  These options map to the filters that `ReadDirectoryChangesW` takes in its `dwNotifyFilter` parameter. You can find more info on the [docs page](http://msdn.microsoft.com/en-us/library/windows/desktop/aa365465.aspx) of `ReadDirectoryChangesW`.
159
73
 
@@ -190,18 +104,24 @@ Download the source, then run the following:
190
104
 
191
105
  $ bundle exec rake compile
192
106
 
193
- To get debug messages, you need to enable them in the `global.h` file:
107
+ To get debug messages, you need to enable them like so:
108
+
109
+ $ bundle exec rake clean compile -- --with-cflags=-DWDM_DEBUG_ENABLED=TRUE
110
+
111
+ ### Execute the specs
194
112
 
195
- #define WDM_DEBUG_ENABLED TRUE // This is disabled by default
113
+ $ bundle exec rake spec
196
114
 
197
115
  ## Contributing
198
116
 
199
117
  1. Fork it
200
118
  2. Create your feature branch (`git checkout -b my-new-feature`)
201
- 3. Commit your changes (`git commit -am 'Added some feature'`)
202
- 4. Push to the branch (`git push origin my-new-feature`)
203
- 5. Create new Pull Request
119
+ 3. Add a spec for your change
120
+ 4. Commit your changes (`git commit -am 'Added some feature'`)
121
+ 5. Push to the branch (`git push origin my-new-feature`)
122
+ 6. Create new Pull Request
123
+ 7. Ensure CI runs green.
204
124
 
205
125
  ## Author
206
126
 
207
- [Maher Sallam](https://github.com/Maher4Ever)
127
+ [Maher Sallam](https://github.com/Maher4Ever)
data/ext/wdm/extconf.rb CHANGED
@@ -16,13 +16,10 @@ def windows?
16
16
  end
17
17
 
18
18
  if windows? and
19
- have_library("kernel32") and
20
- have_header("windows.h") and
21
- have_header("ruby.h") and
22
- have_const('HAVE_RUBY_ENCODING_H')
19
+ have_library("kernel32") and
20
+ have_header("windows.h")
23
21
  then
24
- have_func('rb_thread_call_without_gvl')
25
- generate_makefile()
22
+ generate_makefile()
26
23
  else
27
- generate_dummy_makefile()
24
+ generate_dummy_makefile()
28
25
  end
data/ext/wdm/rb_change.c CHANGED
@@ -60,7 +60,7 @@ extract_absolute_path_from_notification(const LPWSTR base_dir, const PFILE_NOTIF
60
60
  // Null-terminate the string
61
61
  buffer[filename_len] = L'\0';
62
62
 
63
- WDM_WDEBUG("change in: '%s'", buffer);
63
+ WDM_DEBUG("change in: '%S'", buffer);
64
64
 
65
65
  absolute_filepath_len = wcslen(base_dir) + filename_len;
66
66
  absolute_filepath = ALLOCA_N(WCHAR, absolute_filepath_len + 1); // 1 for NULL
@@ -69,7 +69,7 @@ extract_absolute_path_from_notification(const LPWSTR base_dir, const PFILE_NOTIF
69
69
  wcscat(absolute_filepath, base_dir);
70
70
  wcscat(absolute_filepath, buffer);
71
71
 
72
- WDM_WDEBUG("absolute path is: '%s'", absolute_filepath);
72
+ WDM_DEBUG("absolute path is: '%S'", absolute_filepath);
73
73
 
74
74
  _wsplitpath(buffer, NULL, NULL, file, ext);
75
75
 
@@ -78,7 +78,7 @@ extract_absolute_path_from_notification(const LPWSTR base_dir, const PFILE_NOTIF
78
78
  if ( file[0] != L'\0' ) wcscat(filename, file);
79
79
  if ( ext[0] != L'\0' ) wcscat(filename, ext);
80
80
 
81
- WDM_WDEBUG("filename: '%s'", filename);
81
+ WDM_DEBUG("filename: '%S'", filename);
82
82
 
83
83
  filename_len = wcslen(filename);
84
84
 
@@ -109,7 +109,7 @@ extract_absolute_path_from_notification(const LPWSTR base_dir, const PFILE_NOTIF
109
109
  if (GetLongPathNameW(unicode_absolute_filepath, absolute_long_filepath, WDM_MAX_WCHAR_LONG_PATH) != 0) {
110
110
  absolute_filepath = absolute_long_filepath + 4; // Skip first 4 pointers of "\\?\"
111
111
  absolute_filepath_len = wcslen(absolute_filepath);
112
- WDM_WDEBUG("Short path converted to long: '%s'", absolute_filepath);
112
+ WDM_DEBUG("Short path converted to long: '%S'", absolute_filepath);
113
113
  }
114
114
  else {
115
115
  WDM_DEBUG("Can't convert short path to long: '%s'", rb_w32_strerror(GetLastError()));
@@ -136,8 +136,6 @@ extract_absolute_path_from_notification(const LPWSTR base_dir, const PFILE_NOTIF
136
136
  multibyte_filepath_buffer_size - 1, // -1 because this func takes the chars count, not bytes count
137
137
  wdm_rb_enc_utf8);
138
138
 
139
- OBJ_TAINT(path);
140
-
141
139
  return path;
142
140
  }
143
141
 
@@ -196,4 +194,4 @@ wdm_rb_change_init()
196
194
 
197
195
  rb_define_attr(cWDM_Change, "path", 1, 0);
198
196
  rb_define_attr(cWDM_Change, "type", 1, 0);
199
- }
197
+ }
data/ext/wdm/rb_monitor.c CHANGED
@@ -50,7 +50,7 @@ static void CALLBACK handle_entry_change(DWORD, DWORD, LPOVERLAPPED);
50
50
  static BOOL register_monitoring_entry(WDM_PEntry);
51
51
  static DWORD WINAPI start_monitoring(LPVOID);
52
52
 
53
- static VALUE wait_for_changes(LPVOID);
53
+ static void *wait_for_changes(void *);
54
54
  static void process_changes(WDM_PQueue);
55
55
  static void stop_monitoring(LPVOID);
56
56
  static VALUE rb_monitor_run_bang(VALUE);
@@ -99,6 +99,16 @@ monitor_free(LPVOID param)
99
99
  wdm_monitor_free(monitor);
100
100
  }
101
101
 
102
+ static const rb_data_type_t monitor_data_type = {
103
+ .wrap_struct_name = "WDM::Monitor",
104
+ .function = {
105
+ .dmark = monitor_mark,
106
+ .dfree = monitor_free,
107
+ .dsize = NULL,
108
+ },
109
+ .flags = 0
110
+ };
111
+
102
112
  static VALUE
103
113
  rb_monitor_alloc(VALUE self)
104
114
  {
@@ -106,7 +116,7 @@ rb_monitor_alloc(VALUE self)
106
116
  WDM_DEBUG("Allocating a new monitor object!");
107
117
  WDM_DEBUG("--------------------------------");
108
118
 
109
- return Data_Wrap_Struct(self, monitor_mark, monitor_free, wdm_monitor_new());
119
+ return TypedData_Wrap_Struct(self, &monitor_data_type, wdm_monitor_new());
110
120
  }
111
121
 
112
122
  static DWORD
@@ -156,7 +166,7 @@ combined_watch(BOOL recursively, int argc, VALUE *argv, VALUE self)
156
166
  // TODO: Maybe raise a more user-friendly error?
157
167
  rb_need_block();
158
168
 
159
- Data_Get_Struct(self, WDM_Monitor, monitor);
169
+ TypedData_Get_Struct(self, WDM_Monitor, &monitor_data_type, monitor);
160
170
 
161
171
  EnterCriticalSection(&monitor->lock);
162
172
  running = monitor->running;
@@ -196,7 +206,7 @@ combined_watch(BOOL recursively, int argc, VALUE *argv, VALUE self)
196
206
 
197
207
  MultiByteToWideChar(CP_UTF8, 0, RSTRING_PTR(os_encoded_directory), -1, entry->user_data->dir, directory_letters_count);
198
208
 
199
- WDM_WDEBUG("New path to watch: '%s'", entry->user_data->dir);
209
+ WDM_DEBUG("New path to watch: '%S'", entry->user_data->dir);
200
210
 
201
211
  entry->user_data->dir = wdm_utils_full_pathname(entry->user_data->dir);
202
212
 
@@ -234,7 +244,7 @@ combined_watch(BOOL recursively, int argc, VALUE *argv, VALUE self)
234
244
 
235
245
  wdm_monitor_update_head(monitor, entry);
236
246
 
237
- WDM_WDEBUG("Watching directory: '%s'", entry->user_data->dir);
247
+ WDM_DEBUG("Watching directory: '%S'", entry->user_data->dir);
238
248
 
239
249
  return Qnil;
240
250
  }
@@ -278,7 +288,7 @@ handle_entry_change(
278
288
  data_to_process = wdm_queue_item_new(WDM_QUEUE_ITEM_TYPE_DATA);
279
289
  data_to_process->data = wdm_queue_item_data_new();
280
290
 
281
- WDM_WDEBUG("Change detected in '%s'", param->entry->user_data->dir);
291
+ WDM_DEBUG("Change detected in '%S'", param->entry->user_data->dir);
282
292
 
283
293
  data_to_process->data->user_data = param->entry->user_data;
284
294
 
@@ -367,14 +377,14 @@ start_monitoring(LPVOID param)
367
377
  return 0;
368
378
  }
369
379
 
370
- static VALUE
371
- wait_for_changes(LPVOID param)
380
+ static void *
381
+ wait_for_changes(void *param)
372
382
  {
373
- HANDLE process_event;
383
+ HANDLE process_event = (HANDLE)param;
384
+ VALUE rb_res;
374
385
 
375
- process_event = (HANDLE)param;
376
-
377
- return WaitForSingleObject(process_event, INFINITE) == WAIT_OBJECT_0 ? Qtrue : Qfalse;
386
+ rb_res = WaitForSingleObject(process_event, INFINITE) == WAIT_OBJECT_0 ? Qtrue : Qfalse;
387
+ return (void *)rb_res;
378
388
  }
379
389
 
380
390
  static void
@@ -467,7 +477,7 @@ rb_monitor_run_bang(VALUE self)
467
477
 
468
478
  WDM_DEBUG("Running the monitor!");
469
479
 
470
- Data_Get_Struct(self, WDM_Monitor, monitor);
480
+ TypedData_Get_Struct(self, WDM_Monitor, &monitor_data_type, monitor);
471
481
  already_running = FALSE;
472
482
 
473
483
  EnterCriticalSection(&monitor->lock);
@@ -503,13 +513,7 @@ rb_monitor_run_bang(VALUE self)
503
513
 
504
514
  while ( monitor->running ) {
505
515
 
506
- // Ruby 2.2 removed the 'rb_thread_blocking_region' function. Hence, we now need
507
- // to check if the replacement function is defined and use it if it's available.
508
- #ifdef HAVE_RB_THREAD_CALL_WITHOUT_GVL
509
- waiting_succeeded = rb_thread_call_without_gvl(wait_for_changes, monitor->process_event, stop_monitoring, monitor);
510
- #else
511
- waiting_succeeded = rb_thread_blocking_region(wait_for_changes, monitor->process_event, stop_monitoring, monitor);
512
- #endif
516
+ waiting_succeeded = (VALUE)rb_thread_call_without_gvl(wait_for_changes, monitor->process_event, stop_monitoring, monitor);
513
517
 
514
518
  if ( waiting_succeeded == Qfalse ) {
515
519
  rb_raise(eWDM_Error, "Failed while waiting for a change in the watched directories!");
@@ -535,7 +539,7 @@ rb_monitor_stop(VALUE self)
535
539
  {
536
540
  WDM_PMonitor monitor;
537
541
 
538
- Data_Get_Struct(self, WDM_Monitor, monitor);
542
+ TypedData_Get_Struct(self, WDM_Monitor, &monitor_data_type, monitor);
539
543
 
540
544
  stop_monitoring(monitor);
541
545
 
@@ -572,4 +576,4 @@ wdm_rb_monitor_init()
572
576
  rb_define_method(cWDM_Monitor, "watch_recursively", RUBY_METHOD_FUNC(rb_monitor_watch_recursively), -1);
573
577
  rb_define_method(cWDM_Monitor, "run!", RUBY_METHOD_FUNC(rb_monitor_run_bang), 0);
574
578
  rb_define_method(cWDM_Monitor, "stop", RUBY_METHOD_FUNC(rb_monitor_stop), 0);
575
- }
579
+ }
data/ext/wdm/wdm.h CHANGED
@@ -3,7 +3,7 @@
3
3
  // Support Windows 2000 and later,
4
4
  // this is needed for 'GetLongPathNameW' (both of the following defines)
5
5
  #ifndef WINVER
6
- #define WINVER 0x0500
6
+ #define WINVER 0x0500
7
7
  #endif
8
8
  #ifndef _WIN32_WINNT
9
9
  #define _WIN32_WINNT 0x0500
@@ -14,13 +14,14 @@
14
14
  #define WIN32_LEAN_AND_MEAN
15
15
  #endif
16
16
  #ifndef VC_EXTRALEAN
17
- #define VC_EXTRALEAN
17
+ #define VC_EXTRALEAN
18
18
  #endif
19
19
 
20
20
  #include <Windows.h>
21
21
 
22
22
  #include <ruby.h>
23
23
  #include <ruby/encoding.h>
24
+ #include <ruby/thread.h>
24
25
 
25
26
  #ifndef WDM_H
26
27
  #define WDM_H
@@ -33,7 +34,9 @@ extern "C" {
33
34
  // Constants
34
35
  // ---------------------------------------------------------
35
36
 
37
+ #ifndef WDM_DEBUG_ENABLED
36
38
  #define WDM_DEBUG_ENABLED FALSE
39
+ #endif
37
40
 
38
41
  #define WDM_BUFFER_SIZE 16384 // 2^14 or 16Kb
39
42
 
@@ -48,13 +51,8 @@ extern "C" {
48
51
  #if WDM_DEBUG_ENABLED == TRUE
49
52
  #define WDM_DEBUG(str, ...) \
50
53
  fprintf(stderr, "[DEBUG] (%s@%d): " str "\n", __FILE__, __LINE__, ##__VA_ARGS__)
51
-
52
- #define WDM_WDEBUG(str, ...) \
53
- fwprintf(stderr, L"[DEBUG] (%S@%d): " str "\n", __FILE__, __LINE__, ##__VA_ARGS__)
54
-
55
54
  #else
56
55
  #define WDM_DEBUG(str, ...)
57
- #define WDM_WDEBUG(str, ...)
58
56
  #endif
59
57
 
60
58
  // ----------------------------------------------------------
@@ -79,4 +77,4 @@ void Init_wdm_ext();
79
77
  }
80
78
  #endif // __cplusplus
81
79
 
82
- #endif // WDM_H
80
+ #endif // WDM_H
data.tar.gz.sig ADDED
Binary file
metadata CHANGED
@@ -1,90 +1,46 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wdm
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Maher Sallam
8
- autorequire:
8
+ - Lars Kanis
9
9
  bindir: bin
10
- cert_chain: []
11
- date: 2015-07-09 00:00:00.000000000 Z
12
- dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: rake-compiler
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: '0'
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- version: '0'
27
- - !ruby/object:Gem::Dependency
28
- name: rspec
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: guard-rspec
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
- - !ruby/object:Gem::Dependency
56
- name: guard-shell
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: '0'
69
- - !ruby/object:Gem::Dependency
70
- name: pry
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- version: '0'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- version: '0'
10
+ cert_chain:
11
+ - |
12
+ -----BEGIN CERTIFICATE-----
13
+ MIIEBDCCAmygAwIBAgIBAzANBgkqhkiG9w0BAQsFADAoMSYwJAYDVQQDDB1sYXJz
14
+ L0RDPWdyZWl6LXJlaW5zZG9yZi9EQz1kZTAeFw0yNDAyMjgxOTMxNDdaFw0yNTAy
15
+ MjcxOTMxNDdaMCgxJjAkBgNVBAMMHWxhcnMvREM9Z3JlaXotcmVpbnNkb3JmL0RD
16
+ PWRlMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAwum6Y1KznfpzXOT/
17
+ mZgJTBbxZuuZF49Fq3K0WA67YBzNlDv95qzSp7V/7Ek3NCcnT7G+2kSuhNo1FhdN
18
+ eSDO/moYebZNAcu3iqLsuzuULXPLuoU0GsMnVMqV9DZPh7cQHE5EBZ7hlzDBK7k/
19
+ 8nBMvR0mHo77kIkapHc26UzVq/G0nKLfDsIHXVylto3PjzOumjG6GhmFN4r3cP6e
20
+ SDfl1FSeRYVpt4kmQULz/zdSaOH3AjAq7PM2Z91iGwQvoUXMANH2v89OWjQO/NHe
21
+ JMNDFsmHK/6Ji4Kk48Z3TyscHQnipAID5GhS1oD21/WePdj7GhmbF5gBzkV5uepd
22
+ eJQPgWGwrQW/Z2oPjRuJrRofzWfrMWqbOahj9uth6WSxhNexUtbjk6P8emmXOJi5
23
+ chQPnWX+N3Gj+jjYxqTFdwT7Mj3pv1VHa+aNUbqSPpvJeDyxRIuo9hvzDaBHb/Cg
24
+ 9qRVcm8a96n4t7y2lrX1oookY6bkBaxWOMtWlqIprq8JZXM9AgMBAAGjOTA3MAkG
25
+ A1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQWBBQ4h1tIyvdUWtMI739xMzTR
26
+ 7EfMFzANBgkqhkiG9w0BAQsFAAOCAYEArBmHSfnUyNWf3R1Fx0mMHloWGdcKn2D2
27
+ BsqTApXU2nADiyppIqRq4b9e7hw342uzadSLkoQcEFOxThLRhAcijoWfQVBcsbV/
28
+ ZsCY1qlUTIJuSWxaSyS4efUX+N4eMNyPM9oW/sphlWFo0DgI34Y9WB6HDzH+O71y
29
+ R7PARke3f4kYnRJf5yRQLPDrH9UYt9KlBQm6l7XMtr5EMnQt0EfcmZEi9H4t/vS2
30
+ haxvpFMdAKo4H46GBYNO96r6b74t++vgQSBTg/AFVwvRZwNSrPPcBfb4xxeEAhRR
31
+ x+LU7feIH7lZ//3buiyD03gLAEtHXai0Y+/VfuWIpwYJAl2BO/tU7FS/dtbJq9oc
32
+ dI36Yyzy+BrCM0WT4oCsagePNb97FaNhl4F6sM5JEPT0ZPxRx0i3G4TNNIYziVos
33
+ 5wFER6XhvvLDFAMh/jMg+s7Wd5SbSHgHNSUaUGVtdWkVPOer6oF0aLdZUR3CETkn
34
+ 5nWXZma/BUd3YgYA/Xumc6QQqIS4p7mr
35
+ -----END CERTIFICATE-----
36
+ date: 2024-08-04 00:00:00.000000000 Z
37
+ dependencies: []
83
38
  description: Windows Directory Monitor (WDM) is a library which can be used to monitor
84
39
  directories for changes. It's mostly implemented in C and uses the Win32 API for
85
40
  a better performance.
86
41
  email:
87
42
  - maher@sallam.me
43
+ - lars@greiz-reinsdorf.de
88
44
  executables: []
89
45
  extensions:
90
46
  - ext/wdm/extconf.rb
@@ -114,9 +70,9 @@ files:
114
70
  - ext/wdm/wdm.vcxproj.filters
115
71
  - lib/wdm.rb
116
72
  homepage: https://github.com/Maher4Ever/wdm
117
- licenses: []
73
+ licenses:
74
+ - MIT
118
75
  metadata: {}
119
- post_install_message:
120
76
  rdoc_options: []
121
77
  require_paths:
122
78
  - lib
@@ -124,16 +80,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
124
80
  requirements:
125
81
  - - ">="
126
82
  - !ruby/object:Gem::Version
127
- version: 1.9.2
83
+ version: '2.5'
128
84
  required_rubygems_version: !ruby/object:Gem::Requirement
129
85
  requirements:
130
86
  - - ">="
131
87
  - !ruby/object:Gem::Version
132
88
  version: '0'
133
89
  requirements: []
134
- rubyforge_project:
135
- rubygems_version: 2.4.5
136
- signing_key:
90
+ rubygems_version: 3.6.0.dev
137
91
  specification_version: 4
138
92
  summary: Windows Directory Monitor (WDM) is a threaded directories monitor for Windows.
139
93
  test_files: []
metadata.gz.sig ADDED
Binary file