rst 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
data/lib/rst.rb CHANGED
@@ -3,9 +3,8 @@ require "rst/cli"
3
3
  require "rst/status"
4
4
  require "rst/client"
5
5
  require "rst/user"
6
+ require "rst/user_presenter"
6
7
 
7
8
  module Rst
8
-
9
-
10
-
9
+ class InvalidUser < StandardError; end
11
10
  end
data/lib/rst/cli.rb CHANGED
@@ -31,7 +31,7 @@ module Rst
31
31
  if users.empty?
32
32
  ["No users that match."]
33
33
  else
34
- users
34
+ users.map{|u| Rst::UserPresenter.new(u) }
35
35
  end
36
36
  end
37
37
 
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[:username])
7
- @full_name = cleanup_whitespace(params[:full_name])
8
- @description = cleanup_whitespace(params[:description])
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
- def display_description
25
- if @description.nil? || @description == ""
26
- "No bio"
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')]").first["href"]
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
@@ -1,3 +1,3 @@
1
1
  module Rst
2
- VERSION = "0.2.0"
2
+ VERSION = "0.2.1"
3
3
  end
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.12.1')
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.0
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-18 00:00:00.000000000 Z
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.12.1
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.12.1
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: 3724563502227882874
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: 3724563502227882874
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