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.
@@ -5,37 +5,52 @@
5
5
  #
6
6
 
7
7
  module Akaer
8
- class Configuration < Hashie::Dash
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
- def self.load(file = nil, logger = nil)
17
- if logger.blank? then
18
- logger ||= Akaer::Logger.new($stderr)
19
- logger.level = Logger::INFO
20
- end
21
-
22
- rv = self.new
23
- if file.present? then
24
- begin
25
- # Open the file
26
- path = Pathname.new(File.expand_path(file)).realpath
27
- logger.debug("Using configuration file #{path}.")
28
-
29
- rv.tap do |config|
30
- eval(File.read(path))
31
- end
32
- rescue Errno::ENOENT, LoadError
33
- rescue Exception
34
- raise Akaer::Errors::InvalidConfiguration.new("Config file #{file.bright} is not valid.")
35
- end
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
@@ -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
- MAJOR = 0
10
- MINOR = 3
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
- pending "To all."
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
- pending "To all."
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
@@ -7,4 +7,10 @@
7
7
  require "rubygems"
8
8
  require "bundler/setup"
9
9
  require "coverage_helper"
10
- require "akaer"
10
+ require "akaer"
11
+
12
+ RSpec.configure do |config|
13
+ config.expect_with :rspec do |c|
14
+ c.syntax = :expect
15
+ end
16
+ end
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.3.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-07-24 00:00:00.000000000 Z
12
+ date: 2012-08-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- name: cowtech-extensions
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: 2.7.0
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: 2.7.0
29
+ version: 0.5.0
30
30
  - !ruby/object:Gem::Dependency
31
- name: cowtech-lib
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: 2.0.0
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: 2.0.0
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.7.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.7.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: 4554862059516849580
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: 4554862059516849580
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: