devdnsd 1.1.10 → 1.5.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,112 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4
+ <head>
5
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
6
+ <title>
7
+ Top Level Namespace
8
+
9
+ &mdash; Documentation by YARD 0.8.2.1
10
+
11
+ </title>
12
+
13
+ <link rel="stylesheet" href="css/style.css" type="text/css" media="screen" charset="utf-8" />
14
+
15
+ <link rel="stylesheet" href="css/common.css" type="text/css" media="screen" charset="utf-8" />
16
+
17
+ <script type="text/javascript" charset="utf-8">
18
+ hasFrames = window.top.frames.main ? true : false;
19
+ relpath = '';
20
+ framesUrl = "frames.html#!" + escape(window.location.href);
21
+ </script>
22
+
23
+
24
+ <script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
25
+
26
+ <script type="text/javascript" charset="utf-8" src="js/app.js"></script>
27
+
28
+
29
+ </head>
30
+ <body>
31
+ <div id="header">
32
+ <div id="menu">
33
+
34
+ <a href="_index.html">Index</a> &raquo;
35
+
36
+
37
+ <span class="title">Top Level Namespace</span>
38
+
39
+
40
+ <div class="noframes"><span class="title">(</span><a href="." target="_top">no frames</a><span class="title">)</span></div>
41
+ </div>
42
+
43
+ <div id="search">
44
+
45
+ <a class="full_list_link" id="class_list_link"
46
+ href="class_list.html">
47
+ Class List
48
+ </a>
49
+
50
+ <a class="full_list_link" id="method_list_link"
51
+ href="method_list.html">
52
+ Method List
53
+ </a>
54
+
55
+ <a class="full_list_link" id="file_list_link"
56
+ href="file_list.html">
57
+ File List
58
+ </a>
59
+
60
+ </div>
61
+ <div class="clear"></div>
62
+ </div>
63
+
64
+ <iframe id="search_frame"></iframe>
65
+
66
+ <div id="content"><h1>Top Level Namespace
67
+
68
+
69
+
70
+ </h1>
71
+
72
+ <dl class="box">
73
+
74
+
75
+
76
+
77
+
78
+
79
+
80
+
81
+ </dl>
82
+ <div class="clear"></div>
83
+
84
+ <h2>Defined Under Namespace</h2>
85
+ <p class="children">
86
+
87
+
88
+ <strong class="modules">Modules:</strong> <span class='object_link'><a href="DevDNSd.html" title="DevDNSd (module)">DevDNSd</a></span>
89
+
90
+
91
+
92
+
93
+ </p>
94
+
95
+
96
+
97
+
98
+
99
+
100
+
101
+
102
+
103
+ </div>
104
+
105
+ <div id="footer">
106
+ Generated on Wed Aug 22 13:48:31 2012 by
107
+ <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
108
+ 0.8.2.1 (ruby-1.9.2).
109
+ </div>
110
+
111
+ </body>
112
+ </html>
data/lib/devdnsd.rb CHANGED
@@ -1,13 +1,12 @@
1
1
  # encoding: utf-8
2
2
  #
3
- # This file is part of the devdns gem. Copyright (C) 2012 and above Shogun <shogun_panda@me.com>.
3
+ # This file is part of the devdnsd gem. Copyright (C) 2012 and above Shogun <shogun_panda@me.com>.
4
4
  # Licensed under the MIT license, which can be found at http://www.opensource.org/licenses/mit-license.php.
5
5
  #
6
6
 
7
7
  require "rubygems"
8
- require "bovem"
8
+ require "mamertes"
9
9
  require "rubydns"
10
- require "gli"
11
10
  require "rexec/daemon"
12
11
 
13
12
  Lazier.load!(:object)
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
2
  #
3
- # This file is part of the devdns gem. Copyright (C) 2012 and above Shogun <shogun_panda@me.com>.
3
+ # This file is part of the devdnsd gem. Copyright (C) 2012 and above Shogun <shogun_panda@me.com>.
4
4
  # Licensed under the MIT license, which can be found at http://www.opensource.org/licenses/mit-license.php.
