sys-proc 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 39b451a1d8735506348a61a6a589dec046c5d6b8
4
+ data.tar.gz: 25fa3150119a1192fba407ea7d1e8c9a299b89a0
5
+ SHA512:
6
+ metadata.gz: 73830b7f8a7c870ca72e163e9a51e9d812e72eed5524719c1b10cef503759bb84b2afa853e6dbd34ad1373e28a231848789833d6e14f150b7ffb03698845777a
7
+ data.tar.gz: c3a71e5772275baae9b0f3b58bde5c910cfcdf49e1498f2a23336b15fc9cad6a26a745fd8c1a99edbe8283a5b1879e8d0bbdde8cec414a75c6da60a75cb9da3c
@@ -0,0 +1,36 @@
1
+ # rubocop:disable Style/FileName
2
+ # frozen_string_literal: true
3
+ # rubocop:enable Style/FileName
4
+
5
+ $LOAD_PATH.unshift __dir__
6
+
7
+ if 'development' == ENV['PROJECT_MODE']
8
+ require 'rubygems'
9
+ require 'bundler/setup'
10
+
11
+ require 'pp'
12
+ begin
13
+ require 'coderay'
14
+ require 'pry/color_printer'
15
+ rescue LoadError => e
16
+ warn('%s: %s' % [caller[0], e.message])
17
+ end
18
+
19
+ # Outputs obj to out in pretty printed format of width columns in width.
20
+ #
21
+ # If out is omitted, ``STDOUT`` is assumed.
22
+ # If width is omitted, ``79`` is assumed.
23
+ #
24
+ # @param [Object] obj
25
+ # @param [IO] out
26
+ # @param [Fixnum] width
27
+ # @see http://ruby-doc.org/stdlib-2.2.0/libdoc/pp/rdoc/PP.html
28
+ def pp(obj, out = STDOUT, width = nil)
29
+ args = [obj, out, width].compact
30
+ colorable = (out.isatty and Kernel.const_defined?('Pry::ColorPrinter'))
31
+
32
+ (colorable ? Pry::ColorPrinter : PP).pp(*args)
33
+ end
34
+ end
35
+
36
+ require File.basename(__FILE__, '.rb').tr('-', '/')
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'English'
4
+
5
+ # The Sys module is only used as a namespace
6
+ module Sys
7
+ end
8
+
9
+ # Operations on current process
10
+ #
11
+ # @see http://man7.org/linux/man-pages/man2/prctl.2.html
12
+ # @see http://www.tldp.org/LDP/Linux-Filesystem-Hierarchy/html/proc.html
13
+ class Sys::Proc
14
+ require 'singleton'
15
+ %i{versionable system static_instance}.each do |req|
16
+ require "sys/proc/concern/#{req}"
17
+ end
18
+
19
+ include Concern::Versionable
20
+ include Concern::StaticInstance
21
+ include Concern::System
22
+
23
+ # @param [String|Symbol] system
24
+ def initialize(system = nil)
25
+ @system = system
26
+ end
27
+
28
+ class << self
29
+ # Get available methods
30
+ #
31
+ # @return [Array<Symbol>]
32
+ def methods
33
+ super() + new.methods
34
+ end
35
+
36
+ # Get available public methods
37
+ #
38
+ # @return [Array<Symbol>]
39
+ def public_methods
40
+ super() + new.public_methods
41
+ end
42
+ end
43
+
44
+ def pid
45
+ $PROCESS_ID
46
+ end
47
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_support/concern'
4
+
5
+ module Sys::Proc::Concern
6
+
7
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'sys/proc/concern'
4
+ require 'sys/proc/helper'
5
+
6
+ # Provides access to helpers
7
+ module Sys::Proc::Concern::Helper
8
+ extend ActiveSupport::Concern
9
+
10
+ protected
11
+
12
+ # @return [Sys::Proc::Helper]
13
+ def helper
14
+ Sys::Proc::Helper.instance
15
+ end
16
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'sys/proc/concern'
4
+
5
+ # Provides static accesses
6
+ module Sys::Proc::Concern::StaticInstance
7
+ extend ActiveSupport::Concern
8
+
9
+ module ClassMethods
10
+ # Provides access to instance methods
11
+ def method_missing(method, *args, &block)
12
+ if respond_to_missing?(method)
13
+ new.public_send(method, *args, &block)
14
+ else
15
+ super
16
+ end
17
+ end
18
+
19
+ def respond_to_missing?(method, include_private = false)
20
+ return true if new.respond_to?(method, include_private)
21
+
22
+ super(method, include_private)
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'sys/proc/concern'
4
+ require 'sys/proc/concern/helper'
5
+
6
+ # Provides Operating System related methods
7
+ #
8
+ # This ``Concern`` loads system (OS) related sub-concern (specialisation)
9
+ module Sys::Proc::Concern::System
10
+ extend ActiveSupport::Concern
11
+ include Sys::Proc::Concern::Helper
12
+
13
+ # Related concern is included recursively
14
+ included { include system_concern }
15
+
16
+ # Identify operating system
17
+ #
18
+ # @return [Symbol]
19
+ def system
20
+ (@system || helper.get(:system).identify).to_sym
21
+ end
22
+
23
+ # Get operating system related concern
24
+ #
25
+ # @return [Module]
26
+ def system_concern
27
+ inflector = helper.get(:inflector)
28
+
29
+ begin
30
+ inflector.resolve("sys/proc/concern/system/#{system}")
31
+ rescue LoadError => e
32
+ # m = /^cannot load such file -- #{Regexp.quote(system)}/ =~ e.to_s
33
+
34
+ inflector.resolve('sys/proc/concern/system/generic')
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'sys/proc/concern/helper'
4
+ require 'sys/proc/concern/system'
5
+ require 'sys/proc/concern/system/generic'
6
+ require 'sys/proc/system/freebsd/lib_c'
7
+
8
+ # Provides specific Freebsd methods
9
+ module Sys::Proc::Concern::System::Freebsd
10
+ extend ActiveSupport::Concern
11
+
12
+ include Sys::Proc::Concern::Helper
13
+ include Sys::Proc::System::Freebsd
14
+
15
+ # Set program name
16
+ #
17
+ # @param [String] progname
18
+ # @return [String]
19
+ def progname=(progname)
20
+ self.helper.get('system/generic').setprogname(progname) do |s|
21
+ libc.setprogname(s.progname)
22
+
23
+ self.progname
24
+ end
25
+ end
26
+
27
+ # Get program name
28
+ #
29
+ # @return [String]
30
+ def progname
31
+ libc.getprogname
32
+ end
33
+
34
+ protected
35
+
36
+ # @return [Sys::Proc::System::Freebsd::LibC]
37
+ def libc
38
+ @libc ||= LibC.new
39
+ @libc
40
+ end
41
+ end
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'sys/proc/concern/system'
4
+
5
+ # Provides generic methods
6
+ #
7
+ # This generic module can be used through the ``system/generic`` helper
8
+ # in other system(s) specific modules.
9
+ # This is the default (included) module when specific module is missing.
10
+ module Sys::Proc::Concern::System::Generic
11
+ extend ActiveSupport::Concern
12
+
13
+ # Set program name
14
+ #
15
+ # When ``progname`` is ``nil`` will use a default ``progname``
16
+ #
17
+ # @param [String] progname
18
+ # @return [String]
19
+ def progname=(progname)
20
+ progname ||= default_progname
21
+ $PROGRAM_NAME = progname.to_s
22
+
23
+ progname
24
+ end
25
+
26
+ # Get program name
27
+ #
28
+ # @return [String]
29
+ def progname
30
+ $PROGRAM_NAME
31
+ end
32
+
33
+ # Get default program name
34
+ #
35
+ # @return [String]
36
+ def default_progname
37
+ file = caller[-1].split(/:[0-9]+:in\s/).fetch(0)
38
+
39
+ File.basename(file, '.rb')
40
+ end
41
+ end
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'sys/proc/concern/helper'
4
+ require 'sys/proc/concern/system'
5
+ require 'sys/proc/concern/system/generic'
6
+ require 'sys/proc/system/linux_gnu/prctl'
7
+
8
+ # Provides specific Linux-GNU methods
9
+ module Sys::Proc::Concern::System::LinuxGnu
10
+ extend ActiveSupport::Concern
11
+
12
+ include Sys::Proc::Concern::Helper
13
+ include Sys::Proc::System::LinuxGnu
14
+
15
+ # Set program name
16
+ #
17
+ # @param [String] progname
18
+ # @return [String]
19
+ def progname=(progname)
20
+ self.helper.get('system/generic').setprogname(progname) do |s|
21
+ prctl.setprogname(s.progname)
22
+
23
+ self.progname
24
+ end
25
+ end
26
+
27
+ # Get program name
28
+ #
29
+ # @return [String]
30
+ def progname
31
+ prctl.getprogname
32
+ end
33
+
34
+ protected
35
+
36
+ # @return [Sys::Proc::System::LinuxGnu::Prctl]
37
+ def prctl
38
+ @prctl ||= Prctl.new
39
+ @prctl
40
+ end
41
+ end
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'pathname'
4
+
5
+ require 'sys/proc/concern'
6
+
7
+ # Provides a standardized way to use ``VersionInfo``
8
+ module Sys::Proc::Concern::Versionable
9
+ extend ActiveSupport::Concern
10
+
11
+ included { version_info }
12
+
13
+ module ClassMethods
14
+ def version_info
15
+ unless const_defined?(:VERSION)
16
+ require 'version_info'
17
+ include VersionInfo
18
+ # @todo deternmine format from extension?
19
+ VersionInfo.file_format = :yaml
20
+
21
+ self.VERSION.file_name = version_basedir.join('version_info.yml')
22
+ self.VERSION.load
23
+ end
24
+
25
+ self.VERSION.to_hash.freeze
26
+ end
27
+
28
+ protected
29
+
30
+ # Extract basedir from ``caller``
31
+ #
32
+ # @raise [Errno::ENOENT]
33
+ # @return [Pathname]
34
+ def version_basedir
35
+ basedir = caller.grep(/in `include'/)
36
+ .fetch(0)
37
+ .split(/\.rb:[0-9]+:in\s+/).fetch(0)
38
+
39
+ Pathname.new(basedir).realpath
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'sys/proc'
4
+
5
+ # Provides access to helper classes
6
+ class Sys::Proc::Helper
7
+ include ::Singleton
8
+
9
+ protected def initialize
10
+ @items = {
11
+ inflector: proc do
12
+ require 'sys/proc/helper/inflector'
13
+
14
+ Inflector.new
15
+ end.call
16
+ }
17
+
18
+ super
19
+ end
20
+
21
+ # @param [String|Symbol] name
22
+ # @return [Object]
23
+ #
24
+ # @raise [NotImplementedError]
25
+ def get(name)
26
+ name = name.to_sym
27
+
28
+ return items[name] if items[name]
29
+
30
+ begin
31
+ @items[name] = inflector.resolve("sys/proc/helper/#{name}").new
32
+ rescue LoadError
33
+ raise NotImplementedError, "helper not loadable: #{name}"
34
+ end
35
+ end
36
+
37
+ protected
38
+
39
+ attr_reader :items
40
+
41
+ # @return [Hash]
42
+ def to_h
43
+ items
44
+ end
45
+
46
+ # @return [Sys::Proc::Helper::Inflector]
47
+ def inflector
48
+ to_h.fetch(:inflector)
49
+ end
50
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'sys/proc/helper'
4
+
5
+ class Sys::Proc::Helper::Inflector
6
+ def initialize
7
+ require 'active_support/inflector'
8
+
9
+ @inflector = ActiveSupport::Inflector
10
+ end
11
+
12
+ # Load constant from a loadable/requirable path
13
+ #
14
+ # @param [String] loadable
15
+ # @return [Object]
16
+ def resolve(loadable)
17
+ require loadable
18
+
19
+ @inflector.constantize(@inflector.classify(loadable))
20
+ end
21
+
22
+ def method_missing(method, *args, &block)
23
+ if respond_to_missing?(method)
24
+ @inflector.public_send(method, *args, &block)
25
+ else
26
+ super
27
+ end
28
+ end
29
+
30
+ def respond_to_missing?(method, include_private = false)
31
+ return true if @inflector.respond_to?(method, include_private)
32
+
33
+ super(method, include_private)
34
+ end
35
+ end
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'fiddle'
4
+ require 'sys/proc/helper'
5
+
6
+ # System helper
7
+ class Sys::Proc::Helper::LibC
8
+ def initialize
9
+ @loadeds = {}
10
+ end
11
+
12
+ # ``libc`` shared objects identified by system
13
+ #
14
+ # @return [Hash]
15
+ def loadables
16
+ {
17
+ linux_gnu: 'libc.so.6',
18
+ freebsd: 'libc.so.7',
19
+ }
20
+ end
21
+
22
+ # Open shared object (by system)
23
+ #
24
+ # @param [Symbol] system
25
+ # @return [self]
26
+ def dlopen(system = nil)
27
+ system = (system.nil? ? Sys::Proc.system : system).to_sym
28
+
29
+ loadeds[system] ||= Fiddle.dlopen(loadables.fetch(system))
30
+
31
+ loadeds[system]
32
+ end
33
+
34
+ # Denote if ``libc`` is seen as availbale on targeted system
35
+ #
36
+ # @return [Boolean]
37
+ def available?(system = nil)
38
+ begin
39
+ dlopen(system)
40
+ rescue Fiddle::DLError
41
+ return false
42
+ rescue KeyError
43
+ return false
44
+ end
45
+
46
+ loadables[system] != nil
47
+ end
48
+
49
+ protected
50
+
51
+ # Cache for loaded shared objects
52
+ attr_reader :loadeds
53
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ # System helper
4
+ class Sys::Proc::Helper::System
5
+ # Identify operating system
6
+ #
7
+ # @return [Symbol]
8
+ def identify
9
+ (RbConfig::CONFIG['host_os'] || 'generic')
10
+ .tr('-', '_')
11
+ .gsub(/[0-9]+(\.[0-9]+)*$/, '')
12
+ .to_sym
13
+ end
14
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'sys/proc/helper/system'
4
+
5
+ # Provides access to ``Sys::Proc::Concerns::System::Generic`` methods
6
+ class Sys::Proc::Helper::System::Generic
7
+ def method_missing(method, *args, &block)
8
+ if respond_to_missing?(method)
9
+ system.public_send(method, *args, &block)
10
+ else
11
+ super
12
+ end
13
+ end
14
+
15
+ def respond_to_missing?(method, include_private = false)
16
+ return true if system.respond_to?(method, include_private)
17
+
18
+ super(method, include_private)
19
+ end
20
+
21
+ # @return [String]
22
+ def setprogname(progname = nil, &block)
23
+ system.progname = progname || system.default_progname
24
+
25
+ system.progname = yield(system) if block
26
+ end
27
+
28
+ protected
29
+
30
+ def system
31
+ require 'sys/proc/concern/system/generic'
32
+
33
+ (Class.new { include Sys::Proc::Concern::System::Generic }).new
34
+ end
35
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'sys/proc'
4
+
5
+ # OS specific namespace
6
+ module Sys::Proc::System
7
+
8
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'sys/proc/system'
4
+
5
+ # Freebsd specific namespace
6
+ module Sys::Proc::System::Freebsd
7
+
8
+ end
@@ -0,0 +1,66 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'fiddle'
4
+ require 'sys/proc/system/freebsd'
5
+ require 'sys/proc/concern/helper'
6
+
7
+ # The ``getprogname()`` and ``setprogname()`` functions manipulate
8
+ # the name of the current program.
9
+ # They are used by error-reporting routines to produce consistent output.
10
+ #
11
+ # These functions first appeared in NetBSD 1.6, and made their way into
12
+ # FreeBSD 4.4.
13
+ #
14
+ # @see https://www.freebsd.org/cgi/man.cgi?query=setprogname&sektion=3
15
+ class Sys::Proc::System::Freebsd::LibC
16
+ include Sys::Proc::Concern::Helper
17
+
18
+ # Sets the name of the program
19
+ # to be the last component of the progname argument.
20
+ #
21
+ # Since a pointer to the given string is kept as the program name,
22
+ # it should not be modified for the rest of the program's lifetime.
23
+ #
24
+ # ```
25
+ # #include <stdlib.h>
26
+ #
27
+ # void setprogname(const char *progname);
28
+ # ```
29
+ #
30
+ # @return [Boolean]
31
+ def setprogname(progname)
32
+ function('setprogname', [Fiddle::TYPE_VOIDP]).call(progname.to_s)
33
+
34
+ true
35
+ end
36
+
37
+ # Return the name of the program.
38
+ #
39
+ # If the name has not been set yet, it will return NULL.
40
+ #
41
+ # ```
42
+ # #include <stdlib.h>
43
+ #
44
+ # const char * getprogname(void);
45
+ # ```
46
+ #
47
+ # @return [String]
48
+ def getprogname
49
+ function('getprogname', nil, Fiddle::TYPE_VOIDP).call.to_s
50
+ end
51
+
52
+ protected
53
+
54
+ # Common method binding over system libc
55
+ #
56
+ # @return [Fiddle::Function]
57
+ def function(fname, args = [], ret_type = Fiddle::TYPE_INT)
58
+ config = {
59
+ handle: helper.get(:lib_c).dlopen[fname],
60
+ args: args || [],
61
+ ret_type: ret_type
62
+ }
63
+
64
+ Fiddle::Function.new(*config.values)
65
+ end
66
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'sys/proc/system'
4
+
5
+ # GNU/Linux specific namespace
6
+ module Sys::Proc::System::LinuxGnu
7
+
8
+ end
@@ -0,0 +1,75 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'fiddle'
4
+ require 'sys/proc/system/linux_gnu'
5
+ require 'sys/proc/concern/helper'
6
+
7
+ # Operations on a process
8
+ #
9
+ # @see http://man7.org/linux/man-pages/man2/prctl.2.html
10
+ #
11
+ # ~~~~
12
+ # #include <sys/prctl.h>
13
+ #
14
+ # int prctl(int option, unsigned long arg2, unsigned long arg3,
15
+ # unsigned long arg4, unsigned long arg5);
16
+ # ~~~~
17
+ class Sys::Proc::System::LinuxGnu::Prctl
18
+ include Sys::Proc::Concern::Helper
19
+ attr_reader :function
20
+
21
+ # Set the name of the calling threadThe attribute is
22
+ # likewise accessible via /proc/self/task/[tid]/comm, where tid
23
+ # is the name of the calling thread.
24
+ PR_SET_NAME = 15 # (since Linux 2.6.9)
25
+
26
+ # Return the name of the calling thread, in the buffer pointed
27
+ # to by (char *) arg2. The buffer should allow space for up to
28
+ # 16 bytes; the returned string will be null-terminated.
29
+ PR_GET_NAME = 16 # (since Linux 2.6.11)
30
+
31
+ # Set the name of the calling thread
32
+ #
33
+ # @param [String] name
34
+ # @return [Boolean]
35
+ def setprogname(name)
36
+ name = name.to_s
37
+
38
+ call(PR_SET_NAME, name).zero?
39
+ end
40
+
41
+ # Return the name of the calling thread
42
+ #
43
+ # @return [String]
44
+ def getprogname
45
+ ptr = Fiddle::Pointer.malloc(32, Fiddle::RUBY_FREE.to_i)
46
+
47
+ call(PR_GET_NAME, ptr.to_i)
48
+ ptr.to_s
49
+ end
50
+
51
+ # prctl() is called with a first argument describing what to do (with
52
+ # values defined in <linux/prctl.h>), and further arguments with a
53
+ # significance depending on the first one.
54
+ #
55
+ # @return [Fixnum]
56
+ def call(*args)
57
+ args += ([0] * 5).slice(args.size..-1)
58
+
59
+ function.call(*args)
60
+ end
61
+
62
+ protected
63
+
64
+ # @return [Fiddle::Function]
65
+ def function
66
+ config = {
67
+ handle: helper.get(:lib_c).dlopen['prctl'],
68
+ args: [Fiddle::TYPE_INT, Fiddle::TYPE_VOIDP,
69
+ Fiddle::TYPE_LONG, Fiddle::TYPE_LONG, Fiddle::TYPE_LONG],
70
+ ret_type: Fiddle::TYPE_INT
71
+ }
72
+
73
+ Fiddle::Function.new(*config.values)
74
+ end
75
+ end
@@ -0,0 +1,16 @@
1
+ ---
2
+ major: 1
3
+ minor: 0
4
+ patch: 0
5
+ authors: ['Dimitri Arrigoni']
6
+ email: 'dimitri@arrigoni.me'
7
+ date: '2017-05-20'
8
+ summary: 'An interface providing cross-platform process operations'
9
+ description: 'An interface providing cross-platform process operations'
10
+ licenses: ['GPL-3.0']
11
+ license_header: 'Copyright (C) 2017 Dimitri Arrigoni <dimitri@arrigoni.me>
12
+ License GPLv3+: GNU GPL version 3 or later
13
+ <http://www.gnu.org/licenses/gpl.html>.
14
+ This is free software: you are free to change and redistribute it.
15
+ There is NO WARRANTY, to the extent permitted by law.'
16
+ homepage: 'https://github.com/SwagDevOps/sys-proc'
metadata ADDED
@@ -0,0 +1,288 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sys-proc
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Dimitri Arrigoni
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-05-20 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activesupport
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '5.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '5.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: version_info
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.9'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.9'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '11.3'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '11.3'
55
+ - !ruby/object:Gem::Dependency
56
+ name: pry
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0.10'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0.10'
69
+ - !ruby/object:Gem::Dependency
70
+ name: dotenv
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '2.2'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '2.2'
83
+ - !ruby/object:Gem::Dependency
84
+ name: cliver
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '='
88
+ - !ruby/object:Gem::Version
89
+ version: 0.3.2
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '='
95
+ - !ruby/object:Gem::Version
96
+ version: 0.3.2
97
+ - !ruby/object:Gem::Dependency
98
+ name: rubocop
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '0.47'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '0.47'
111
+ - !ruby/object:Gem::Dependency
112
+ name: gemspec_deps_gen
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - '='
116
+ - !ruby/object:Gem::Version
117
+ version: 1.1.2
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - '='
123
+ - !ruby/object:Gem::Version
124
+ version: 1.1.2
125
+ - !ruby/object:Gem::Dependency
126
+ name: tenjin
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '0.7'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '0.7'
139
+ - !ruby/object:Gem::Dependency
140
+ name: rainbow
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: '2.2'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: '2.2'
153
+ - !ruby/object:Gem::Dependency
154
+ name: tty-editor
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: '0.2'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: '0.2'
167
+ - !ruby/object:Gem::Dependency
168
+ name: yard
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - "~>"
172
+ - !ruby/object:Gem::Version
173
+ version: '0.9'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - "~>"
179
+ - !ruby/object:Gem::Version
180
+ version: '0.9'
181
+ - !ruby/object:Gem::Dependency
182
+ name: redcarpet
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - "~>"
186
+ - !ruby/object:Gem::Version
187
+ version: '3.4'
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - "~>"
193
+ - !ruby/object:Gem::Version
194
+ version: '3.4'
195
+ - !ruby/object:Gem::Dependency
196
+ name: github-markup
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - "~>"
200
+ - !ruby/object:Gem::Version
201
+ version: '1.4'
202
+ type: :development
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - "~>"
207
+ - !ruby/object:Gem::Version
208
+ version: '1.4'
209
+ - !ruby/object:Gem::Dependency
210
+ name: rspec
211
+ requirement: !ruby/object:Gem::Requirement
212
+ requirements:
213
+ - - "~>"
214
+ - !ruby/object:Gem::Version
215
+ version: '3.4'
216
+ type: :development
217
+ prerelease: false
218
+ version_requirements: !ruby/object:Gem::Requirement
219
+ requirements:
220
+ - - "~>"
221
+ - !ruby/object:Gem::Version
222
+ version: '3.4'
223
+ - !ruby/object:Gem::Dependency
224
+ name: rspec-sleeping_king_studios
225
+ requirement: !ruby/object:Gem::Requirement
226
+ requirements:
227
+ - - "~>"
228
+ - !ruby/object:Gem::Version
229
+ version: '2.1'
230
+ type: :development
231
+ prerelease: false
232
+ version_requirements: !ruby/object:Gem::Requirement
233
+ requirements:
234
+ - - "~>"
235
+ - !ruby/object:Gem::Version
236
+ version: '2.1'
237
+ description: An interface providing cross-platform process operations
238
+ email: dimitri@arrigoni.me
239
+ executables: []
240
+ extensions: []
241
+ extra_rdoc_files: []
242
+ files:
243
+ - src/lib/sys-proc.rb
244
+ - src/lib/sys/proc.rb
245
+ - src/lib/sys/proc/concern.rb
246
+ - src/lib/sys/proc/concern/helper.rb
247
+ - src/lib/sys/proc/concern/static_instance.rb
248
+ - src/lib/sys/proc/concern/system.rb
249
+ - src/lib/sys/proc/concern/system/freebsd.rb
250
+ - src/lib/sys/proc/concern/system/generic.rb
251
+ - src/lib/sys/proc/concern/system/linux_gnu.rb
252
+ - src/lib/sys/proc/concern/versionable.rb
253
+ - src/lib/sys/proc/helper.rb
254
+ - src/lib/sys/proc/helper/inflector.rb
255
+ - src/lib/sys/proc/helper/lib_c.rb
256
+ - src/lib/sys/proc/helper/system.rb
257
+ - src/lib/sys/proc/helper/system/generic.rb
258
+ - src/lib/sys/proc/system.rb
259
+ - src/lib/sys/proc/system/freebsd.rb
260
+ - src/lib/sys/proc/system/freebsd/lib_c.rb
261
+ - src/lib/sys/proc/system/linux_gnu.rb
262
+ - src/lib/sys/proc/system/linux_gnu/prctl.rb
263
+ - src/lib/sys/proc/version_info.yml
264
+ homepage: https://github.com/SwagDevOps/sys-proc
265
+ licenses:
266
+ - GPL-3.0
267
+ metadata: {}
268
+ post_install_message:
269
+ rdoc_options: []
270
+ require_paths:
271
+ - src/lib
272
+ required_ruby_version: !ruby/object:Gem::Requirement
273
+ requirements:
274
+ - - ">="
275
+ - !ruby/object:Gem::Version
276
+ version: 2.2.2
277
+ required_rubygems_version: !ruby/object:Gem::Requirement
278
+ requirements:
279
+ - - ">="
280
+ - !ruby/object:Gem::Version
281
+ version: '0'
282
+ requirements: []
283
+ rubyforge_project:
284
+ rubygems_version: 2.5.1
285
+ signing_key:
286
+ specification_version: 4
287
+ summary: An interface providing cross-platform process operations
288
+ test_files: []