rubyoverflow 0.5 → 1.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +22 -11
- data/RELEASENOTES +97 -1
- data/Rakefile +49 -7
- data/VERSION +1 -1
- data/lib/rubyoverflow.rb +92 -18
- data/lib/rubyoverflow/answer.rb +61 -0
- data/lib/rubyoverflow/answers.rb +60 -0
- data/lib/rubyoverflow/apiSite.rb +32 -0
- data/lib/rubyoverflow/apiSites.rb +25 -0
- data/lib/rubyoverflow/apiVersion.rb +6 -0
- data/lib/rubyoverflow/badge.rb +44 -0
- data/lib/rubyoverflow/badgeCounts.rb +22 -0
- data/lib/rubyoverflow/badges.rb +59 -0
- data/lib/rubyoverflow/base.rb +76 -0
- data/lib/rubyoverflow/comment.rb +41 -0
- data/lib/rubyoverflow/comments.rb +115 -0
- data/lib/rubyoverflow/errors.rb +17 -0
- data/lib/rubyoverflow/pagedBase.rb +27 -0
- data/lib/rubyoverflow/pagedDash.rb +7 -0
- data/lib/rubyoverflow/postTimelineEvent.rb +93 -0
- data/lib/rubyoverflow/postTimelineEvents.rb +39 -0
- data/lib/rubyoverflow/question.rb +110 -0
- data/lib/rubyoverflow/questions.rb +104 -0
- data/lib/rubyoverflow/repChange.rb +34 -0
- data/lib/rubyoverflow/repChanges.rb +41 -0
- data/lib/rubyoverflow/revision.rb +62 -0
- data/lib/rubyoverflow/revisions.rb +52 -0
- data/lib/rubyoverflow/statistics.rb +57 -0
- data/lib/rubyoverflow/styling.rb +19 -0
- data/lib/rubyoverflow/tag.rb +27 -0
- data/lib/rubyoverflow/tags.rb +46 -0
- data/lib/rubyoverflow/user.rb +181 -0
- data/lib/rubyoverflow/userTimelineEvent.rb +43 -0
- data/lib/rubyoverflow/userTimelineEvents.rb +35 -0
- data/lib/rubyoverflow/users.rb +67 -18
- data/test/apiKey.rb +5 -0
- data/test/helper.rb +159 -0
- data/test/test_answer.rb +20 -0
- data/test/test_answers.rb +32 -0
- data/test/test_badge.rb +18 -0
- data/test/test_badges.rb +30 -0
- data/test/test_base.rb +63 -0
- data/test/test_statistics.rb +26 -0
- data/test/test_user.rb +56 -0
- data/test/test_users.rb +37 -0
- metadata +122 -87
- data/.gitignore +0 -4
- data/.rvmrc +0 -47
- data/.travis.yml +0 -5
- data/Gemfile +0 -3
- data/lib/rubyoverflow/sites.rb +0 -20
- data/lib/rubyoverflow/version.rb +0 -3
- data/rubyoverflow.gemspec +0 -26
- data/spec/sites_spec.rb +0 -18
- data/spec/spec_helper.rb +0 -3
- data/spec/users_spec.rb +0 -23
@@ -0,0 +1,32 @@
|
|
1
|
+
module Rubyoverflow
|
2
|
+
class ApiSite
|
3
|
+
attr_reader :name, :logo_url, :api_endpoint, :site_url, :description, :icon_url, :state, :styling, :aliases
|
4
|
+
|
5
|
+
def initialize(hash,url='')
|
6
|
+
dash = ApiSiteDash.new hash
|
7
|
+
|
8
|
+
@name = dash.name
|
9
|
+
@logo_url = dash.logo_url
|
10
|
+
@api_endpoint = dash.api_endpoint
|
11
|
+
@site_url = dash.site_url
|
12
|
+
@description = dash.description
|
13
|
+
@icon_url = dash.icon_url
|
14
|
+
@state = dash.state
|
15
|
+
@styling = Styling.new dash.styling if dash.styling
|
16
|
+
@aliases = dash.aliases
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
class ApiSiteDash < BaseDash
|
22
|
+
property :aliases
|
23
|
+
property :name
|
24
|
+
property :logo_url
|
25
|
+
property :api_endpoint
|
26
|
+
property :site_url
|
27
|
+
property :description
|
28
|
+
property :icon_url
|
29
|
+
property :state
|
30
|
+
property :styling
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Rubyoverflow
|
2
|
+
class ApiSites < Base
|
3
|
+
attr_reader :api_sites
|
4
|
+
def initialize(hash, url = '')
|
5
|
+
mash = ApiSitesDash.new hash
|
6
|
+
@api_sites = Array.new
|
7
|
+
|
8
|
+
mash.api_sites.each{|siteHash| @api_sites.push(ApiSite.new siteHash)}
|
9
|
+
end
|
10
|
+
|
11
|
+
class << self
|
12
|
+
def retrieve_sites()
|
13
|
+
client = Client.stackauth_client(Base.client.api_key)
|
14
|
+
|
15
|
+
hash,url = client.request('sites',{})
|
16
|
+
|
17
|
+
ApiSites.new hash,url
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
class ApiSitesDash < BaseDash
|
23
|
+
property :api_sites
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module Rubyoverflow
|
2
|
+
class Badge < Base
|
3
|
+
attr_reader :badge_id, :rank, :name, :description, :award_count, :tag_based, :user, :badges_recipients_url
|
4
|
+
|
5
|
+
def initialize(hash, request_path = '')
|
6
|
+
dash = BadgeDash.new hash
|
7
|
+
|
8
|
+
@badge_id = dash.badge_id
|
9
|
+
@rank = dash.rank
|
10
|
+
@name = dash.name
|
11
|
+
@description = dash.description
|
12
|
+
@award_count = dash.award_count
|
13
|
+
@tag_based = dash.tag_based
|
14
|
+
@user = User.new dash.user if dash.user
|
15
|
+
@badges_recipients_url = dash.badges_recipients_url
|
16
|
+
end
|
17
|
+
|
18
|
+
def item_id
|
19
|
+
@badge_id
|
20
|
+
end
|
21
|
+
|
22
|
+
#Retrieves all the users that have received the badge
|
23
|
+
def get_recipients(parameters = {})
|
24
|
+
if @badges_recipients_url
|
25
|
+
hash,url =request(@badges_recipients_url, parameters)
|
26
|
+
Users.new hash, url
|
27
|
+
else
|
28
|
+
nil
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
class BadgeDash < BaseDash
|
35
|
+
property :badge_id
|
36
|
+
property :rank
|
37
|
+
property :name
|
38
|
+
property :description
|
39
|
+
property :award_count
|
40
|
+
property :tag_based
|
41
|
+
property :user
|
42
|
+
property :badges_recipients_url
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Rubyoverflow
|
2
|
+
class BadgeCounts
|
3
|
+
|
4
|
+
attr_reader :gold
|
5
|
+
attr_reader :silver
|
6
|
+
attr_reader :bronze
|
7
|
+
|
8
|
+
def initialize(hash, request_path = '')
|
9
|
+
dash = BadgeCountsDash.new hash
|
10
|
+
@gold = dash.gold
|
11
|
+
@silver = dash.silver
|
12
|
+
@bronze = dash.bronze
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
class BadgeCountsDash < BaseDash
|
18
|
+
property :gold
|
19
|
+
property :silver
|
20
|
+
property :bronze
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
module Rubyoverflow
|
2
|
+
class Badges < PagedBase
|
3
|
+
|
4
|
+
attr_reader :badges
|
5
|
+
|
6
|
+
def initialize(hash, request_path = '')
|
7
|
+
dash = BadgesDash.new hash
|
8
|
+
|
9
|
+
@badges = Array.new
|
10
|
+
dash.badges.each{ |badgeHash| @badges.push(Badge.new badgeHash)}
|
11
|
+
|
12
|
+
super(dash, request_path)
|
13
|
+
end
|
14
|
+
|
15
|
+
class <<self
|
16
|
+
#Retrieves all badges in alphabetical order
|
17
|
+
#
|
18
|
+
#Maps to '/badges'
|
19
|
+
def retrieve_all
|
20
|
+
hash, url = request('badges')
|
21
|
+
Badges.new hash, url
|
22
|
+
end
|
23
|
+
|
24
|
+
#Retrieves all standard, non-tag-based badges in alphabetical order
|
25
|
+
#
|
26
|
+
#Maps to '/badges/name'
|
27
|
+
def retrieve_all_non_tag_based
|
28
|
+
hash, url = request('badges/name')
|
29
|
+
Badges.new hash, url
|
30
|
+
end
|
31
|
+
|
32
|
+
#Retrieves all tag-based badges in alphabetical order
|
33
|
+
#
|
34
|
+
#Maps to '/badges/tags'
|
35
|
+
def retrieve_all_tag_based
|
36
|
+
hash, url = request('badges/tags')
|
37
|
+
Badges.new hash, url
|
38
|
+
end
|
39
|
+
|
40
|
+
#Retrieves all badges that have been awarded to a set of users by their id(s)
|
41
|
+
#
|
42
|
+
#id can be an int, string or an array of ints or strings
|
43
|
+
#
|
44
|
+
#Maps to '/users/{id}/badges'
|
45
|
+
def retrieve_by_user(id)
|
46
|
+
id = convert_to_id_list(id)
|
47
|
+
|
48
|
+
hash, url = request('users/'+id.to_s+'/badges')
|
49
|
+
Badges.new hash, url
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
|
56
|
+
class BadgesDash < PagedDash
|
57
|
+
property :badges
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
module Rubyoverflow
|
2
|
+
class Base
|
3
|
+
|
4
|
+
def request(path, parameters = {})
|
5
|
+
Base.request(path, parameters)
|
6
|
+
end
|
7
|
+
|
8
|
+
def find_parse_querystring(rawurl)
|
9
|
+
queryHash = {}
|
10
|
+
if rawurl.include? '?'
|
11
|
+
url, querystring = rawurl.split('?')
|
12
|
+
|
13
|
+
if querystring
|
14
|
+
querystring.split('&').each {|pair|
|
15
|
+
key,value=pair.split('=')
|
16
|
+
queryHash[key]=value
|
17
|
+
}
|
18
|
+
queryHash
|
19
|
+
end
|
20
|
+
url.sub!(Base.client.host_path,'')
|
21
|
+
return url,queryHash
|
22
|
+
|
23
|
+
else
|
24
|
+
url = rawurl
|
25
|
+
end
|
26
|
+
url.sub!(Base.client.host_path,'')
|
27
|
+
return url,queryHash
|
28
|
+
end
|
29
|
+
|
30
|
+
class << self
|
31
|
+
def client
|
32
|
+
@client ||= Rubyoverflow::Client.config
|
33
|
+
end
|
34
|
+
|
35
|
+
def request(path, parameters = {})
|
36
|
+
client.request(path, parameters)
|
37
|
+
end
|
38
|
+
|
39
|
+
def convert_to_id_list(id)
|
40
|
+
id = convert_if_array(id)
|
41
|
+
id = id.item_id if id.respond_to?(:item_id)
|
42
|
+
id.to_s
|
43
|
+
end
|
44
|
+
|
45
|
+
def convert_if_array(id)
|
46
|
+
new_id_list = Array.new
|
47
|
+
if id.kind_of?(Array)
|
48
|
+
id.each do |item|
|
49
|
+
if item.respond_to? :item_id
|
50
|
+
new_id_list.push item.item_id
|
51
|
+
elsif item.kind_of?(String) || item.kind_of?(Integer)
|
52
|
+
new_id_list.push item
|
53
|
+
end
|
54
|
+
end
|
55
|
+
return new_id_list.join(';')
|
56
|
+
else
|
57
|
+
return id
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def change_end_point(endpoint)
|
62
|
+
Client.change_end_point endpoint
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
|
68
|
+
class BaseDash < Hashie::Dash
|
69
|
+
def initialize(hash={})
|
70
|
+
hash2 = Hash.new
|
71
|
+
hash.each { |key, value| hash2[key.strip] = value }
|
72
|
+
hash = hash2
|
73
|
+
super(hash)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Rubyoverflow
|
2
|
+
class Comment
|
3
|
+
|
4
|
+
attr_reader :comment_id
|
5
|
+
attr_reader :creation_date
|
6
|
+
attr_reader :owner
|
7
|
+
attr_reader :reply_to_user
|
8
|
+
attr_reader :post_id
|
9
|
+
attr_reader :post_type
|
10
|
+
attr_reader :score
|
11
|
+
attr_reader :edit_count
|
12
|
+
attr_reader :body
|
13
|
+
|
14
|
+
def initialize(hash, request_path = '')
|
15
|
+
dash = CommentDash.new hash
|
16
|
+
|
17
|
+
@comment_id = dash.comment_id
|
18
|
+
@creation_date = dash.creation_date
|
19
|
+
@owner = User.new dash.owner
|
20
|
+
@reply_to_user = User.new dash.reply_to_user if dash.reply_to_user
|
21
|
+
@post_id = dash.post_id
|
22
|
+
@post_type = dash.post_type
|
23
|
+
@score = dash.score
|
24
|
+
@edit_count = dash.edit_count
|
25
|
+
@body = dash.body
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
class CommentDash < BaseDash
|
31
|
+
property :comment_id
|
32
|
+
property :creation_date
|
33
|
+
property :owner
|
34
|
+
property :reply_to_user
|
35
|
+
property :post_id
|
36
|
+
property :post_type
|
37
|
+
property :score
|
38
|
+
property :edit_count
|
39
|
+
property :body
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,115 @@
|
|
1
|
+
module Rubyoverflow
|
2
|
+
class Comments < PagedBase
|
3
|
+
|
4
|
+
attr_reader :comments
|
5
|
+
|
6
|
+
def initialize(hash, request_path = '')
|
7
|
+
dash = CommentsDash.new hash
|
8
|
+
|
9
|
+
@comments = Array.new
|
10
|
+
dash.comments.each{ |commentHash| @comments.push(Comment.new commentHash)}
|
11
|
+
|
12
|
+
super(dash, request_path)
|
13
|
+
end
|
14
|
+
|
15
|
+
#Retrieves the next set of comments using the same parameters used to retrieve the current set
|
16
|
+
def get_next_set
|
17
|
+
hash,url = perform_next_page_request
|
18
|
+
Comments.new hash,url
|
19
|
+
end
|
20
|
+
|
21
|
+
class << self
|
22
|
+
|
23
|
+
#Retieves a set of comments by a set by their ids
|
24
|
+
#
|
25
|
+
#id can be an int, string, or an array of ints or strings
|
26
|
+
#
|
27
|
+
#Maps to 'comments/{id}
|
28
|
+
def retrieve_by_id(id, parameters = {})
|
29
|
+
id = convert_to_id_list(id)
|
30
|
+
|
31
|
+
hash, url = request('comments/'+id.to_s, parameters)
|
32
|
+
Comments.new hash, url
|
33
|
+
end
|
34
|
+
|
35
|
+
#Retrieves a set of comments made by a set of users by their ids
|
36
|
+
#
|
37
|
+
#id can be an int, string, or an array of ints or strings
|
38
|
+
#
|
39
|
+
#Maps to 'users/{id}/comments'
|
40
|
+
def retrieve_by_user(id, parameters={})
|
41
|
+
id = convert_to_id_list(id)
|
42
|
+
|
43
|
+
hash, url = request('users/'+id.to_s+"/comments", parameters)
|
44
|
+
Comments.new hash, url
|
45
|
+
end
|
46
|
+
|
47
|
+
#Retrieves a set of comments made on an answer by the answer's id
|
48
|
+
#
|
49
|
+
#id can be an int, string, or an array of ints or strings
|
50
|
+
#
|
51
|
+
#Maps to 'answers/{id}/comments'
|
52
|
+
def retrieve_by_answer(id, parameters={})
|
53
|
+
id = convert_to_id_list(id)
|
54
|
+
|
55
|
+
hash, url = request('answers/'+id.to_s+"/comments", parameters)
|
56
|
+
Comments.new hash, url
|
57
|
+
end
|
58
|
+
|
59
|
+
#Retrieves a set of comments made on a post by the post's id
|
60
|
+
#
|
61
|
+
#id can be an int, string, or an array of ints or strings
|
62
|
+
#
|
63
|
+
#Maps to 'posts/{id}/comments'
|
64
|
+
def retrieve_by_post(id, parameters={})
|
65
|
+
id = convert_to_id_list(id)
|
66
|
+
|
67
|
+
hash, url = request('posts/'+id.to_s+"/comments", parameters)
|
68
|
+
Comments.new hash, url
|
69
|
+
end
|
70
|
+
|
71
|
+
#Retrieves a set comments made on a question by the post's id
|
72
|
+
#
|
73
|
+
#id can be an int, string, or an array of ints or strings
|
74
|
+
#
|
75
|
+
#Maps to 'question/{id}/comments'
|
76
|
+
def retrieve_by_question(id, parameters={})
|
77
|
+
id = convert_to_id_list(id)
|
78
|
+
|
79
|
+
hash, url = request('questions/'+id.to_s+"/comments", parameters)
|
80
|
+
Comments.new hash, url
|
81
|
+
end
|
82
|
+
|
83
|
+
#Retrieves a set of comments made by a set of users to a user
|
84
|
+
#
|
85
|
+
#id can be an int, string, or an array of ints or strings
|
86
|
+
#
|
87
|
+
#toid must be an int or string
|
88
|
+
#
|
89
|
+
#Maps to 'users/{id}/comments/{toid}'
|
90
|
+
def retrieve_from_user_to_user(id, toid, parameters={})
|
91
|
+
id = convert_to_id_list(id)
|
92
|
+
|
93
|
+
hash, url = request('users/'+id.to_s+"/comments/" + toid.to_s, parameters)
|
94
|
+
Comments.new hash, url
|
95
|
+
end
|
96
|
+
|
97
|
+
#Retieves a set commments directed at a set of users by their ids
|
98
|
+
#
|
99
|
+
#id can be an int, string, or an array of ints or strings
|
100
|
+
#
|
101
|
+
#Maps to 'users/{id}/mentioned'
|
102
|
+
def retrieve_to_user(id, parameters={})
|
103
|
+
id = convert_to_id_list(id)
|
104
|
+
|
105
|
+
hash, url = request('users/'+id.to_s+"/mentioned", parameters)
|
106
|
+
Comments.new hash, url
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
end
|
111
|
+
|
112
|
+
class CommentsDash < PagedDash
|
113
|
+
property :comments
|
114
|
+
end
|
115
|
+
end
|