longleaf 0.2.0.pre.1 → 0.3.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 (165) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +84 -0
  3. data/.gitignore +4 -2
  4. data/.rubocop.yml +42 -2
  5. data/.rubocop_todo.yml +390 -311
  6. data/.yardopts +1 -0
  7. data/Gemfile +16 -1
  8. data/README.md +67 -13
  9. data/Rakefile +6 -0
  10. data/bin/setup +16 -1
  11. data/docs/aboutlongleaf.md +28 -0
  12. data/docs/extra.css +32 -0
  13. data/docs/img/change-file.png +0 -0
  14. data/docs/img/ll-example-preserved.png +0 -0
  15. data/docs/index.md +19 -0
  16. data/docs/install.md +66 -0
  17. data/docs/ll-example/config-example-relative.yml +33 -0
  18. data/docs/ll-example/files-dir/LLexample-PDF.pdf +0 -0
  19. data/docs/ll-example/files-dir/LLexample-TOCHANGE.txt +15 -0
  20. data/docs/ll-example/files-dir/LLexample-tokeep.txt +10 -0
  21. data/docs/ll-example/metadata-dir/.gitkeep +0 -0
  22. data/docs/ll-example/replica-files/.gitkeep +0 -0
  23. data/docs/ll-example/replica-metadata/.gitkeep +0 -0
  24. data/docs/quickstart.md +270 -0
  25. data/docs/rdocs/Longleaf.html +135 -0
  26. data/docs/rdocs/Longleaf/AppFields.html +178 -0
  27. data/docs/rdocs/Longleaf/ApplicationConfigDeserializer.html +631 -0
  28. data/docs/rdocs/Longleaf/ApplicationConfigManager.html +610 -0
  29. data/docs/rdocs/Longleaf/ApplicationConfigValidator.html +238 -0
  30. data/docs/rdocs/Longleaf/CLI.html +909 -0
  31. data/docs/rdocs/Longleaf/ChecksumMismatchError.html +151 -0
  32. data/docs/rdocs/Longleaf/ConfigBuilder.html +1339 -0
  33. data/docs/rdocs/Longleaf/ConfigurationError.html +143 -0
  34. data/docs/rdocs/Longleaf/ConfigurationValidator.html +227 -0
  35. data/docs/rdocs/Longleaf/DeregisterCommand.html +420 -0
  36. data/docs/rdocs/Longleaf/DeregisterEvent.html +453 -0
  37. data/docs/rdocs/Longleaf/DeregistrationError.html +151 -0
  38. data/docs/rdocs/Longleaf/DigestHelper.html +419 -0
  39. data/docs/rdocs/Longleaf/EventError.html +147 -0
  40. data/docs/rdocs/Longleaf/EventNames.html +163 -0
  41. data/docs/rdocs/Longleaf/EventStatusTracking.html +656 -0
  42. data/docs/rdocs/Longleaf/FileCheckService.html +540 -0
  43. data/docs/rdocs/Longleaf/FileHelpers.html +520 -0
  44. data/docs/rdocs/Longleaf/FileRecord.html +716 -0
  45. data/docs/rdocs/Longleaf/FileSelector.html +901 -0
  46. data/docs/rdocs/Longleaf/FixityCheckService.html +691 -0
  47. data/docs/rdocs/Longleaf/IndexManager.html +1155 -0
  48. data/docs/rdocs/Longleaf/InvalidDigestAlgorithmError.html +143 -0
  49. data/docs/rdocs/Longleaf/InvalidStoragePathError.html +143 -0
  50. data/docs/rdocs/Longleaf/Logging.html +405 -0
  51. data/docs/rdocs/Longleaf/Logging/RedirectingLogger.html +1213 -0
  52. data/docs/rdocs/Longleaf/LongleafError.html +139 -0
  53. data/docs/rdocs/Longleaf/MDFields.html +193 -0
  54. data/docs/rdocs/Longleaf/MetadataBuilder.html +787 -0
  55. data/docs/rdocs/Longleaf/MetadataDeserializer.html +537 -0
  56. data/docs/rdocs/Longleaf/MetadataError.html +143 -0
  57. data/docs/rdocs/Longleaf/MetadataPersistenceManager.html +539 -0
  58. data/docs/rdocs/Longleaf/MetadataRecord.html +1411 -0
  59. data/docs/rdocs/Longleaf/MetadataSerializer.html +786 -0
  60. data/docs/rdocs/Longleaf/PreservationServiceError.html +147 -0
  61. data/docs/rdocs/Longleaf/PreserveCommand.html +410 -0
  62. data/docs/rdocs/Longleaf/PreserveEvent.html +491 -0
  63. data/docs/rdocs/Longleaf/RegisterCommand.html +428 -0
  64. data/docs/rdocs/Longleaf/RegisterEvent.html +628 -0
  65. data/docs/rdocs/Longleaf/RegisteredFileSelector.html +446 -0
  66. data/docs/rdocs/Longleaf/RegistrationError.html +151 -0
  67. data/docs/rdocs/Longleaf/ReindexCommand.html +576 -0
  68. data/docs/rdocs/Longleaf/RsyncReplicationService.html +1180 -0
  69. data/docs/rdocs/Longleaf/SequelIndexDriver.html +1978 -0
  70. data/docs/rdocs/Longleaf/ServiceCandidateFilesystemIterator.html +572 -0
  71. data/docs/rdocs/Longleaf/ServiceCandidateIndexIterator.html +532 -0
  72. data/docs/rdocs/Longleaf/ServiceCandidateLocator.html +333 -0
  73. data/docs/rdocs/Longleaf/ServiceClassCache.html +725 -0
  74. data/docs/rdocs/Longleaf/ServiceDateHelper.html +425 -0
  75. data/docs/rdocs/Longleaf/ServiceDefinition.html +683 -0
  76. data/docs/rdocs/Longleaf/ServiceDefinitionManager.html +371 -0
  77. data/docs/rdocs/Longleaf/ServiceDefinitionValidator.html +269 -0
  78. data/docs/rdocs/Longleaf/ServiceFields.html +173 -0
  79. data/docs/rdocs/Longleaf/ServiceManager.html +1229 -0
  80. data/docs/rdocs/Longleaf/ServiceMappingManager.html +410 -0
  81. data/docs/rdocs/Longleaf/ServiceMappingValidator.html +347 -0
  82. data/docs/rdocs/Longleaf/ServiceRecord.html +821 -0
  83. data/docs/rdocs/Longleaf/StorageLocation.html +985 -0
  84. data/docs/rdocs/Longleaf/StorageLocationManager.html +729 -0
  85. data/docs/rdocs/Longleaf/StorageLocationUnavailableError.html +143 -0
  86. data/docs/rdocs/Longleaf/StorageLocationValidator.html +373 -0
  87. data/docs/rdocs/Longleaf/StoragePathValidator.html +253 -0
  88. data/docs/rdocs/Longleaf/SystemConfigBuilder.html +441 -0
  89. data/docs/rdocs/Longleaf/SystemConfigFields.html +163 -0
  90. data/docs/rdocs/Longleaf/ValidateConfigCommand.html +451 -0
  91. data/docs/rdocs/Longleaf/ValidateMetadataCommand.html +408 -0
  92. data/docs/rdocs/_index.html +660 -0
  93. data/docs/rdocs/class_list.html +51 -0
  94. data/docs/rdocs/css/common.css +1 -0
  95. data/docs/rdocs/css/full_list.css +58 -0
  96. data/docs/rdocs/css/style.css +496 -0
  97. data/docs/rdocs/file.README.html +165 -0
  98. data/docs/rdocs/file_list.html +56 -0
  99. data/docs/rdocs/frames.html +17 -0
  100. data/docs/rdocs/index.html +165 -0
  101. data/docs/rdocs/js/app.js +303 -0
  102. data/docs/rdocs/js/full_list.js +216 -0
  103. data/docs/rdocs/js/jquery.js +4 -0
  104. data/docs/rdocs/method_list.html +2051 -0
  105. data/docs/rdocs/top-level-namespace.html +110 -0
  106. data/lib/longleaf/candidates/file_selector.rb +47 -15
  107. data/lib/longleaf/candidates/registered_file_selector.rb +67 -0
  108. data/lib/longleaf/candidates/service_candidate_filesystem_iterator.rb +29 -35
  109. data/lib/longleaf/candidates/service_candidate_index_iterator.rb +84 -0
  110. data/lib/longleaf/candidates/service_candidate_locator.rb +9 -4
  111. data/lib/longleaf/cli.rb +162 -80
  112. data/lib/longleaf/commands/deregister_command.rb +12 -11
  113. data/lib/longleaf/commands/preserve_command.rb +13 -8
  114. data/lib/longleaf/commands/register_command.rb +9 -6
  115. data/lib/longleaf/commands/reindex_command.rb +92 -0
  116. data/lib/longleaf/commands/validate_config_command.rb +27 -6
  117. data/lib/longleaf/commands/validate_metadata_command.rb +11 -9
  118. data/lib/longleaf/errors.rb +12 -12
  119. data/lib/longleaf/events/deregister_event.rb +13 -15
  120. data/lib/longleaf/events/event_status_tracking.rb +7 -7
  121. data/lib/longleaf/events/preserve_event.rb +24 -14
  122. data/lib/longleaf/events/register_event.rb +21 -35
  123. data/lib/longleaf/helpers/digest_helper.rb +4 -4
  124. data/lib/longleaf/helpers/service_date_helper.rb +5 -6
  125. data/lib/longleaf/indexing/index_manager.rb +101 -0
  126. data/lib/longleaf/indexing/sequel_index_driver.rb +324 -0
  127. data/lib/longleaf/logging.rb +4 -4
  128. data/lib/longleaf/logging/redirecting_logger.rb +20 -20
  129. data/lib/longleaf/models/app_fields.rb +2 -1
  130. data/lib/longleaf/models/file_record.rb +10 -6
  131. data/lib/longleaf/models/md_fields.rb +1 -1
  132. data/lib/longleaf/models/metadata_record.rb +22 -12
  133. data/lib/longleaf/models/service_definition.rb +3 -3
  134. data/lib/longleaf/models/service_fields.rb +1 -1
  135. data/lib/longleaf/models/service_record.rb +6 -5
  136. data/lib/longleaf/models/storage_location.rb +26 -7
  137. data/lib/longleaf/models/system_config_fields.rb +9 -0
  138. data/lib/longleaf/preservation_services/file_check_service.rb +58 -0
  139. data/lib/longleaf/preservation_services/fixity_check_service.rb +16 -14
  140. data/lib/longleaf/preservation_services/rsync_replication_service.rb +32 -31
  141. data/lib/longleaf/services/application_config_deserializer.rb +55 -18
  142. data/lib/longleaf/services/application_config_manager.rb +16 -4
  143. data/lib/longleaf/services/application_config_validator.rb +1 -2
  144. data/lib/longleaf/services/configuration_validator.rb +6 -4
  145. data/lib/longleaf/services/metadata_deserializer.rb +40 -38
  146. data/lib/longleaf/services/metadata_persistence_manager.rb +46 -0
  147. data/lib/longleaf/services/metadata_serializer.rb +23 -22
  148. data/lib/longleaf/services/service_class_cache.rb +15 -15
  149. data/lib/longleaf/services/service_definition_manager.rb +5 -6
  150. data/lib/longleaf/services/service_definition_validator.rb +5 -6
  151. data/lib/longleaf/services/service_manager.rb +37 -17
  152. data/lib/longleaf/services/service_mapping_manager.rb +9 -9
  153. data/lib/longleaf/services/service_mapping_validator.rb +9 -10
  154. data/lib/longleaf/services/storage_location_manager.rb +22 -8
  155. data/lib/longleaf/services/storage_location_validator.rb +11 -8
  156. data/lib/longleaf/services/storage_path_validator.rb +1 -1
  157. data/lib/longleaf/specs/config_builder.rb +30 -17
  158. data/lib/longleaf/specs/custom_matchers.rb +1 -1
  159. data/lib/longleaf/specs/file_helpers.rb +15 -14
  160. data/lib/longleaf/specs/metadata_builder.rb +91 -0
  161. data/lib/longleaf/specs/system_config_builder.rb +27 -0
  162. data/lib/longleaf/version.rb +1 -1
  163. data/longleaf.gemspec +17 -7
  164. data/mkdocs.yml +20 -0
  165. metadata +233 -22
