akaer 0.3.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: