wtforum 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --debug -c
data/README.md CHANGED
@@ -21,49 +21,49 @@ Or install it yourself as:
21
21
 
22
22
  ## Features
23
23
 
24
- WTForum has the following features:
25
-
26
- * CRUD (create, read, update, & delete) user accounts
27
- ```ruby
28
- # modeled after ActiveRecord API
29
- user = WTForum::User.create username: "wtforum_test_user", email: "wtforum_test_user@example.com"
30
- user = WTForum::User.find(user.id)
31
- user.update_attributes! username: "wtforum_test_user_2", email: "wtforum_test_user_2@example.com"
32
- user.destroy
33
- ```
34
-
35
- * Log in your user via their Single Sign On (SSO) API
36
- ```ruby
37
- session = WTForum::Session.create(user.id)
38
- session.token # => REiB6U5SkxB
39
- ```
24
+ WTForum has the following features:
25
+
26
+ ### CRUD (create, read, update, & delete) user accounts
27
+
28
+ # modeled after ActiveRecord API
29
+ WTForum::User.count
30
+ user = WTForum::User.create username: "wtforum_test_user", email: "wtforum_test_user@example.com"
31
+ user = WTForum::User.find(user.id)
32
+ user = WTForum::User.find_by_username(user.username)
33
+ user.update_attributes! username: "wtforum_test_user_2", email: "wtforum_test_user_2@example.com"
34
+ user.destroy
35
+
36
+ ### Log in your user via their Single Sign On (SSO) API
37
+
38
+ session = WTForum::Session.create(user.id)
39
+ session.token # => REiB6U5SkxB
40
40
 
41
41
  ## Configuration
42
42
 
43
- Before using WTForum, you need to give it administrator credentials. It
44
- needs four pieces of information:
45
- 1) Where the forum is hosted.
46
- 2) The API key that Website Toolbox provides.
47
- 3) Username of an admin account.
48
- 4) Password for said admin account.
43
+ Before using WTForum, you need to give it administrator credentials. It
44
+ needs four pieces of information:
45
+
46
+ 1. Where the forum is hosted.
47
+ 2. The API key that Website Toolbox provides.
48
+ 3. Username of an admin account.
49
+ 4. Password for said admin account.
50
+
51
+ Example Rails config:
49
52
 
50
- Example Rails config:
51
- ```ruby
52
53
  # config/initializers/wtforum_credentials.rb
53
54
  WTForum.domain = "forum.example.com"
54
55
  WTForum.api_key = "TEgPYR4Zapz"
55
56
  WTForum.admin_username = "__admin_api_dont_delete__"
56
57
  WTForum.admin_password = "s0m3p4ssw0rd"
57
- ```
58
58
 
59
59
  ## Why do we need to specify an admin user account in the credentials?
60
60
 
61
- Unfortunately, Website Toolbox's Forum API is missing some functionality.
62
- Specifically, you can only create a new forum user account. Need to read,
63
- update, or delete an existing user via the API? You're out of luck! As a
64
- workaround, this library uses an admin account and Mechanize to sign into
65
- the website and manually fill out forms and screenscrape the results. I hope
66
- that the API's breadth of functionality improves in the future.
61
+ Unfortunately, Website Toolbox's Forum API is missing some functionality.
62
+ Specifically, you can only create a new forum user account. Need to read,
63
+ update, or delete an existing user via the API? You're out of luck! As a
64
+ workaround, this library uses an admin account and Mechanize to sign into
65
+ the website and manually fill out forms and screenscrape the results. I hope
66
+ that the API's breadth of functionality improves in the future.
67
67
 
68
68
  ## Contributing
69
69
 
@@ -5,7 +5,7 @@ module WTForum
5
5
  def self.create user_id
6
6
  uri = create_uri(user_id)
7
7
  page = Mechanize.new.get(uri)
8
- auth_token = WTForum.extract_value(:authtoken, :from => page.body)
8
+ auth_token = WTForum.extract_value(:authtoken, from: page.body)
9
9
  new(auth_token)
10
10
  end
11
11
 