@@ -0,0 +1,572 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>
7
+ Class: Longleaf::ServiceCandidateFilesystemIterator
8
+
9
+ &mdash; Documentation by YARD 0.9.19
10
+
11
+ </title>
12
+
13
+ <link rel="stylesheet" href="../css/style.css" type="text/css" charset="utf-8" />
14
+
15
+ <link rel="stylesheet" href="../css/common.css" type="text/css" charset="utf-8" />
16
+
17
+ <script type="text/javascript" charset="utf-8">
18
+ pathId = "Longleaf::ServiceCandidateFilesystemIterator";
19
+ relpath = '../';
20
+ </script>
21
+
22
+
23
+ <script type="text/javascript" charset="utf-8" src="../js/jquery.js"></script>
24
+
25
+ <script type="text/javascript" charset="utf-8" src="../js/app.js"></script>
26
+
27
+
28
+ </head>
29
+ <body>
30
+ <div class="nav_wrap">
31
+ <iframe id="nav" src="../class_list.html?1"></iframe>
32
+ <div id="resizer"></div>
33
+ </div>
34
+
35
+ <div id="main" tabindex="-1">
36
+ <div id="header">
37
+ <div id="menu">
38
+
39
+ <a href="../_index.html">Index (S)</a> &raquo;
40
+ <span class='title'><span class='object_link'><a href="../Longleaf.html" title="Longleaf (module)">Longleaf</a></span></span>
41
+ &raquo;
42
+ <span class="title">ServiceCandidateFilesystemIterator</span>
43
+
44
+ </div>
45
+
46
+ <div id="search">
47
+
48
+ <a class="full_list_link" id="class_list_link"
49
+ href="../class_list.html">
50
+
51
+ <svg width="24" height="24">
52
+ <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
53
+ <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
54
+ <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
55
+ </svg>
56
+ </a>
57
+
58
+ </div>
59
+ <div class="clear"></div>
60
+ </div>
61
+
62
+ <div id="content"><h1>Class: Longleaf::ServiceCandidateFilesystemIterator
63
+
64
+
65
+
66
+ </h1>
67
+ <div class="box_info">
68
+
69
+ <dl>
70
+ <dt>Inherits:</dt>
71
+ <dd>
72
+ <span class="inheritName">Object</span>
73
+
74
+ <ul class="fullTree">
75
+ <li>Object</li>
76
+
77
+ <li class="next">Longleaf::ServiceCandidateFilesystemIterator</li>
78
+
79
+ </ul>
80
+ <a href="#" class="inheritanceTree">show all</a>
81
+
82
+ </dd>
83
+ </dl>
84
+
85
+
86
+
87
+
88
+
89
+
90
+ <dl>
91
+ <dt>Includes:</dt>
92
+ <dd><span class='object_link'><a href="Logging.html" title="Longleaf::Logging (module)">Logging</a></span></dd>
93
+ </dl>
94
+
95
+
96
+
97
+
98
+
99
+
100
+ <dl>
101
+ <dt>Defined in:</dt>
102
+ <dd>lib/longleaf/candidates/service_candidate_filesystem_iterator.rb</dd>
103
+ </dl>
104
+
105
+ </div>
106
+
107
+ <h2>Overview</h2><div class="docstring">
108
+ <div class="discussion">
109
+
110
+ <p>Iterator for getting file candidates which have services which need to be run. Implementation uses metadata files directly from the filesystem for determinations about service status.</p>
111
+
112
+
113
+ </div>
114
+ </div>
115
+ <div class="tags">
116
+
117
+
118
+ </div>
119
+
120
+
121
+
122
+
123
+
124
+
125
+
126
+ <h2>
127
+ Instance Method Summary
128
+ <small><a href="#" class="summary_toggle">collapse</a></small>
129
+ </h2>
130
+
131
+ <ul class="summary">
132
+
133
+ <li class="public ">
134
+ <span class="summary_signature">
135
+
136
+ <a href="#each-instance_method" title="#each (instance method)">#<strong>each</strong> &#x21d2; Object </a>
137
+
138
+
139
+
140
+ </span>
141
+
142
+
143
+
144
+
145
+
146
+
147
+
148
+
149
+
150
+ <span class="summary_desc"><div class='inline'>
151
+ <p>Iterate through the candidates in this object and execute the provided block with each candidate.</p>
152
+ </div></span>
153
+
154
+ </li>
155
+
156
+
157
+ <li class="public ">
158
+ <span class="summary_signature">
159
+
160
+ <a href="#initialize-instance_method" title="#initialize (instance method)">#<strong>initialize</strong>(file_selector, event, app_config, force = false) &#x21d2; ServiceCandidateFilesystemIterator </a>
161
+
162
+
163
+
164
+ </span>
165
+
166
+
167
+ <span class="note title constructor">constructor</span>
168
+
169
+
170
+
171
+
172
+
173
+
174
+
175
+
176
+ <span class="summary_desc"><div class='inline'>
177
+ <p>A new instance of ServiceCandidateFilesystemIterator.</p>
178
+ </div></span>
179
+
180
+ </li>
181
+
182
+
183
+ <li class="private ">
184
+ <span class="summary_signature">
185
+
186
+ <a href="#needs_run%3F-instance_method" title="#needs_run? (instance method)">#<strong>needs_run?</strong>(file_rec) &#x21d2; Boolean </a>
187
+
188
+
189
+
190
+ </span>
191
+
192
+
193
+
194
+ <span class="note title private">private</span>
195
+
196
+
197
+
198
+
199
+
200
+ <span class="summary_desc"><div class='inline'>
201
+ <p>Returns true if the file record contains any services which need to be run.</p>
202
+ </div></span>
203
+
204
+ </li>
205
+
206
+
207
+ <li class="public ">
208
+ <span class="summary_signature">
209
+
210
+ <a href="#next_candidate-instance_method" title="#next_candidate (instance method)">#<strong>next_candidate</strong> &#x21d2; FileRecord </a>
211
+
212
+
213
+
214
+ </span>
215
+
216
+
217
+
218
+
219
+
220
+
221
+
222
+
223
+
224
+ <span class="summary_desc"><div class='inline'>
225
+ <p>Get the file record for the next candidate which needs services run which match the provided file_selector or nil if there are no more candidates.</p>
226
+ </div></span>
227
+
228
+ </li>
229
+
230
+
231
+ </ul>
232
+
233
+
234
+
235
+
236
+
237
+
238
+
239
+
240
+
241
+
242
+
243
+ <h3 class="inherited">Methods included from <span class='object_link'><a href="Logging.html" title="Longleaf::Logging (module)">Logging</a></span></h3>
244
+ <p class="inherited"><span class='object_link'><a href="Logging.html#initialize_logger-instance_method" title="Longleaf::Logging#initialize_logger (method)">#initialize_logger</a></span>, <span class='object_link'><a href="Logging.html#initialize_logger-class_method" title="Longleaf::Logging.initialize_logger (method)">initialize_logger</a></span>, <span class='object_link'><a href="Logging.html#logger-instance_method" title="Longleaf::Logging#logger (method)">#logger</a></span>, <span class='object_link'><a href="Logging.html#logger-class_method" title="Longleaf::Logging.logger (method)">logger</a></span></p>
245
+ <div id="constructor_details" class="method_details_list">
246
+ <h2>Constructor Details</h2>
247
+
248
+ <div class="method_details first">
249
+ <h3 class="signature first" id="initialize-instance_method">
250
+
251
+ #<strong>initialize</strong>(file_selector, event, app_config, force = false) &#x21d2; <tt><span class='object_link'><a href="" title="Longleaf::ServiceCandidateFilesystemIterator (class)">ServiceCandidateFilesystemIterator</a></span></tt>
252
+
253
+
254
+
255
+
256
+
257
+ </h3><div class="docstring">
258
+ <div class="discussion">
259
+
260
+ <p>Returns a new instance of ServiceCandidateFilesystemIterator</p>
261
+
262
+
263
+ </div>
264
+ </div>
265
+ <div class="tags">
266
+
267
+
268
+ </div><table class="source_code">
269
+ <tr>
270
+ <td>
271
+ <pre class="lines">
272
+
273
+
274
+ 14
275
+ 15
276
+ 16
277
+ 17
278
+ 18
279
+ 19</pre>
280
+ </td>
281
+ <td>
282
+ <pre class="code"><span class="info file"># File 'lib/longleaf/candidates/service_candidate_filesystem_iterator.rb', line 14</span>
283
+
284
+ <span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span><span class='lparen'>(</span><span class='id identifier rubyid_file_selector'>file_selector</span><span class='comma'>,</span> <span class='id identifier rubyid_event'>event</span><span class='comma'>,</span> <span class='id identifier rubyid_app_config'>app_config</span><span class='comma'>,</span> <span class='id identifier rubyid_force'>force</span> <span class='op'>=</span> <span class='kw'>false</span><span class='rparen'>)</span>
285
+ <span class='ivar'>@file_selector</span> <span class='op'>=</span> <span class='id identifier rubyid_file_selector'>file_selector</span>
286
+ <span class='ivar'>@event</span> <span class='op'>=</span> <span class='id identifier rubyid_event'>event</span>
287
+ <span class='ivar'>@app_config</span> <span class='op'>=</span> <span class='id identifier rubyid_app_config'>app_config</span>
288
+ <span class='ivar'>@force</span> <span class='op'>=</span> <span class='id identifier rubyid_force'>force</span>
289
+ <span class='kw'>end</span></pre>
290
+ </td>
291
+ </tr>
292
+ </table>
293
+ </div>
294
+
295
+ </div>
296
+
297
+
298
+ <div id="instance_method_details" class="method_details_list">
299
+ <h2>Instance Method Details</h2>
300
+
301
+
302
+ <div class="method_details first">
303
+ <h3 class="signature first" id="each-instance_method">
304
+
305
+ #<strong>each</strong> &#x21d2; <tt>Object</tt>
306
+
307
+
308
+
309
+
310
+
311
+ </h3><div class="docstring">
312
+ <div class="discussion">
313
+
314
+ <p>Iterate through the candidates in this object and execute the provided block with each candidate. A block is required.</p>
315
+
316
+
317
+ </div>
318
+ </div>
319
+ <div class="tags">
320
+
321
+
322
+ </div><table class="source_code">
323
+ <tr>
324
+ <td>
325
+ <pre class="lines">
326
+
327
+
328
+ 49
329
+ 50
330
+ 51
331
+ 52
332
+ 53
333
+ 54
334
+ 55
335
+ 56</pre>
336
+ </td>
337
+ <td>
338
+ <pre class="code"><span class="info file"># File 'lib/longleaf/candidates/service_candidate_filesystem_iterator.rb', line 49</span>
339
+
340
+ <span class='kw'>def</span> <span class='id identifier rubyid_each'>each</span>
341
+ <span class='id identifier rubyid_file_rec'>file_rec</span> <span class='op'>=</span> <span class='id identifier rubyid_next_candidate'>next_candidate</span>
342
+ <span class='kw'>until</span> <span class='id identifier rubyid_file_rec'>file_rec</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
343
+ <span class='kw'>yield</span> <span class='id identifier rubyid_file_rec'>file_rec</span>
344
+
345
+ <span class='id identifier rubyid_file_rec'>file_rec</span> <span class='op'>=</span> <span class='id identifier rubyid_next_candidate'>next_candidate</span>
346
+ <span class='kw'>end</span>
347
+ <span class='kw'>end</span></pre>
348
+ </td>
349
+ </tr>
350
+ </table>
351
+ </div>
352
+
353
+ <div class="method_details ">
354
+ <h3 class="signature " id="needs_run?-instance_method">
355
+
356
+ #<strong>needs_run?</strong>(file_rec) &#x21d2; <tt>Boolean</tt> <span class="extras">(private)</span>
357
+
358
+
359
+
360
+
361
+
362
+ </h3><div class="docstring">
363
+ <div class="discussion">
364
+
365
+ <p>Returns true if the file record contains any services which need to be run</p>
366
+
367
+
368
+ </div>
369
+ </div>
370
+ <div class="tags">
371
+
372
+ <p class="tag_title">Returns:</p>
373
+ <ul class="return">
374
+
375
+ <li>
376
+
377
+
378
+ <span class='type'>(<tt>Boolean</tt>)</span>
379
+
380
+
381
+
382
+ </li>
383
+
384
+ </ul>
385
+
386
+ </div><table class="source_code">
387
+ <tr>
388
+ <td>
389
+ <pre class="lines">
390
+
391
+
392
+ 60
393
+ 61
394
+ 62
395
+ 63
396
+ 64
397
+ 65
398
+ 66
399
+ 67
400
+ 68
401
+ 69
402
+ 70
403
+ 71
404
+ 72
405
+ 73
406
+ 74
407
+ 75
408
+ 76
409
+ 77
410
+ 78
411
+ 79
412
+ 80
413
+ 81
414
+ 82
415
+ 83
416
+ 84
417
+ 85
418
+ 86
419
+ 87
420
+ 88
421
+ 89
422
+ 90
423
+ 91</pre>
424
+ </td>
425
+ <td>
426
+ <pre class="code"><span class="info file"># File 'lib/longleaf/candidates/service_candidate_filesystem_iterator.rb', line 60</span>
427
+
428
+ <span class='kw'>def</span> <span class='id identifier rubyid_needs_run?'>needs_run?</span><span class='lparen'>(</span><span class='id identifier rubyid_file_rec'>file_rec</span><span class='rparen'>)</span>
429
+ <span class='id identifier rubyid_md_rec'>md_rec</span> <span class='op'>=</span> <span class='id identifier rubyid_file_rec'>file_rec</span><span class='period'>.</span><span class='id identifier rubyid_metadata_record'>metadata_record</span>
430
+ <span class='id identifier rubyid_storage_loc'>storage_loc</span> <span class='op'>=</span> <span class='id identifier rubyid_file_rec'>file_rec</span><span class='period'>.</span><span class='id identifier rubyid_storage_location'>storage_location</span>
431
+ <span class='id identifier rubyid_service_manager'>service_manager</span> <span class='op'>=</span> <span class='ivar'>@app_config</span><span class='period'>.</span><span class='id identifier rubyid_service_manager'>service_manager</span>
432
+
433
+ <span class='comment'># File is not a valid candidate for services if it is deregistered, unless performing cleanup
434
+ </span> <span class='kw'>if</span> <span class='ivar'>@event</span> <span class='op'>!=</span> <span class='const'><span class='object_link'><a href="EventNames.html" title="Longleaf::EventNames (class)">EventNames</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="EventNames.html#CLEANUP-constant" title="Longleaf::EventNames::CLEANUP (constant)">CLEANUP</a></span></span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_md_rec'>md_rec</span><span class='period'>.</span><span class='id identifier rubyid_deregistered?'>deregistered?</span>
435
+ <span class='id identifier rubyid_logger'>logger</span><span class='period'>.</span><span class='id identifier rubyid_debug'>debug</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Skipping deregistered file: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_file_rec'>file_rec</span><span class='period'>.</span><span class='id identifier rubyid_path'>path</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
436
+ <span class='kw'>return</span> <span class='kw'>false</span>
437
+ <span class='kw'>end</span>
438
+
439
+ <span class='id identifier rubyid_expected_services'>expected_services</span> <span class='op'>=</span> <span class='id identifier rubyid_service_manager'>service_manager</span><span class='period'>.</span><span class='id identifier rubyid_list_services'>list_services</span><span class='lparen'>(</span>
440
+ <span class='label'>location:</span> <span class='id identifier rubyid_storage_loc'>storage_loc</span><span class='period'>.</span><span class='id identifier rubyid_name'>name</span><span class='comma'>,</span>
441
+ <span class='label'>event:</span> <span class='ivar'>@event</span><span class='rparen'>)</span>
442
+
443
+ <span class='comment'># When in force mode, candidate needs a run as long as there are any services configured for it.
444
+ </span> <span class='kw'>if</span> <span class='ivar'>@force</span> <span class='op'>&amp;&amp;</span> <span class='op'>!</span><span class='id identifier rubyid_expected_services'>expected_services</span><span class='period'>.</span><span class='id identifier rubyid_empty?'>empty?</span>
445
+ <span class='id identifier rubyid_logger'>logger</span><span class='period'>.</span><span class='id identifier rubyid_debug'>debug</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Forcing run needed for file: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_file_rec'>file_rec</span><span class='period'>.</span><span class='id identifier rubyid_path'>path</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
446
+ <span class='kw'>return</span> <span class='kw'>true</span>
447
+ <span class='kw'>end</span>
448
+
449
+ <span class='id identifier rubyid_expected_services'>expected_services</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_service_name'>service_name</span><span class='op'>|</span>
450
+ <span class='kw'>if</span> <span class='id identifier rubyid_service_manager'>service_manager</span><span class='period'>.</span><span class='id identifier rubyid_service_needed?'>service_needed?</span><span class='lparen'>(</span><span class='id identifier rubyid_service_name'>service_name</span><span class='comma'>,</span> <span class='id identifier rubyid_md_rec'>md_rec</span><span class='rparen'>)</span>
451
+ <span class='id identifier rubyid_logger'>logger</span><span class='period'>.</span><span class='id identifier rubyid_debug'>debug</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Service </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_service_name'>service_name</span><span class='embexpr_end'>}</span><span class='tstring_content'> needed for file: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_file_rec'>file_rec</span><span class='period'>.</span><span class='id identifier rubyid_path'>path</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
452
+ <span class='kw'>return</span> <span class='kw'>true</span>
453
+ <span class='kw'>end</span>
454
+ <span class='kw'>end</span>
455
+
456
+ <span class='id identifier rubyid_logger'>logger</span><span class='period'>.</span><span class='id identifier rubyid_debug'>debug</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Run not needed for file: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_file_rec'>file_rec</span><span class='period'>.</span><span class='id identifier rubyid_path'>path</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
457
+ <span class='comment'># No services needed to be run for this file
458
+ </span> <span class='kw'>false</span>
459
+ <span class='kw'>end</span></pre>
460
+ </td>
461
+ </tr>
462
+ </table>
463
+ </div>
464
+
465
+ <div class="method_details ">
466
+ <h3 class="signature " id="next_candidate-instance_method">
467
+
468
+ #<strong>next_candidate</strong> &#x21d2; <tt><span class='object_link'><a href="FileRecord.html" title="Longleaf::FileRecord (class)">FileRecord</a></span></tt>
469
+
470
+
471
+
472
+
473
+
474
+ </h3><div class="docstring">
475
+ <div class="discussion">
476
+
477
+ <p>Get the file record for the next candidate which needs services run which match the provided file_selector or nil if there are no more candidates.</p>
478
+
479
+
480
+ </div>
481
+ </div>
482
+ <div class="tags">
483
+
484
+ <p class="tag_title">Returns:</p>
485
+ <ul class="return">
486
+
487
+ <li>
488
+
489
+
490
+ <span class='type'>(<tt><span class='object_link'><a href="FileRecord.html" title="Longleaf::FileRecord (class)">FileRecord</a></span></tt>)</span>
491
+
492
+
493
+
494
+ &mdash;
495
+ <div class='inline'>
496
+ <p>file record of the next candidate with services needing to be run,</p>
497
+ </div>
498
+
499
+ </li>
500
+
501
+ </ul>
502
+
503
+ </div><table class="source_code">
504
+ <tr>
505
+ <td>
506
+ <pre class="lines">
507
+
508
+
509
+ 25
510
+ 26
511
+ 27
512
+ 28
513
+ 29
514
+ 30
515
+ 31
516
+ 32
517
+ 33
518
+ 34
519
+ 35
520
+ 36
521
+ 37
522
+ 38
523
+ 39
524
+ 40
525
+ 41
526
+ 42
527
+ 43
528
+ 44
529
+ 45</pre>
530
+ </td>
531
+ <td>
532
+ <pre class="code"><span class="info file"># File 'lib/longleaf/candidates/service_candidate_filesystem_iterator.rb', line 25</span>
533
+
534
+ <span class='kw'>def</span> <span class='id identifier rubyid_next_candidate'>next_candidate</span>
535
+ <span class='id identifier rubyid_loop'>loop</span> <span class='kw'>do</span>
536
+ <span class='id identifier rubyid_next_path'>next_path</span> <span class='op'>=</span> <span class='ivar'>@file_selector</span><span class='period'>.</span><span class='id identifier rubyid_next_path'>next_path</span>
537
+ <span class='kw'>return</span> <span class='kw'>nil</span> <span class='kw'>if</span> <span class='id identifier rubyid_next_path'>next_path</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
538
+
539
+ <span class='id identifier rubyid_logger'>logger</span><span class='period'>.</span><span class='id identifier rubyid_debug'>debug</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Evaluating candidate </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_next_path'>next_path</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
540
+ <span class='id identifier rubyid_storage_loc'>storage_loc</span> <span class='op'>=</span> <span class='ivar'>@app_config</span><span class='period'>.</span><span class='id identifier rubyid_location_manager'>location_manager</span><span class='period'>.</span><span class='id identifier rubyid_get_location_by_path'>get_location_by_path</span><span class='lparen'>(</span><span class='id identifier rubyid_next_path'>next_path</span><span class='rparen'>)</span>
541
+ <span class='id identifier rubyid_file_rec'>file_rec</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="FileRecord.html" title="Longleaf::FileRecord (class)">FileRecord</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="FileRecord.html#initialize-instance_method" title="Longleaf::FileRecord#initialize (method)">new</a></span></span><span class='lparen'>(</span><span class='id identifier rubyid_next_path'>next_path</span><span class='comma'>,</span> <span class='id identifier rubyid_storage_loc'>storage_loc</span><span class='rparen'>)</span>
542
+
543
+ <span class='comment'># Skip over unregistered files
544
+ </span> <span class='kw'>if</span> <span class='op'>!</span><span class='id identifier rubyid_file_rec'>file_rec</span><span class='period'>.</span><span class='id identifier rubyid_metadata_present?'>metadata_present?</span>
545
+ <span class='id identifier rubyid_logger'>logger</span><span class='period'>.</span><span class='id identifier rubyid_debug'>debug</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Ignoring unregistered file </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_next_path'>next_path</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
546
+ <span class='kw'>next</span>
547
+ <span class='kw'>end</span>
548
+
549
+ <span class='ivar'>@app_config</span><span class='period'>.</span><span class='id identifier rubyid_md_manager'>md_manager</span><span class='period'>.</span><span class='id identifier rubyid_load'>load</span><span class='lparen'>(</span><span class='id identifier rubyid_file_rec'>file_rec</span><span class='rparen'>)</span>
550
+
551
+ <span class='comment'># Return the file record if it needs any services run
552
+ </span> <span class='kw'>return</span> <span class='id identifier rubyid_file_rec'>file_rec</span> <span class='kw'>if</span> <span class='id identifier rubyid_needs_run?'>needs_run?</span><span class='lparen'>(</span><span class='id identifier rubyid_file_rec'>file_rec</span><span class='rparen'>)</span>
553
+ <span class='kw'>end</span>
554
+ <span class='kw'>end</span></pre>
555
+ </td>
556
+ </tr>
557
+ </table>
558
+ </div>
559
+
560
+ </div>
561
+
562
+ </div>
563
+
564
+ <div id="footer">
565
+ Generated on Tue May 28 15:48:03 2019 by
566
+ <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
567
+ 0.9.19 (ruby-2.6.3).
568
+ </div>
569
+
570
+ </div>
571
+ </body>
572
+ </html>