5
5
  #
6
6
 
@@ -17,39 +17,34 @@ module DevDNSd
17
17
  # The {Configuration Configuration} of this application.
18
18
  attr_reader :config
19
19
 
20
- # The arguments passed via command-line.
21
- attr_reader :args
20
+ # The Mamertes command.
21
+ attr_reader :command
22
22
 
23
23
  # The logger for this application.
24
24
  attr_accessor :logger
25
25
 
26
26
  # Creates a new application.
27
27
  #
28
- # @param globals [Hash] Global options.
29
- # @param locals [Hash] Local command options.
30
- # @param args [Array] Extra arguments.
31
- def initialize(globals = {}, locals = {}, args = [])
32
- @args = {
33
- :global => globals,
34
- :local => locals,
35
- :args => args
36
- }
28
+ # @param command [Mamertes::Command] The current Mamertes command.
29
+ def initialize(command)
30
+ @command = command
31
+ application = @command.application
37
32
 
38
33
  # Setup logger
39
34
  Bovem::Logger.start_time = Time.now
40
- @logger = Bovem::Logger.create(Bovem::Logger.get_real_file(@args[:global][:log_file]) || Bovem::Logger.default_file, Logger::INFO)
35
+ @logger = Bovem::Logger.create(Bovem::Logger.get_real_file(application.options["log-file"].value) || Bovem::Logger.default_file, Logger::INFO)
41
36
 
42
37
  # Open configuration
43
38
  begin
44
39
  overrides = {
45
- :foreground => @args[:local][:foreground],
46
- :log_file => @args[:global][:log_file],
47
- :log_level => @args[:global][:log_level],
48
- :tld => @args[:global][:tld],
49
- :port => @args[:global][:port]
40
+ :foreground => command.name == "start" ? command.options["foreground"].value : false,
41
+ :log_file => application.options["log-file"].value,
42
+ :log_level => application.options["log-level"].value,
43
+ :tld => application.options["tld"].value,
44
+ :port => application.options["port"].value
50
45
  }.reject {|k,v| v.nil? }
51
46
 
52
- @config = DevDNSd::Configuration.new(@args[:global][:config], overrides, @logger)
47
+ @config = DevDNSd::Configuration.new(application.options["configuration"].value, overrides, @logger)
53
48
 
54
49
  @logger = nil
55
50
  @logger = self.get_logger
@@ -186,7 +181,7 @@ module DevDNSd
186
181
  case type
187
182
  when :MX
188
183
  preference = options.delete(:preference)
189
- preference = 10 if !preference.is_integer?
184
+ preference = preference.nil? ? 10 : preference.to_integer(10)
190
185
  final_reply << preference
191
186
  end
192
187
 
@@ -262,7 +257,7 @@ module DevDNSd
262
257
  begin
263
258
  logger.info("Creating the launch agent in #{launch_agent} ...")
264
259
 
265
- args = $ARGV ? $ARGV[0, $ARGV.length - 1] : ["A"]
260
+ args = $ARGV ? $ARGV[0, $ARGV.length - 1] : []
266
261
 
267
262
  plist = {"KeepAlive" => true, "Label" => "it.cowtech.devdnsd", "Program" => (::Pathname.new(Dir.pwd) + $0).to_s, "ProgramArguments" => args, "RunAtLoad" => true}
