specs 0.19 → 0.20
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/specs +1 -7
- data/lib/aspects/memcached.rb +5 -0
- data/lib/cli.rb +52 -0
- data/lib/specs.rb +59 -105
- data/lib/version.rb +1 -1
- metadata +19 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 108f0346813810751bc678547295cef5d746de69
|
4
|
+
data.tar.gz: fb0540346c63920763af7f363c535288e06598ed
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 98c054f85195eb660291294399f24e2da4d7afb9fd5717d6fbd7b02918cb632925132c7fd0c59ef5e87ebcb1c5d7f0d00faa1539474ca49b3ebcf97617385704
|
7
|
+
data.tar.gz: 7f40300e49dbcfa0eba415c23768d62095df8589f0a8ca70858f2180ea889d4d390eeee2ef2b0736f539121fa8b6f274ebb641ad70304cd232601b398fe492e2
|
data/bin/specs
CHANGED
data/lib/cli.rb
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
require_relative 'specs'
|
2
|
+
|
3
|
+
require 'docopt'
|
4
|
+
|
5
|
+
USAGE = <<DOCOPT
|
6
|
+
Usage:
|
7
|
+
specs [-v | -h] [<aspect>]...
|
8
|
+
|
9
|
+
Arguments:
|
10
|
+
<aspect> Software stack to query [default: os hardware].
|
11
|
+
|
12
|
+
Options:
|
13
|
+
-v --version Print version info.
|
14
|
+
-h --help Print usage info.
|
15
|
+
DOCOPT
|
16
|
+
|
17
|
+
module Specs
|
18
|
+
def self.main
|
19
|
+
check_ruby_version
|
20
|
+
|
21
|
+
begin
|
22
|
+
options = Docopt::docopt(USAGE, version: Specs::VERSION)
|
23
|
+
|
24
|
+
aspects = options['<aspect>']
|
25
|
+
|
26
|
+
# Work around https://github.com/docopt/docopt/issues/274
|
27
|
+
if aspects == []
|
28
|
+
aspects = ['os', 'hardware']
|
29
|
+
end
|
30
|
+
|
31
|
+
# Print specs' own version, and filter out redundant requests
|
32
|
+
aspects = ['specs'] + (aspects - ['specs'])
|
33
|
+
|
34
|
+
aspects.each do |aspect|
|
35
|
+
# What does the aspect module say to run
|
36
|
+
# in order to retrieve the aspect information?
|
37
|
+
cmds = command(aspect)
|
38
|
+
|
39
|
+
if !cmds || cmds.instance_of?(String)
|
40
|
+
run(cmds, aspect)
|
41
|
+
# Module returns an array of command strings.
|
42
|
+
elsif cmds.instance_of?(Array)
|
43
|
+
cmds.each { |cmd| run(cmd, aspect) }
|
44
|
+
end
|
45
|
+
end
|
46
|
+
rescue Docopt::Exit => e
|
47
|
+
puts e.message
|
48
|
+
end
|
49
|
+
rescue Interrupt
|
50
|
+
nil
|
51
|
+
end
|
52
|
+
end
|
data/lib/specs.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
1
|
#
|
3
2
|
# Author:: Andrew Pennebaker
|
4
3
|
#
|
@@ -8,16 +7,6 @@
|
|
8
7
|
#
|
9
8
|
# specs - Get system specs easily
|
10
9
|
#
|
11
|
-
# == Usage
|
12
|
-
#
|
13
|
-
# specs [aspects]
|
14
|
-
#
|
15
|
-
# Example:
|
16
|
-
#
|
17
|
-
# specs ruby os hardware
|
18
|
-
#
|
19
|
-
# By default, aspects are os and hardware.
|
20
|
-
#
|
21
10
|
# If an aspect is not installed, its output may be omitted.
|
22
11
|
#
|
23
12
|
# --help, -h:
|
@@ -26,18 +15,14 @@
|
|
26
15
|
# --version, -v:
|
27
16
|
# print specs' own version
|
28
17
|
|
29
|
-
require 'getoptlong'
|
30
18
|
require 'pathname'
|
31
19
|
require 'system_with_aliases'
|
32
20
|
require 'contracts'
|
33
21
|
include Contracts
|
34
22
|
|
35
23
|
require_relative 'version'
|
36
|
-
SPECS_VERSION_STRING = "specs #{Specs::VERSION}"
|
37
|
-
|
38
|
-
SPECS_HOME_PAGE = 'https://github.com/mcandre/specs#readme'
|
39
24
|
|
40
|
-
|
25
|
+
require_relative 'cli'
|
41
26
|
|
42
27
|
# Get the basic operating system name reliably, even in JRuby
|
43
28
|
# Useful for OS-contextual command line instructions.
|
@@ -160,11 +145,6 @@ module Recipe
|
|
160
145
|
"ruby -rrbconfig -e \"puts RbConfig::CONFIG['arch']\""
|
161
146
|
end
|
162
147
|
|
163
|
-
Contract nil => String
|
164
|
-
def self.specs
|
165
|
-
SPECS_VERSION_STRING
|
166
|
-
end
|
167
|
-
|
168
148
|
Contract nil => String
|
169
149
|
def self.ruby_v
|
170
150
|
RUBY_VERSION
|
@@ -201,104 +181,78 @@ module Recipe
|
|
201
181
|
end
|
202
182
|
end
|
203
183
|
|
204
|
-
|
205
|
-
|
206
|
-
SEP = File::SEPARATOR
|
184
|
+
module Specs
|
185
|
+
include Contracts::Modules
|
207
186
|
|
208
|
-
|
209
|
-
RECIPE_DIR = [SPECS_DIR, 'aspects'].join(SEP)
|
187
|
+
SPECS_DIR = Pathname.new(File.dirname(__FILE__))
|
210
188
|
|
211
|
-
|
212
|
-
require File.expand_path(file)
|
213
|
-
end
|
189
|
+
BUILTINS = %w(specs os arch ruby)
|
214
190
|
|
215
|
-
|
216
|
-
# that will get the spec's version information.
|
217
|
-
Contract String => Any
|
218
|
-
def self.command(aspect)
|
219
|
-
# Ruby methods can't use hyphens (-),
|
220
|
-
# So translate to underscores (_)
|
221
|
-
# When looking up known aspects.
|
222
|
-
method = aspect.gsub('-', '_').to_sym
|
223
|
-
|
224
|
-
# Package?
|
225
|
-
if aspect.include?(':')
|
226
|
-
package_manager, package = aspect.split(':')
|
227
|
-
package_manager = package_manager.to_sym
|
228
|
-
|
229
|
-
if Recipe::Package.methods.include?(package_manager)
|
230
|
-
Recipe::Package.send(package_manager, package)
|
231
|
-
end
|
232
|
-
# Known aspect?
|
233
|
-
elsif Recipe.methods.include?(method)
|
234
|
-
Recipe.send(method)
|
235
|
-
# Unknown aspect.
|
236
|
-
# Default to --version flag.
|
237
|
-
else
|
238
|
-
"#{aspect} --version"
|
239
|
-
end
|
240
|
-
end
|
191
|
+
SEP = File::SEPARATOR
|
241
192
|
|
242
|
-
#
|
243
|
-
|
244
|
-
def self.run(cmd, aspect)
|
245
|
-
# Newline to visually separate multiple aspect commands.
|
246
|
-
puts ''
|
193
|
+
# .../specs/aspects
|
194
|
+
RECIPE_DIR = [SPECS_DIR, 'aspects'].join(SEP)
|
247
195
|
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
puts 'specs --version'
|
252
|
-
puts SPECS_VERSION_STRING
|
253
|
-
else
|
254
|
-
puts cmd
|
255
|
-
|
256
|
-
output = SystemWithAliases::execute(cmd)
|
196
|
+
Dir[File.join(RECIPE_DIR, '**', '*.rb')].each do |file|
|
197
|
+
require File.expand_path(file)
|
198
|
+
end
|
257
199
|
|
258
|
-
|
259
|
-
|
200
|
+
# For a given spec, return the command line instruction(s)
|
201
|
+
# that will get the spec's version information.
|
202
|
+
Contract String => Any
|
203
|
+
def self.command(aspect)
|
204
|
+
# Ruby methods can't use hyphens (-),
|
205
|
+
# So translate to underscores (_)
|
206
|
+
# When looking up known aspects.
|
207
|
+
method = aspect.gsub('-', '_').to_sym
|
208
|
+
|
209
|
+
# Package?
|
210
|
+
if aspect.include?(':')
|
211
|
+
package_manager, package = aspect.split(':')
|
212
|
+
package_manager = package_manager.to_sym
|
213
|
+
|
214
|
+
if Recipe::Package.methods.include?(package_manager)
|
215
|
+
Recipe::Package.send(package_manager, package)
|
216
|
+
end
|
217
|
+
# Known aspect?
|
218
|
+
elsif Recipe.methods.include?(method)
|
219
|
+
Recipe.send(method)
|
220
|
+
# Unknown aspect.
|
221
|
+
# Default to --version flag.
|
260
222
|
else
|
261
|
-
|
223
|
+
"#{aspect} --version"
|
262
224
|
end
|
263
225
|
end
|
264
|
-
end
|
265
|
-
|
266
|
-
def self.check_ruby_version
|
267
|
-
if Recipe.ruby1_8?
|
268
|
-
puts 'Requires Ruby 1.9 or higher.'
|
269
|
-
puts 'http://www.ruby-lang.org/'
|
270
|
-
exit
|
271
|
-
end
|
272
|
-
end
|
273
|
-
|
274
|
-
def self.usage
|
275
|
-
puts "Specs:\n\n#{SPECS_VERSION_STRING}\n#{SPECS_HOME_PAGE}"
|
276
226
|
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
227
|
+
# Print a command line instruction and its output,
|
228
|
+
# Emulating a user manually entering the instruction.
|
229
|
+
def self.run(cmd, aspect)
|
230
|
+
if !cmd
|
231
|
+
puts "#{aspect} aspect not implemented for this system"
|
232
|
+
elsif cmd == 'specs'
|
233
|
+
puts 'specs --version'
|
234
|
+
puts Specs::Version
|
235
|
+
else
|
236
|
+
puts cmd
|
287
237
|
|
288
|
-
|
238
|
+
output = SystemWithAliases::execute(cmd)
|
289
239
|
|
290
|
-
|
240
|
+
if output.include?(Recipe.command_not_found)
|
241
|
+
puts "#{cmd.split.first} not found"
|
242
|
+
else
|
243
|
+
puts output
|
244
|
+
end
|
291
245
|
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
246
|
+
# Vertically separate multiple aspects
|
247
|
+
puts ''
|
248
|
+
end
|
249
|
+
end
|
296
250
|
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
251
|
+
def self.check_ruby_version
|
252
|
+
if Recipe.ruby1_8?
|
253
|
+
puts 'Requires Ruby 1.9 or higher.'
|
254
|
+
puts 'http://www.ruby-lang.org/'
|
255
|
+
exit
|
302
256
|
end
|
303
257
|
end
|
304
258
|
end
|
data/lib/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: specs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '0.
|
4
|
+
version: '0.20'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Pennebaker
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-05-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rb-system-with-aliases
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - ~>
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0.2'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: docopt
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ~>
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0.5'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ~>
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0.5'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: contracts
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -317,6 +331,7 @@ files:
|
|
317
331
|
- lib/aspects/ld.rb
|
318
332
|
- lib/aspects/links.rb
|
319
333
|
- lib/aspects/lua.rb
|
334
|
+
- lib/aspects/memcached.rb
|
320
335
|
- lib/aspects/net.rb
|
321
336
|
- lib/aspects/node.rb
|
322
337
|
- lib/aspects/npm.rb
|
@@ -345,6 +360,7 @@ files:
|
|
345
360
|
- lib/aspects/thunderbolt.rb
|
346
361
|
- lib/aspects/virtualbox.rb
|
347
362
|
- lib/aspects/xcode.rb
|
363
|
+
- lib/cli.rb
|
348
364
|
- lib/specs.rb
|
349
365
|
- lib/version.rb
|
350
366
|
homepage: https://github.com/mcandre/specs
|
@@ -367,7 +383,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
367
383
|
version: '0'
|
368
384
|
requirements: []
|
369
385
|
rubyforge_project:
|
370
|
-
rubygems_version: 2.4.
|
386
|
+
rubygems_version: 2.4.6
|
371
387
|
signing_key:
|
372
388
|
specification_version: 4
|
373
389
|
summary: Software version information at your fingertips
|