rst 0.2.0 → 0.2.1
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/lib/rst.rb +2 -3
- data/lib/rst/cli.rb +1 -1
- data/lib/rst/user.rb +11 -23
- data/lib/rst/user_presenter.rb +27 -0
- data/lib/rst/version.rb +1 -1
- data/rst.gemspec +1 -1
- data/spec/user_spec.rb +125 -0
- metadata +9 -6
data/lib/rst.rb
CHANGED
data/lib/rst/cli.rb
CHANGED
data/lib/rst/user.rb
CHANGED
@@ -2,31 +2,19 @@ module Rst
|
|
2
2
|
class User
|
3
3
|
attr_reader :username, :full_name, :description, :path
|
4
4
|
|
5
|
-
def initialize(params
|
6
|
-
@username = cleanup_whitespace(params
|
7
|
-
@
|
8
|
-
|
9
|
-
@path = cleanup_whitespace(params[:path])
|
10
|
-
end
|
11
|
-
|
12
|
-
def to_s
|
13
|
-
"#{@username} (#{display_full_name}): #{display_description}"
|
14
|
-
end
|
15
|
-
|
16
|
-
def display_full_name
|
17
|
-
if @full_name.nil? || @full_name == ""
|
18
|
-
"No full name"
|
19
|
-
else
|
20
|
-
@full_name
|
5
|
+
def initialize(params)
|
6
|
+
@username = cleanup_whitespace(params.fetch(:username))
|
7
|
+
if @username == ""
|
8
|
+
raise Rst::InvalidUser.new("A non-blank username is required.")
|
21
9
|
end
|
22
|
-
end
|
23
10
|
|
24
|
-
|
25
|
-
if @
|
26
|
-
"
|
27
|
-
else
|
28
|
-
@description
|
11
|
+
@path = cleanup_whitespace(params.fetch(:path))
|
12
|
+
if @path == ""
|
13
|
+
raise Rst::InvalidUser.new("A non-blank user path is required.")
|
29
14
|
end
|
15
|
+
|
16
|
+
@full_name = cleanup_whitespace(params.fetch(:full_name, ""))
|
17
|
+
@description = cleanup_whitespace(params.fetch(:description, ""))
|
30
18
|
end
|
31
19
|
|
32
20
|
def self.parse(li)
|
@@ -34,7 +22,7 @@ module Rst
|
|
34
22
|
:username => li.css("span.user-text").text,
|
35
23
|
:full_name => li.css("span.user-name").text,
|
36
24
|
:description => li.css("span.description").text,
|
37
|
-
:path => li.xpath(".//a[contains(@rel, 'user')]").
|
25
|
+
:path => li.xpath(".//a[contains(@rel, 'user')]/@href").text
|
38
26
|
)
|
39
27
|
end
|
40
28
|
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Rst
|
2
|
+
class UserPresenter
|
3
|
+
def initialize(user)
|
4
|
+
@user = user
|
5
|
+
end
|
6
|
+
|
7
|
+
def to_s
|
8
|
+
"#{@user.username} (#{full_name}): #{description}"
|
9
|
+
end
|
10
|
+
|
11
|
+
def full_name
|
12
|
+
if @user.full_name == ""
|
13
|
+
"No full name"
|
14
|
+
else
|
15
|
+
@user.full_name
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def description
|
20
|
+
if @user.description == ""
|
21
|
+
"No bio"
|
22
|
+
else
|
23
|
+
@user.description
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
data/lib/rst/version.rb
CHANGED
data/rst.gemspec
CHANGED
@@ -16,7 +16,7 @@ Gem::Specification.new do |gem|
|
|
16
16
|
gem.version = Rst::VERSION
|
17
17
|
gem.add_development_dependency('rdoc')
|
18
18
|
gem.add_development_dependency('aruba', '~> 0.4.11')
|
19
|
-
gem.add_development_dependency('minitest', '~> 2.
|
19
|
+
gem.add_development_dependency('minitest', '~> 3.2.0')
|
20
20
|
gem.add_development_dependency('mocha', '~> 0.11.3')
|
21
21
|
gem.add_development_dependency('rake','~> 0.9.2')
|
22
22
|
gem.add_development_dependency('vcr', '~> 2.1.1')
|
data/spec/user_spec.rb
ADDED
@@ -0,0 +1,125 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'rst'
|
3
|
+
|
4
|
+
describe "user" do
|
5
|
+
describe "Rst::User.new" do
|
6
|
+
it "requires a non-blank username" do
|
7
|
+
lambda { Rst::User.new(:path => "foo") }.must_raise(KeyError)
|
8
|
+
lambda { Rst::User.new(:path => "foo", :username => "") }.must_raise(
|
9
|
+
Rst::InvalidUser
|
10
|
+
)
|
11
|
+
end
|
12
|
+
|
13
|
+
it "requires a non-blank path" do
|
14
|
+
lambda { Rst::User.new(:username => "foo") }.must_raise(KeyError)
|
15
|
+
lambda { Rst::User.new(:username => "foo", :path => "") }.must_raise(
|
16
|
+
Rst::InvalidUser
|
17
|
+
)
|
18
|
+
end
|
19
|
+
|
20
|
+
it "does not require a full_name" do
|
21
|
+
Rst::User.new(
|
22
|
+
:username => "foo",
|
23
|
+
:path => "bar"
|
24
|
+
).full_name.must_equal("")
|
25
|
+
|
26
|
+
Rst::User.new(
|
27
|
+
:username => "foo",
|
28
|
+
:path => "bar",
|
29
|
+
:full_name => ""
|
30
|
+
).full_name.must_equal("")
|
31
|
+
end
|
32
|
+
|
33
|
+
it "does not require a description" do
|
34
|
+
Rst::User.new(
|
35
|
+
:username => "foo",
|
36
|
+
:path => "bar"
|
37
|
+
).description.must_equal("")
|
38
|
+
|
39
|
+
Rst::User.new(
|
40
|
+
:username => "foo",
|
41
|
+
:path => "bar",
|
42
|
+
:description => ""
|
43
|
+
).description.must_equal("")
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
describe "Rst::User.parse" do
|
48
|
+
it "can parse a status from an li that conforms to the ALPS spec" do
|
49
|
+
li = Nokogiri::HTML.parse(
|
50
|
+
<<-HERE
|
51
|
+
<li class='even user'>
|
52
|
+
<div class='info'>
|
53
|
+
<a href='/users/Carols10cents' rel='user messages'>
|
54
|
+
<span class='user-name'>
|
55
|
+
Carol Nichols
|
56
|
+
</span>
|
57
|
+
(<span class="user-text">Carols10cents</span>)
|
58
|
+
</a>
|
59
|
+
<div class='bio'>
|
60
|
+
<span class='description'>
|
61
|
+
I love Ruby
|
62
|
+
</span>
|
63
|
+
</div>
|
64
|
+
</div>
|
65
|
+
</li>
|
66
|
+
HERE
|
67
|
+
)
|
68
|
+
user = Rst::User.parse(li)
|
69
|
+
user.username.must_equal("Carols10cents")
|
70
|
+
user.path.must_equal("/users/Carols10cents")
|
71
|
+
user.full_name.must_equal("Carol Nichols")
|
72
|
+
user.description.must_equal("I love Ruby")
|
73
|
+
end
|
74
|
+
|
75
|
+
it "does not raise an error if optional elements are not present" do
|
76
|
+
li = Nokogiri::HTML.parse(
|
77
|
+
<<-HERE
|
78
|
+
<li class='even user'>
|
79
|
+
<div class='info'>
|
80
|
+
<a href='/users/Carols10cents' rel='user messages'>
|
81
|
+
<span class="user-text">Carols10cents</span>
|
82
|
+
</a>
|
83
|
+
</div>
|
84
|
+
</li>
|
85
|
+
HERE
|
86
|
+
)
|
87
|
+
user = Rst::User.parse(li)
|
88
|
+
user.username.must_equal("Carols10cents")
|
89
|
+
user.path.must_equal("/users/Carols10cents")
|
90
|
+
user.full_name.must_equal("")
|
91
|
+
user.description.must_equal("")
|
92
|
+
end
|
93
|
+
|
94
|
+
it "raises an error if the required user link is not present" do
|
95
|
+
li = Nokogiri::HTML.parse(
|
96
|
+
<<-HERE
|
97
|
+
<li class='even user'>
|
98
|
+
<div class='info'>
|
99
|
+
<a href='/users/Carols10cents' rel='messages'>
|
100
|
+
<span class="user-text">Carols10cents</span>
|
101
|
+
</a>
|
102
|
+
</div>
|
103
|
+
</li>
|
104
|
+
HERE
|
105
|
+
)
|
106
|
+
|
107
|
+
lambda { user = Rst::User.parse(li) }.must_raise(Rst::InvalidUser)
|
108
|
+
end
|
109
|
+
|
110
|
+
it "raises an error if the required username is not present" do
|
111
|
+
li = Nokogiri::HTML.parse(
|
112
|
+
<<-HERE
|
113
|
+
<li class='even user'>
|
114
|
+
<div class='info'>
|
115
|
+
<a href='/users/Carols10cents' rel='user messages'>
|
116
|
+
<span>Carols10cents</span>
|
117
|
+
</a>
|
118
|
+
</div>
|
119
|
+
</li>
|
120
|
+
HERE
|
121
|
+
)
|
122
|
+
lambda { user = Rst::User.parse(li) }.must_raise(Rst::InvalidUser)
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rst
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-06-
|
12
|
+
date: 2012-06-30 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rdoc
|
@@ -50,7 +50,7 @@ dependencies:
|
|
50
50
|
requirements:
|
51
51
|
- - ~>
|
52
52
|
- !ruby/object:Gem::Version
|
53
|
-
version: 2.
|
53
|
+
version: 3.2.0
|
54
54
|
type: :development
|
55
55
|
prerelease: false
|
56
56
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -58,7 +58,7 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - ~>
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 2.
|
61
|
+
version: 3.2.0
|
62
62
|
- !ruby/object:Gem::Dependency
|
63
63
|
name: mocha
|
64
64
|
requirement: !ruby/object:Gem::Requirement
|
@@ -168,6 +168,7 @@ files:
|
|
168
168
|
- lib/rst/client.rb
|
169
169
|
- lib/rst/status.rb
|
170
170
|
- lib/rst/user.rb
|
171
|
+
- lib/rst/user_presenter.rb
|
171
172
|
- lib/rst/version.rb
|
172
173
|
- rst.gemspec
|
173
174
|
- spec/cli_spec.rb
|
@@ -177,6 +178,7 @@ files:
|
|
177
178
|
- spec/data/vcr_cassettes/successful_messages_user.yml
|
178
179
|
- spec/data/vcr_cassettes/users_search_with_results.yml
|
179
180
|
- spec/status_spec.rb
|
181
|
+
- spec/user_spec.rb
|
180
182
|
- spec/vcr_setup.rb
|
181
183
|
homepage: https://github.com/clnclarinet/rst
|
182
184
|
licenses: []
|
@@ -192,7 +194,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
192
194
|
version: '0'
|
193
195
|
segments:
|
194
196
|
- 0
|
195
|
-
hash:
|
197
|
+
hash: 3488589923041494923
|
196
198
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
197
199
|
none: false
|
198
200
|
requirements:
|
@@ -201,7 +203,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
201
203
|
version: '0'
|
202
204
|
segments:
|
203
205
|
- 0
|
204
|
-
hash:
|
206
|
+
hash: 3488589923041494923
|
205
207
|
requirements: []
|
206
208
|
rubyforge_project:
|
207
209
|
rubygems_version: 1.8.24
|
@@ -224,4 +226,5 @@ test_files:
|
|
224
226
|
- spec/data/vcr_cassettes/successful_messages_user.yml
|
225
227
|
- spec/data/vcr_cassettes/users_search_with_results.yml
|
226
228
|
- spec/status_spec.rb
|
229
|
+
- spec/user_spec.rb
|
227
230
|
- spec/vcr_setup.rb
|