data/lib/wtforum/user.rb CHANGED
@@ -31,6 +31,23 @@ module WTForum
31
31
  new(attributes)
32
32
  end
33
33
 
34
+ def self.find_by_username username
35
+ page = authorized_agent.get(find_by_username_uri(username))
36
+ body = Nokogiri::HTML.parse(page.body)
37
+
38
+ # scrape markup: <a href="/profile/1234567" title="View profile">username\t\n</a>
39
+ # search returns partial matches :( so find the exact match.
40
+ # hopefully there aren't more than 50 matches!
41
+ link = body.css("a[title='View profile']:contains('#{username}')").find do |a|
42
+ a.text.strip == username
43
+ end
44
+
45
+ link or raise NotFound
46
+
47
+ id = link["href"].split("/").last
48
+ find id
49
+ end
50
+
34
51
  def self.update user_id, attributes
35
52
  find(user_id).update_attributes!(attributes)
36
53
  end
@@ -123,6 +140,13 @@ module WTForum
123
140
  uri
124
141
  end
125
142
 
143
+ def self.find_by_username_uri username
144
+ uri = WTForum.base_uri
145
+ uri.path = "/register"
146
+ uri.query = "action=members&search=true&s_username=#{username}"
147
+ uri
148
+ end
149
+
126
150
  def self.edit_username_uri user_id
127
151
  uri = WTForum.base_uri
128
152
  uri.path = "/register/edit_username"
@@ -1,5 +1,5 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  module WTForum
4
- VERSION = "0.0.1"
4
+ VERSION = "0.1.0"
5
5
  end
@@ -17,7 +17,7 @@ describe WTForum::User do
17
17
 
18
18
  user.update_attributes! username: "wtforum_test_user_2", email: "wtforum_test_user_2@example.com"
19
19
 
20
- user = WTForum::User.find(user.id)
20
+ user = WTForum::User.find_by_username("wtforum_test_user_2")
21
21
  user.username.should == "wtforum_test_user_2"
22
22
  user.email.should == "wtforum_test_user_2@example.com"
23
23
 
data/wtforum.gemspec CHANGED
@@ -25,4 +25,5 @@ Gem::Specification.new do |spec|
25
25
  spec.add_development_dependency "bundler", "~> 1.3"
26
26
  spec.add_development_dependency "rake"
27
27
  spec.add_development_dependency "rspec"
28
+ spec.add_development_dependency "debugger"
28
29
  end
metadata CHANGED
@@ -2,14 +2,14 @@
2
2
  name: wtforum
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.1
5
+ version: 0.1.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - Micah Geisel
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-03-13 00:00:00.000000000 Z
12
+ date: 2013-03-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  type: :runtime
@@ -107,6 +107,22 @@ dependencies:
107
107
  - !ruby/object:Gem::Version
108
108
  version: '0'
109
109
  none: false
110
+ - !ruby/object:Gem::Dependency
111
+ type: :development
112
+ prerelease: false
113
+ name: debugger
114
+ version_requirements: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - ! '>='
117
+ - !ruby/object:Gem::Version
118
+ version: '0'
119
+ none: false
120
+ requirement: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ! '>='
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ none: false
110
126
  description: Ruby library that wraps Website Toolbox's forum API.
111
127
  email:
112
128
  - micah@botandrose.com
@@ -115,6 +131,7 @@ extensions: []
115
131
  extra_rdoc_files: []
116
132
  files:
117
133
  - .gitignore
134
+ - .rspec
118
135
  - Gemfile
119
136
  - LICENSE.txt
120
137
  - README.md
@@ -138,7 +155,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
138
155
  requirements:
139
156
  - - ! '>='
140
157
  - !ruby/object:Gem::Version
141
- hash: 1995096068077646637
158
+ hash: 4273963902836204732
142
159
  segments:
143
160
  - 0
144
161
  version: '0'
@@ -147,7 +164,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
147
164
  requirements:
148
165
  - - ! '>='
149
166
  - !ruby/object:Gem::Version
150
- hash: 1995096068077646637
167
+ hash: 4273963902836204732
151
168
  segments:
152
169
  - 0
153
170
  version: '0'