hosts 0.1.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.tar.gz.sig +0 -0
- data/.gitignore +12 -0
- data/.rspec +1 -0
- data/.travis.yml +8 -0
- data/.yardopts +5 -0
- data/Gemfile +23 -0
- data/HISTORY.md +6 -0
- data/LICENSE.md +15 -0
- data/README.md +347 -0
- data/Rakefile +48 -0
- data/hosts.gemspec +57 -0
- data/lib/aef/hosts.rb +51 -0
- data/lib/aef/hosts/comment.rb +73 -0
- data/lib/aef/hosts/element.rb +108 -0
- data/lib/aef/hosts/empty_element.rb +50 -0
- data/lib/aef/hosts/entry.rb +123 -0
- data/lib/aef/hosts/file.rb +252 -0
- data/lib/aef/hosts/helpers.rb +121 -0
- data/lib/aef/hosts/section.rb +141 -0
- data/lib/aef/hosts/version.rb +29 -0
- data/lib/hosts.rb +25 -0
- data/lib/hosts/bare.rb +23 -0
- data/spec/aef/hosts/comment_spec.rb +136 -0
- data/spec/aef/hosts/element_spec.rb +12 -0
- data/spec/aef/hosts/empty_element_spec.rb +96 -0
- data/spec/aef/hosts/entry_spec.rb +252 -0
- data/spec/aef/hosts/file_spec.rb +290 -0
- data/spec/aef/hosts/helpers_spec.rb +103 -0
- data/spec/aef/hosts/section_spec.rb +299 -0
- data/spec/fixtures/linux_hosts +21 -0
- data/spec/fixtures/windows_hosts +14 -0
- data/spec/integration/integration_spec.rb +384 -0
- data/spec/spec_helper.rb +47 -0
- metadata +202 -0
- metadata.gz.sig +4 -0
data/hosts.gemspec
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
=begin
|
3
|
+
Copyright Alexander E. Fischer <aef@raxys.net>, 2012
|
4
|
+
|
5
|
+
This file is part of Hosts.
|
6
|
+
|
7
|
+
Permission to use, copy, modify, and/or distribute this software for any
|
8
|
+
purpose with or without fee is hereby granted, provided that the above
|
9
|
+
copyright notice and this permission notice appear in all copies.
|
10
|
+
|
11
|
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
12
|
+
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
13
|
+
FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
14
|
+
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
15
|
+
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
16
|
+
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
17
|
+
PERFORMANCE OF THIS SOFTWARE.
|
18
|
+
=end
|
19
|
+
|
20
|
+
require File.expand_path('../lib/aef/hosts/version', __FILE__)
|
21
|
+
|
22
|
+
Gem::Specification.new do |s|
|
23
|
+
s.name = 'hosts'
|
24
|
+
s.version = Aef::Hosts::VERSION.dup
|
25
|
+
s.authors = ['Alexander E. Fischer']
|
26
|
+
s.email = ['aef@raxys.net']
|
27
|
+
s.homepage = 'http://github.com/aef/hosts'
|
28
|
+
s.license = 'ISC'
|
29
|
+
s.summary = 'Host file manipulation for Ruby.'
|
30
|
+
s.description = <<-DESCRIPTION
|
31
|
+
Hosts is a Ruby library able to read or manipulate the operating system's host
|
32
|
+
files. When manipulating it tries to preserve their original formatting.
|
33
|
+
DESCRIPTION
|
34
|
+
|
35
|
+
s.rubyforge_project = nil
|
36
|
+
s.has_rdoc = 'yard'
|
37
|
+
s.extra_rdoc_files = ['HISTORY.md', 'LICENSE.md']
|
38
|
+
|
39
|
+
s.files = `git ls-files`.lines.map(&:chomp)
|
40
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.lines.map(&:chomp)
|
41
|
+
s.executables = `git ls-files -- bin/*`.lines.map{|f| File.basename(f.chomp) }
|
42
|
+
s.require_paths = ["lib"]
|
43
|
+
|
44
|
+
s.required_ruby_version = '>= 1.8.7'
|
45
|
+
|
46
|
+
s.add_dependency('linebreak', '~> 2.0.0')
|
47
|
+
|
48
|
+
s.add_development_dependency('bundler', '~> 1.1.0')
|
49
|
+
s.add_development_dependency('rake', '~> 0.9.2')
|
50
|
+
s.add_development_dependency('rspec', '~> 2.8.0')
|
51
|
+
s.add_development_dependency('simplecov', '~> 0.6.1')
|
52
|
+
s.add_development_dependency('pry', '~> 0.9.8')
|
53
|
+
s.add_development_dependency('yard', '~> 0.7.5')
|
54
|
+
|
55
|
+
s.cert_chain = "#{ENV['GEM_CERT_CHAIN']}".split(':')
|
56
|
+
s.signing_key = ENV['GEM_SIGNING_KEY']
|
57
|
+
end
|
data/lib/aef/hosts.rb
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
=begin
|
3
|
+
Copyright Alexander E. Fischer <aef@raxys.net>, 2012
|
4
|
+
|
5
|
+
This file is part of Hosts.
|
6
|
+
|
7
|
+
Permission to use, copy, modify, and/or distribute this software for any
|
8
|
+
purpose with or without fee is hereby granted, provided that the above
|
9
|
+
copyright notice and this permission notice appear in all copies.
|
10
|
+
|
11
|
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
12
|
+
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
13
|
+
FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
14
|
+
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
15
|
+
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
16
|
+
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
17
|
+
PERFORMANCE OF THIS SOFTWARE.
|
18
|
+
=end
|
19
|
+
|
20
|
+
require 'set'
|
21
|
+
require 'pathname'
|
22
|
+
require 'aef/linebreak'
|
23
|
+
|
24
|
+
# Namespace for projects of Alexander E. Fischer <aef@raxys.net>.
|
25
|
+
#
|
26
|
+
# If you want to be able to simply type Example instead of Aef::Example to
|
27
|
+
# address classes in this namespace simply write the following before using the
|
28
|
+
# classes.
|
29
|
+
#
|
30
|
+
# @example Including the namespace
|
31
|
+
# include Aef
|
32
|
+
# @author Alexander E. Fischer
|
33
|
+
module Aef
|
34
|
+
|
35
|
+
# Namespace for the hosts library
|
36
|
+
module Hosts
|
37
|
+
|
38
|
+
# An exception for errors happening while parsing a hosts file
|
39
|
+
class ParserError < RuntimeError; end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
require 'aef/hosts/version'
|
44
|
+
require 'aef/hosts/helpers'
|
45
|
+
require 'aef/hosts/file'
|
46
|
+
require 'aef/hosts/element'
|
47
|
+
require 'aef/hosts/section'
|
48
|
+
require 'aef/hosts/entry'
|
49
|
+
require 'aef/hosts/comment'
|
50
|
+
require 'aef/hosts/empty_element'
|
51
|
+
|
@@ -0,0 +1,73 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
=begin
|
3
|
+
Copyright Alexander E. Fischer <aef@raxys.net>, 2012
|
4
|
+
|
5
|
+
This file is part of Hosts.
|
6
|
+
|
7
|
+
Permission to use, copy, modify, and/or distribute this software for any
|
8
|
+
purpose with or without fee is hereby granted, provided that the above
|
9
|
+
copyright notice and this permission notice appear in all copies.
|
10
|
+
|
11
|
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
12
|
+
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
13
|
+
FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
14
|
+
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
15
|
+
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
16
|
+
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
17
|
+
PERFORMANCE OF THIS SOFTWARE.
|
18
|
+
=end
|
19
|
+
|
20
|
+
require 'aef/hosts'
|
21
|
+
|
22
|
+
module Aef
|
23
|
+
module Hosts
|
24
|
+
|
25
|
+
# Represents a comment-only line as element of a hosts file
|
26
|
+
class Comment < Element
|
27
|
+
|
28
|
+
# The comment
|
29
|
+
#
|
30
|
+
# @return [String]
|
31
|
+
attr_reader :comment
|
32
|
+
|
33
|
+
# Initializes a comment
|
34
|
+
#
|
35
|
+
# @param comment [String] the comment
|
36
|
+
# @param options [Hash]
|
37
|
+
# @option options [String] :cache sets a cached String representation
|
38
|
+
def initialize(comment, options = {})
|
39
|
+
validate_options(options, :cache)
|
40
|
+
|
41
|
+
raise ArgumentError, 'Comment cannot be empty' unless comment
|
42
|
+
|
43
|
+
@comment = comment.to_s
|
44
|
+
@cache = options[:cache].to_s unless options[:cache].nil?
|
45
|
+
end
|
46
|
+
|
47
|
+
# Sets the comment
|
48
|
+
def comment=(comment)
|
49
|
+
set_if_changed(:comment, comment.to_s) do
|
50
|
+
invalidate_cache!
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
# A String representation for debugging purposes
|
55
|
+
#
|
56
|
+
# @return [String]
|
57
|
+
def inspect
|
58
|
+
generate_inspect(self, :comment, :cache)
|
59
|
+
end
|
60
|
+
|
61
|
+
protected
|
62
|
+
|
63
|
+
# Defines the algorithm to generate a String representation from scratch.
|
64
|
+
#
|
65
|
+
# @return [String] a generated String representation
|
66
|
+
def generate_string(options = {})
|
67
|
+
"##{comment}\n"
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
@@ -0,0 +1,108 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
=begin
|
3
|
+
Copyright Alexander E. Fischer <aef@raxys.net>, 2012
|
4
|
+
|
5
|
+
This file is part of Hosts.
|
6
|
+
|
7
|
+
Permission to use, copy, modify, and/or distribute this software for any
|
8
|
+
purpose with or without fee is hereby granted, provided that the above
|
9
|
+
copyright notice and this permission notice appear in all copies.
|
10
|
+
|
11
|
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
12
|
+
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
13
|
+
FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
14
|
+
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
15
|
+
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
16
|
+
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
17
|
+
PERFORMANCE OF THIS SOFTWARE.
|
18
|
+
=end
|
19
|
+
|
20
|
+
require 'aef/hosts'
|
21
|
+
|
22
|
+
module Aef
|
23
|
+
module Hosts
|
24
|
+
|
25
|
+
# The base class for elements which are aggregated by the Aef::Hosts::File
|
26
|
+
# class.
|
27
|
+
#
|
28
|
+
# @abstract This class is not supposed to be instantiated.
|
29
|
+
class Element
|
30
|
+
|
31
|
+
include Helpers
|
32
|
+
|
33
|
+
# Cached String representation
|
34
|
+
#
|
35
|
+
# @return [String, Hash, nil]
|
36
|
+
attr_reader :cache
|
37
|
+
|
38
|
+
# Deletes the cached String representation
|
39
|
+
#
|
40
|
+
# @return [Aef::Hosts::Element] a self reference
|
41
|
+
def invalidate_cache!
|
42
|
+
@cache = nil
|
43
|
+
|
44
|
+
self
|
45
|
+
end
|
46
|
+
|
47
|
+
# Tells if a String representation is cached or not
|
48
|
+
#
|
49
|
+
# @return [true, false] true if cache is not empty
|
50
|
+
def cache_filled?
|
51
|
+
@cache ? true : false
|
52
|
+
end
|
53
|
+
|
54
|
+
# A String representation for debugging purposes
|
55
|
+
#
|
56
|
+
# @return [String]
|
57
|
+
def inspect
|
58
|
+
generate_inspect(self, :cache)
|
59
|
+
end
|
60
|
+
|
61
|
+
# Provides a String representation of the element
|
62
|
+
#
|
63
|
+
# @param [Hash] options
|
64
|
+
# @option options [true, false] :force_generation if set to true, the
|
65
|
+
# cache won't be used, even if it not empty
|
66
|
+
# @option options [:unix, :windows, :mac] :linebreak_encoding the
|
67
|
+
# linebreak encoding of the result. If nothing is specified the result
|
68
|
+
# will be encoded as if :unix was specified.
|
69
|
+
# @see Aef::Linebreak#encode
|
70
|
+
def to_s(options = {})
|
71
|
+
validate_options(options, :force_generation, :linebreak_encoding)
|
72
|
+
|
73
|
+
string = ''
|
74
|
+
|
75
|
+
if !cache_filled? || options[:force_generation]
|
76
|
+
string << generate_string(options)
|
77
|
+
else
|
78
|
+
string << cache_string(options)
|
79
|
+
end
|
80
|
+
|
81
|
+
if options[:linebreak_encoding]
|
82
|
+
string = Aef::Linebreak.encode(string, options[:linebreak_encoding])
|
83
|
+
end
|
84
|
+
|
85
|
+
string
|
86
|
+
end
|
87
|
+
|
88
|
+
protected
|
89
|
+
|
90
|
+
# Defines the algorithm to generate a String representation from scratch.
|
91
|
+
#
|
92
|
+
# @abstract This method needs to be implemented in descendant classes.
|
93
|
+
# @return [String] a generated String representation
|
94
|
+
def generate_string(options = {})
|
95
|
+
raise NotImplementedError
|
96
|
+
end
|
97
|
+
|
98
|
+
# Defines the algorithm to construct the String representation from cache
|
99
|
+
#
|
100
|
+
# @return [String] the cached String representation
|
101
|
+
def cache_string(options = {})
|
102
|
+
@cache.dup
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
=begin
|
3
|
+
Copyright Alexander E. Fischer <aef@raxys.net>, 2012
|
4
|
+
|
5
|
+
This file is part of Hosts.
|
6
|
+
|
7
|
+
Permission to use, copy, modify, and/or distribute this software for any
|
8
|
+
purpose with or without fee is hereby granted, provided that the above
|
9
|
+
copyright notice and this permission notice appear in all copies.
|
10
|
+
|
11
|
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
12
|
+
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
13
|
+
FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
14
|
+
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
15
|
+
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
16
|
+
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
17
|
+
PERFORMANCE OF THIS SOFTWARE.
|
18
|
+
=end
|
19
|
+
|
20
|
+
require 'aef/hosts'
|
21
|
+
|
22
|
+
module Aef
|
23
|
+
module Hosts
|
24
|
+
|
25
|
+
# Represents an empty line as element of a hosts file
|
26
|
+
class EmptyElement < Element
|
27
|
+
|
28
|
+
# Initializes an empty Element
|
29
|
+
#
|
30
|
+
# @param [Hash] options
|
31
|
+
# @option options [String] :cache sets a cached String representation
|
32
|
+
def initialize(options = {})
|
33
|
+
validate_options(options, :cache)
|
34
|
+
|
35
|
+
@cache = options[:cache].to_s unless options[:cache].nil?
|
36
|
+
end
|
37
|
+
|
38
|
+
protected
|
39
|
+
|
40
|
+
# Defines the algorithm to generate a String representation from scratch.
|
41
|
+
#
|
42
|
+
# @return [String] a generated String representation
|
43
|
+
def generate_string(options = {})
|
44
|
+
"\n"
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
@@ -0,0 +1,123 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
=begin
|
3
|
+
Copyright Alexander E. Fischer <aef@raxys.net>, 2012
|
4
|
+
|
5
|
+
This file is part of Hosts.
|
6
|
+
|
7
|
+
Permission to use, copy, modify, and/or distribute this software for any
|
8
|
+
purpose with or without fee is hereby granted, provided that the above
|
9
|
+
copyright notice and this permission notice appear in all copies.
|
10
|
+
|
11
|
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
12
|
+
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
13
|
+
FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
14
|
+
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
15
|
+
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
16
|
+
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
17
|
+
PERFORMANCE OF THIS SOFTWARE.
|
18
|
+
=end
|
19
|
+
|
20
|
+
require 'aef/hosts'
|
21
|
+
|
22
|
+
module Aef
|
23
|
+
module Hosts
|
24
|
+
|
25
|
+
# Represents an entry line as element of a hosts file
|
26
|
+
class Entry < Element
|
27
|
+
|
28
|
+
# The network address
|
29
|
+
#
|
30
|
+
# @return [String]
|
31
|
+
attr_reader :address
|
32
|
+
|
33
|
+
# The primary hostname for the address
|
34
|
+
#
|
35
|
+
# @return [String]
|
36
|
+
attr_reader :name
|
37
|
+
|
38
|
+
# Optional comment
|
39
|
+
#
|
40
|
+
# @return [String]
|
41
|
+
attr_reader :comment
|
42
|
+
|
43
|
+
# Optional alias hostnames
|
44
|
+
#
|
45
|
+
# @return [Array<String>]
|
46
|
+
attr_reader :aliases
|
47
|
+
|
48
|
+
# Initializes an entry.
|
49
|
+
#
|
50
|
+
# @param [String] address the network address
|
51
|
+
# @param [String] name the primary hostname for the address
|
52
|
+
# @param [Hash] options
|
53
|
+
# @option options [Array<String>] :aliases a list of aliases for the
|
54
|
+
# address
|
55
|
+
# @option options [String] :comment a comment for the entry
|
56
|
+
# @option options [String] :cache a cached String representation
|
57
|
+
def initialize(address, name, options = {})
|
58
|
+
validate_options(options, :aliases, :comment, :cache)
|
59
|
+
|
60
|
+
raise ArgumentError, 'Address cannot be empty' unless address
|
61
|
+
raise ArgumentError, 'Name cannot be empty' unless name
|
62
|
+
|
63
|
+
@address = address.to_s
|
64
|
+
@name = name.to_s
|
65
|
+
@aliases = options[:aliases] || []
|
66
|
+
@comment = options[:comment].to_s unless options[:comment].nil?
|
67
|
+
@cache = options[:cache].to_s unless options[:cache].nil?
|
68
|
+
end
|
69
|
+
|
70
|
+
# Sets the network address
|
71
|
+
def address=(address)
|
72
|
+
set_if_changed(:address, address.to_s) do
|
73
|
+
invalidate_cache!
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
# Sets the primary hostname for the address
|
78
|
+
def name=(name)
|
79
|
+
set_if_changed(:name, name.to_s) do
|
80
|
+
invalidate_cache!
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
# Sets the optional comment
|
85
|
+
def comment=(comment)
|
86
|
+
set_if_changed(:comment, comment.to_s) do
|
87
|
+
invalidate_cache!
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
# Sets the optional alias hostnames
|
92
|
+
def aliases=(aliases)
|
93
|
+
set_if_changed(:aliases, [*aliases]) do
|
94
|
+
invalidate_cache!
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
# A String representation for debugging purposes
|
99
|
+
#
|
100
|
+
# @return [String]
|
101
|
+
def inspect
|
102
|
+
generate_inspect(self, :address, :name, :aliases, :comment, :cache)
|
103
|
+
end
|
104
|
+
|
105
|
+
protected
|
106
|
+
|
107
|
+
# Defines the algorithm to generate a String representation from scratch.
|
108
|
+
#
|
109
|
+
# @abstract This method needs to be implemented in descendant classes.
|
110
|
+
# @return [String] a generated String representation
|
111
|
+
def generate_string(options = nil)
|
112
|
+
if comment
|
113
|
+
suffix = " ##{comment}\n"
|
114
|
+
else
|
115
|
+
suffix = "\n"
|
116
|
+
end
|
117
|
+
|
118
|
+
[address, name, *aliases].join(' ') << suffix
|
119
|
+
end
|
120
|
+
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|