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.
- 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: []
|