akaer 0.3.0 → 1.0.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/.travis.yml +3 -0
- data/Gemfile.lock +20 -24
- data/README.md +19 -14
- data/akaer.gemspec +3 -6
- data/bin/akaer +83 -1
- data/lib/akaer.rb +2 -9
- data/lib/akaer/application.rb +284 -76
- data/lib/akaer/configuration.rb +39 -24
- data/lib/akaer/version.rb +11 -2
- data/spec/akaer/application_spec.rb +311 -1
- data/spec/akaer/configuration_spec.rb +13 -1
- data/spec/spec_helper.rb +7 -1
- metadata +16 -68
- data/lib/akaer/errors.rb +0 -12
- data/lib/akaer/logger.rb +0 -58
- data/spec/akaer/logger_spec.rb +0 -11
data/lib/akaer/configuration.rb
CHANGED
@@ -5,37 +5,52 @@
|
|
5
5
|
#
|
6
6
|
|
7
7
|
module Akaer
|
8
|
-
class
|
8
|
+
# This class holds the configuration of the applicaton.
|
9
|
+
class Configuration < Bovem::Configuration
|
10
|
+
# The default interface to manage. Default: `lo0`.
|
9
11
|
property :interface, :default => "lo0"
|
12
|
+
|
13
|
+
# The default list of aliases to add. Default: `[]`.
|
10
14
|
property :addresses, :default => []
|
15
|
+
|
16
|
+
# The starting address for sequential aliases. Default: `10.0.0.1`.
|
11
17
|
property :start_address, :default => "10.0.0.1"
|
18
|
+
|
19
|
+
# The number of aliases to add. Default: `5`.
|
12
20
|
property :aliases, :default => 5
|
21
|
+
|
22
|
+
# The command to run for adding an alias. Default: `sudo ifconfig @INTERFACE@ alias @ALIAS@`.
|
23
|
+
property :add_command, :default => "sudo ifconfig @INTERFACE@ alias @ALIAS@"
|
24
|
+
|
25
|
+
# The command to run for removing an alias. Default: `sudo ifconfig @INTERFACE@ alias @ALIAS@`.
|
26
|
+
property :remove_command, :default => "sudo ifconfig @INTERFACE@ -alias @ALIAS@"
|
27
|
+
|
28
|
+
# The file to log to. Default is the standard output.
|
13
29
|
property :log_file, :default => "STDOUT"
|
30
|
+
|
31
|
+
# The minimum severity to log. Default: `Logger::INFO`.
|
14
32
|
property :log_level, :default => Logger::INFO
|
15
33
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
end
|
37
|
-
|
38
|
-
rv
|
34
|
+
# Only show which modifications will be done.
|
35
|
+
property :dry_run, :default => false
|
36
|
+
|
37
|
+
# Do not show any message.
|
38
|
+
property :quiet, :default => false
|
39
|
+
|
40
|
+
# Creates a new configuration.
|
41
|
+
#
|
42
|
+
# @param file [String] The file to read.
|
43
|
+
# @param overrides [Hash] A set of values which override those set in the configuration file.
|
44
|
+
# @param logger [Logger] The logger to use for notifications.
|
45
|
+
def initialize(file = nil, overrides = {}, logger = nil)
|
46
|
+
super(file, overrides, logger)
|
47
|
+
|
48
|
+
# Make sure some arguments are of correct type
|
49
|
+
self.log_file = $stdout if self.log_file == "STDOUT"
|
50
|
+
self.log_file = $stderr if self.log_file == "STDERR"
|
51
|
+
self.addresses = self.addresses.ensure_array
|
52
|
+
self.aliases = self.aliases.to_integer
|
53
|
+
self.log_level = self.log_level.to_integer
|
39
54
|
end
|
40
55
|
end
|
41
56
|
end
|
data/lib/akaer/version.rb
CHANGED
@@ -5,11 +5,20 @@
|
|
5
5
|
#
|
6
6
|
|
7
7
|
module Akaer
|
8
|
+
# The current version of lazier, according to semantic versioning.
|
9
|
+
#
|
10
|
+
# @see http://semver.org
|
8
11
|
module Version
|
9
|
-
|
10
|
-
|
12
|
+
# The major version.
|
13
|
+
MAJOR = 1
|
14
|
+
|
15
|
+
# The minor version.
|
16
|
+
MINOR = 0
|
17
|
+
|
18
|
+
# The patch version.
|
11
19
|
PATCH = 0
|
12
20
|
|
21
|
+
# The current version of akaer.
|
13
22
|
STRING = [MAJOR, MINOR, PATCH].compact.join(".")
|
14
23
|
end
|
15
24
|
end
|
@@ -7,5 +7,315 @@
|
|
7
7
|
require "spec_helper"
|
8
8
|
|
9
9
|
describe Akaer::Application do
|
10
|
-
|
10
|
+
before(:each) do
|
11
|
+
Bovem::Logger.stub(:default_file).and_return("/dev/null")
|
12
|
+
end
|
13
|
+
|
14
|
+
let(:log_file) { "/dev/null" }
|
15
|
+
let(:application){ Akaer::Application.instance({:"log-file" => log_file}, true) }
|
16
|
+
let(:launch_agent_path) { "/tmp/akaer-test-agent-#{Time.now.strftime("%Y%m%d-%H%M%S")}" }
|
17
|
+
|
18
|
+
describe "#initialize" do
|
19
|
+
it("should setup the logger") do
|
20
|
+
expect(application.logger).not_to be_nil
|
21
|
+
end
|
22
|
+
|
23
|
+
it("should setup the configuration") do
|
24
|
+
expect(application.config).not_to be_nil
|
25
|
+
end
|
26
|
+
|
27
|
+
it("should abort with an invalid configuration") do
|
28
|
+
path = "/tmp/akaer-test-#{Time.now.strftime("%Y%m%d-%H:%M:%S")}"
|
29
|
+
file = ::File.new(path, "w")
|
30
|
+
file.write("config.aliases = ")
|
31
|
+
file.close
|
32
|
+
|
33
|
+
expect { Akaer::Application.new({:config => file.path, :"log-file" => log_file}) }.to raise_error(::SystemExit)
|
34
|
+
::File.unlink(path)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
describe "#launch_agent_path" do
|
39
|
+
it "should return the agent file with a default name" do
|
40
|
+
expect(application.launch_agent_path).to eq(ENV["HOME"] + "/Library/LaunchAgents/it.cowtech.akaer.plist")
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should return the agent file with a specified name" do
|
44
|
+
expect(application.launch_agent_path("foo")).to eq(ENV["HOME"] + "/Library/LaunchAgents/foo.plist")
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
describe "#pad_number" do
|
49
|
+
it "correctly pads numbers" do
|
50
|
+
expect(application.pad_number(3)).to eq("03")
|
51
|
+
expect(application.pad_number(300)).to eq("300")
|
52
|
+
expect(application.pad_number(3, 3)).to eq("003")
|
53
|
+
expect(application.pad_number(nil)).to eq("00")
|
54
|
+
expect(application.pad_number(3, -3)).to eq("03")
|
55
|
+
expect(application.pad_number(3, "A")).to eq("03")
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
describe "#is_ipv4?" do
|
60
|
+
it "correctly detects valid IPv4 address" do
|
61
|
+
expect(application.is_ipv4?("10.0.0.1")).to be_true
|
62
|
+
expect(application.is_ipv4?("255.0.0.1")).to be_true
|
63
|
+
expect(application.is_ipv4?("192.168.0.1")).to be_true
|
64
|
+
end
|
65
|
+
|
66
|
+
it "rejects other values" do
|
67
|
+
expect(application.is_ipv4?("10.0.0.256")).to be_false
|
68
|
+
expect(application.is_ipv4?("10.0.0.-1")).to be_false
|
69
|
+
expect(application.is_ipv4?("::1")).to be_false
|
70
|
+
expect(application.is_ipv4?("INVALID")).to be_false
|
71
|
+
expect(application.is_ipv4?(nil)).to be_false
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
describe "#is_ipv6?" do
|
76
|
+
it "correctly detects valid IPv4 address" do
|
77
|
+
expect(application.is_ipv6?("2001:0db8:0000:0000:0000:1428:57ab")).to be_true
|
78
|
+
expect(application.is_ipv6?("2001:0db8:0:000:00:1428:57ab")).to be_true
|
79
|
+
expect(application.is_ipv6?("2001:0db8:0::1428:57ab")).to be_true
|
80
|
+
expect(application.is_ipv6?("2001::")).to be_true
|
81
|
+
expect(application.is_ipv6?("::1")).to be_true
|
82
|
+
expect(application.is_ipv6?("::2:1")).to be_true
|
83
|
+
expect(application.is_ipv6?("2011::10.0.0.1")).to be_true
|
84
|
+
expect(application.is_ipv6?("2011::0:10.0.0.1")).to be_true
|
85
|
+
end
|
86
|
+
|
87
|
+
it "rejects other values" do
|
88
|
+
expect(application.is_ipv6?("::H")).to be_false
|
89
|
+
expect(application.is_ipv6?("192.168.0.256")).to be_false
|
90
|
+
expect(application.is_ipv6?("INVALID")).to be_false
|
91
|
+
expect(application.is_ipv6?(nil)).to be_false
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
describe "#compute_addresses" do
|
96
|
+
describe "should use only the explicit list if given" do
|
97
|
+
let(:other_application){ Akaer::Application.new({:"log-file" => log_file, :addresses => ["10.0.0.1", "::1", "INVALID 1", "10.0.0.2", "INVALID 2", "2001:0db8:0::0:1428:57ab"]}) }
|
98
|
+
|
99
|
+
it "considering all address" do
|
100
|
+
expect(other_application.compute_addresses).to eq(["10.0.0.1", "::1", "10.0.0.2", "2001:0db8:0::0:1428:57ab"])
|
101
|
+
end
|
102
|
+
|
103
|
+
it "considering only IPv4" do
|
104
|
+
expect(other_application.compute_addresses(:ipv4)).to eq(["10.0.0.1", "10.0.0.2"])
|
105
|
+
expect(Akaer::Application.new({:"log-file" => log_file, :addresses => ["::1", "INVALID 1"]}).compute_addresses(:ipv4)).to eq([])
|
106
|
+
end
|
107
|
+
|
108
|
+
it "considering only IPv6" do
|
109
|
+
expect(other_application.compute_addresses(:ipv6)).to eq(["::1", "2001:0db8:0::0:1428:57ab"])
|
110
|
+
expect(Akaer::Application.new({:"log-file" => log_file, :addresses => ["10.0.0.1", "INVALID 1"]}).compute_addresses(:ipv6)).to eq([])
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
describe "should compute a sequential list of address" do
|
115
|
+
it "considering all address" do
|
116
|
+
expect(Akaer::Application.new({:"log-file" => log_file, :"start-address" => "10.0.1.1"}).compute_addresses).to eq(["10.0.1.1", "10.0.1.2", "10.0.1.3", "10.0.1.4", "10.0.1.5"])
|
117
|
+
expect(Akaer::Application.new({:"log-file" => log_file, :aliases => 3}).compute_addresses).to eq(["10.0.0.1", "10.0.0.2", "10.0.0.3"])
|
118
|
+
expect(Akaer::Application.new({:"log-file" => log_file, :"start-address" => "10.0.1.1", :aliases => -1}).compute_addresses).to eq(["10.0.1.1", "10.0.1.2", "10.0.1.3", "10.0.1.4", "10.0.1.5"])
|
119
|
+
end
|
120
|
+
|
121
|
+
it "considering only IPv4" do
|
122
|
+
expect(Akaer::Application.new({:"log-file" => log_file, :"start-address" => "::1"}).compute_addresses(:ipv4)).to eq([])
|
123
|
+
end
|
124
|
+
|
125
|
+
it "considering only IPv6" do
|
126
|
+
expect(Akaer::Application.new({:"log-file" => log_file, :"start-address" => "10.0.0.1"}).compute_addresses(:ipv6)).to eq([])
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
describe "#execute_command" do
|
132
|
+
it "should forward to system" do
|
133
|
+
Kernel.should_receive("system")
|
134
|
+
application.execute_command("echo OK")
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
describe "#manage" do
|
139
|
+
it "should show a right message to the user" do
|
140
|
+
application.logger.should_receive(:info).with(/.+.*03.*\/.*05.*.+ *Adding.* address .*10.0.0.3.* to interface .*lo0.*/)
|
141
|
+
application.manage(:add, "10.0.0.3")
|
142
|
+
|
143
|
+
application.logger.should_receive(:info).with(/.+.*03.*\/.*05.*.+ *Removing.* address .*10.0.0.3.* from interface .*lo0.*/)
|
144
|
+
application.manage(:remove, "10.0.0.3")
|
145
|
+
end
|
146
|
+
|
147
|
+
it "should call the right system command" do
|
148
|
+
application.should_receive(:execute_command).with("sudo ifconfig lo0 alias 10.0.0.3 > /dev/null 2>&1")
|
149
|
+
application.manage(:add, "10.0.0.3")
|
150
|
+
|
151
|
+
application.should_receive(:execute_command).with("sudo ifconfig lo0 -alias 10.0.0.3 > /dev/null 2>&1")
|
152
|
+
application.manage(:remove, "10.0.0.3")
|
153
|
+
end
|
154
|
+
|
155
|
+
it "should return true if the command succeded" do
|
156
|
+
other_application = Akaer::Application.new({:"add-command" => "echo @INTERFACE@", :quiet => true})
|
157
|
+
expect(other_application.manage(:add, "10.0.0.3")).to be_true
|
158
|
+
end
|
159
|
+
|
160
|
+
it "should return false if the command failed" do
|
161
|
+
expect(application.manage(:add, "10.0.0.256")).to be_false
|
162
|
+
end
|
163
|
+
|
164
|
+
it "should respect dry-run mode" do
|
165
|
+
other_application = Akaer::Application.new({:"log-file" => log_file, :"dry-run" => true})
|
166
|
+
|
167
|
+
other_application.logger.should_receive(:info).with(/.+.*03.*\/.*05.*.+ I will .*add.* address .*10.0.0.3.* to interface .*lo0.*/)
|
168
|
+
other_application.should_not_receive(:execute_command)
|
169
|
+
other_application.manage(:add, "10.0.0.3")
|
170
|
+
|
171
|
+
other_application.logger.should_receive(:info).with(/.+.*03.*\/.*05.*.+ I will .*remove.* address .*10.0.0.3.* from interface .*lo0.*/)
|
172
|
+
other_application.should_not_receive(:execute_command)
|
173
|
+
other_application.manage(:remove, "10.0.0.3")
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
177
|
+
|
178
|
+
describe "#action_add" do
|
179
|
+
it("should compute addresses to manage") do
|
180
|
+
application.should_receive(:compute_addresses)
|
181
|
+
application.action_add
|
182
|
+
end
|
183
|
+
|
184
|
+
it("should call #manage for every command") do
|
185
|
+
application.stub(:manage) do |operation, address|
|
186
|
+
address !~ /3$/
|
187
|
+
end
|
188
|
+
|
189
|
+
application.should_receive(:manage).at_most(application.compute_addresses.length).with(:add, /.+/)
|
190
|
+
application.action_add
|
191
|
+
end
|
192
|
+
|
193
|
+
it("should show an error there's no address to manage") do
|
194
|
+
application.stub(:compute_addresses).and_return([])
|
195
|
+
other_application = Akaer::Application.new({:"log-file" => log_file, :quiet => true})
|
196
|
+
other_application.stub(:compute_addresses).and_return([])
|
197
|
+
|
198
|
+
application.logger.should_receive(:error).with("No valid addresses to add to the interface found.")
|
199
|
+
application.action_add
|
200
|
+
other_application.logger.should_not_receive(:error)
|
201
|
+
other_application.action_add
|
202
|
+
end
|
203
|
+
end
|
204
|
+
|
205
|
+
describe "#action_remove" do
|
206
|
+
it("should compute addresses to manage") do
|
207
|
+
application.should_receive(:compute_addresses)
|
208
|
+
application.action_remove
|
209
|
+
end
|
210
|
+
|
211
|
+
it("should call #manage for every command") do
|
212
|
+
application.stub(:manage) do |operation, address|
|
213
|
+
address !~ /3$/
|
214
|
+
end
|
215
|
+
|
216
|
+
application.should_receive(:manage).at_most(application.compute_addresses.length).with(:remove, /.+/)
|
217
|
+
application.action_remove
|
218
|
+
end
|
219
|
+
|
220
|
+
it("should show an error there's no address to manage") do
|
221
|
+
application.stub(:compute_addresses).and_return([])
|
222
|
+
other_application = Akaer::Application.new({:"log-file" => log_file, :quiet => true})
|
223
|
+
other_application.stub(:compute_addresses).and_return([])
|
224
|
+
|
225
|
+
application.logger.should_receive(:error).with("No valid addresses to remove from the interface found.")
|
226
|
+
application.action_remove
|
227
|
+
other_application.logger.should_not_receive(:error)
|
228
|
+
other_application.action_remove
|
229
|
+
end
|
230
|
+
end
|
231
|
+
|
232
|
+
describe "#action_install" do
|
233
|
+
if ::Config::CONFIG['host_os'] =~ /^darwin/ then
|
234
|
+
it "should create the agent" do
|
235
|
+
application.stub(:launch_agent_path).and_return(launch_agent_path)
|
236
|
+
::File.unlink(application.launch_agent_path) if ::File.exists?(application.launch_agent_path)
|
237
|
+
|
238
|
+
application.action_install
|
239
|
+
expect(::File.exists?(application.launch_agent_path)).to be_true
|
240
|
+
::File.unlink(application.launch_agent_path) if ::File.exists?(application.launch_agent_path)
|
241
|
+
end
|
242
|
+
|
243
|
+
it "should not create and invalid agent" do
|
244
|
+
application.stub(:launch_agent_path).and_return("/invalid/agent")
|
245
|
+
::File.unlink(application.launch_agent_path) if ::File.exists?(application.launch_agent_path)
|
246
|
+
|
247
|
+
application.logger.should_receive(:error).with("Cannot create the launch agent.")
|
248
|
+
application.action_install
|
249
|
+
::File.unlink(application.launch_agent_path) if ::File.exists?(application.launch_agent_path)
|
250
|
+
end
|
251
|
+
|
252
|
+
it "should not load an invalid agent" do
|
253
|
+
application.stub(:execute_command) do |command|
|
254
|
+
command =~ /^launchctl/ ? raise(StandardError) : system(command)
|
255
|
+
end
|
256
|
+
|
257
|
+
application.stub(:launch_agent_path).and_return(launch_agent_path)
|
258
|
+
::File.unlink(application.launch_agent_path) if ::File.exists?(application.launch_agent_path)
|
259
|
+
|
260
|
+
application.logger.should_receive(:error).with("Cannot load the launch agent.")
|
261
|
+
application.action_install
|
262
|
+
::File.unlink(application.launch_agent_path) if ::File.exists?(application.launch_agent_path)
|
263
|
+
end
|
264
|
+
end
|
265
|
+
|
266
|
+
it "should raise an exception if not running on OSX" do
|
267
|
+
application.stub(:is_osx?).and_return(false)
|
268
|
+
application.logger.should_receive(:fatal).with("Install akaer on autolaunch is only available on MacOSX.")
|
269
|
+
expect(application.action_install).to be_false
|
270
|
+
end
|
271
|
+
end
|
272
|
+
|
273
|
+
describe "#action_uninstall" do
|
274
|
+
if ::Config::CONFIG['host_os'] =~ /^darwin/ then
|
275
|
+
it "should remove the agent" do
|
276
|
+
application.stub(:launch_agent_path).and_return(launch_agent_path)
|
277
|
+
::File.unlink(application.launch_agent_path) if ::File.exists?(application.launch_agent_path)
|
278
|
+
|
279
|
+
Bovem::Logger.stub(:default_file).and_return($stdout)
|
280
|
+
application.action_install
|
281
|
+
application.action_uninstall
|
282
|
+
expect(::File.exists?(application.launch_agent_path)).to be_false
|
283
|
+
::File.unlink(application.launch_agent_path) if ::File.exists?(application.launch_agent_path)
|
284
|
+
end
|
285
|
+
|
286
|
+
it "should not load delete an invalid resolver" do
|
287
|
+
application.stub(:launch_agent_path).and_return("/invalid/agent")
|
288
|
+
|
289
|
+
application.action_install
|
290
|
+
application.logger.should_receive(:warn).at_least(1)
|
291
|
+
application.action_uninstall
|
292
|
+
::File.unlink(application.launch_agent_path) if ::File.exists?(application.launch_agent_path)
|
293
|
+
end
|
294
|
+
|
295
|
+
it "should not delete an invalid agent" do
|
296
|
+
application.stub(:launch_agent_path).and_return("/invalid/agent")
|
297
|
+
|
298
|
+
application.action_install
|
299
|
+
application.logger.should_receive(:warn).at_least(1)
|
300
|
+
application.action_uninstall
|
301
|
+
::File.unlink(application.launch_agent_path) if ::File.exists?(application.launch_agent_path)
|
302
|
+
end
|
303
|
+
|
304
|
+
it "should not load delete invalid agent" do
|
305
|
+
application.stub(:launch_agent_path).and_return("/invalid/agent")
|
306
|
+
|
307
|
+
application.action_install
|
308
|
+
application.stub(:execute_command).and_raise(StandardError)
|
309
|
+
application.logger.should_receive(:warn).at_least(1)
|
310
|
+
application.action_uninstall
|
311
|
+
::File.unlink(application.launch_agent_path) if ::File.exists?(application.launch_agent_path)
|
312
|
+
end
|
313
|
+
end
|
314
|
+
|
315
|
+
it "should raise an exception if not running on OSX" do
|
316
|
+
application.stub(:is_osx?).and_return(false)
|
317
|
+
application.logger.should_receive(:fatal).with("Install akaer on autolaunch is only available on MacOSX.")
|
318
|
+
expect(application.action_uninstall).to be_false
|
319
|
+
end
|
320
|
+
end
|
11
321
|
end
|
@@ -7,5 +7,17 @@
|
|
7
7
|
require "spec_helper"
|
8
8
|
|
9
9
|
describe Akaer::Configuration do
|
10
|
-
|
10
|
+
describe "#initialize" do
|
11
|
+
it "sets default arguments and rules" do
|
12
|
+
config = Akaer::Configuration.new
|
13
|
+
expect(config.interface).to eq("lo0")
|
14
|
+
expect(config.addresses).to eq([])
|
15
|
+
expect(config.start_address).to eq("10.0.0.1")
|
16
|
+
expect(config.aliases).to eq(5)
|
17
|
+
expect(config.add_command).to eq("sudo ifconfig @INTERFACE@ alias @ALIAS@")
|
18
|
+
expect(config.remove_command).to eq("sudo ifconfig @INTERFACE@ -alias @ALIAS@")
|
19
|
+
expect(config.log_file).to eq($stdout)
|
20
|
+
expect(config.log_level).to eq(Logger::INFO)
|
21
|
+
end
|
22
|
+
end
|
11
23
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: akaer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,32 +9,32 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-08-06 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
-
name:
|
15
|
+
name: bovem
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
|
-
- -
|
19
|
+
- - ! '>='
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version:
|
21
|
+
version: 0.5.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
25
|
none: false
|
26
26
|
requirements:
|
27
|
-
- -
|
27
|
+
- - ! '>='
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version:
|
29
|
+
version: 0.5.0
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
|
-
name:
|
31
|
+
name: gli
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
33
33
|
none: false
|
34
34
|
requirements:
|
35
35
|
- - ~>
|
36
36
|
- !ruby/object:Gem::Version
|
37
|
-
version:
|
37
|
+
version: 1.6.0
|
38
38
|
type: :runtime
|
39
39
|
prerelease: false
|
40
40
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -42,39 +42,7 @@ dependencies:
|
|
42
42
|
requirements:
|
43
43
|
- - ~>
|
44
44
|
- !ruby/object:Gem::Version
|
45
|
-
version:
|
46
|
-
- !ruby/object:Gem::Dependency
|
47
|
-
name: hashie
|
48
|
-
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
|
-
requirements:
|
51
|
-
- - ~>
|
52
|
-
- !ruby/object:Gem::Version
|
53
|
-
version: 1.2.0
|
54
|
-
type: :runtime
|
55
|
-
prerelease: false
|
56
|
-
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
|
-
requirements:
|
59
|
-
- - ~>
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: 1.2.0
|
62
|
-
- !ruby/object:Gem::Dependency
|
63
|
-
name: rainbow
|
64
|
-
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
|
-
requirements:
|
67
|
-
- - ~>
|
68
|
-
- !ruby/object:Gem::Version
|
69
|
-
version: 1.1.0
|
70
|
-
type: :runtime
|
71
|
-
prerelease: false
|
72
|
-
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
|
-
requirements:
|
75
|
-
- - ~>
|
76
|
-
- !ruby/object:Gem::Version
|
77
|
-
version: 1.1.0
|
45
|
+
version: 1.6.0
|
78
46
|
- !ruby/object:Gem::Dependency
|
79
47
|
name: rspec
|
80
48
|
requirement: !ruby/object:Gem::Requirement
|
@@ -128,33 +96,17 @@ dependencies:
|
|
128
96
|
requirement: !ruby/object:Gem::Requirement
|
129
97
|
none: false
|
130
98
|
requirements:
|
131
|
-
- -
|
132
|
-
- !ruby/object:Gem::Version
|
133
|
-
version: 0.9.10
|
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.9.10
|
142
|
-
- !ruby/object:Gem::Dependency
|
143
|
-
name: net-dns
|
144
|
-
requirement: !ruby/object:Gem::Requirement
|
145
|
-
none: false
|
146
|
-
requirements:
|
147
|
-
- - ~>
|
99
|
+
- - ! '>='
|
148
100
|
- !ruby/object:Gem::Version
|
149
|
-
version: 0
|
101
|
+
version: '0'
|
150
102
|
type: :development
|
151
103
|
prerelease: false
|
152
104
|
version_requirements: !ruby/object:Gem::Requirement
|
153
105
|
none: false
|
154
106
|
requirements:
|
155
|
-
- -
|
107
|
+
- - ! '>='
|
156
108
|
- !ruby/object:Gem::Version
|
157
|
-
version: 0
|
109
|
+
version: '0'
|
158
110
|
- !ruby/object:Gem::Dependency
|
159
111
|
name: yard
|
160
112
|
requirement: !ruby/object:Gem::Requirement
|
@@ -223,12 +175,9 @@ files:
|
|
223
175
|
- lib/akaer.rb
|
224
176
|
- lib/akaer/application.rb
|
225
177
|
- lib/akaer/configuration.rb
|
226
|
-
- lib/akaer/errors.rb
|
227
|
-
- lib/akaer/logger.rb
|
228
178
|
- lib/akaer/version.rb
|
229
179
|
- spec/akaer/application_spec.rb
|
230
180
|
- spec/akaer/configuration_spec.rb
|
231
|
-
- spec/akaer/logger_spec.rb
|
232
181
|
- spec/coverage_helper.rb
|
233
182
|
- spec/spec_helper.rb
|
234
183
|
homepage: http://github.com/ShogunPanda/akaer
|
@@ -245,7 +194,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
245
194
|
version: '0'
|
246
195
|
segments:
|
247
196
|
- 0
|
248
|
-
hash:
|
197
|
+
hash: -4081054337891207421
|
249
198
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
250
199
|
none: false
|
251
200
|
requirements:
|
@@ -254,7 +203,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
254
203
|
version: '0'
|
255
204
|
segments:
|
256
205
|
- 0
|
257
|
-
hash:
|
206
|
+
hash: -4081054337891207421
|
258
207
|
requirements: []
|
259
208
|
rubyforge_project: akaer
|
260
209
|
rubygems_version: 1.8.24
|
@@ -264,7 +213,6 @@ summary: A small utility to add aliases to network interfaces.
|
|
264
213
|
test_files:
|
265
214
|
- spec/akaer/application_spec.rb
|
266
215
|
- spec/akaer/configuration_spec.rb
|
267
|
-
- spec/akaer/logger_spec.rb
|
268
216
|
- spec/coverage_helper.rb
|
269
217
|
- spec/spec_helper.rb
|
270
218
|
has_rdoc:
|