startor 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/bin/startor +173 -0
- data/lib/Array/all_but_last.rb +24 -0
- data/lib/Array/extract_optionsX.rb +21 -0
- data/lib/Array/lastX.rb +10 -0
- data/lib/File/basename_without_extname.rb +17 -0
- data/lib/File/extname.rb +18 -0
- data/lib/File/self.gsubX.rb +54 -0
- data/lib/FileUtils/where.rb +37 -0
- data/lib/FileUtils/which.rb +20 -0
- data/lib/Files.rb +249 -0
- data/lib/Kernel/run.rb +43 -0
- data/lib/Module/alias_methods.rb +16 -0
- data/lib/OSX/HardwarePort.rb +69 -0
- data/lib/OSX/IfConfig.rb +57 -0
- data/lib/Ordinal/Array.rb +8 -0
- data/lib/Ordinal.rb +155 -0
- data/lib/Platform/OS/OSX/SystemProfiler.rb +36 -0
- data/lib/Platform/OS/OSX.rb +100 -0
- data/lib/Platform/OS/linuxQ.rb +15 -0
- data/lib/Platform/OS/nt_basedQ.rb +16 -0
- data/lib/Platform/OS/osxQ.rb +15 -0
- data/lib/Platform/OS/windowsQ.rb +26 -0
- data/lib/Platform/OS.rb +13 -0
- data/lib/String/capture.rb +20 -0
- data/lib/Thoran/String/Capture/capture.rb +26 -0
- data/lib/Thoran/String/Captures/captures.rb +26 -0
- data/lib/Version.rb +403 -0
- metadata +73 -0
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: []
|