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.
Files changed (56) hide show
  1. data/README.rdoc +22 -11
  2. data/RELEASENOTES +97 -1
  3. data/Rakefile +49 -7
  4. data/VERSION +1 -1
  5. data/lib/rubyoverflow.rb +92 -18
  6. data/lib/rubyoverflow/answer.rb +61 -0
  7. data/lib/rubyoverflow/answers.rb +60 -0
  8. data/lib/rubyoverflow/apiSite.rb +32 -0
  9. data/lib/rubyoverflow/apiSites.rb +25 -0
  10. data/lib/rubyoverflow/apiVersion.rb +6 -0
  11. data/lib/rubyoverflow/badge.rb +44 -0
  12. data/lib/rubyoverflow/badgeCounts.rb +22 -0
  13. data/lib/rubyoverflow/badges.rb +59 -0
  14. data/lib/rubyoverflow/base.rb +76 -0
  15. data/lib/rubyoverflow/comment.rb +41 -0
  16. data/lib/rubyoverflow/comments.rb +115 -0
  17. data/lib/rubyoverflow/errors.rb +17 -0
  18. data/lib/rubyoverflow/pagedBase.rb +27 -0
  19. data/lib/rubyoverflow/pagedDash.rb +7 -0
  20. data/lib/rubyoverflow/postTimelineEvent.rb +93 -0
  21. data/lib/rubyoverflow/postTimelineEvents.rb +39 -0
  22. data/lib/rubyoverflow/question.rb +110 -0
  23. data/lib/rubyoverflow/questions.rb +104 -0
  24. data/lib/rubyoverflow/repChange.rb +34 -0
  25. data/lib/rubyoverflow/repChanges.rb +41 -0
  26. data/lib/rubyoverflow/revision.rb +62 -0
  27. data/lib/rubyoverflow/revisions.rb +52 -0
  28. data/lib/rubyoverflow/statistics.rb +57 -0
  29. data/lib/rubyoverflow/styling.rb +19 -0
  30. data/lib/rubyoverflow/tag.rb +27 -0
  31. data/lib/rubyoverflow/tags.rb +46 -0
  32. data/lib/rubyoverflow/user.rb +181 -0
  33. data/lib/rubyoverflow/userTimelineEvent.rb +43 -0
  34. data/lib/rubyoverflow/userTimelineEvents.rb +35 -0
  35. data/lib/rubyoverflow/users.rb +67 -18
  36. data/test/apiKey.rb +5 -0
  37. data/test/helper.rb +159 -0
  38. data/test/test_answer.rb +20 -0
  39. data/test/test_answers.rb +32 -0
  40. data/test/test_badge.rb +18 -0
  41. data/test/test_badges.rb +30 -0
  42. data/test/test_base.rb +63 -0
  43. data/test/test_statistics.rb +26 -0
  44. data/test/test_user.rb +56 -0
  45. data/test/test_users.rb +37 -0
  46. metadata +122 -87
  47. data/.gitignore +0 -4
  48. data/.rvmrc +0 -47
  49. data/.travis.yml +0 -5
  50. data/Gemfile +0 -3
  51. data/lib/rubyoverflow/sites.rb +0 -20
  52. data/lib/rubyoverflow/version.rb +0 -3
  53. data/rubyoverflow.gemspec +0 -26
  54. data/spec/sites_spec.rb +0 -18
  55. data/spec/spec_helper.rb +0 -3
  56. data/spec/users_spec.rb +0 -23
