ruby-net-nntp 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -11,6 +11,7 @@ end
11
11
 
12
12
  module Net
13
13
  class NNTP
14
+ # Article parsing class
14
15
  class Article
15
16
  attr_accessor :group, :headers, :body
16
17
  attr_reader :overview_format
@@ -132,10 +133,21 @@ module Net
132
133
  #
133
134
  # Parses a line of the format "Header: Value" and sets the @headers accordingly.
134
135
  # (Example: "Message-ID: <abc@def.gh>" will become @headers.message_id with the
135
- # value '<abc@def.gh>'.
136
+ # value '<abc@def.gh>'. Scans multiline headers (if header does start with a
137
+ # whitespace, it is part of the last header.
136
138
  def set_header(line)
137
- name, value = line.scan(/^(.*?): (.*)$/).flatten
138
- key = name.strip.gsub(/[^\w]/, '_').downcase
139
+ value = nil
140
+ if line =~ /^\s/ # line starts with a whitespace
141
+ oldval = @headers.send(@last_header)
142
+ value = []
143
+ value << oldval.strip
144
+ value << line.strip
145
+ key = @last_header
146
+ else
147
+ name, value = line.scan(/^(.*?): (.*)$/).flatten
148
+ key = name.strip.gsub(/[^\w]/, '_').downcase
149
+ end
150
+ @last_header = key
139
151
  @headers.add_pair(key, value)
140
152
  @headers
141
153
  end
@@ -157,7 +169,7 @@ module Net
157
169
  lines.each do |line|
158
170
  count += 1
159
171
  next if count == 1
160
- break if line =~ /^.$/
172
+ break if line =~ /^\.$/
161
173
  do_header = (do_header && line !~ /^$/)
162
174
  next if line =~ /^$/
163
175
  if do_header
@@ -1,5 +1,5 @@
1
1
  module Net
2
2
  class NNTP
3
- VERSION = "0.2.0"
3
+ VERSION = "0.2.1"
4
4
  end
5
5
  end
@@ -55,6 +55,12 @@ class TestNNTPArticle < Test::Unit::TestCase
55
55
  assert_equal 'Test', @article.headers.subject
56
56
  @article.set_header('Message-ID: <this.post@is.invalid>')
57
57
  assert_equal '<this.post@is.invalid>', @article.headers.message_id
58
+ @article.set_header('References: <this.is.a.reference.test@invalid>')
59
+ @article.set_header(' <this.is.another.reference.test@invalid>')
60
+ assert_kind_of Array, @article.headers.references
61
+ assert_equal 2, @article.headers.references.size
62
+ assert_equal '<this.is.a.reference.test@invalid>', @article.headers.references[0]
63
+ assert_equal '<this.is.another.reference.test@invalid>', @article.headers.references[1]
58
64
  end
59
65
 
60
66
  def test_parse
@@ -66,14 +72,16 @@ class TestNNTPArticle < Test::Unit::TestCase
66
72
  "",
67
73
  "test please ignore",
68
74
  "test ",
75
+ "\t",
69
76
  "."])
70
77
  assert_equal '17 Aug 2004 14:00:00 GMT', article.headers.date
71
78
  assert_equal '"abc" abc@ide.invalid', article.headers.from
72
79
  assert_equal '<this.post@is.invalid>', article.headers.message_id
73
80
  assert_equal 'ignore test', article.headers.subject
74
- assert_equal 2, article.body.size
81
+ assert_equal 3, article.body.size
75
82
  assert_equal 'test please ignore', article.body[0]
76
83
  assert_equal 'test ', article.body[1]
84
+ assert_equal "\t", article.body[2]
77
85
  article = Net::NNTP::Article.parse(["221 1 article retrieved - head follows", "Date: 17 Aug 2004 14:00:00 GMT", "From: \"abc\" abc@ide.invalid",
78
86
  "Message-ID: <this.post@is.invalid>", "Subject: ignore test", "."])
79
87
  assert_equal '17 Aug 2004 14:00:00 GMT', article.headers.date
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.4
3
3
  specification_version: 1
4
4
  name: ruby-net-nntp
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.2.0
7
- date: 2007-08-22 00:00:00 +02:00
6
+ version: 0.2.1
7
+ date: 2007-11-19 00:00:00 +01:00
8
8
  summary: Net::XXX style NNTP Library for easy access.
9
9
  require_paths:
10
10
  - lib
@@ -40,8 +40,8 @@ files:
40
40
  - test/mock
41
41
  - test/mock/mock_socket.rb
42
42
  - test/unit
43
- - test/unit/test_nntp_article.rb
44
43
  - test/unit/test_nntp_group.rb
44
+ - test/unit/test_nntp_article.rb
45
45
  - README
46
46
  - CHANGELOG
47
47
  - MIT-LICENSE
@@ -51,8 +51,8 @@ test_files:
51
51
  - test/mock
52
52
  - test/mock/mock_socket.rb
53
53
  - test/unit
54
- - test/unit/test_nntp_article.rb
55
54
  - test/unit/test_nntp_group.rb
55
+ - test/unit/test_nntp_article.rb
56
56
  rdoc_options:
57
57
  - -S
58
58
  - -N