startor 0.6.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.
data/lib/Version.rb ADDED
@@ -0,0 +1,403 @@
1
+ # Version.rb
2
+ # Version
3
+
4
+ # 20140910
5
+ # 0.13.0
6
+
7
+ # Description: This class is able to compare strings containing version numbers.
8
+
9
+ # Changes since 0.12:
10
+ # 1. Version.each now returns Version instances.
11
+ # 2. Version.sorted now returns a collection with either strings or Version instances, depending on what was supplied.
12
+
13
+ lib_dir = File.dirname(File.expand_path(__FILE__))
14
+ $LOAD_PATH.unshift(lib_dir) unless $LOAD_PATH.include?(lib_dir)
15
+
16
+ require 'Module/alias_methods'
17
+ require 'Ordinal/Array'
18
+ require 'String/capture'
19
+
20
+ class Version
21
+
22
+ module VERSION; STRING = '0.13.0'; end
23
+
24
+ class << self
25
+
26
+ include Enumerable
27
+ include Comparable
28
+
29
+ attr_accessor :version_strings
30
+
31
+ def <<(version)
32
+ self.version_strings ||= []
33
+ self.version_strings << to_version_string(version)
34
+ end
35
+ alias_methods :append, :push, :<<
36
+
37
+ def sorted(*versions)
38
+ versions = versions.flatten
39
+ return_value = versions.collect{|version| Version.new(to_version_string(version))}.sort
40
+ return_value = return_value.collect{|e| e.to_s} if versions.all?{|e| e.is_a?(String)}
41
+ return_value
42
+ end
43
+
44
+ def latest(*versions)
45
+ sorted(*versions).last
46
+ end
47
+ alias_methods :last, :most_recent, :newest, :highest, :latest
48
+
49
+ def major(version)
50
+ major = to_version_string(version).split('.').first
51
+ major = major.split('-').first if major && hyphenated_part?(version)
52
+ major
53
+ end
54
+ alias_methods :major_version, :major_number, :major_version_number, :major
55
+
56
+ def minor(version)
57
+ minor = to_version_string(version).split('.').second
58
+ minor = minor.split('-').first if minor && hyphenated_part?(version)
59
+ minor
60
+ end
61
+ alias_methods :minor_version, :minor_number, :minor_version_number, :minor
62
+
63
+ def tiny(version)
64
+ tiny = to_version_string(version).split('.').third
65
+ tiny = tiny.split('-').first if tiny && hyphenated_part?(version)
66
+ tiny
67
+ end
68
+ alias_methods :tiny_version, :tiny_number, :tiny_version_number, :tiny
69
+
70
+ def build(version)
71
+ build = to_version_string(version).split('.').fourth
72
+ build = build.split('-').first if build && hyphenated_part?(version)
73
+ build
74
+ end
75
+ alias_methods :build_version, :build_number, :build_version_number, :build
76
+
77
+ def patch(version)
78
+ if hyphenated_part = self.hyphenated_part(version)
79
+ hyphenated_part(version).capture(/^(p\d+)/) # It's unlikely that there would be a p without a number.
80
+ end
81
+ end
82
+ alias_methods :patch_level, :patch_version, :patch_number, :patch_version_number, :patch
83
+
84
+ def dev(version)
85
+ if hyphenated_part = self.hyphenated_part(version)
86
+ hyphenated_part(version).capture(/^(dev\d*)/)
87
+ end
88
+ end
89
+ alias_methods :dev_version, :dev_number, :dev_version_number, :dev
90
+ alias_methods :development, :development_version, :development_number, :development_version_number, :dev
91
+
92
+ def preview(version)
93
+ if hyphenated_part = self.hyphenated_part(version)
94
+ hyphenated_part.capture(/^(preview\d*)/) # It's possible that there will be a preview without a number.
95
+ end
96
+ end
97
+ alias_methods :preview_version, :preview_number, :preview_version_number, :preview
98
+
99
+ def release_candidate(version)
100
+ if hyphenated_part = self.hyphenated_part(version)
101
+ hyphenated_part(version).capture(/^(rc\d*)/)
102
+ end
103
+ end
104
+ alias_methods :release_candidate_version, :release_candidate_number, :release_candidate_version_number, :release_candidate
105
+ alias_methods :rc, :rc_version, :rc_number, :rc_version_number, :release_candidate
106
+
107
+ def hyphenated_part(version)
108
+ if to_version_string(version).match(/-/)
109
+ to_version_string(version).split('-').last
110
+ end
111
+ end
112
+
113
+ def <=>(version_1, version_2)
114
+ version_1 = Version.new(Version.to_version_string(version_1))
115
+ version_2 = Version.new(Version.to_version_string(version_2))
116
+ if version_1.has_hyphenated_part? || version_2.has_hyphenated_part?
117
+ if (to_a(version_1, false) <=> to_a(version_2, false)) == 0
118
+ if version_1.hyphenated_part == version_2.hyphenated_part
119
+ 0
120
+ elsif version_1.hyphenated_part =~ /^dev/
121
+ case version_2.hyphenated_part
122
+ when /^dev/; version_1.hyphenated_part <=> version_2.hyphenated_part
123
+ when /^preview/; -1
124
+ when /^rc/; -1
125
+ when /^p\d+/; -1
126
+ else; -1
127
+ end
128
+ elsif version_1.hyphenated_part =~ /^preview/
129
+ case version_2.hyphenated_part
130
+ when /^preview/; version_1.hyphenated_part <=> version_2.hyphenated_part
131
+ when /^dev/; 1
132
+ when /^rc/; -1
133
+ when /^p\d+/; -1
134
+ else; -1
135
+ end
136
+ elsif version_1.hyphenated_part =~ /^rc/
137
+ case version_2.hyphenated_part
138
+ when /^rc/; version_1.hyphenated_part <=> version_2.hyphenated_part
139
+ when /^dev/; 1
140
+ when /^preview/; 1
141
+ when /^p\d+/; -1
142
+ else; -1
143
+ end
144
+ elsif version_1.hyphenated_part =~ /^p\d+/
145
+ case version_2.hyphenated_part
146
+ when /^p\d+/; version_1.hyphenated_part <=> version_2.hyphenated_part
147
+ when /^dev/; 1
148
+ when /^preview/; 1
149
+ when /^rc/; 1
150
+ else; -1 # This assumes that 2.1.0 != 2.1.0-p0 (ie. 2.1.0-p0 < 2.1.0) and that for all other patch levels that anything with no patch level is superior.
151
+ end
152
+ else
153
+ case version_2.hyphenated_part
154
+ when /^dev/; 1
155
+ when /^preview/; 1
156
+ when /^rc/; 1
157
+ when /^p\d+/; 1
158
+ else; 1
159
+ end
160
+ end
161
+ else
162
+ to_a(version_1, false) <=> to_a(version_2, false)
163
+ end
164
+ else
165
+ to_a(version_1) <=> to_a(version_2)
166
+ end
167
+ end
168
+
169
+ def ===(version_1, version_2)
170
+ version_1_size = to_a(version_1).size
171
+ version_2_size = to_a(version_2).size
172
+ maximum_shared_places = [version_1_size, version_2_size].min
173
+ if version_1_size < version_2_size
174
+ new_version_2 = to_a(version_2).take(maximum_shared_places).join('.')
175
+ self.<=>(version_1, new_version_2).zero? ? true : false
176
+ elsif version_1_size > version_2_size
177
+ new_version_1 = to_a(version_1).take(maximum_shared_places).join('.')
178
+ self.<=>(new_version_1, version_2).zero? ? true : false
179
+ else
180
+ self.<=>(version_1, version_2).zero? ? true : false
181
+ end
182
+ end
183
+
184
+ def each
185
+ version_strings.each{|version_string| yield Version.new(version_string)}
186
+ end
187
+
188
+ def to_a(version, include_hyphenated = true)
189
+ to_a = [major(version), minor(version), tiny(version), build(version)]
190
+ to_a = to_a + [hyphenated_part(version)] if include_hyphenated
191
+ to_a.compact
192
+ end
193
+
194
+ def from_version_code(version_code)
195
+ version_string = version_code.scan(/../).collect{|n| n.to_i}.join('.')
196
+ Version.new(version_string)
197
+ end
198
+
199
+ def to_version_code(version)
200
+ version_string = to_version_string(version)
201
+ to_a(version_string, false).collect{|part| part.rjust(2, '0')}.join
202
+ end
203
+ alias_methods :version_code, :to_version_code
204
+
205
+ # Should I handle version codes here? If I don't handle version codes for any argument which makes reference to a version, then I could simply do a version.to_s in place of using to_version_string().
206
+ def to_version_string(version)
207
+ version = version.to_s
208
+ if version.match(/\./)
209
+ version
210
+ else
211
+ from_version_code(version).to_s
212
+ end
213
+ end
214
+
215
+ # boolean methods
216
+
217
+ def major?(version)
218
+ major(version) ? true : false
219
+ end
220
+ alias_methods :major_version?, :major_number?, :major_version_number?, :major?
221
+
222
+ def minor?(version)
223
+ minor(version) ? true : false
224
+ end
225
+ alias_methods :minor_version?, :minor_number?, :minor_version_number?, :minor?
226
+
227
+ def tiny?(version)
228
+ tiny(version) ? true : false
229
+ end
230
+ alias_methods :tiny_version?, :tiny_number?, :tiny_version_number?, :tiny?
231
+
232
+ def build?(version)
233
+ build(version) ? true : false
234
+ end
235
+ alias_methods :build_version?, :build_number?, :build_version_number?, :build?
236
+
237
+ def patch?(version)
238
+ patch(version) ? true : false
239
+ end
240
+ alias_methods :patch_level?, :patch_version?, :patch_number?, :patch_version_number?, :patch?
241
+
242
+ def dev?(version)
243
+ dev(version) ? true : false
244
+ end
245
+ alias_methods :dev_version?, :dev_number?, :dev_version_number?, :dev?
246
+ alias_methods :development?, :development_version?, :development_number?, :development_version_number?, :dev?
247
+
248
+ def preview?(version)
249
+ preview(version) ? true : false
250
+ end
251
+ alias_methods :preview_version?, :preview_number?, :preview_version_number?, :preview?
252
+
253
+ def release_candidate?(version)
254
+ release_candidate(version) ? true : false
255
+ end
256
+ alias_methods :release_candidate_version?, :release_candidate_number?, :release_candidate_version_number?, :release_candidate?
257
+ alias_methods :rc?, :rc_version?, :rc_number?, :rc_version_number?, :release_candidate?
258
+
259
+ def hyphenated_part?(version)
260
+ hyphenated_part(version) ? true : false
261
+ end
262
+ alias_methods :has_hyphenated_part?, :hyphenated_part?
263
+
264
+ end # class << self
265
+
266
+ include Comparable
267
+
268
+ attr_accessor :version_string
269
+
270
+ def initialize(version_string = nil)
271
+ @version_string = version_string.to_s
272
+ end
273
+
274
+ def major
275
+ self.class.major(version_string)
276
+ end
277
+ alias_methods :major_version, :major_number, :major_version_number, :major
278
+
279
+ def minor
280
+ self.class.minor(version_string)
281
+ end
282
+ alias_methods :minor_version, :minor_number, :minor_version_number, :minor
283
+
284
+ def tiny
285
+ self.class.tiny(version_string)
286
+ end
287
+ alias_methods :tiny_version, :tiny_number, :tiny_version_number, :tiny
288
+
289
+ def build
290
+ self.class.build(version_string)
291
+ end
292
+ alias_methods :build_version, :build_number, :build_version_number, :build
293
+
294
+ def patch
295
+ self.class.patch(version_string)
296
+ end
297
+ alias_methods :patch_level, :patch_version, :patch_number, :patch_version_number, :patch
298
+
299
+ def dev
300
+ self.class.dev(version_string)
301
+ end
302
+ alias_methods :dev_version, :dev_number, :dev_version_number, :dev
303
+ alias_methods :development, :development_version, :development_number, :development_version_number, :dev
304
+
305
+ def preview
306
+ self.class.preview(version_string)
307
+ end
308
+ alias_methods :preview_version, :preview_number, :preview_version_number, :patch
309
+
310
+ def release_candidate
311
+ self.class.release_candidate(version_string)
312
+ end
313
+ alias_methods :release_candidte_level, :release_candidate_version, :release_candidate_number, :release_candidate_version_number, :release_candidate
314
+ alias_methods :rc, :rc_version, :rc_number, :rc_version_number, :release_candidate
315
+
316
+ def hyphenated_part
317
+ patch || dev || preview || release_candidate
318
+ end
319
+
320
+ def <=>(other_version)
321
+ self.class.<=>(version_string, other_version)
322
+ end
323
+
324
+ def ===(other_version)
325
+ self.class.===(version_string, other_version)
326
+ end
327
+
328
+ def to_a
329
+ self.class.to_a(version_string)
330
+ end
331
+
332
+ def to_s
333
+ version_string
334
+ end
335
+
336
+ def version_code
337
+ self.class.version_code(version_string)
338
+ end
339
+
340
+ def least_significant_version_part_name
341
+ if patch?
342
+ :patch
343
+ elsif build?
344
+ :build
345
+ elsif tiny?
346
+ :tiny
347
+ elsif minor?
348
+ :minor
349
+ else
350
+ :major
351
+ end
352
+ end
353
+
354
+ # boolean methods
355
+
356
+ def major?
357
+ self.class.major?(version_string)
358
+ end
359
+ alias_methods :major_version?, :major_number?, :major_version_number?, :major?
360
+
361
+ def minor?
362
+ self.class.minor?(version_string)
363
+ end
364
+ alias_methods :minor_version?, :minor_number?, :minor_version_number?, :minor?
365
+
366
+ def tiny?
367
+ self.class.tiny?(version_string)
368
+ end
369
+ alias_methods :tiny_version?, :tiny_number?, :tiny_version_number?, :tiny?
370
+
371
+ def build?
372
+ self.class.build?(version_string)
373
+ end
374
+ alias_methods :build_version?, :build_number?, :build_version_number?, :build?
375
+
376
+ def patch?
377
+ self.class.patch?(version_string)
378
+ end
379
+ alias_methods :patch_level?, :patch_version?, :patch_number?, :patch_version_number?, :patch?
380
+
381
+ def dev?
382
+ self.class.dev?(version_string)
383
+ end
384
+ alias_methods :dev_version?, :dev_number?, :dev_version_number?, :dev?
385
+ alias_methods :development?, :development_version?, :development_number?, :development_version_number?, :dev?
386
+
387
+ def preview?
388
+ self.class.preview?(version_string) ? true : false
389
+ end
390
+ alias_methods :preview_version?, :preview_number?, :preview_version_number?, :preview?
391
+
392
+ def release_candidate?
393
+ self.class.release_candidate?(version_string) ? true : false
394
+ end
395
+ alias_methods :release_candidate_version?, :release_candidate_number?, :release_candidate_version_number?, :release_candidate?
396
+ alias_methods :rc?, :rc_version?, :rc_number?, :rc_version_number?, :release_candidate?
397
+
398
+ def hyphenated_part?
399
+ patch? || dev? || preview? || release_candidate?
400
+ end
401
+ alias_methods :has_hyphenated_part?, :hyphenated_part?
402
+
403
+ end
metadata ADDED
@@ -0,0 +1,73 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: startor
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.6.0
5
+ platform: ruby
6
+ authors:
7
+ - thoran
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-11-06 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Easily install, start, and stop tor.
14
+ email: code@thoran.com
15
+ executables:
16
+ - startor
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - bin/startor
21
+ - lib/Array/all_but_last.rb
22
+ - lib/Array/extract_optionsX.rb
23
+ - lib/Array/lastX.rb
24
+ - lib/File/basename_without_extname.rb
25
+ - lib/File/extname.rb
26
+ - lib/File/self.gsubX.rb
27
+ - lib/FileUtils/where.rb
28
+ - lib/FileUtils/which.rb
29
+ - lib/Files.rb
30
+ - lib/Kernel/run.rb
31
+ - lib/Module/alias_methods.rb
32
+ - lib/OSX/HardwarePort.rb
33
+ - lib/OSX/IfConfig.rb
34
+ - lib/Ordinal.rb
35
+ - lib/Ordinal/Array.rb
36
+ - lib/Platform/OS.rb
37
+ - lib/Platform/OS/OSX.rb
38
+ - lib/Platform/OS/OSX/SystemProfiler.rb
39
+ - lib/Platform/OS/linuxQ.rb
40
+ - lib/Platform/OS/nt_basedQ.rb
41
+ - lib/Platform/OS/osxQ.rb
42
+ - lib/Platform/OS/windowsQ.rb
43
+ - lib/String/capture.rb
44
+ - lib/Thoran/String/Capture/capture.rb
45
+ - lib/Thoran/String/Captures/captures.rb
46
+ - lib/Version.rb
47
+ homepage: http://github.com/thoran/startor
48
+ licenses:
49
+ - MIT
50
+ metadata:
51
+ tor_website: https://www.torproject.org
52
+ tor_check_page: https://check.torproject.org
53
+ post_install_message:
54
+ rdoc_options: []
55
+ require_paths:
56
+ - lib
57
+ required_ruby_version: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: 1.8.6
62
+ required_rubygems_version: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
67
+ requirements: []
68
+ rubyforge_project:
69
+ rubygems_version: 2.7.6
70
+ signing_key:
71
+ specification_version: 4
72
+ summary: tor management made easy.
73
+ test_files: []