rubyoverflow 0.5 → 1.0.2
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/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
|