wol 0.2.1 → 0.2.2

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/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.1
1
+ 0.2.2
data/bin/wol CHANGED
@@ -106,7 +106,7 @@ class Runner
106
106
  end
107
107
 
108
108
  def self.version
109
- "Ruby Wake-On-LAN version 0.2.1"
109
+ "Ruby Wake-On-LAN version 0.2.2"
110
110
  end
111
111
 
112
112
  def self.wake(options = {})
@@ -1,5 +1,7 @@
1
+ # Parse a text file containing hardware addresses, host names/addresses, and port numbers
1
2
  class ParseFile
2
3
 
4
+ # Parse a given text file and return a hash containing the results
3
5
  def self.parse(file)
4
6
  hosts = []
5
7
  if File.exist?(file) && File.readable?(file)
@@ -22,14 +24,19 @@ class ParseFile
22
24
  return hosts
23
25
  end
24
26
 
27
+ private
28
+
29
+ # Check if a given hardware address is correctly formed.
25
30
  def self.check_mac(mac)
26
31
  /^(\S{1,2}:\S{1,2}:\S{1,2}:\S{1,2}:\S{1,2}:\S{1,2})?$/.match(mac)
27
32
  end
28
33
 
34
+ # Check that a host/ip address doesn't contain any illegal characters.
29
35
  def self.check_host(host)
30
36
  /(^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$)|(^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9])$)/.match(host)
31
37
  end
32
38
 
39
+ # Make sure that a given port number is an integer in the correct range (1..61000).
33
40
  def self.sanitize_port(port)
34
41
  p = port.to_i
35
42
  return (1..61000).include?(p) ? p : 9
data/lib/wol.rb CHANGED
@@ -35,7 +35,7 @@ class Wol
35
35
  @socket.setsockopt(Socket::SOL_SOCKET,Socket::SO_BROADCAST,1)
36
36
  end
37
37
 
38
- # Close the socket opened by WakeOnLan initialization
38
+ # Close the socket opened by Wol initialization
39
39
  def close
40
40
  @socket.close
41
41
  @socket=""
@@ -0,0 +1,24 @@
1
+ # File structure
2
+ # --------------
3
+ # - blank lines are ignored
4
+ # - comment lines are ignored (lines starting with a hash mark '#')
5
+ # - other lines are considered valid records and can have 3 columns:
6
+ #
7
+ # Hardware address, IP address, destination port
8
+ #
9
+ # the last two are optional, in which case the following defaults
10
+ # are used:
11
+ #
12
+ # IP address: 255.255.255.255 (the limited broadcast address)
13
+ # port: 9 (the discard port)
14
+ #
15
+
16
+ 01:02:03:04:05:06 192.168.1.255 9
17
+ 01:02:03:04:05:06 192.168.2.230 12
18
+ 07:09:09:0A:0B:0C example.com
19
+ 0D:0E:0F:00:10:11
20
+
21
+ # Invalid entries
22
+ FF:FF:aa
23
+ 0D:0E:0F:00:10:11 ;
24
+ 07:09:09:0A:0B:0C 192.168.1.254 a
@@ -0,0 +1,12 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe "ParseFile" do
4
+ it "be able to parse a test file correctly" do
5
+ expected = [{:port=>9, :mac=>"01:02:03:04:05:06", :address=>"192.168.1.255"},
6
+ {:port=>12, :mac=>"01:02:03:04:05:06", :address=>"192.168.2.230"},
7
+ {:port=>9, :mac=>"07:09:09:0A:0B:0C", :address=>"example.com"},
8
+ {:port=>9, :mac=>"07:09:09:0A:0B:0C", :address=>"192.168.1.254"}]
9
+
10
+ ParseFile.parse(File.expand_path(File.dirname(__FILE__) + '/hosts.wol')).should == expected
11
+ end
12
+ end
@@ -1,6 +1,7 @@
1
1
  $LOAD_PATH.unshift(File.dirname(__FILE__))
2
2
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
3
  require 'wol'
4
+ require "parsefile"
4
5
  require 'spec'
5
6
  require 'spec/autorun'
6
7
 
@@ -21,6 +21,10 @@ describe "Wake-On-LAN" do
21
21
  Wol.new(:macs => "00:08:a1:a9:58:f6", :address => "example.com", :port => 80).wake.should == "Sending magic packet to example.com:80 with 00:08:a1:a9:58:f6\n"
22
22
  end
23
23
 
24
+ it "should send MagicPackets to several hardware addresses at once" do
25
+ Wol.new(:macs => ["ff:ff:ff:ff:ff:cc", "ff:ff:ff:ff:cc:cc", "ff:ff:ff:ccf:cc:cc"]).wake.should == "Sending magic packet to 255.255.255.255:9 with ff:ff:ff:ff:ff:cc\nSending magic packet to 255.255.255.255:9 with ff:ff:ff:ff:cc:cc\nSending magic packet to 255.255.255.255:9 with ff:ff:ff:ccf:cc:cc\n"
26
+ end
27
+
24
28
  it "should return nil if quiet is set to true" do
25
29
  Wol.new(:quiet => true).wake.should == nil
26
30
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wol
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matias Korhonen
@@ -42,6 +42,8 @@ files:
42
42
  - bin/wol
43
43
  - lib/parsefile.rb
44
44
  - lib/wol.rb
45
+ - spec/hosts.wol
46
+ - spec/parsefile_spec.rb
45
47
  - spec/spec.opts
46
48
  - spec/spec_helper.rb
47
49
  - spec/wol_spec.rb
@@ -78,5 +80,6 @@ summary: Ruby WoL
78
80
  test_files:
79
81
  - spec/spec_helper.rb
80
82
  - spec/wol_spec.rb
83
+ - spec/parsefile_spec.rb
81
84
  - test/test_wol.rb
82
85
  - test/helper.rb