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,901 @@
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::FileSelector
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::FileSelector";
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 (F)</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">FileSelector</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::FileSelector
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::FileSelector</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/file_selector.rb</dd>
103
+ </dl>
104
+
105
+ </div>
106
+
107
+ <h2>Overview</h2><div class="docstring">
108
+ <div class="discussion">
109
+
110
+ <p>Selects and allows for iteration over files which match a provided set of selection criteria</p>
111
+
112
+
113
+ </div>
114
+ </div>
115
+ <div class="tags">
116
+
117
+
118
+ </div><div id="subclasses">
119
+ <h2>Direct Known Subclasses</h2>
120
+ <p class="children"><span class='object_link'><a href="RegisteredFileSelector.html" title="Longleaf::RegisteredFileSelector (class)">RegisteredFileSelector</a></span></p>
121
+ </div>
122
+
123
+
124
+ <h2>
125
+ Constant Summary
126
+ <small><a href="#" class="constants_summary_toggle">collapse</a></small>
127
+ </h2>
128
+
129
+ <dl class="constants">
130
+
131
+ <dt id="SPECIFICITY_PATH-constant" class="">SPECIFICITY_PATH =
132
+
133
+ </dt>
134
+ <dd><pre class="code"><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>path</span><span class='tstring_end'>&#39;</span></span></pre></dd>
135
+
136
+ <dt id="SPECIFICITY_STORAGE_LOCATION-constant" class="">SPECIFICITY_STORAGE_LOCATION =
137
+
138
+ </dt>
139
+ <dd><pre class="code"><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>storage_location</span><span class='tstring_end'>&#39;</span></span></pre></dd>
140
+
141
+ </dl>
142
+
143
+
144
+
145
+
146
+
147
+ <h2>Instance Attribute Summary <small><a href="#" class="summary_toggle">collapse</a></small></h2>
148
+ <ul class="summary">
149
+
150
+ <li class="public ">
151
+ <span class="summary_signature">
152
+
153
+ <a href="#specificity-instance_method" title="#specificity (instance method)">#<strong>specificity</strong> &#x21d2; Object </a>
154
+
155
+
156
+
157
+ </span>
158
+
159
+
160
+
161
+
162
+ <span class="note title readonly">readonly</span>
163
+
164
+
165
+
166
+
167
+
168
+
169
+
170
+
171
+
172
+ <span class="summary_desc"><div class='inline'>
173
+ <p>Returns the value of attribute specificity.</p>
174
+ </div></span>
175
+
176
+ </li>
177
+
178
+
179
+ </ul>
180
+
181
+
182
+
183
+
184
+
185
+ <h2>
186
+ Instance Method Summary
187
+ <small><a href="#" class="summary_toggle">collapse</a></small>
188
+ </h2>
189
+
190
+ <ul class="summary">
191
+
192
+ <li class="public ">
193
+ <span class="summary_signature">
194
+
195
+ <a href="#each-instance_method" title="#each (instance method)">#<strong>each</strong> &#x21d2; Object </a>
196
+
197
+
198
+
199
+ </span>
200
+
201
+
202
+
203
+
204
+
205
+
206
+
207
+
208
+
209
+ <span class="summary_desc"><div class='inline'>
210
+ <p>Iterate through the file paths for this selector and execute the provided block with each.</p>
211
+ </div></span>
212
+
213
+ </li>
214
+
215
+
216
+ <li class="public ">
217
+ <span class="summary_signature">
218
+
219
+ <a href="#initialize-instance_method" title="#initialize (instance method)">#<strong>initialize</strong>(file_paths: nil, storage_locations: nil, app_config:) &#x21d2; FileSelector </a>
220
+
221
+
222
+
223
+ </span>
224
+
225
+
226
+ <span class="note title constructor">constructor</span>
227
+
228
+
229
+
230
+
231
+
232
+
233
+
234
+
235
+ <span class="summary_desc"><div class='inline'>
236
+ <p>May only provide either file_paths or storage_locations.</p>
237
+ </div></span>
238
+
239
+ </li>
240
+
241
+
242
+ <li class="public ">
243
+ <span class="summary_signature">
244
+
245
+ <a href="#next_path-instance_method" title="#next_path (instance method)">#<strong>next_path</strong> &#x21d2; String </a>
246
+
247
+
248
+
249
+ </span>
250
+
251
+
252
+
253
+
254
+
255
+
256
+
257
+
258
+
259
+ <span class="summary_desc"><div class='inline'>
260
+ <p>Get the next file path for this selector.</p>
261
+ </div></span>
262
+
263
+ </li>
264
+
265
+
266
+ <li class="private ">
267
+ <span class="summary_signature">
268
+
269
+ <a href="#nil_or_empty%3F-instance_method" title="#nil_or_empty? (instance method)">#<strong>nil_or_empty?</strong>(value) &#x21d2; Boolean </a>
270
+
271
+
272
+
273
+ </span>
274
+
275
+
276
+
277
+ <span class="note title private">private</span>
278
+
279
+
280
+
281
+
282
+
283
+ <span class="summary_desc"><div class='inline'></div></span>
284
+
285
+ </li>
286
+
287
+
288
+ <li class="public ">
289
+ <span class="summary_signature">
290
+
291
+ <a href="#storage_locations-instance_method" title="#storage_locations (instance method)">#<strong>storage_locations</strong> &#x21d2; Object </a>
292
+
293
+
294
+
295
+ </span>
296
+
297
+
298
+
299
+
300
+
301
+
302
+
303
+
304
+
305
+ <span class="summary_desc"><div class='inline'>
306
+ <p>return [Array] a list of all storage locations being targeted by this selector.</p>
307
+ </div></span>
308
+
309
+ </li>
310
+
311
+
312
+ <li class="public ">
313
+ <span class="summary_signature">
314
+
315
+ <a href="#target_paths-instance_method" title="#target_paths (instance method)">#<strong>target_paths</strong> &#x21d2; Array </a>
316
+
317
+
318
+
319
+ </span>
320
+
321
+
322
+
323
+
324
+
325
+
326
+
327
+
328
+
329
+ <span class="summary_desc"><div class='inline'>
330
+ <p>A list of top level paths from which files will be selected.</p>
331
+ </div></span>
332
+
333
+ </li>
334
+
335
+
336
+ </ul>
337
+
338
+
339
+
340
+
341
+
342
+
343
+
344
+
345
+
346
+
347
+
348
+ <h3 class="inherited">Methods included from <span class='object_link'><a href="Logging.html" title="Longleaf::Logging (module)">Logging</a></span></h3>
349
+ <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>
350
+ <div id="constructor_details" class="method_details_list">
351
+ <h2>Constructor Details</h2>
352
+
353
+ <div class="method_details first">
354
+ <h3 class="signature first" id="initialize-instance_method">
355
+
356
+ #<strong>initialize</strong>(file_paths: nil, storage_locations: nil, app_config:) &#x21d2; <tt><span class='object_link'><a href="" title="Longleaf::FileSelector (class)">FileSelector</a></span></tt>
357
+
358
+
359
+
360
+
361
+
362
+ </h3><div class="docstring">
363
+ <div class="discussion">
364
+
365
+ <p>May only provide either file_paths or storage_locations</p>
366
+
367
+
368
+ </div>
369
+ </div>
370
+ <div class="tags">
371
+
372
+
373
+ </div><table class="source_code">
374
+ <tr>
375
+ <td>
376
+ <pre class="lines">
377
+
378
+
379
+ 13
380
+ 14
381
+ 15
382
+ 16
383
+ 17
384
+ 18
385
+ 19
386
+ 20
387
+ 21
388
+ 22
389
+ 23
390
+ 24
391
+ 25
392
+ 26
393
+ 27
394
+ 28
395
+ 29
396
+ 30
397
+ 31
398
+ 32
399
+ 33
400
+ 34
401
+ 35
402
+ 36
403
+ 37
404
+ 38
405
+ 39
406
+ 40
407
+ 41
408
+ 42
409
+ 43
410
+ 44
411
+ 45
412
+ 46
413
+ 47
414
+ 48
415
+ 49
416
+ 50
417
+ 51</pre>
418
+ </td>
419
+ <td>
420
+ <pre class="code"><span class="info file"># File 'lib/longleaf/candidates/file_selector.rb', line 13</span>
421
+
422
+ <span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span><span class='lparen'>(</span><span class='label'>file_paths:</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='label'>storage_locations:</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='label'>app_config:</span><span class='rparen'>)</span>
423
+ <span class='kw'>if</span> <span class='id identifier rubyid_nil_or_empty?'>nil_or_empty?</span><span class='lparen'>(</span><span class='id identifier rubyid_file_paths'>file_paths</span><span class='rparen'>)</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_nil_or_empty?'>nil_or_empty?</span><span class='lparen'>(</span><span class='id identifier rubyid_storage_locations'>storage_locations</span><span class='rparen'>)</span>
424
+ <span class='id identifier rubyid_raise'>raise</span> <span class='const'>ArgumentError</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Must provide either file paths or storage locations</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
425
+ <span class='kw'>end</span>
426
+ <span class='kw'>if</span> <span class='op'>!</span><span class='id identifier rubyid_nil_or_empty?'>nil_or_empty?</span><span class='lparen'>(</span><span class='id identifier rubyid_file_paths'>file_paths</span><span class='rparen'>)</span> <span class='op'>&amp;&amp;</span> <span class='op'>!</span><span class='id identifier rubyid_nil_or_empty?'>nil_or_empty?</span><span class='lparen'>(</span><span class='id identifier rubyid_storage_locations'>storage_locations</span><span class='rparen'>)</span>
427
+ <span class='id identifier rubyid_raise'>raise</span> <span class='const'>ArgumentError</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Cannot provide both file paths and storage locations</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
428
+ <span class='kw'>end</span>
429
+ <span class='ivar'>@app_config</span> <span class='op'>=</span> <span class='id identifier rubyid_app_config'>app_config</span>
430
+ <span class='comment'># The top level paths targeted by this selector
431
+ </span> <span class='ivar'>@target_paths</span> <span class='op'>=</span> <span class='id identifier rubyid_file_paths'>file_paths</span><span class='op'>&amp;.</span><span class='id identifier rubyid_map'>map</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_path'>path</span><span class='op'>|</span>
432
+ <span class='comment'># Resolve relative paths against pwd
433
+ </span> <span class='id identifier rubyid_pathname'>pathname</span> <span class='op'>=</span> <span class='const'>Pathname</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='id identifier rubyid_path'>path</span><span class='rparen'>)</span>
434
+ <span class='kw'>if</span> <span class='op'>!</span><span class='id identifier rubyid_pathname'>pathname</span><span class='period'>.</span><span class='id identifier rubyid_absolute?'>absolute?</span>
435
+ <span class='id identifier rubyid_path'>path</span> <span class='op'>=</span> <span class='const'>File</span><span class='period'>.</span><span class='id identifier rubyid_join'>join</span><span class='lparen'>(</span><span class='const'>Dir</span><span class='period'>.</span><span class='id identifier rubyid_pwd'>pwd</span><span class='comma'>,</span> <span class='id identifier rubyid_path'>path</span><span class='rparen'>)</span>
436
+ <span class='kw'>end</span>
437
+ <span class='id identifier rubyid_path'>path</span> <span class='op'>=</span> <span class='const'>File</span><span class='period'>.</span><span class='id identifier rubyid_expand_path'>expand_path</span><span class='lparen'>(</span><span class='id identifier rubyid_path'>path</span><span class='rparen'>)</span>
438
+
439
+ <span class='comment'># adding trailing /&#39;s to directories
440
+ </span> <span class='kw'>if</span> <span class='const'>Dir</span><span class='period'>.</span><span class='id identifier rubyid_exist?'>exist?</span><span class='lparen'>(</span><span class='id identifier rubyid_path'>path</span><span class='rparen'>)</span> <span class='op'>&amp;&amp;</span> <span class='op'>!</span><span class='id identifier rubyid_path'>path</span><span class='period'>.</span><span class='id identifier rubyid_end_with?'>end_with?</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>/</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
441
+ <span class='id identifier rubyid_path'>path</span> <span class='op'>+</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>/</span><span class='tstring_end'>&#39;</span></span>
442
+ <span class='kw'>else</span>
443
+ <span class='id identifier rubyid_path'>path</span>
444
+ <span class='kw'>end</span>
445
+ <span class='kw'>end</span>
446
+ <span class='comment'># The set of storage locations to select file paths from
447
+ </span> <span class='ivar'>@storage_locations</span> <span class='op'>=</span> <span class='id identifier rubyid_storage_locations'>storage_locations</span>
448
+ <span class='comment'># Validate that the selected storage locations are known
449
+ </span> <span class='kw'>if</span> <span class='ivar'>@storage_locations</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
450
+ <span class='ivar'>@specificity</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="#SPECIFICITY_PATH-constant" title="Longleaf::FileSelector::SPECIFICITY_PATH (constant)">SPECIFICITY_PATH</a></span></span>
451
+ <span class='kw'>else</span>
452
+ <span class='ivar'>@specificity</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="#SPECIFICITY_STORAGE_LOCATION-constant" title="Longleaf::FileSelector::SPECIFICITY_STORAGE_LOCATION (constant)">SPECIFICITY_STORAGE_LOCATION</a></span></span>
453
+ <span class='id identifier rubyid_locations'>locations</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_locations'>locations</span>
454
+ <span class='ivar'>@storage_locations</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_loc_name'>loc_name</span><span class='op'>|</span>
455
+ <span class='kw'>unless</span> <span class='id identifier rubyid_locations'>locations</span><span class='period'>.</span><span class='id identifier rubyid_key?'>key?</span><span class='lparen'>(</span><span class='id identifier rubyid_loc_name'>loc_name</span><span class='rparen'>)</span>
456
+ <span class='id identifier rubyid_raise'>raise</span> <span class='const'><span class='object_link'><a href="StorageLocationUnavailableError.html" title="Longleaf::StorageLocationUnavailableError (class)">StorageLocationUnavailableError</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Cannot select unknown storage location </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_loc_name'>loc_name</span><span class='embexpr_end'>}</span><span class='tstring_content'>.</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
457
+ <span class='kw'>end</span>
458
+ <span class='kw'>end</span>
459
+ <span class='kw'>end</span>
460
+ <span class='kw'>end</span></pre>
461
+ </td>
462
+ </tr>
463
+ </table>
464
+ </div>
465
+
466
+ </div>
467
+
468
+ <div id="instance_attr_details" class="attr_details">
469
+ <h2>Instance Attribute Details</h2>
470
+
471
+
472
+ <span id=""></span>
473
+ <div class="method_details first">
474
+ <h3 class="signature first" id="specificity-instance_method">
475
+
476
+ #<strong>specificity</strong> &#x21d2; <tt>Object</tt> <span class="extras">(readonly)</span>
477
+
478
+
479
+
480
+
481
+
482
+ </h3><div class="docstring">
483
+ <div class="discussion">
484
+
485
+ <p>Returns the value of attribute specificity</p>
486
+
487
+
488
+ </div>
489
+ </div>
490
+ <div class="tags">
491
+
492
+
493
+ </div><table class="source_code">
494
+ <tr>
495
+ <td>
496
+ <pre class="lines">
497
+
498
+
499
+ 10
500
+ 11
501
+ 12</pre>
502
+ </td>
503
+ <td>
504
+ <pre class="code"><span class="info file"># File 'lib/longleaf/candidates/file_selector.rb', line 10</span>
505
+
506
+ <span class='kw'>def</span> <span class='id identifier rubyid_specificity'>specificity</span>
507
+ <span class='ivar'>@specificity</span>
508
+ <span class='kw'>end</span></pre>
509
+ </td>
510
+ </tr>
511
+ </table>
512
+ </div>
513
+
514
+ </div>
515
+
516
+
517
+ <div id="instance_method_details" class="method_details_list">
518
+ <h2>Instance Method Details</h2>
519
+
520
+
521
+ <div class="method_details first">
522
+ <h3 class="signature first" id="each-instance_method">
523
+
524
+ #<strong>each</strong> &#x21d2; <tt>Object</tt>
525
+
526
+
527
+
528
+
529
+
530
+ </h3><div class="docstring">
531
+ <div class="discussion">
532
+
533
+ <p>Iterate through the file paths for this selector and execute the provided block with each. A block is required.</p>
534
+
535
+
536
+ </div>
537
+ </div>
538
+ <div class="tags">
539
+
540
+
541
+ </div><table class="source_code">
542
+ <tr>
543
+ <td>
544
+ <pre class="lines">
545
+
546
+
547
+ 106
548
+ 107
549
+ 108
550
+ 109
551
+ 110
552
+ 111
553
+ 112
554
+ 113</pre>
555
+ </td>
556
+ <td>
557
+ <pre class="code"><span class="info file"># File 'lib/longleaf/candidates/file_selector.rb', line 106</span>
558
+
559
+ <span class='kw'>def</span> <span class='id identifier rubyid_each'>each</span>
560
+ <span class='id identifier rubyid_file_path'>file_path</span> <span class='op'>=</span> <span class='id identifier rubyid_next_path'>next_path</span>
561
+ <span class='kw'>until</span> <span class='id identifier rubyid_file_path'>file_path</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
562
+ <span class='kw'>yield</span> <span class='id identifier rubyid_file_path'>file_path</span>
563
+
564
+ <span class='id identifier rubyid_file_path'>file_path</span> <span class='op'>=</span> <span class='id identifier rubyid_next_path'>next_path</span>
565
+ <span class='kw'>end</span>
566
+ <span class='kw'>end</span></pre>
567
+ </td>
568
+ </tr>
569
+ </table>
570
+ </div>
571
+
572
+ <div class="method_details ">
573
+ <h3 class="signature " id="next_path-instance_method">
574
+
575
+ #<strong>next_path</strong> &#x21d2; <tt>String</tt>
576
+
577
+
578
+
579
+
580
+
581
+ </h3><div class="docstring">
582
+ <div class="discussion">
583
+
584
+ <p>Get the next file path for this selector. or nil if no more files selected</p>
585
+
586
+
587
+ </div>
588
+ </div>
589
+ <div class="tags">
590
+
591
+ <p class="tag_title">Returns:</p>
592
+ <ul class="return">
593
+
594
+ <li>
595
+
596
+
597
+ <span class='type'>(<tt>String</tt>)</span>
598
+
599
+
600
+
601
+ &mdash;
602
+ <div class='inline'>
603
+ <p>an absolute path to the next file targeted by this selector,</p>
604
+ </div>
605
+
606
+ </li>
607
+
608
+ </ul>
609
+
610
+ </div><table class="source_code">
611
+ <tr>
612
+ <td>
613
+ <pre class="lines">
614
+
615
+
616
+ 69
617
+ 70
618
+ 71
619
+ 72
620
+ 73
621
+ 74
622
+ 75
623
+ 76
624
+ 77
625
+ 78
626
+ 79
627
+ 80
628
+ 81
629
+ 82
630
+ 83
631
+ 84
632
+ 85
633
+ 86
634
+ 87
635
+ 88
636
+ 89
637
+ 90
638
+ 91
639
+ 92
640
+ 93
641
+ 94
642
+ 95
643
+ 96
644
+ 97
645
+ 98
646
+ 99
647
+ 100
648
+ 101
649
+ 102</pre>
650
+ </td>
651
+ <td>
652
+ <pre class="code"><span class="info file"># File 'lib/longleaf/candidates/file_selector.rb', line 69</span>
653
+
654
+ <span class='kw'>def</span> <span class='id identifier rubyid_next_path'>next_path</span>
655
+ <span class='kw'>if</span> <span class='ivar'>@paths</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
656
+ <span class='comment'># Start the paths listing out from the targetted set of paths for this selector
657
+ </span> <span class='comment'># In reverse order since using a LIFO structure
658
+ </span> <span class='ivar'>@paths</span> <span class='op'>=</span> <span class='id identifier rubyid_target_paths'>target_paths</span><span class='period'>.</span><span class='id identifier rubyid_reverse'>reverse</span>
659
+ <span class='kw'>end</span>
660
+
661
+ <span class='comment'># No more paths to return
662
+ </span> <span class='kw'>return</span> <span class='kw'>nil</span> <span class='kw'>if</span> <span class='ivar'>@paths</span><span class='op'>&amp;.</span><span class='id identifier rubyid_empty?'>empty?</span>
663
+
664
+ <span class='comment'># Get the most recently added path for depth first traversal of selected paths
665
+ </span> <span class='id identifier rubyid_path'>path</span> <span class='op'>=</span> <span class='ivar'>@paths</span><span class='period'>.</span><span class='id identifier rubyid_pop'>pop</span>
666
+ <span class='kw'>until</span> <span class='id identifier rubyid_path'>path</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span> <span class='kw'>do</span>
667
+ <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_verify_path_in_location'>verify_path_in_location</span><span class='lparen'>(</span><span class='id identifier rubyid_path'>path</span><span class='rparen'>)</span>
668
+
669
+ <span class='kw'>if</span> <span class='const'>File</span><span class='period'>.</span><span class='id identifier rubyid_exist?'>exist?</span><span class='lparen'>(</span><span class='id identifier rubyid_path'>path</span><span class='rparen'>)</span>
670
+ <span class='kw'>if</span> <span class='const'>File</span><span class='period'>.</span><span class='id identifier rubyid_directory?'>directory?</span><span class='lparen'>(</span><span class='id identifier rubyid_path'>path</span><span class='rparen'>)</span>
671
+ <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'>Expanding directory </span><span class='embexpr_beg'>#{</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>
672
+ <span class='comment'># For a directory, add all children to file_paths
673
+ </span> <span class='const'>Dir</span><span class='period'>.</span><span class='id identifier rubyid_entries'>entries</span><span class='lparen'>(</span><span class='id identifier rubyid_path'>path</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_sort'>sort</span><span class='period'>.</span><span class='id identifier rubyid_reverse_each'>reverse_each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_child'>child</span><span class='op'>|</span>
674
+ <span class='ivar'>@paths</span> <span class='op'>&lt;&lt;</span> <span class='const'>File</span><span class='period'>.</span><span class='id identifier rubyid_join'>join</span><span class='lparen'>(</span><span class='id identifier rubyid_path'>path</span><span class='comma'>,</span> <span class='id identifier rubyid_child'>child</span><span class='rparen'>)</span> <span class='kw'>unless</span> <span class='id identifier rubyid_child'>child</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>.</span><span class='tstring_end'>&#39;</span></span> <span class='kw'>or</span> <span class='id identifier rubyid_child'>child</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>..</span><span class='tstring_end'>&#39;</span></span>
675
+ <span class='kw'>end</span>
676
+ <span class='kw'>else</span>
677
+ <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'>Returning file </span><span class='embexpr_beg'>#{</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>
678
+ <span class='kw'>return</span> <span class='id identifier rubyid_path'>path</span>
679
+ <span class='kw'>end</span>
680
+ <span class='kw'>else</span>
681
+ <span class='id identifier rubyid_raise'>raise</span> <span class='const'><span class='object_link'><a href="InvalidStoragePathError.html" title="Longleaf::InvalidStoragePathError (class)">InvalidStoragePathError</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>File </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_path'>path</span><span class='embexpr_end'>}</span><span class='tstring_content'> does not exist.</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
682
+ <span class='kw'>end</span>
683
+
684
+ <span class='comment'># Returned path was not a suitable file, try the next path
685
+ </span> <span class='id identifier rubyid_path'>path</span> <span class='op'>=</span> <span class='ivar'>@paths</span><span class='period'>.</span><span class='id identifier rubyid_pop'>pop</span>
686
+ <span class='kw'>end</span>
687
+ <span class='kw'>end</span></pre>
688
+ </td>
689
+ </tr>
690
+ </table>
691
+ </div>
692
+
693
+ <div class="method_details ">
694
+ <h3 class="signature " id="nil_or_empty?-instance_method">
695
+
696
+ #<strong>nil_or_empty?</strong>(value) &#x21d2; <tt>Boolean</tt> <span class="extras">(private)</span>
697
+
698
+
699
+
700
+
701
+
702
+ </h3><div class="docstring">
703
+ <div class="discussion">
704
+
705
+
706
+ </div>
707
+ </div>
708
+ <div class="tags">
709
+
710
+ <p class="tag_title">Returns:</p>
711
+ <ul class="return">
712
+
713
+ <li>
714
+
715
+
716
+ <span class='type'>(<tt>Boolean</tt>)</span>
717
+
718
+
719
+
720
+ </li>
721
+
722
+ </ul>
723
+
724
+ </div><table class="source_code">
725
+ <tr>
726
+ <td>
727
+ <pre class="lines">
728
+
729
+
730
+ 135
731
+ 136
732
+ 137</pre>
733
+ </td>
734
+ <td>
735
+ <pre class="code"><span class="info file"># File 'lib/longleaf/candidates/file_selector.rb', line 135</span>
736
+
737
+ <span class='kw'>def</span> <span class='id identifier rubyid_nil_or_empty?'>nil_or_empty?</span><span class='lparen'>(</span><span class='id identifier rubyid_value'>value</span><span class='rparen'>)</span>
738
+ <span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span> <span class='op'>||</span> <span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_empty?'>empty?</span>
739
+ <span class='kw'>end</span></pre>
740
+ </td>
741
+ </tr>
742
+ </table>
743
+ </div>
744
+
745
+ <div class="method_details ">
746
+ <h3 class="signature " id="storage_locations-instance_method">
747
+
748
+ #<strong>storage_locations</strong> &#x21d2; <tt>Object</tt>
749
+
750
+
751
+
752
+
753
+
754
+ </h3><div class="docstring">
755
+ <div class="discussion">
756
+
757
+ <p>return [Array] a list of all storage locations being targeted by this selector</p>
758
+
759
+
760
+ </div>
761
+ </div>
762
+ <div class="tags">
763
+
764
+
765
+ </div><table class="source_code">
766
+ <tr>
767
+ <td>
768
+ <pre class="lines">
769
+
770
+
771
+ 116
772
+ 117
773
+ 118
774
+ 119
775
+ 120
776
+ 121
777
+ 122
778
+ 123
779
+ 124
780
+ 125
781
+ 126
782
+ 127
783
+ 128
784
+ 129
785
+ 130
786
+ 131
787
+ 132</pre>
788
+ </td>
789
+ <td>
790
+ <pre class="code"><span class="info file"># File 'lib/longleaf/candidates/file_selector.rb', line 116</span>
791
+
792
+ <span class='kw'>def</span> <span class='id identifier rubyid_storage_locations'>storage_locations</span>
793
+ <span class='comment'># Determine what storage_locations are represented by the given file paths
794
+ </span> <span class='kw'>if</span> <span class='ivar'>@storage_locations</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span> <span class='op'>&amp;&amp;</span> <span class='op'>!</span><span class='ivar'>@target_paths</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
795
+ <span class='id identifier rubyid_loc_set'>loc_set</span> <span class='op'>=</span> <span class='const'>Set</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span>
796
+ <span class='ivar'>@target_paths</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_path'>path</span><span class='op'>|</span>
797
+ <span class='id identifier rubyid_loc'>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_path'>path</span><span class='rparen'>)</span>
798
+ <span class='id identifier rubyid_loc_set'>loc_set</span><span class='period'>.</span><span class='id identifier rubyid_add'>add</span><span class='lparen'>(</span><span class='id identifier rubyid_loc'>loc</span><span class='period'>.</span><span class='id identifier rubyid_name'>name</span><span class='rparen'>)</span> <span class='kw'>unless</span> <span class='id identifier rubyid_loc'>loc</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
799
+ <span class='kw'>end</span>
800
+ <span class='ivar'>@storage_locations</span> <span class='op'>=</span> <span class='id identifier rubyid_loc_set'>loc_set</span><span class='period'>.</span><span class='id identifier rubyid_to_a'>to_a</span>
801
+ <span class='kw'>end</span>
802
+
803
+ <span class='kw'>if</span> <span class='ivar'>@storage_locations</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
804
+ <span class='ivar'>@storage_locations</span> <span class='op'>=</span> <span class='const'>Array</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span>
805
+ <span class='kw'>end</span>
806
+
807
+ <span class='ivar'>@storage_locations</span>
808
+ <span class='kw'>end</span></pre>
809
+ </td>
810
+ </tr>
811
+ </table>
812
+ </div>
813
+
814
+ <div class="method_details ">
815
+ <h3 class="signature " id="target_paths-instance_method">
816
+
817
+ #<strong>target_paths</strong> &#x21d2; <tt>Array</tt>
818
+
819
+
820
+
821
+
822
+
823
+ </h3><div class="docstring">
824
+ <div class="discussion">
825
+
826
+ <p>Returns a list of top level paths from which files will be selected</p>
827
+
828
+
829
+ </div>
830
+ </div>
831
+ <div class="tags">
832
+
833
+ <p class="tag_title">Returns:</p>
834
+ <ul class="return">
835
+
836
+ <li>
837
+
838
+
839
+ <span class='type'>(<tt>Array</tt>)</span>
840
+
841
+
842
+
843
+ &mdash;
844
+ <div class='inline'>
845
+ <p>a list of top level paths from which files will be selected</p>
846
+ </div>
847
+
848
+ </li>
849
+
850
+ </ul>
851
+
852
+ </div><table class="source_code">
853
+ <tr>
854
+ <td>
855
+ <pre class="lines">
856
+
857
+
858
+ 54
859
+ 55
860
+ 56
861
+ 57
862
+ 58
863
+ 59
864
+ 60
865
+ 61
866
+ 62
867
+ 63
868
+ 64</pre>
869
+ </td>
870
+ <td>
871
+ <pre class="code"><span class="info file"># File 'lib/longleaf/candidates/file_selector.rb', line 54</span>
872
+
873
+ <span class='kw'>def</span> <span class='id identifier rubyid_target_paths'>target_paths</span>
874
+ <span class='comment'># If starting from locations, initialize by expanding locations out to their actual paths
875
+ </span> <span class='kw'>if</span> <span class='ivar'>@target_paths</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span> <span class='op'>&amp;&amp;</span> <span class='op'>!</span><span class='ivar'>@storage_locations</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
876
+ <span class='ivar'>@target_paths</span> <span class='op'>=</span> <span class='const'>Array</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span>
877
+ <span class='ivar'>@storage_locations</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_loc_name'>loc_name</span><span class='op'>|</span>
878
+ <span class='ivar'>@target_paths</span> <span class='op'>&lt;&lt;</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_locations'>locations</span><span class='lbracket'>[</span><span class='id identifier rubyid_loc_name'>loc_name</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_path'>path</span>
879
+ <span class='kw'>end</span>
880
+ <span class='kw'>end</span>
881
+
882
+ <span class='ivar'>@target_paths</span>
883
+ <span class='kw'>end</span></pre>
884
+ </td>
885
+ </tr>
886
+ </table>
887
+ </div>
888
+
889
+ </div>
890
+
891
+ </div>
892
+
893
+ <div id="footer">
894
+ Generated on Tue May 28 15:48:01 2019 by
895
+ <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
896
+ 0.9.19 (ruby-2.6.3).
897
+ </div>
898
+
899
+ </div>
900
+ </body>
901
+ </html>