@@ -0,0 +1,62 @@
1
+ module Rubyoverflow
2
+ class Revision
3
+ attr_reader :body
4
+ attr_reader :comment
5
+ attr_reader :creation_date
6
+ attr_reader :is_question
7
+ attr_reader :is_rollback
8
+ attr_reader :last_body
9
+ attr_reader :last_title
10
+ attr_reader :last_tags
11
+ attr_reader :revision_guid
12
+ attr_reader :revision_number
13
+ attr_reader :tags
14
+ attr_reader :title
15
+ attr_reader :revision_type
16
+ attr_reader :set_community_wiki
17
+ attr_reader :user
18
+ attr_reader :post_id
19
+
20
+ def initialize(hash, request_path = '')
21
+ dash = RevisionDash.new hash
22
+
23
+ @body = dash.body
24
+ @comment = dash.comment
25
+ @creation_date = dash.creation_date
26
+ @is_question = dash.is_question
27
+ @is_rollback = dash.is_rollback
28
+ @last_body = dash.last_body
29
+ @last_title = dash.last_title
30
+ @last_tags = dash.last_tags
31
+ @revision_guid = dash.revision_guid
32
+ @revision_number = dash.revision_number
33
+ @tags = dash.tags
34
+ @title = dash.title
35
+ @revision_type = dash.revision_type
36
+ @set_community_wiki = dash.set_community_wiki
37
+ @user = User.new dash.user if dash.user
38
+ @post_id = dash.post_id
39
+ end
40
+
41
+
42
+ end
43
+
44
+ class RevisionDash < BaseDash
45
+ property :body
46
+ property :comment
47
+ property :creation_date
48
+ property :is_question
49
+ property :is_rollback
50
+ property :last_body
51
+ property :last_title
52
+ property :last_tags
53
+ property :revision_guid
54
+ property :revision_number
55
+ property :tags
56
+ property :title
57
+ property :revision_type
58
+ property :set_community_wiki
59
+ property :user
60
+ property :post_id
61
+ end
62
+ end
@@ -0,0 +1,52 @@
1
+ module Rubyoverflow
2
+ class Revisions < PagedBase
3
+ attr_reader :revisions
4
+
5
+ def initialize(hash, request_path = '')
6
+ dash = RevisionsDash.new hash
7
+ super(dash, request_path)
8
+
9
+ @revisions = Array.new
10
+ dash.revisions.each{|revisionHash| @revisions.push(Revision.new revisionHash)}
11
+ end
12
+
13
+ #Retrieves the next set of revisions using the same parameters used to retrieve the current set
14
+ def get_next_set
15
+ hash,url = perform_next_page_request
16
+ Revisions.new hash,url
17
+ end
18
+
19
+ class << self
20
+
21
+ #Retrieves the post history of a set of post(s) by their id(s)
22
+ #
23
+ #id can be an int, string or an array of ints or strings
24
+ #
25
+ #Maps to 'revisions/{id}'
26
+ def retrieve_by_post(id, parameters = {})
27
+ id = convert_to_id_list(id)
28
+ hash, url = request('/revisions/'+id.to_s, parameters)
29
+ Revisions.new hash, url
30
+ end
31
+
32
+ #Retrieves a specific post revision by post id and revision guid
33
+ #
34
+ #id can be an int, string or an array of ints or strings
35
+ #
36
+ #revisionguid must be a string in 8-4-4-4-12 format
37
+ #
38
+ #Maps to 'revisions/{id}'
39
+ def retrieve_post_revision(id, revisionguid, parameters = {})
40
+ id = convert_to_id_list(id)
41
+ hash, url = request('/revisions/'+id.to_s + '/' + revisionguid, parameters)
42
+ Revisions.new hash, url
43
+ end
44
+
45
+ end
46
+
47
+ end
48
+
49
+ class RevisionsDash < PagedDash
50
+ property :revisions
51
+ end
52
+ end
@@ -0,0 +1,57 @@
1
+ module Rubyoverflow
2
+ class Statistics < Base
3
+
4
+ attr_reader :total_questions, :total_badges, :total_unanswered, :total_votes, :total_comments, :total_answers, :site,
5
+ :total_users, :questions_per_minute, :answers_per_minute, :badges_per_minute, :views_per_day, :api_version, :total_accepted
6
+
7
+ def initialize(hash, request_path = '')
8
+ dash = StatisticsDash.new hash
9
+
10
+ @total_questions = dash.total_questions
11
+ @total_accepted = dash.total_accepted
12
+ @total_badges = dash.total_badges
13
+ @total_unanswered = dash.total_unanswered
14
+ @total_votes = dash.total_votes
15
+ @total_comments = dash.total_comments
16
+ @total_answers = dash.total_answers
17
+ @total_users = dash.total_users
18
+ @questions_per_minute = dash.questions_per_minute
19
+ @answers_per_minute = dash.answers_per_minute
20
+ @badges_per_minute = dash.badges_per_minute
21
+ @views_per_day = dash.views_per_day
22
+ @site = ApiSite.new dash.site
23
+ @api_version = ApiVersion.new dash.api_version
24
+ end
25
+
26
+
27
+ class << self
28
+
29
+ #Retrieves the stats for the domain
30
+ #
31
+ #Maps to 'stats'
32
+ def retrieve
33
+ hash, url = request('stats')
34
+ Statistics.new hash['statistics'].first, url
35
+ end
36
+ end
37
+
38
+
39
+ end
40
+
41
+ class StatisticsDash < BaseDash
42
+ property :total_questions
43
+ property :total_badges
44
+ property :total_unanswered
45
+ property :total_votes
46
+ property :total_comments
47
+ property :total_answers
48
+ property :total_users
49
+ property :total_accepted
50
+ property :questions_per_minute
51
+ property :answers_per_minute
52
+ property :badges_per_minute
53
+ property :views_per_day
54
+ property :api_version
55
+ property :site
56
+ end
57
+ end
@@ -0,0 +1,19 @@
1
+ module Rubyoverflow
2
+ class Styling
3
+ attr_reader :link_color, :tag_foreground_color ,:tag_background_color
4
+
5
+ def initialize(hash)
6
+ dash = StylingDash.new hash
7
+ @link_color = dash.link_color
8
+ @tag_background_color = dash.tag_background_color
9
+ @tag_foreground_color = dash.tag_foreground_color
10
+ end
11
+
12
+ end
13
+
14
+ class StylingDash < BaseDash
15
+ property :link_color
16
+ property :tag_foreground_color
17
+ property :tag_background_color
18
+ end
19
+ end
@@ -0,0 +1,27 @@
1
+ module Rubyoverflow
2
+ class Tag
3
+ attr_reader :name
4
+ attr_reader :count
5
+ attr_reader :restricted_to
6
+ attr_reader :fulfills_required
7
+ attr_reader :user_id
8
+
9
+ def initialize(hash, request_path = '')
10
+ dash = TagDash.new hash
11
+ @name = dash.name
12
+ @count = dash.count
13
+ @restricted_to = dash.restricted_to
14
+ @fulfills_required = dash.fulfills_required
15
+ @user_id = dash.user_id
16
+ end
17
+
18
+ end
19
+
20
+ class TagDash < BaseDash
21
+ property :name
22
+ property :count
23
+ property :restricted_to
24
+ property :fulfills_required
25
+ property :user_id
26
+ end
27
+ end
@@ -0,0 +1,46 @@
1
+ module Rubyoverflow
2
+ class Tags < PagedBase
3
+
4
+ attr_reader :tags
5
+
6
+ def initialize(hash, request_path = '')
7
+ dash = TagsDash.new hash
8
+ @tags = Array.new
9
+ dash.tags.each{ |tagHash| @tags.push(Tag.new tagHash)}
10
+
11
+ super(dash, request_path)
12
+ end
13
+
14
+ #Retrieves the next set of tags using the same parameters used to retrieve the current set
15
+ def get_next_set
16
+ hash,url = perform_next_page_request
17
+ Tags.new hash,url
18
+ end
19
+
20
+ class << self
21
+ #Retrieves all of the tags
22
+ #
23
+ #Maps to '/tags/
24
+ def retrieve_all(parameters = {})
25
+ hash, url = request('tags', parameters)
26
+ Tags.new hash, url
27
+ end
28
+
29
+ #Retieves all of the tags assign to a set of users by their ids
30
+ #
31
+ #id can be an int, string, or an array of ints or strings
32
+ #
33
+ #Maps to 'users/{id}/tags'
34
+ def retrieve_by_user(id, parameters = {})
35
+ id = convert_to_id_list(id)
36
+ hash, url = request('users/'+id.to_s+'/tags',parameters)
37
+ Tags.new hash, url
38
+ end
39
+ end
40
+ end
41
+
42
+ class TagsDash < PagedDash
43
+ property :tags
44
+
45
+ end
46
+ end
@@ -0,0 +1,181 @@
1
+ module Rubyoverflow
2
+ class User < Base
3
+
4
+ attr_reader :user_id, :user_type, :creation_date, :display_name, :reputation, :email_hash, :age,
5
+ :last_access_date, :website_url, :location, :about_me, :question_count, :answer_count, :view_count,
6
+ :up_vote_count, :down_vote_count, :accept_rate, :user_questions_url, :user_answers_url, :user_favorites_url,
7
+ :user_tags_url, :user_badges_url, :user_timeline_url, :user_mentioned_url, :user_comments_url,
8
+ :user_reputation_url, :badge_counts, :timed_penalty_date, :association_id, :on_site
9
+
10
+ def initialize(hash, request_path = '')
11
+ dash = UserDash.new hash
12
+
13
+ @user_id = dash.user_id
14
+ @user_type = dash.user_type
15
+ @creation_date = dash.creation_date
16
+ @display_name = dash.display_name
17
+ @reputation = dash.reputation
18
+ @email_hash = dash.email_hash
19
+ @age = dash.age
20
+ @last_access_date = dash.last_access_date
21
+ @website_url = dash.website_url
22
+ @location = dash.location
23
+ @about_me = dash.about_me
24
+ @question_count = dash.question_count
25
+ @answer_count = dash.answer_count
26
+ @view_count = dash.view_count
27
+ @up_vote_count = dash.up_vote_count
28
+ @down_vote_count = dash.down_vote_count
29
+ @accept_rate = dash.accept_rate
30
+ @user_questions_url = dash.user_questions_url
31
+ @user_answers_url = dash.user_answers_url
32
+ @user_favorites_url = dash.user_favorites_url
33
+ @user_tags_url = dash.user_tags_url
34
+ @user_badges_url = dash.user_badges_url
35
+ @user_timeline_url = dash.user_timeline_url
36
+ @user_mentioned_url = dash.user_mentioned_url
37
+ @user_comments_url = dash.user_comments_url
38
+ @user_reputation_url = dash.user_reputation_url
39
+ @badge_counts = BadgeCounts.new dash.badge_counts if dash.badge_counts
40
+ @timed_penalty_date = dash.timed_penalty_date
41
+ @association_id = dash.association_id
42
+ @on_site = ApiSite.new dash.on_site if dash.on_site
43
+ end
44
+
45
+ def item_id
46
+ @user_id
47
+ end
48
+
49
+ #Gets the questions by the user
50
+ def get_questions(parameters = {})
51
+ if @user_questions_url
52
+ hash,url =request(@user_questions_url, parameters)
53
+ Questions.new hash, url
54
+ else
55
+ nil
56
+ end
57
+ end
58
+
59
+ #Gets the answers from the user
60
+ def get_answers(parameters = {})
61
+ if @user_answers_url
62
+ hash,url =request(@user_answers_url, parameters)
63
+ Answers.new hash, url
64
+ else
65
+ nil
66
+ end
67
+ end
68
+
69
+ #Gets the questions favorited by the user
70
+ def get_favorites(parameters = {})
71
+ if @user_favorites_url
72
+ hash,url =request(@user_favorites_url, parameters)
73
+ Questions.new hash, url
74
+ else
75
+ nil
76
+ end
77
+ end
78
+
79
+ #Gets the tags the user has participated in
80
+ def get_tags(parameters = {})
81
+ if @user_tags_url
82
+ hash,url =request(@user_tags_url, parameters)
83
+ Tags.new hash, url
84
+ else
85
+ nil
86
+ end
87
+ end
88
+
89
+ #Gets the badges awared to the user
90
+ def get_badges
91
+ if @user_badges_url
92
+ hash,url =request(@user_badges_url,{})
93
+ Badges.new hash, url
94
+ else
95
+ nil
96
+ end
97
+ end
98
+
99
+ #Gets the user's timeline
100
+ def get_timeline(parameters = {})
101
+ if @user_timeline_url
102
+ hash,url =request(@user_timeline_url, parameters)
103
+ UserTimelineEvents.new hash, url
104
+ else
105
+ nil
106
+ end
107
+ end
108
+
109
+ #Gets the comments that mention the user
110
+ def get_mentioned(parameters = {})
111
+ if @user_mentioned_url
112
+ hash,url =request(@user_mentioned_url, parameters)
113
+ Comments.new hash, url
114
+ else
115
+ nil
116
+ end
117
+ end
118
+
119
+ #Gets the comments by the user
120
+ def get_comments(parameters = {})
121
+ if @user_comments_url
122
+ hash,url =request(@user_comments_url, parameters)
123
+ Comments.new hash, url
124
+ else
125
+ nil
126
+ end
127
+ end
128
+
129
+ #Gets the user's reputation
130
+ def get_reputation(parameters = {})
131
+ if @user_reputation_url
132
+ hash,url =request(@user_reputation_url, parameters)
133
+ RepChanges.new hash, url
134
+ else
135
+ nil
136
+ end
137
+ end
138
+
139
+ #Gets the user's other accounts
140
+ def retrieve_associated_accounts
141
+ if @association_id
142
+ Users.retrieve_associated_accounts @association_id
143
+ else
144
+ nil
145
+ end
146
+ end
147
+ end
148
+
149
+ class UserDash < BaseDash
150
+ property :user_id
151
+ property :user_type
152
+ property :creation_date
153
+ property :display_name
154
+ property :reputation
155
+ property :email_hash
156
+ property :age
157
+ property :last_access_date
158
+ property :website_url
159
+ property :location
160
+ property :about_me
161
+ property :question_count
162
+ property :answer_count
163
+ property :view_count
164
+ property :up_vote_count
165
+ property :down_vote_count
166
+ property :accept_rate
167
+ property :user_questions_url
168
+ property :user_answers_url
169
+ property :user_favorites_url
170
+ property :user_tags_url
171
+ property :user_badges_url
172
+ property :user_timeline_url
173
+ property :user_mentioned_url
174
+ property :user_comments_url
175
+ property :user_reputation_url
176
+ property :badge_counts
177
+ property :timed_penalty_date
178
+ property :association_id
179
+ property :on_site
180
+ end
181
+ end