268
263
  ::File.open(launch_agent, "w") {|f|
@@ -345,14 +340,14 @@ module DevDNSd
345
340
  end
346
341
 
347
342
  # Returns a unique (singleton) instance of the application.
348
- # @param globals [Hash] Global options.
349
- # @param locals [Hash] Local command options.
350
- # @param args [Array] Extra arguments.
343
+ #
344
+ # @param command [Mamertes::Command] The current Mamertes command.
351
345
  # @param force [Boolean] If to force recreation of the instance.
352
346
  # @return [Application] The unique (singleton) instance of the application.
353
- def self.instance(globals = {}, locals = {}, args = [], force = false)
347
+ def self.instance(command = nil, force = false)
354
348
  @instance = nil if force
355
- @instance ||= DevDNSd::Application.new(globals, locals, args)
349
+ @instance ||= DevDNSd::Application.new(command) if command
350
+ @instance
356
351
  end
357
352
 
358
353
  # Runs the application in foreground.
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
2
  #
3
- # This file is part of the devdns gem. Copyright (C) 2012 and above Shogun <shogun_panda@me.com>.
3
+ # This file is part of the devdnsd gem. Copyright (C) 2012 and above Shogun <shogun_panda@me.com>.
4
4
  # Licensed under the MIT license, which can be found at http://www.opensource.org/licenses/mit-license.php.
5
5
  #
6
6
 
@@ -40,7 +40,6 @@ module DevDNSd
40
40
  # @param file [String] The file to read.
41
41
  # @param overrides [Hash] A set of values which override those set in the configuration file.
42
42
  # @param logger [Logger] The logger to use for notifications.
43
- # @see parse
44
43
  def initialize(file = nil, overrides = {}, logger = nil)
45
44
  super(file, overrides, logger)
46
45
 
@@ -65,4 +64,4 @@ module DevDNSd
65
64
  @rules << DevDNSd::Rule.create(*args, &block)
66
65
  end
67
66
  end
68
- end
67
+ end
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
2
  #
3
- # This file is part of the devdns gem. Copyright (C) 2012 and above Shogun <shogun_panda@me.com>.
3
+ # This file is part of the devdnsd gem. Copyright (C) 2012 and above Shogun <shogun_panda@me.com>.
4
4
  # Licensed under the MIT license, which can be found at http://www.opensource.org/licenses/mit-license.php.
5
5
  #
6
6
 
data/lib/devdnsd/rule.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
2
  #
3
- # This file is part of the devdns gem. Copyright (C) 2012 and above Shogun <shogun_panda@me.com>.
3
+ # This file is part of the devdnsd gem. Copyright (C) 2012 and above Shogun <shogun_panda@me.com>.
4
4
  # Licensed under the MIT license, which can be found at http://www.opensource.org/licenses/mit-license.php.
5
5
  #
6
6
 
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
2
  #
3
- # This file is part of the devdns gem. Copyright (C) 2012 and above Shogun <shogun_panda@me.com>.
3
+ # This file is part of the devdnsd gem. Copyright (C) 2012 and above Shogun <shogun_panda@me.com>.
4
4
  # Licensed under the MIT license, which can be found at http://www.opensource.org/licenses/mit-license.php.
5
5
  #
6
6
 
@@ -13,10 +13,10 @@ module DevDNSd
13
13
  MAJOR = 1
14
14
 
15
15
  # The minor version.
16
- MINOR = 1
16
+ MINOR = 5
17
17
 
18
18
  # The patch version.
19
- PATCH = 10
19
+ PATCH = 0
20
20
 
21
21
  # The current version number of DevDNSd.
22
22
  STRING = [MAJOR, MINOR, PATCH].compact.join(".")
@@ -1,13 +1,14 @@
1
1
  # encoding: utf-8
2
2
  #
3
- # This file is part of the devdns gem. Copyright (C) 2012 and above Shogun <shogun_panda@me.com>.
3
+ # This file is part of the devdnsd gem. Copyright (C) 2012 and above Shogun <shogun_panda@me.com>.
4
4
  # Licensed under the MIT license, which can be found at http://www.opensource.org/licenses/mit-license.php.
5
5
  #
6
6
 
7
- require "simplecov"
8
7
  require "pathname"
9
8
 
10
- if ENV["DEVDNSD_COVERAGE"] == "TRUE" then
9
+ if ENV["DEVDNSD_COVERAGE"] == "TRUE" && RUBY_VERSION >= "1.9" then
10
+ require "simplecov"
11
+
11
12
  root = Pathname.new(File.dirname(__FILE__)) + ".."
12
13
 
13
14
  SimpleCov.start do
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
2
  #
3
- # This file is part of the devdns gem. Copyright (C) 2012 and above Shogun <shogun_panda@me.com>.
3
+ # This file is part of the devdnsd gem. Copyright (C) 2012 and above Shogun <shogun_panda@me.com>.
4
4
  # Licensed under the MIT license, which can be found at http://www.opensource.org/licenses/mit-license.php.
5
5
  #
6
6
 
@@ -9,10 +9,23 @@ require "spec_helper"
9
9
  describe DevDNSd::Application do
10
10
  before(:each) do
11
11
  Bovem::Logger.stub(:default_file).and_return("/dev/null")
12
+ DevDNSd::Application.stub(:instance).and_return(application)
13
+ end
14
+
15
+ def create_application(overrides = {})
16
+ mamertes_app = Mamertes::App(:run => false) do
17
+ option "configuration", [], {:default => overrides["configuration"] || "~/.akaer_config"}
18
+ option "tld", [], {:default => overrides["tld"] || "dev"}
19
+ option "port", [], {:type => Integer, :default => overrides["port"] || 7771}
20
+ option "log-file", [], {:default => overrides["log-file"] || "STDOUT"}
21
+ option "log-level", [:L], {:type => Integer, :default => overrides["log-level"] || 1}
22
+ end
23
+
24
+ DevDNSd::Application.new(mamertes_app)
12
25
  end
13
26
 
14
27
  let(:log_file) { "/tmp/devdnsd-test-log-#{Time.now.strftime("%Y%m%d-%H%M%S")}" }
15
- let(:application){ DevDNSd::Application.instance({:log_file => log_file}, {}, {}, true) }
28
+ let(:application){ create_application({"log-file" => log_file}) }
16
29
  let(:executable) { ::Pathname.new(::File.dirname((__FILE__))) + "../../bin/devdnsd" }
17
30
  let(:sample_config) { ::Pathname.new(::File.dirname((__FILE__))) + "../../config/devdnsd_config.sample" }
18
31
  let(:resolver_path) { "/tmp/devdnsd-test-resolver-#{Time.now.strftime("%Y%m%d-%H%M%S")}" }
@@ -33,7 +46,7 @@ describe DevDNSd::Application do
33
46
  file.write("config.port = ")
34
47
  file.close
35
48
 
36
- expect { DevDNSd::Application.new({:config => file.path, :log_file => log_file}) }.to raise_error(::SystemExit)
49
+ expect { create_application({"configuration" => file.path, "log-file" => log_file}) }.to raise_error(::SystemExit)
37
50
  ::File.unlink(path)
38
51
  end
39
52
  end
@@ -52,8 +65,40 @@ describe DevDNSd::Application do
52
65
  end
53
66
  end
54
67
 
68
+ describe ".instance" do
69
+ before(:each) do
70
+ DevDNSd::Application.unstub(:instance)
71
+ end
72
+
73
+ let(:mamertes) {
74
+ mamertes_app = Mamertes::App(:run => false) do
75
+ option "configuration", [], {:default => "~/.akaer_config"}
76
+ option "tld", [], {:default => "dev"}
77
+ option "port", [], {:type => Integer, :default => 7771}
78
+ option "log-file", [], {:default => "STDOUT"}
79
+ option "log-level", [:L], {:type => Integer, :default => 1}
80
+ end
81
+ }
82
+
83
+ it "should create a new instance" do
84
+ expect(DevDNSd::Application.instance(mamertes)).to be_a(DevDNSd::Application)
85
+ end
86
+
87
+ it "should always return the same instance" do
88
+ other = DevDNSd::Application.instance(mamertes)
89
+ DevDNSd::Application.should_not_receive(:new)
90
+ expect(DevDNSd::Application.instance(mamertes)).to eq(other)
91
+ expect(DevDNSd::Application.instance).to eq(other)
92
+ end
93
+
94
+ it "should recreate an instance" do
95
+ other = DevDNSd::Application.instance(mamertes)
96
+ expect(DevDNSd::Application.instance(mamertes, true)).not_to eq(other)
97
+ end
98
+ end
99
+
55
100
  describe "#perform_server" do
56
- let(:application){ DevDNSd::Application.instance({:log_file => log_file, :config => sample_config}, {}, [], true) }
101
+ let(:application){ create_application({"log-file" => log_file, "configuration" => sample_config}) }
57
102
 
58
103
  before(:each) do
59
104
  class DevDNSd::Application
@@ -168,7 +213,7 @@ describe DevDNSd::Application do
168
213
  end
169
214
  end
170
215
 
171
- let(:application){ DevDNSd::Application.instance({:log_file => log_file, :config => sample_config}, {}, [], true) }
216
+ let(:application){ create_application({"log-file" => log_file, "configuration" => sample_config}) }
172
217
  let(:transaction){ FakeTransaction.new }
173
218
 
174
219
  it "should match a valid string request" do
@@ -256,13 +301,14 @@ describe DevDNSd::Application do
256
301
 
257
302
  describe "#action_start" do
258
303
  it "should call perform_server in foreground" do
259
- application = DevDNSd::Application.instance({:log_file => log_file}, {:foreground => true}, [], true)
304
+ application = create_application({"log-file" => log_file})
305
+ application.config.foreground = true
260
306
  application.should_receive(:perform_server)
261
307
  application.action_start
262
308
  end
263
309
 
264
310
  it "should start the daemon" do
265
- application = DevDNSd::Application.instance({:log_file => log_file}, {}, [], true)
311
+ application = create_application({"log-file" => log_file})
266
312
  ::RExec::Daemon::Controller.should_receive(:start)
267
313
  application.action_start
268
314
  end
@@ -317,26 +363,26 @@ describe DevDNSd::Application do
317
363
  ::File.unlink(application.launch_agent_path) if ::File.exists?(application.launch_agent_path)
318
364
  end
319
365
 
320
- it "should not create and invalid logger" do
366
+ it "should not create an invalid resolver" do
321
367
  application.stub(:resolver_path).and_return("/invalid/resolver")
322
368
  application.stub(:launch_agent_path).and_return("/invalid/agent")
323
369
  ::File.unlink(application.resolver_path) if ::File.exists?(application.resolver_path)
324
370
  ::File.unlink(application.launch_agent_path) if ::File.exists?(application.launch_agent_path)
325
371
 
326
- application.get_logger.should_receive(:error).with("Cannot create the resolver file.")
372
+ application.logger.should_receive(:error).with("Cannot create the resolver file.")
327
373
  application.action_install
328
374
 
329
375
  ::File.unlink(application.resolver_path) if ::File.exists?(application.resolver_path)
330
376
  ::File.unlink(application.launch_agent_path) if ::File.exists?(application.launch_agent_path)
331
377
  end
332
378
 
333
- it "should not create and invalid agent" do
379
+ it "should not create an invalid agent" do
334
380
  application.stub(:resolver_path).and_return(resolver_path)
335
381
  application.stub(:launch_agent_path).and_return("/invalid/agent")
336
382
  ::File.unlink(application.resolver_path) if ::File.exists?(application.resolver_path)
337
383
  ::File.unlink(application.launch_agent_path) if ::File.exists?(application.launch_agent_path)
338
384
 
339
- application.get_logger.should_receive(:error).with("Cannot create the launch agent.")
385
+ application.logger.should_receive(:error).with("Cannot create the launch agent.")
340
386
  application.action_install
341
387
 
342
388
  ::File.unlink(application.resolver_path) if ::File.exists?(application.resolver_path)
@@ -344,10 +390,8 @@ describe DevDNSd::Application do
344
390
  end
345
391
 
346
392
  it "should not load an invalid agent" do
347
- class DevDNSd::Application
348
- def execute_command(command)
349
- command =~ /^launchctl/ ? raise(StandardError) : system(command)
350
- end
393
+ application.stub(:execute_command) do |command|
394
+ command =~ /^launchctl/ ? raise(StandardError) : system(command)
351
395
  end
352
396
 
353
397
  application.stub(:resolver_path).and_return(resolver_path)
@@ -355,7 +399,7 @@ describe DevDNSd::Application do
355
399
  ::File.unlink(application.resolver_path) if ::File.exists?(application.resolver_path)
356
400
  ::File.unlink(application.launch_agent_path) if ::File.exists?(application.launch_agent_path)
357
401
 
358
- application.get_logger.should_receive(:error).with("Cannot load the launch agent.")
402
+ application.logger.should_receive(:error).with("Cannot load the launch agent.")
359
403
  application.action_install
360
404
 
361
405
  ::File.unlink(application.resolver_path) if ::File.exists?(application.resolver_path)
@@ -365,7 +409,7 @@ describe DevDNSd::Application do
365
409
 
366
410
  it "should raise an exception if not running on OSX" do
367
411
  application.stub(:is_osx?).and_return(false)
368
- application.get_logger.should_receive(:fatal).with("Install DevDNSd as a local resolver is only available on MacOSX.")
412
+ application.logger.should_receive(:fatal).with("Install DevDNSd as a local resolver is only available on MacOSX.")
369
413
  expect(application.action_install).to be_false
370
414
  end
371
415
  end
@@ -401,12 +445,12 @@ describe DevDNSd::Application do
401
445
  ::File.unlink(application.launch_agent_path) if ::File.exists?(application.launch_agent_path)
402
446
  end
403
447
 
404
- it "should not load delete an invalid resolver" do
448
+ it "should not delete an invalid resolver" do
405
449
  application.stub(:resolver_path).and_return("/invalid/resolver")
406
450
  application.stub(:launch_agent_path).and_return("/invalid/agent")
407
451
 
408
452
  application.action_install
409
- application.get_logger.should_receive(:warn).at_least(1)
453
+ application.logger.should_receive(:warn).at_least(1)
410
454
  application.action_uninstall
411
455
 
412
456
  ::File.unlink(application.resolver_path) if ::File.exists?(application.resolver_path)
@@ -418,20 +462,20 @@ describe DevDNSd::Application do
418
462
  application.stub(:launch_agent_path).and_return("/invalid/agent")
419
463
 
420
464
  application.action_install
421
- application.get_logger.should_receive(:warn).at_least(1)
465
+ application.logger.should_receive(:warn).at_least(1)
422
466
  application.action_uninstall
423
467
 
424
468
  ::File.unlink(application.resolver_path) if ::File.exists?(application.resolver_path)
425
469
  ::File.unlink(application.launch_agent_path) if ::File.exists?(application.launch_agent_path)
426
470
  end
427
471
 
428
- it "should not load delete invalid agent" do
472
+ it "should not unload delete invalid agent" do
429
473
  application.stub(:resolver_path).and_return(resolver_path)
430
474
  application.stub(:launch_agent_path).and_return("/invalid/agent")
431
475
 
432
476
  application.action_install
433
477
  application.stub(:execute_command).and_raise(StandardError)
434
- application.get_logger.should_receive(:warn).at_least(1)
478
+ application.logger.should_receive(:warn).at_least(1)
435
479
  application.action_uninstall
436
480
 
437
481
  ::File.unlink(application.resolver_path) if ::File.exists?(application.resolver_path)
@@ -455,7 +499,7 @@ describe DevDNSd::Application do
455
499
 
456
500
  it "should raise an exception if not running on OSX" do
457
501
  application.stub(:is_osx?).and_return(false)
458
- application.get_logger.should_receive(:fatal).with("Install DevDNSd as a local resolver is only available on MacOSX.")
502
+ application.logger.should_receive(:fatal).with("Install DevDNSd as a local resolver is only available on MacOSX.")
459
503
  expect(application.action_uninstall).to be_false
460
504
  end
461
505
  end