startor 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
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: []