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 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