rlimit 0.1.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.
- data/.gitignore +3 -0
- data/Gemfile +3 -0
- data/Guardfile +14 -0
- data/LICENCE +674 -0
- data/README.md +110 -0
- data/Rakefile +43 -0
- data/lib/rlimit.rb +290 -0
- data/rlimit.gemspec +31 -0
- data/spec/rlimit_get_spec.rb +68 -0
- data/spec/rlimit_resources_spec.rb +26 -0
- data/spec/rlimit_set_spec.rb +139 -0
- data/spec/rlimit_supports_spec.rb +24 -0
- data/spec/spec_helper.rb +23 -0
- metadata +240 -0
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
require_relative './spec_helper'
|
|
2
|
+
require 'rlimit'
|
|
3
|
+
|
|
4
|
+
describe RLimit do
|
|
5
|
+
context "#get" do
|
|
6
|
+
it "sends back two values for one-arg call" do
|
|
7
|
+
rv = RLimit.get(RLimit::NOFILE)
|
|
8
|
+
expect(rv).to be_an(Array)
|
|
9
|
+
expect(rv[0]).to be_an(Integer)
|
|
10
|
+
expect(rv[1]).to be_an(Integer)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
it "sends back one arg for a soft-limit request" do
|
|
14
|
+
expect(RLimit.get(RLimit::NOFILE, :soft)).to be_an(Integer)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it "sends back one arg for a hard-limit request" do
|
|
18
|
+
expect(RLimit.get(RLimit::NOFILE, :hard)).to be_an(Integer)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it "raises ArgumentError on an unknown resource type" do
|
|
22
|
+
expect { RLimit.get("ohai!") }.to raise_error(ArgumentError)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it "raises ArgumentError on an unknown limit type" do
|
|
26
|
+
expect { RLimit.get(RLimit::NOFILE, :lolidunno) }.to raise_error(ArgumentError)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it "handles an unprefixed string" do
|
|
30
|
+
expect(RLimit.get("NOFILE", :soft)).to eq(RLimit.get(RLimit::NOFILE, :soft))
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it "handles a prefixed string" do
|
|
34
|
+
expect(RLimit.get("RLIMIT_NOFILE", :soft)).to eq(RLimit.get(RLimit::NOFILE, :soft))
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it "handles an unprefixed symbol" do
|
|
38
|
+
expect(RLimit.get(:NOFILE, :soft)).to eq(RLimit.get(RLimit::NOFILE, :soft))
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it "handles a prefixed symbol" do
|
|
42
|
+
expect(RLimit.get(:RLIMIT_NOFILE, :soft)).to eq(RLimit.get(RLimit::NOFILE, :soft))
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
it "sends back :unlimited when getrlimit returns RLIM_INFINITY" do
|
|
46
|
+
expect(RLimit::FFI).
|
|
47
|
+
to receive(:getrlimit).
|
|
48
|
+
# I'm using any_args() here, and then checking the types in the
|
|
49
|
+
# block, because there's a buggy interaction with RSpec (3.1.3,
|
|
50
|
+
# at least) and FFI::MemoryPointer (1.9.3, at least) which causes
|
|
51
|
+
# any ArgumentMatcher to fail to match, because
|
|
52
|
+
# FFI::MemoryPointer#== doesn't like getting compared with
|
|
53
|
+
# something else. I think the bug's in RSpec, but I'm not sure
|
|
54
|
+
# enough to file a bug. So we just work around it, because even
|
|
55
|
+
# if I *did* submit a bug, we'd have to work around it anyway to
|
|
56
|
+
# get the tests to pass.
|
|
57
|
+
with(any_args()) do |resource, rlim_ptr|
|
|
58
|
+
expect(resource).to eq(RLimit::NOFILE)
|
|
59
|
+
expect(rlim_ptr).to be_an(FFI::MemoryPointer)
|
|
60
|
+
rlim = RLimit::FFI::RLimitStruct.new(rlim_ptr)
|
|
61
|
+
rlim[:rlim_cur] = 1024
|
|
62
|
+
rlim[:rlim_max] = RLimit::RLIM_INFINITY
|
|
63
|
+
end.and_return(0)
|
|
64
|
+
|
|
65
|
+
expect(RLimit.get(RLimit::NOFILE, :hard)).to eq(:unlimited)
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
require_relative './spec_helper'
|
|
2
|
+
require 'rlimit'
|
|
3
|
+
|
|
4
|
+
describe RLimit do
|
|
5
|
+
context "#resources" do
|
|
6
|
+
it "has a common RLIMIT constant" do
|
|
7
|
+
expect(RLimit.resources).to include("RLIMIT_NOFILE")
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
it "doesn't have a non-existent RLIMIT constant" do
|
|
11
|
+
expect(RLimit.resources).to_not include("RLIMIT_WTFISTHIS")
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it "doesn't have RLIM_INFINITY" do
|
|
15
|
+
expect(RLimit.resources).to_not include("RLIMIT_RLIM_INFINITY")
|
|
16
|
+
expect(RLimit.resources).to_not include("RLIM_INFINITY")
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it "doesn't have our exceptions" do
|
|
20
|
+
expect(RLimit.resources).to_not include("RLIMIT_PermissionDenied")
|
|
21
|
+
expect(RLimit.resources).to_not include("PermissionDenied")
|
|
22
|
+
expect(RLimit.resources).to_not include("RLIMIT_HardLimitExceeded")
|
|
23
|
+
expect(RLimit.resources).to_not include("HardLimitExceeded")
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
require_relative './spec_helper'
|
|
2
|
+
require 'rlimit'
|
|
3
|
+
|
|
4
|
+
describe RLimit do
|
|
5
|
+
context "#set" do
|
|
6
|
+
context "via getrlimit" do
|
|
7
|
+
before :each do
|
|
8
|
+
expect(RLimit::FFI).
|
|
9
|
+
to receive(:getrlimit).
|
|
10
|
+
with(any_args()) do |res, rlim_ptr|
|
|
11
|
+
expect(res).to eq(RLimit::NOFILE)
|
|
12
|
+
expect(rlim_ptr).to be_an(::FFI::MemoryPointer)
|
|
13
|
+
rlim = RLimit::FFI::RLimitStruct.new(rlim_ptr)
|
|
14
|
+
rlim[:rlim_cur] = 1024
|
|
15
|
+
rlim[:rlim_max] = 1048576
|
|
16
|
+
end.and_return(0)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it "handles both limits being set" do
|
|
20
|
+
expect(RLimit::FFI).
|
|
21
|
+
to receive(:setrlimit).
|
|
22
|
+
with(any_args()) do |res, rlim_ptr|
|
|
23
|
+
expect(res).to eq(RLimit::NOFILE)
|
|
24
|
+
expect(rlim_ptr).to be_an(::FFI::MemoryPointer)
|
|
25
|
+
rlim = RLimit::FFI::RLimitStruct.new(rlim_ptr)
|
|
26
|
+
expect(rlim[:rlim_cur]).to eq(4096)
|
|
27
|
+
expect(rlim[:rlim_max]).to eq(65536)
|
|
28
|
+
end.and_return(0)
|
|
29
|
+
|
|
30
|
+
expect(RLimit.set(RLimit::NOFILE, 4096, 65536)).to be(true)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it "handles just the soft limit changing" do
|
|
34
|
+
expect(RLimit::FFI).
|
|
35
|
+
to receive(:setrlimit).
|
|
36
|
+
with(any_args()) do |res, rlim_ptr|
|
|
37
|
+
expect(res).to eq(RLimit::NOFILE)
|
|
38
|
+
expect(rlim_ptr).to be_an(::FFI::MemoryPointer)
|
|
39
|
+
rlim = RLimit::FFI::RLimitStruct.new(rlim_ptr)
|
|
40
|
+
expect(rlim[:rlim_cur]).to eq(4096)
|
|
41
|
+
expect(rlim[:rlim_max]).to eq(1048576)
|
|
42
|
+
end.and_return(0)
|
|
43
|
+
|
|
44
|
+
expect(RLimit.set(RLimit::NOFILE, 4096)).to be(true)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
["NOFILE", "RLIMIT_NOFILE", :NOFILE, :RLIMIT_NOFILE].each do |res|
|
|
48
|
+
it "handles the resource form #{res.inspect}" do
|
|
49
|
+
expect(RLimit::FFI).
|
|
50
|
+
to receive(:setrlimit).
|
|
51
|
+
with(any_args()) do |res, rlim_ptr|
|
|
52
|
+
expect(res).to eq(RLimit::NOFILE)
|
|
53
|
+
expect(rlim_ptr).to be_an(::FFI::MemoryPointer)
|
|
54
|
+
rlim = RLimit::FFI::RLimitStruct.new(rlim_ptr)
|
|
55
|
+
expect(rlim[:rlim_cur]).to eq(4096)
|
|
56
|
+
expect(rlim[:rlim_max]).to eq(1048576)
|
|
57
|
+
end.and_return(0)
|
|
58
|
+
|
|
59
|
+
expect(RLimit.set(res, 4096)).to be(true)
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
it "handles just the hard limit changing" do
|
|
64
|
+
expect(RLimit::FFI).
|
|
65
|
+
to receive(:setrlimit).
|
|
66
|
+
with(any_args()) do |res, rlim_ptr|
|
|
67
|
+
expect(res).to eq(RLimit::NOFILE)
|
|
68
|
+
expect(rlim_ptr).to be_an(::FFI::MemoryPointer)
|
|
69
|
+
rlim = RLimit::FFI::RLimitStruct.new(rlim_ptr)
|
|
70
|
+
expect(rlim[:rlim_cur]).to eq(1024)
|
|
71
|
+
expect(rlim[:rlim_max]).to eq(65536)
|
|
72
|
+
end.and_return(0)
|
|
73
|
+
|
|
74
|
+
expect(RLimit.set(RLimit::NOFILE, nil, 65536)).to be(true)
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
it "handles the limit being :unlimited" do
|
|
78
|
+
expect(RLimit::FFI).
|
|
79
|
+
to receive(:setrlimit).
|
|
80
|
+
with(any_args()) do |res, rlim_ptr|
|
|
81
|
+
expect(res).to eq(RLimit::NOFILE)
|
|
82
|
+
expect(rlim_ptr).to be_an(::FFI::MemoryPointer)
|
|
83
|
+
rlim = RLimit::FFI::RLimitStruct.new(rlim_ptr)
|
|
84
|
+
expect(rlim[:rlim_cur]).to eq(RLimit::RLIM_INFINITY)
|
|
85
|
+
expect(rlim[:rlim_max]).to eq(RLimit::RLIM_INFINITY)
|
|
86
|
+
end.and_return(0)
|
|
87
|
+
|
|
88
|
+
expect(RLimit.set(RLimit::NOFILE, :unlimited, :unlimited)).to be(true)
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
it "freaks out if the soft limit is greater than the existing hard limit" do
|
|
92
|
+
expect { RLimit.set(RLimit::NOFILE, 1048577) }.
|
|
93
|
+
to raise_error(
|
|
94
|
+
RLimit::HardLimitExceeded,
|
|
95
|
+
"You cannot set the soft limit above 1048576"
|
|
96
|
+
)
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
it "freaks out if the soft limit is greater than the hard limit specified" do
|
|
100
|
+
expect { RLimit.set(RLimit::NOFILE, 65536, 4096) }.
|
|
101
|
+
to raise_error(
|
|
102
|
+
RLimit::HardLimitExceeded,
|
|
103
|
+
"You cannot set the soft limit above 4096"
|
|
104
|
+
)
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
it "freaks out when setrlimit sends back EPERM" do
|
|
108
|
+
expect(RLimit::FFI).
|
|
109
|
+
to receive(:setrlimit).
|
|
110
|
+
with(any_args()) do |res, rlim_ptr|
|
|
111
|
+
expect(res).to eq(RLimit::NOFILE)
|
|
112
|
+
expect(rlim_ptr).to be_an(::FFI::MemoryPointer)
|
|
113
|
+
end.and_return(-1)
|
|
114
|
+
|
|
115
|
+
expect(::FFI).to receive(:errno).and_return(Errno::EPERM::Errno)
|
|
116
|
+
|
|
117
|
+
expect { RLimit.set(RLimit::NOFILE, nil, 2000000) }.
|
|
118
|
+
to raise_error(
|
|
119
|
+
RLimit::PermissionDenied,
|
|
120
|
+
"You do not have permission to raise hard limits"
|
|
121
|
+
)
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
context "ArgumentError cases" do
|
|
126
|
+
it "raises ArgumentError on an unknown resource type" do
|
|
127
|
+
expect { RLimit.set("ohai!", 42) }.to raise_error(ArgumentError)
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
it "raises ArgumentError on a non-integer soft limit" do
|
|
131
|
+
expect { RLimit.set(RLimit::NOFILE, :lolidunno) }.to raise_error(ArgumentError)
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
it "raises ArgumentError on a non-integer hard limit" do
|
|
135
|
+
expect { RLimit.set(RLimit::NOFILE, 42, :lolidunno) }.to raise_error(ArgumentError)
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
require_relative './spec_helper'
|
|
2
|
+
require 'rlimit'
|
|
3
|
+
|
|
4
|
+
describe RLimit do
|
|
5
|
+
context "#supports?" do
|
|
6
|
+
[RLimit::NOFILE, "NOFILE", :NOFILE, "RLIMIT_NOFILE", :RLIMIT_NOFILE].each do |res|
|
|
7
|
+
it "OKs #{res.inspect}" do
|
|
8
|
+
expect(RLimit.supports?(res)).to be(true)
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it "rejects a random symbol" do
|
|
13
|
+
expect(RLimit.supports?(:OHAI)).to be(false)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it "rejects a random string" do
|
|
17
|
+
expect(RLimit.supports?("OHAI")).to be(false)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it "rejects something really weird" do
|
|
21
|
+
expect(RLimit.supports?(RLimit)).to be(false)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
data/spec/spec_helper.rb
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
require 'spork'
|
|
2
|
+
|
|
3
|
+
Spork.prefork do
|
|
4
|
+
require 'bundler'
|
|
5
|
+
Bundler.setup(:default, :test)
|
|
6
|
+
require 'rspec/core'
|
|
7
|
+
require 'rspec/mocks'
|
|
8
|
+
|
|
9
|
+
require 'pry'
|
|
10
|
+
|
|
11
|
+
RSpec.configure do |config|
|
|
12
|
+
config.fail_fast = true
|
|
13
|
+
# config.full_backtrace = true
|
|
14
|
+
|
|
15
|
+
config.expect_with :rspec do |c|
|
|
16
|
+
c.syntax = :expect
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
Spork.each_run do
|
|
22
|
+
# Nothing to do here, specs will load the files they need
|
|
23
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: rlimit
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.1.0
|
|
5
|
+
prerelease:
|
|
6
|
+
platform: ruby
|
|
7
|
+
authors:
|
|
8
|
+
- Matt Palmer
|
|
9
|
+
autorequire:
|
|
10
|
+
bindir: bin
|
|
11
|
+
cert_chain: []
|
|
12
|
+
date: 2014-10-15 00:00:00.000000000 Z
|
|
13
|
+
dependencies:
|
|
14
|
+
- !ruby/object:Gem::Dependency
|
|
15
|
+
name: git-version-bump
|
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
|
17
|
+
none: false
|
|
18
|
+
requirements:
|
|
19
|
+
- - ~>
|
|
20
|
+
- !ruby/object:Gem::Version
|
|
21
|
+
version: '0.10'
|
|
22
|
+
type: :runtime
|
|
23
|
+
prerelease: false
|
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
25
|
+
none: false
|
|
26
|
+
requirements:
|
|
27
|
+
- - ~>
|
|
28
|
+
- !ruby/object:Gem::Version
|
|
29
|
+
version: '0.10'
|
|
30
|
+
- !ruby/object:Gem::Dependency
|
|
31
|
+
name: ffi
|
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
|
33
|
+
none: false
|
|
34
|
+
requirements:
|
|
35
|
+
- - ~>
|
|
36
|
+
- !ruby/object:Gem::Version
|
|
37
|
+
version: '1.9'
|
|
38
|
+
type: :runtime
|
|
39
|
+
prerelease: false
|
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
41
|
+
none: false
|
|
42
|
+
requirements:
|
|
43
|
+
- - ~>
|
|
44
|
+
- !ruby/object:Gem::Version
|
|
45
|
+
version: '1.9'
|
|
46
|
+
- !ruby/object:Gem::Dependency
|
|
47
|
+
name: bundler
|
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
|
49
|
+
none: false
|
|
50
|
+
requirements:
|
|
51
|
+
- - ! '>='
|
|
52
|
+
- !ruby/object:Gem::Version
|
|
53
|
+
version: '0'
|
|
54
|
+
type: :development
|
|
55
|
+
prerelease: false
|
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
57
|
+
none: false
|
|
58
|
+
requirements:
|
|
59
|
+
- - ! '>='
|
|
60
|
+
- !ruby/object:Gem::Version
|
|
61
|
+
version: '0'
|
|
62
|
+
- !ruby/object:Gem::Dependency
|
|
63
|
+
name: github-release
|
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
|
65
|
+
none: false
|
|
66
|
+
requirements:
|
|
67
|
+
- - ! '>='
|
|
68
|
+
- !ruby/object:Gem::Version
|
|
69
|
+
version: '0'
|
|
70
|
+
type: :development
|
|
71
|
+
prerelease: false
|
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
73
|
+
none: false
|
|
74
|
+
requirements:
|
|
75
|
+
- - ! '>='
|
|
76
|
+
- !ruby/object:Gem::Version
|
|
77
|
+
version: '0'
|
|
78
|
+
- !ruby/object:Gem::Dependency
|
|
79
|
+
name: guard-spork
|
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
|
81
|
+
none: false
|
|
82
|
+
requirements:
|
|
83
|
+
- - ! '>='
|
|
84
|
+
- !ruby/object:Gem::Version
|
|
85
|
+
version: '0'
|
|
86
|
+
type: :development
|
|
87
|
+
prerelease: false
|
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
89
|
+
none: false
|
|
90
|
+
requirements:
|
|
91
|
+
- - ! '>='
|
|
92
|
+
- !ruby/object:Gem::Version
|
|
93
|
+
version: '0'
|
|
94
|
+
- !ruby/object:Gem::Dependency
|
|
95
|
+
name: guard-rspec
|
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
|
97
|
+
none: false
|
|
98
|
+
requirements:
|
|
99
|
+
- - ! '>='
|
|
100
|
+
- !ruby/object:Gem::Version
|
|
101
|
+
version: '0'
|
|
102
|
+
type: :development
|
|
103
|
+
prerelease: false
|
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
105
|
+
none: false
|
|
106
|
+
requirements:
|
|
107
|
+
- - ! '>='
|
|
108
|
+
- !ruby/object:Gem::Version
|
|
109
|
+
version: '0'
|
|
110
|
+
- !ruby/object:Gem::Dependency
|
|
111
|
+
name: rb-inotify
|
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
|
113
|
+
none: false
|
|
114
|
+
requirements:
|
|
115
|
+
- - ~>
|
|
116
|
+
- !ruby/object:Gem::Version
|
|
117
|
+
version: '0.9'
|
|
118
|
+
type: :development
|
|
119
|
+
prerelease: false
|
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
121
|
+
none: false
|
|
122
|
+
requirements:
|
|
123
|
+
- - ~>
|
|
124
|
+
- !ruby/object:Gem::Version
|
|
125
|
+
version: '0.9'
|
|
126
|
+
- !ruby/object:Gem::Dependency
|
|
127
|
+
name: pry-debugger
|
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
|
129
|
+
none: false
|
|
130
|
+
requirements:
|
|
131
|
+
- - ! '>='
|
|
132
|
+
- !ruby/object:Gem::Version
|
|
133
|
+
version: '0'
|
|
134
|
+
type: :development
|
|
135
|
+
prerelease: false
|
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
137
|
+
none: false
|
|
138
|
+
requirements:
|
|
139
|
+
- - ! '>='
|
|
140
|
+
- !ruby/object:Gem::Version
|
|
141
|
+
version: '0'
|
|
142
|
+
- !ruby/object:Gem::Dependency
|
|
143
|
+
name: rake
|
|
144
|
+
requirement: !ruby/object:Gem::Requirement
|
|
145
|
+
none: false
|
|
146
|
+
requirements:
|
|
147
|
+
- - ! '>='
|
|
148
|
+
- !ruby/object:Gem::Version
|
|
149
|
+
version: '0'
|
|
150
|
+
type: :development
|
|
151
|
+
prerelease: false
|
|
152
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
153
|
+
none: false
|
|
154
|
+
requirements:
|
|
155
|
+
- - ! '>='
|
|
156
|
+
- !ruby/object:Gem::Version
|
|
157
|
+
version: '0'
|
|
158
|
+
- !ruby/object:Gem::Dependency
|
|
159
|
+
name: rdoc
|
|
160
|
+
requirement: !ruby/object:Gem::Requirement
|
|
161
|
+
none: false
|
|
162
|
+
requirements:
|
|
163
|
+
- - ! '>='
|
|
164
|
+
- !ruby/object:Gem::Version
|
|
165
|
+
version: '0'
|
|
166
|
+
type: :development
|
|
167
|
+
prerelease: false
|
|
168
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
169
|
+
none: false
|
|
170
|
+
requirements:
|
|
171
|
+
- - ! '>='
|
|
172
|
+
- !ruby/object:Gem::Version
|
|
173
|
+
version: '0'
|
|
174
|
+
- !ruby/object:Gem::Dependency
|
|
175
|
+
name: rspec
|
|
176
|
+
requirement: !ruby/object:Gem::Requirement
|
|
177
|
+
none: false
|
|
178
|
+
requirements:
|
|
179
|
+
- - ! '>='
|
|
180
|
+
- !ruby/object:Gem::Version
|
|
181
|
+
version: '0'
|
|
182
|
+
type: :development
|
|
183
|
+
prerelease: false
|
|
184
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
185
|
+
none: false
|
|
186
|
+
requirements:
|
|
187
|
+
- - ! '>='
|
|
188
|
+
- !ruby/object:Gem::Version
|
|
189
|
+
version: '0'
|
|
190
|
+
description:
|
|
191
|
+
email:
|
|
192
|
+
executables: []
|
|
193
|
+
extensions: []
|
|
194
|
+
extra_rdoc_files:
|
|
195
|
+
- README.md
|
|
196
|
+
files:
|
|
197
|
+
- .gitignore
|
|
198
|
+
- Gemfile
|
|
199
|
+
- Guardfile
|
|
200
|
+
- LICENCE
|
|
201
|
+
- README.md
|
|
202
|
+
- Rakefile
|
|
203
|
+
- lib/rlimit.rb
|
|
204
|
+
- rlimit.gemspec
|
|
205
|
+
- spec/rlimit_get_spec.rb
|
|
206
|
+
- spec/rlimit_resources_spec.rb
|
|
207
|
+
- spec/rlimit_set_spec.rb
|
|
208
|
+
- spec/rlimit_supports_spec.rb
|
|
209
|
+
- spec/spec_helper.rb
|
|
210
|
+
homepage: http://theshed.hezmatt.org/rlimit
|
|
211
|
+
licenses: []
|
|
212
|
+
post_install_message:
|
|
213
|
+
rdoc_options: []
|
|
214
|
+
require_paths:
|
|
215
|
+
- lib
|
|
216
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
217
|
+
none: false
|
|
218
|
+
requirements:
|
|
219
|
+
- - ! '>='
|
|
220
|
+
- !ruby/object:Gem::Version
|
|
221
|
+
version: '0'
|
|
222
|
+
segments:
|
|
223
|
+
- 0
|
|
224
|
+
hash: -4592700154150996709
|
|
225
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
226
|
+
none: false
|
|
227
|
+
requirements:
|
|
228
|
+
- - ! '>='
|
|
229
|
+
- !ruby/object:Gem::Version
|
|
230
|
+
version: '0'
|
|
231
|
+
segments:
|
|
232
|
+
- 0
|
|
233
|
+
hash: -4592700154150996709
|
|
234
|
+
requirements: []
|
|
235
|
+
rubyforge_project:
|
|
236
|
+
rubygems_version: 1.8.23
|
|
237
|
+
signing_key:
|
|
238
|
+
specification_version: 3
|
|
239
|
+
summary: Retrieve and adjust rlimits
|
|
240
|
+
test_files: []
|