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.
@@ -0,0 +1,69 @@
1
+ # OSX/Hardware.rb
2
+ # OSX::Hardware
3
+
4
+ # 20180209
5
+ # 0.1.1
6
+
7
+ require 'Thoran/String/Captures/captures'
8
+
9
+ module OSX
10
+ class HardwarePort
11
+
12
+ class << self
13
+
14
+ def parse(output)
15
+ hardware_ports = []
16
+ hardware_port = nil
17
+ output.each_line do |line|
18
+ if line == "\n" || line == ""
19
+ hardware_port = new
20
+ else
21
+ label, value = line.captures(/^(.+): (.+)/)
22
+ case label
23
+ when 'Hardware Port'; hardware_port.hardware_port = value
24
+ when 'Device'; hardware_port.device = value
25
+ when 'Ethernet Address'; hardware_port.ethernet_address = value
26
+ end
27
+ end
28
+ hardware_ports << hardware_port
29
+ end
30
+ hardware_ports
31
+ end
32
+
33
+ def all
34
+ parse(output)
35
+ end
36
+
37
+ def find_by_device(device)
38
+ all.detect{|hardware_port| hardware_port.device == device}
39
+ end
40
+
41
+ private
42
+
43
+ def output
44
+ `networksetup -listallhardwareports`
45
+ end
46
+
47
+ end # class << self
48
+
49
+ attr_accessor :hardware_port
50
+ attr_accessor :device
51
+ attr_accessor :ethernet_address
52
+
53
+ def new(hardware_port:, device:, ethernet_address:)
54
+ @hardware_port = hardware_port
55
+ @device = device
56
+ @ethernet_address = ethernet_address
57
+ end
58
+
59
+ def name
60
+ @hardware_port
61
+ end
62
+
63
+ end
64
+ end
65
+
66
+ if __FILE__ == $0
67
+ p hardware_ports = OSX::HardwarePort.all
68
+ p en4 = OSX::HardwarePort.find_by_device('en4')
69
+ end
@@ -0,0 +1,57 @@
1
+ # OSX/IfConfig.rb
2
+ # OSX::IfConfig
3
+
4
+ # 20180209
5
+ # 0.2.0
6
+
7
+ # Changes since 0.1:
8
+ # 1. + OSX namespace, under the assumption that the output of ifconfig on OSX is different from other operating systems.
9
+ require 'Thoran/String/Captures/captures'
10
+
11
+ module OSX
12
+ class IfConfig
13
+
14
+ def new(output = nil)
15
+ @output = output
16
+ end
17
+
18
+ def interfaces
19
+ parse.keys
20
+ end
21
+
22
+ def active_interfaces
23
+ parse.select do |interface, details|
24
+ details.any?{|detail| detail =~ /status: active/}
25
+ end.keys
26
+ end
27
+
28
+ private
29
+
30
+ def output
31
+ @output || `ifconfig -a`
32
+ end
33
+
34
+ def parse
35
+ interfaces = {}
36
+ interface = nil
37
+ output.each_line do |line|
38
+ if line =~ /^\t/
39
+ interfaces[interface] << line.sub(/^\t/, '')
40
+ else
41
+ interface, rest_of_line = line.captures(/^(.+?): (.+)$/)
42
+ interfaces[interface] = [rest_of_line]
43
+ end
44
+ end
45
+ interfaces
46
+ end
47
+
48
+ end
49
+ end
50
+
51
+ if __FILE__ == $0
52
+ require 'pp'
53
+ ic = OSX::IfConfig.new
54
+ pp ic.send(:parse)
55
+ ic.interfaces
56
+ ic.active_interfaces
57
+ end
@@ -0,0 +1,8 @@
1
+ # Ordinal/Array.rb
2
+ # Ordinal/Array
3
+
4
+ require_relative '../Ordinal'
5
+
6
+ class Array
7
+ include Ordinal
8
+ end
data/lib/Ordinal.rb ADDED
@@ -0,0 +1,155 @@
1
+ # Ordinal.rb
2
+ # Ordinal
3
+
4
+ # 20140316
5
+ # 0.2.0
6
+
7
+ # Description: This is a collection of methods which relies upon an object having an entries method.
8
+
9
+ # Notes:
10
+ # 1. This was originally meant to be extensions on Enumerable, as can be seen in version 0.0.0, but I decided that any object which provides for an ordered list of entries by way of having an entries method should be able to make use of this.
11
+
12
+ # Changes since 0.1:
13
+ # 1. - require 'File/self.relative_path' from Ordinal/Array and replaced with require_relative.
14
+ # 2. - require 'File/self.relative_path' from Ordinal/Array and replaced with require_relative.
15
+
16
+ module Ordinal
17
+
18
+ def first
19
+ entries[0]
20
+ end
21
+
22
+ def second
23
+ entries[1]
24
+ end
25
+
26
+ def third
27
+ entries[2]
28
+ end
29
+
30
+ def fourth
31
+ entries[3]
32
+ end
33
+
34
+ def fifth
35
+ entries[4]
36
+ end
37
+
38
+ def sixth
39
+ entries[5]
40
+ end
41
+
42
+ def seventh
43
+ entries[6]
44
+ end
45
+
46
+ def eighth
47
+ entries[7]
48
+ end
49
+
50
+ def ninth
51
+ entries[8]
52
+ end
53
+
54
+ def tenth
55
+ entries[9]
56
+ end
57
+
58
+ def eleventh
59
+ entries[10]
60
+ end
61
+
62
+ def twelfth
63
+ entries[11]
64
+ end
65
+
66
+ def thirteenth
67
+ entries[12]
68
+ end
69
+
70
+ def fourteenth
71
+ entries[13]
72
+ end
73
+
74
+ def fifteenth
75
+ entries[14]
76
+ end
77
+
78
+ def sixteenth
79
+ entries[15]
80
+ end
81
+
82
+ def seventeenth
83
+ entries[16]
84
+ end
85
+
86
+ def eighteenth
87
+ entries[17]
88
+ end
89
+
90
+ def ninteenth
91
+ entries[18]
92
+ end
93
+
94
+ def twentieth
95
+ entries[19]
96
+ end
97
+
98
+ def tenth_last
99
+ entries[count - 10]
100
+ end
101
+
102
+ def ninth_last
103
+ entries[count - 9]
104
+ end
105
+
106
+ def eighth_last
107
+ entries[count - 8]
108
+ end
109
+
110
+ def seventh_last
111
+ entries[count - 7]
112
+ end
113
+
114
+ def sixth_last
115
+ entries[count - 6]
116
+ end
117
+
118
+ def fifth_last
119
+ entries[count - 5]
120
+ end
121
+
122
+ def fourth_last
123
+ entries[count - 4]
124
+ end
125
+
126
+ def third_last
127
+ entries[count - 3]
128
+ end
129
+
130
+ def second_last
131
+ entries[count - 2]
132
+ end
133
+
134
+ def last
135
+ entries[count - 1]
136
+ end
137
+ alias_method :first_last, :last
138
+
139
+ def all_but_first
140
+ entries.drop(1)
141
+ end
142
+
143
+ def all_but_last
144
+ entries.take(count - 1)
145
+ end
146
+
147
+ def all_but_first_and_last
148
+ entries.all_but_first.all_but_last
149
+ end
150
+
151
+ def first_and_last
152
+ [entries.first] + [entries.last]
153
+ end
154
+
155
+ end
@@ -0,0 +1,36 @@
1
+ # Platform/OS/OSX/SystemProfiler.rb
2
+ # Platform::OS::OSX::SystemProfiler
3
+
4
+ # Description: This uses the built-in system_profiler command on OSX to get access to the version numbers on OSX between 10.4 and 10.9,
5
+ # or more generally any version of OSX which has a system_profiler command and which returns results in the same format.
6
+
7
+ require 'Ordinal/Array'
8
+ require 'String/grep'
9
+
10
+ module Platform
11
+ module OS
12
+ module OSX
13
+ module SystemProfiler
14
+
15
+ module_function
16
+
17
+ def system_version
18
+ `system_profiler SPSoftwareDataType`.force_encoding('UTF-8').grep(/System Version/).split(': ').second.split.fourth
19
+ end
20
+
21
+ def major_system_version
22
+ system_version.split('.').first.to_i
23
+ end
24
+
25
+ def minor_system_version
26
+ system_version.split('.').second.to_i
27
+ end
28
+
29
+ def tiny_system_version
30
+ system_version.split('.').third.to_i
31
+ end
32
+
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,100 @@
1
+ # Platform/OS/OSX.rb
2
+ # Platform::OS::OSX
3
+
4
+ require 'Files'
5
+ require 'Platform/OS/OSX/SystemProfiler'
6
+ require 'Thoran/String/Capture/capture'
7
+ require 'Version'
8
+
9
+ module Platform
10
+ module OS
11
+ module OSX
12
+
13
+ module_function
14
+
15
+ def version
16
+ Version.new(version_string)
17
+ end
18
+
19
+ def version_string
20
+ detect(true)
21
+ end
22
+
23
+ def name
24
+ detect.split('_').collect{|e| e.capitalize}.join(' ')
25
+ end
26
+
27
+ def detect(return_version_string = false)
28
+ if return_version_string
29
+ SystemProfiler.system_version
30
+ else
31
+ self.methods(false).select{|e| e =~ /\?$/}.detect{|e| send(e)}.to_s.capture(/^(\w+)\?/)
32
+ end
33
+ end
34
+
35
+ def tiger?
36
+ SystemProfiler.major_system_version == 10 && SystemProfiler.minor_system_version == 4
37
+ end
38
+
39
+ def leopard?
40
+ SystemProfiler.major_system_version == 10 && SystemProfiler.minor_system_version == 5
41
+ end
42
+
43
+ def snow_leopard?
44
+ SystemProfiler.major_system_version == 10 && SystemProfiler.minor_system_version == 6
45
+ end
46
+
47
+ def lion?
48
+ SystemProfiler.major_system_version == 10 && SystemProfiler.minor_system_version == 7
49
+ end
50
+
51
+ def mountain_lion?
52
+ SystemProfiler.major_system_version == 10 && SystemProfiler.minor_system_version == 8
53
+ end
54
+
55
+ def mavericks?
56
+ SystemProfiler.major_system_version == 10 && SystemProfiler.minor_system_version == 9
57
+ end
58
+
59
+ def application_paths(username = nil)
60
+ system_application_paths + user_application_paths(username)
61
+ end
62
+
63
+ def system_application_paths
64
+ applications_in_directory('/Applications')
65
+ end
66
+
67
+ def user_application_paths(username = nil)
68
+ if username
69
+ applications_in_directory("/Users/#{username}/Applications")
70
+ else
71
+ usernames.collect do |username|
72
+ applications_in_directory("/Users/#{username}/Applications")
73
+ end.flatten
74
+ end
75
+ end
76
+
77
+ def usernames
78
+ `dscl . list /users`.split("\n")
79
+ .reject{|username| username =~ /^_/}
80
+ .reject{|username| %w{daemon nobody root}.include?(username)}
81
+ end
82
+
83
+ def application_path_for_application(application_name)
84
+ application_paths.detect do |application_path|
85
+ File.basename(application_path) == application_name ||
86
+ File.basename(application_path, '.app') == application_name
87
+ end
88
+ end
89
+
90
+ def start(application_name)
91
+ system("open #{application_path_for_application(application_name)}")
92
+ end
93
+
94
+ def applications_in_directory(directory)
95
+ Files.new(path: directory, pattern: '*.app').collect{|file| file.path}
96
+ end
97
+
98
+ end
99
+ end
100
+ end
@@ -0,0 +1,15 @@
1
+ # Platform/OS/linuxQ.rb
2
+ # Platform::OS#linux?
3
+
4
+ module Platform
5
+ module OS
6
+
7
+ module_function
8
+
9
+ def linux?
10
+ RUBY_PLATFORM.downcase.include?('linux')
11
+ end
12
+ alias_method :gnu_linux?, :linux?
13
+
14
+ end
15
+ end
@@ -0,0 +1,16 @@
1
+ # Platform/OS/nt_basedQ.rb
2
+ # Platform::OS#nt_based?
3
+
4
+ module Platform
5
+
6
+ module_function
7
+
8
+ def nt_based?
9
+ if ENV.has_key?('OS') && ENV['OS'] =~ /nt/i # it's one of the NT-based operating systems (NT, 2000, or XP) (What about Vista, 7, and 8?)
10
+ true
11
+ else # it's one of DOS, Windows 95, 98, or ME
12
+ false
13
+ end
14
+ end
15
+
16
+ end
@@ -0,0 +1,15 @@
1
+ # Platform/OS/osxQ.rb
2
+ # Platform::OS#osx?
3
+
4
+ module Platform
5
+ module OS
6
+
7
+ module_function
8
+
9
+ def osx?
10
+ RUBY_PLATFORM.downcase.include?('darwin')
11
+ end
12
+ alias_method :darwin?, :osx?
13
+
14
+ end
15
+ end
@@ -0,0 +1,26 @@
1
+ # Platform/OS/windowsQ.rb
2
+ # Platform::OS#windows?
3
+
4
+ module Platform
5
+ module OS
6
+
7
+ module_function
8
+
9
+ def windows?
10
+ mswin32? || mingw32? || cygwin?
11
+ end
12
+
13
+ def mswin32?
14
+ RUBY_PLATFORM =~ /mswin32/ ? true : false
15
+ end
16
+
17
+ def mingw32?
18
+ RUBY_PLATFORM =~ /mingw32/ ? true : false
19
+ end
20
+
21
+ def cygwin?
22
+ RUBY_PLATFORM =~ /cygwin/ ? true : false
23
+ end
24
+
25
+ end
26
+ end
@@ -0,0 +1,13 @@
1
+ # Platform/OS.rb
2
+ # Platform::OS
3
+
4
+ module Platform
5
+ module OS
6
+ end
7
+ end
8
+
9
+ require 'Platform/OS/linuxQ'
10
+ require 'Platform/OS/nt_basedQ'
11
+ require 'Platform/OS/osxQ'
12
+ require 'Platform/OS/OSX'
13
+ require 'Platform/OS/windowsQ'
@@ -0,0 +1,20 @@
1
+ # String/capture
2
+ # String#capture
3
+
4
+ # 20120812
5
+ # 0.2.0
6
+
7
+ # Changes since 0.1:
8
+ # 1. Added some testing.
9
+
10
+ class String
11
+
12
+ def capture(regex)
13
+ if md = self.match(regex)
14
+ md[1]
15
+ else
16
+ nil
17
+ end
18
+ end
19
+
20
+ end
@@ -0,0 +1,26 @@
1
+ # Thoran/String/Capture/capture.rb
2
+ # Thoran::String::Capture#capture
3
+
4
+ # 20161109
5
+ # 0.3.0
6
+
7
+ # Changes since 0.2:
8
+ # 1. + Thoran namespace.
9
+
10
+ module Thoran
11
+ module String
12
+ module Capture
13
+
14
+ def capture(regex)
15
+ if md = self.match(regex)
16
+ md[1]
17
+ else
18
+ nil
19
+ end
20
+ end
21
+
22
+ end
23
+ end
24
+ end
25
+
26
+ String.send(:include, Thoran::String::Capture)
@@ -0,0 +1,26 @@
1
+ # Thoran/String/Captures/captures.rb
2
+ # Thoran::String::Captures#captures
3
+
4
+ # 20171118
5
+ # 0.3.0
6
+
7
+ # Changes:
8
+ # 1. Returning an empty array when there's no match, since that's more consistent.
9
+
10
+ module Thoran
11
+ module String
12
+ module Captures
13
+
14
+ def captures(regex)
15
+ if md = self.match(regex)
16
+ md.captures
17
+ else
18
+ []
19
+ end
20
+ end
21
+
22
+ end
23
+ end
24
+ end
25
+
26
+ String.send(:include, Thoran::String::Captures)