pilha 0.1.3 → 0.1.5
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/pilha/stack_overflow/answer.rb +13 -36
- data/lib/pilha/stack_overflow/comment.rb +17 -6
- data/lib/pilha/stack_overflow/user.rb +8 -7
- data/lib/pilha.rb +2 -0
- data/pilha.gemspec +1 -1
- data/spec/pilha/stack_overflow/answer_spec.rb +14 -8
- data/spec/pilha/stack_overflow/comment_spec.rb +39 -0
- data/spec/pilha/stack_overflow/user_spec.rb +11 -0
- data/spec/spec.opts +1 -1
- data/spec/spec_helper.rb +5 -1
- metadata +3 -3
@@ -1,6 +1,6 @@
|
|
1
1
|
module StackExchange
|
2
2
|
module StackOverflow
|
3
|
-
class Answer
|
3
|
+
class Answer < Base
|
4
4
|
extend Forwardable
|
5
5
|
|
6
6
|
def_delegators :@struct, :answer_id, :accepted, :answer_comments_url, :question_id,
|
@@ -10,48 +10,26 @@ module StackExchange
|
|
10
10
|
class << self
|
11
11
|
attr_reader :client
|
12
12
|
|
13
|
-
def
|
14
|
-
|
15
|
-
response = client.request('/answers/:id', options)
|
16
|
-
OpenStruct.new(parse response)
|
13
|
+
def find(id, options = {})
|
14
|
+
request('/answers/:id', id, options).answers.first
|
17
15
|
end
|
18
16
|
|
19
17
|
def find_by_user_id(id, options = {})
|
20
|
-
|
21
|
-
response = client.request('/users/:id/answers', options)
|
22
|
-
OpenStruct.new(parse response)
|
18
|
+
request('/users/:id/answers', id, options)
|
23
19
|
end
|
24
20
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
setup_owner! hash
|
29
|
-
end
|
30
|
-
|
31
|
-
def setup_comments!(hash)
|
32
|
-
if hash['comments']
|
33
|
-
hash['comments'] = hash['comments'].map {|c| Comment.new c }
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
def setup_owner!(hash)
|
38
|
-
if hash['owner']
|
39
|
-
hash['owner'] = User.new(hash['owner'])
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
def setup_answers!(response)
|
44
|
-
if response['answers']
|
45
|
-
response['answers'] = response['answers'].map { |a| Answer.new a }
|
46
|
-
end
|
47
|
-
end
|
21
|
+
def find_by_question_id(id, options = {})
|
22
|
+
request('/questions/:id/answers', id, options)
|
23
|
+
end
|
48
24
|
|
25
|
+
private
|
49
26
|
def parse(response)
|
50
|
-
response['answers'].each do |
|
51
|
-
|
27
|
+
response['answers'].each do |answer|
|
28
|
+
parse_with_class(answer, 'comments', Comment)
|
29
|
+
parse_with_class(answer, 'owner', User)
|
52
30
|
end
|
53
|
-
|
54
|
-
response
|
31
|
+
parse_with_class(response, 'answers', Answer)
|
32
|
+
OpenStruct.new response
|
55
33
|
end
|
56
34
|
end
|
57
35
|
|
@@ -62,7 +40,6 @@ module StackExchange
|
|
62
40
|
def id
|
63
41
|
@struct.answer_id
|
64
42
|
end
|
65
|
-
|
66
43
|
end
|
67
44
|
end
|
68
45
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module StackExchange
|
2
2
|
module StackOverflow
|
3
|
-
class Comment
|
3
|
+
class Comment < Base
|
4
4
|
extend Forwardable
|
5
5
|
|
6
6
|
def_delegators :@struct, :comment_id, :creation_date, :owner, :post_id,
|
@@ -10,14 +10,25 @@ module StackExchange
|
|
10
10
|
attr_reader :client
|
11
11
|
|
12
12
|
def find_by_id(id, options = {})
|
13
|
-
|
14
|
-
|
13
|
+
request('/comments/:id/', id, options)
|
14
|
+
end
|
15
15
|
|
16
|
-
|
17
|
-
|
16
|
+
def find_by_question_id(id, options = {})
|
17
|
+
request('/questions/:id/comments', id, options)
|
18
|
+
end
|
18
19
|
|
19
|
-
|
20
|
+
def find_by_user_id(id, options = {})
|
21
|
+
request('/users/:id/comments', id, options)
|
20
22
|
end
|
23
|
+
|
24
|
+
private
|
25
|
+
def parse(response)
|
26
|
+
response['comments'].each do |comment|
|
27
|
+
parse_with_class(comment, 'owner', User)
|
28
|
+
end
|
29
|
+
parse_with_class(response, 'comments', Comment)
|
30
|
+
OpenStruct.new response
|
31
|
+
end
|
21
32
|
end
|
22
33
|
|
23
34
|
def initialize(hash)
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module StackExchange
|
2
2
|
module StackOverflow
|
3
3
|
|
4
|
-
class User
|
4
|
+
class User < Base
|
5
5
|
extend Forwardable
|
6
6
|
|
7
7
|
def_delegators :@struct, :user_id, :user_type, :creation_date, :display_name,
|
@@ -18,21 +18,22 @@ module StackExchange
|
|
18
18
|
attr_reader :client
|
19
19
|
|
20
20
|
def all(options = {})
|
21
|
-
|
22
|
-
OpenStruct.new(parse response)
|
21
|
+
parse client.request('/users', options)
|
23
22
|
end
|
24
23
|
|
25
24
|
def find_by_badge_id(id, options = {})
|
26
|
-
|
27
|
-
|
28
|
-
|
25
|
+
request('/badges/:id', id, options)
|
26
|
+
end
|
27
|
+
|
28
|
+
def find(id, options = {})
|
29
|
+
request('/users/:id', id, options).users.first
|
29
30
|
end
|
30
31
|
|
31
32
|
private
|
32
33
|
def parse(response)
|
33
34
|
users = response['users'].map { |user| User.new(user) }
|
34
35
|
response['users'] = users
|
35
|
-
response
|
36
|
+
OpenStruct.new response
|
36
37
|
end
|
37
38
|
end
|
38
39
|
|
data/lib/pilha.rb
CHANGED
@@ -1,11 +1,13 @@
|
|
1
1
|
path = File.expand_path(File.dirname(__FILE__))
|
2
2
|
$LOAD_PATH.unshift(path) unless $LOAD_PATH.include?(path)
|
3
3
|
|
4
|
+
require 'rubygems'
|
4
5
|
require 'zlib'
|
5
6
|
require 'json'
|
6
7
|
require 'open-uri'
|
7
8
|
require 'forwardable'
|
8
9
|
|
10
|
+
require 'pilha/stack_overflow/base'
|
9
11
|
require 'pilha/stack_overflow/statistics'
|
10
12
|
require 'pilha/stack_overflow/badge'
|
11
13
|
require 'pilha/stack_overflow/user'
|
data/pilha.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |gem|
|
2
2
|
gem.name = "pilha"
|
3
|
-
gem.version = "0.1.
|
3
|
+
gem.version = "0.1.5"
|
4
4
|
gem.authors = ["Dalto Curvelano Junior"]
|
5
5
|
gem.description = "A ruby wrapper to the Stack Exchange (Stack Overflow and friends) API."
|
6
6
|
gem.summary = "A ruby wrapper to the Stack Exchange (Stack Overflow and friends) API."
|
@@ -3,11 +3,8 @@ require 'spec_helper'
|
|
3
3
|
describe StackExchange::StackOverflow::Answer do
|
4
4
|
|
5
5
|
it 'should return a answer identified by its id' do
|
6
|
-
|
7
|
-
response.total.should == 1
|
8
|
-
response.pagesize.should == 30
|
6
|
+
answer = StackOverflow::Answer.find(666)
|
9
7
|
|
10
|
-
answer = response.answers.first
|
11
8
|
answer.id.should == 666
|
12
9
|
answer.accepted.should be_false
|
13
10
|
answer.answer_comments_url.should == "/answers/666/comments"
|
@@ -21,10 +18,10 @@ describe StackExchange::StackOverflow::Answer do
|
|
21
18
|
user.email_hash.should == "298e0497aa6b76a573f17e6a2bb22dec"
|
22
19
|
end
|
23
20
|
|
24
|
-
it 'should include
|
25
|
-
|
26
|
-
|
27
|
-
comment =
|
21
|
+
it 'should include comments associations' do
|
22
|
+
answer = StackOverflow::Answer.find 555
|
23
|
+
answer.comments.size.should_not == 1
|
24
|
+
comment = answer.comments.first
|
28
25
|
comment.id.should == 278816
|
29
26
|
end
|
30
27
|
|
@@ -36,6 +33,15 @@ describe StackExchange::StackOverflow::Answer do
|
|
36
33
|
first_answer = response.answers.first
|
37
34
|
first_answer.answer_id.should == 1250987
|
38
35
|
end
|
36
|
+
|
37
|
+
it 'should find all answers associated to a question' do
|
38
|
+
response = StackOverflow::Answer.find_by_question_id(549)
|
39
|
+
response.answers.size.should == 20
|
40
|
+
|
41
|
+
first_answer = response.answers.first
|
42
|
+
first_answer.id.should == 2801312
|
43
|
+
first_answer.accepted.should be_false
|
44
|
+
end
|
39
45
|
end
|
40
46
|
|
41
47
|
|
@@ -16,4 +16,43 @@ describe StackExchange::StackOverflow::Comment do
|
|
16
16
|
comment.score.should == 7
|
17
17
|
comment.body.should == "not sure why this is getting downvoted -- it is correct! Double check it in your compiler if you don't believe him!"
|
18
18
|
end
|
19
|
+
|
20
|
+
it 'should get comments associated with a question identified by id' do
|
21
|
+
response = StackOverflow::Comment.find_by_question_id 549
|
22
|
+
response.total.should == 1
|
23
|
+
|
24
|
+
comment = response.comments.first
|
25
|
+
comment.id.should == 858028
|
26
|
+
comment.creation_date.should == 1245970256
|
27
|
+
|
28
|
+
comment.post_id.should == 549
|
29
|
+
comment.post_type.should == "question"
|
30
|
+
comment.score.should be_zero
|
31
|
+
comment.body.should == "Why exclude HTTP Basic Authentication? It can work in HTML Forms via Ajax: <a href=\"http://www.peej.co.uk/articles/http-auth-with-html-forms.html\" rel=\"nofollow\">peej.co.uk/articles/…</a>"
|
32
|
+
|
33
|
+
comment.owner.id.should == 52963
|
34
|
+
comment.owner.user_type.should == "registered"
|
35
|
+
comment.owner.display_name.should == "system PAUSE"
|
36
|
+
comment.owner.reputation.should == 2143
|
37
|
+
comment.owner.email_hash.should == "4e47334ae70850cd210b952cdb0cb9be"
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'should get comments associated with a user identified by id' do
|
41
|
+
response = StackOverflow::Comment.find_by_user_id 549
|
42
|
+
response.total.should == 117
|
43
|
+
|
44
|
+
comment = response.comments.first
|
45
|
+
comment.id.should == 2739275
|
46
|
+
comment.creation_date.should == 1272292520
|
47
|
+
comment.post_id.should == 2580831
|
48
|
+
comment.post_type.should == "answer"
|
49
|
+
comment.score.should be_zero
|
50
|
+
comment.body.should == "Thanks so much for this. I had a devilish time finding this in JetBrains' documentation."
|
51
|
+
|
52
|
+
comment.owner.id.should == 549
|
53
|
+
comment.owner.user_type.should == "registered"
|
54
|
+
comment.owner.display_name.should == "Josh Kodroff"
|
55
|
+
comment.owner.reputation.should == 1542
|
56
|
+
comment.owner.email_hash.should == "9e7ef08258f04dab37b43842d261aea8"
|
57
|
+
end
|
19
58
|
end
|
@@ -44,4 +44,15 @@ describe StackExchange::StackOverflow::User do
|
|
44
44
|
response.pagesize.should == 50
|
45
45
|
response.users.size.should == 50
|
46
46
|
end
|
47
|
+
|
48
|
+
it 'should find a user by its id' do
|
49
|
+
user = StackOverflow::User.find 555
|
50
|
+
user.id.should == 555
|
51
|
+
user.user_type.should == "registered"
|
52
|
+
user.creation_date.should == 1218041039
|
53
|
+
user.display_name == "Hunter"
|
54
|
+
user.reputation.should == 980
|
55
|
+
user.email_hash.should == "fed6c543fa3473193cecf34d0ccb1b77"
|
56
|
+
user.age.should == 30
|
57
|
+
end
|
47
58
|
end
|
data/spec/spec.opts
CHANGED
@@ -1,2 +1,2 @@
|
|
1
1
|
--color
|
2
|
-
--format
|
2
|
+
--format specdoc
|
data/spec/spec_helper.rb
CHANGED
@@ -33,6 +33,10 @@ register(:url => 'badges/9/', :body => 'badges_by_id')
|
|
33
33
|
register(:url => 'badges/9/?pagesize=50', :body => 'badges_by_id_page2')
|
34
34
|
register(:url => 'badges/tags/', :body => 'badges_tag_based')
|
35
35
|
register(:url => 'answers/666/', :body => 'answers_by_id')
|
36
|
-
register(:url => 'answers/555
|
36
|
+
register(:url => 'answers/555/', :body => 'answer_with_comments')
|
37
37
|
register(:url => 'comments/1/', :body => 'comments')
|
38
38
|
register(:url => 'users/1/answers/', :body => 'users_answers')
|
39
|
+
register(:url => 'questions/549/answers/', :body => 'answers_by_question_id')
|
40
|
+
register(:url => 'questions/549/comments/', :body => 'comments_by_question_id')
|
41
|
+
register(:url => 'users/555/', :body => 'users_by_id')
|
42
|
+
register(:url => 'users/549/comments/', :body => 'comments_by_user_id')
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
version: 0.1.
|
8
|
+
- 5
|
9
|
+
version: 0.1.5
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Dalto Curvelano Junior
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-05-
|
17
|
+
date: 2010-05-28 00:00:00 -03:00
|
18
18
|
default_executable:
|
19
19
|
dependencies: []
|
20
20
|
|