stack_overflow 0.0.8 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -3,3 +3,4 @@ pkg/*
3
3
  .bundle
4
4
  *.swp
5
5
  **/*.swp
6
+ .idea/
@@ -1,24 +1,26 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- stack_overflow (0.0.7)
4
+ stack_overflow (0.0.9)
5
5
 
6
6
  GEM
7
7
  remote: http://rubygems.org/
8
8
  specs:
9
- crack (0.1.8)
10
- diff-lcs (1.1.2)
11
- httparty (0.6.1)
12
- crack (= 0.1.8)
13
- json (1.4.6)
14
- rspec (2.4.0)
15
- rspec-core (~> 2.4.0)
16
- rspec-expectations (~> 2.4.0)
17
- rspec-mocks (~> 2.4.0)
18
- rspec-core (2.4.0)
19
- rspec-expectations (2.4.0)
9
+ diff-lcs (1.1.3)
10
+ httparty (0.8.1)
11
+ multi_json
12
+ multi_xml
13
+ json (1.6.3)
14
+ multi_json (1.0.4)
15
+ multi_xml (0.4.1)
16
+ rspec (2.7.0)
17
+ rspec-core (~> 2.7.0)
18
+ rspec-expectations (~> 2.7.0)
19
+ rspec-mocks (~> 2.7.0)
20
+ rspec-core (2.7.1)
21
+ rspec-expectations (2.7.0)
20
22
  diff-lcs (~> 1.1.2)
21
- rspec-mocks (2.4.0)
23
+ rspec-mocks (2.7.0)
22
24
 
23
25
  PLATFORMS
24
26
  ruby
@@ -1,5 +1,7 @@
1
1
  = Stack Overflow
2
2
 
3
+ *Ive* *namespaced* *this* *gem* *to* API::StackOverflow *so* *that* *I* *could* *use* 'StackOverflow' *for* *other* *namespacing* *purposes*
4
+
3
5
  This is a simple gem that utilizes HTTParty and the StackOverflow API.
4
6
 
5
7
  gem install stack_overflow
@@ -10,7 +12,7 @@ The StackOverflow API help can be found at http://api.stackoverflow.com/1.1/usag
10
12
 
11
13
  Be sure to set the API Key.
12
14
 
13
- StackOverflow.API_KEY = YOUR_KEY_GOES_HERE
15
+ API::StackOverflow.API_KEY = YOUR_KEY_GOES_HERE
14
16
 
15
17
  You can get your key from StackOverflow by going here : http://stackapps.com/apps/register
16
18
 
@@ -18,51 +20,51 @@ You can get your key from StackOverflow by going here : http://stackapps.com/app
18
20
 
19
21
  API documentation can be found at http://api.stackoverflow.com/1.1/usage/methods/users
20
22
 
21
- StackOverflow.get_all_users
23
+ API::StackOverflow.get_all_users
22
24
 
23
25
  By default the api returns the first page of users with 30 per page. This information can be read from the results. To get additional pages or change the pagesize (0-100) you can make call like:
24
26
 
25
- StackOverflow.get_all_users(:page => 2, :per_page => 50)
27
+ API::StackOverflow.get_all_users(:page => 2, :per_page => 50)
26
28
 
27
29
  == Get User(s)
28
30
 
29
31
  API documentation can be found at http://api.stackoverflow.com/1.1/usage/methods/users-by-ids
30
32
 
31
- StackOverflow.get_user(#user_id)
33
+ API::StackOverflow.get_user(#user_id)
32
34
 
33
35
  You can also get a group of users by using
34
36
 
35
- StackOverflow.get_users([#user_id1, #user_id2, etc])
37
+ API::StackOverflow.get_users([#user_id1, #user_id2, etc])
36
38
 
37
39
  == Get User's Tags
38
40
 
39
41
  API documentation can be found at http://api.stackoverflow.com/1.1/usage/methods/user-tags
40
42
 
41
- StackOverflow.get_user_tags(#user_id)
43
+ API::StackOverflow.get_user_tags(#user_id)
42
44
 
43
45
  == Get User's Questions
44
46
 
45
47
  API documentation can be found at http://api.stackoverflow.com/1.1/usage/methods/questions
46
48
 
47
- StackOverflow.get_user_questions(#user_id)
49
+ API::StackOverflow.get_user_questions(#user_id)
48
50
 
49
51
  == Get User's Answers
50
52
 
51
53
  API documentation can be found at http://api.stackoverflow.com/1.1/usage/methods/answers
52
54
 
53
- StackOverflow.get_user_answers(#user_id)
55
+ API::StackOverflow.get_user_answers(#user_id)
54
56
 
55
57
  == Get Tags
56
58
 
57
59
  API documentation can be found at http://api.stackoverflow.com/1.1/usage/methods/tags
58
60
 
59
- StackOverflow.get_tags
61
+ API::StackOverflow.get_tags
60
62
 
61
63
  == Get Tags Synonyms
62
64
 
63
65
  API documentation can be found at http://api.stackoverflow.com/1.1/usage/methods/tag-synonyms
64
66
 
65
- StackOverflow.get_tags_synonyms
67
+ API::StackOverflow.get_tags_synonyms
66
68
 
67
69
  == Work in progress
68
70
 
@@ -0,0 +1,29 @@
1
+ module API
2
+ module StackOverflow
3
+ class Answer
4
+ attr_accessor :id, :accepted, :comments_url, :question_id, :title
5
+ attr_accessor :creation_date, :last_activity_date
6
+ attr_accessor :up_vote_count, :down_vote_count, :view_count, :score, :community_owned
7
+
8
+ def initialize(so_answer)
9
+ @id = so_answer["answer_id"]
10
+ @title = so_answer["title"]
11
+ @accepted = so_answer["accepted"]
12
+ @comments_url = so_answer["answer_comments_url"]
13
+ @question_id = so_answer["question_id"]
14
+ @creation_date = Time.at(so_answer["creation_date"]) if so_answer["creation_date"]
15
+ @last_activity_date = Time.at(so_answer["last_activity_date"]) if so_answer["last_activity_date"]
16
+ @up_vote_count = so_answer["up_vote_count"]
17
+ @down_vote_count = so_answer["down_vote_count"]
18
+ @view_count = so_answer["view_count"]
19
+ @score = so_answer["score"]
20
+ @community_owned = so_answer["community_owned"]
21
+ end
22
+
23
+ def vote_count
24
+ @up_vote_count - @down_vote_count
25
+ end
26
+
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,35 @@
1
+ module API
2
+ module StackOverflow
3
+ class Question
4
+ attr_accessor :answer_count, :accepted_answer_id, :favorite_count, :timeline_url
5
+ attr_accessor :comments_url, :answers_url, :id
6
+ attr_accessor :creation_date, :last_edit_date, :last_activity_date
7
+ attr_accessor :up_vote_count, :down_vote_count, :view_count, :score
8
+ attr_accessor :community_owned, :title
9
+
10
+ def initialize(so_question)
11
+ @id = so_question["question_id"]
12
+ @answer_count = so_question["answer_count"]
13
+ @accepted_answer_id = so_question["accepted_answer_id"]
14
+ @favorite_count = so_question["favorite_count"]
15
+ @timeline_url = so_question["question_timeline_url"]
16
+ @comments_url = so_question["question_comments_url"]
17
+ @answers_url = so_question["question_answers_url"]
18
+ @creation_date = Time.at(so_question["creation_date"]) if so_question["creation_date"]
19
+ @last_edit_date = Time.at(so_question["last_edit_date"]) if so_question["last_edit_date"]
20
+ @last_activity_date = Time.at(so_question["last_activity_date"]) if so_question["last_activity_date"]
21
+ @up_vote_count = so_question["up_vote_count"]
22
+ @down_vote_count = so_question["down_vote_count"]
23
+ @view_count = so_question["view_count"]
24
+ @score = so_question["score"]
25
+ @community_owned = so_question["community_owned"]
26
+ @title = so_question["title"]
27
+ end
28
+
29
+ def vote_count
30
+ @up_vote_count - @down_vote_count
31
+ end
32
+
33
+ end
34
+ end
35
+ end
@@ -1,58 +1,61 @@
1
1
  require 'httparty'
2
2
  require 'json'
3
+ require 'question'
4
+ require 'answer'
5
+
6
+ module API
7
+ module StackOverflow
8
+ include HTTParty
9
+ @@API_KEY = nil
10
+ @@URL = "http://api.stackoverflow.com/1.1/"
11
+
12
+ def self.API_KEY=(value)
13
+ @@API_KEY = value
14
+ end
15
+
16
+ def self.get_all_users(options={})
17
+ key = @@API_KEY
18
+ page = options[:page] || 1
19
+ pagesize = options[:pagesize] || 30
20
+ url = URI.parse(@@URL + "users?key=#{key}&page=#{page}&pagesize=#{pagesize}")
21
+ response = Net::HTTP.get_response url
22
+ gz = Zlib::GzipReader.new(StringIO.new(response.body))
23
+ JSON.parse(gz.read)
24
+ end
25
+
26
+ def self.get_user(user_id)
27
+ result = get(@@URL + "users/#{user_id}?key=#{@@API_KEY}")
28
+ return nil if result["users"].nil?
29
+ result["users"].first
30
+ end
31
+
32
+ def self.get_users(user_ids)
33
+ user_id = user_ids.join(";").to_s
34
+ result = get(@@URL + "users/#{user_id}?key=#{@@API_KEY}")
35
+ result["users"]
36
+ end
37
+
38
+ def self.get_user_questions(user_id)
39
+ result = get(@@URL + "users/#{user_id}/questions?key=#{@@API_KEY}")
40
+ result["questions"].map{|q| Question.new(q) }
41
+ end
42
+
43
+ def self.get_user_answers(user_id)
44
+ result = get(@@URL + "users/#{user_id}/answers?key=#{@@API_KEY}")
45
+ result["answers"].map{|a| Answer.new(a) }
46
+ end
47
+
48
+ def self.get_user_tags(user_id)
49
+ get(@@URL + "users/#{user_id}/tags?key=#{@@API_KEY}")
50
+ end
51
+
52
+ def self.get_tags
53
+ get(@@URL + "tags?key=#{@@API_KEY}")
54
+ end
55
+
56
+ def self.get_tags_synonyms
57
+ get(@@URL + "tags/synonyms?key=#{@@API_KEY}")
58
+ end
3
59
 
4
- class StackOverflow
5
- include HTTParty
6
- @@API_KEY = nil
7
- @@URL = "http://api.stackoverflow.com/1.1/"
8
-
9
- def self.API_KEY=(value)
10
- @@API_KEY = value
11
- end
12
-
13
- def self.get_all_users(options={})
14
- key = @@API_KEY
15
- page = options[:page] || 1
16
- pagesize = options[:pagesize] || 30
17
- url = URI.parse(@@URL + "users?key=#{key}&page=#{page}&pagesize=#{pagesize}")
18
- response = Net::HTTP.get_response url
19
- gz = Zlib::GzipReader.new(StringIO.new(response.body))
20
- JSON.parse(gz.read)
21
- end
22
-
23
- def self.get_user(user_id)
24
- result = get(@@URL + "users/#{user_id}?key=#{@@API_KEY}")
25
- return nil if result["users"].nil?
26
- result["users"].first
27
60
  end
28
-
29
- def self.get_users(user_ids)
30
- user_id = user_ids.join(";").to_s
31
- result = get(@@URL + "users/#{user_id}?key=#{@@API_KEY}")
32
- result["users"]
33
- end
34
-
35
- def self.get_user_questions(user_id)
36
- result = get(@@URL + "users/#{user_id}/questions?key=#{@@API_KEY}")
37
- result["questions"]
38
- end
39
-
40
-
41
- def self.get_user_answers(user_id)
42
- result = get(@@URL + "users/#{user_id}/answers?key=#{@@API_KEY}")
43
- result["answers"]
44
- end
45
-
46
- def self.get_user_tags(user_id)
47
- get(@@URL + "users/#{user_id}/tags?key=#{@@API_KEY}")
48
- end
49
-
50
- def self.get_tags
51
- get(@@URL + "tags?key=#{@@API_KEY}")
52
- end
53
-
54
- def self.get_tags_synonyms
55
- get(@@URL + "tags/synonyms?key=#{@@API_KEY}")
56
- end
57
-
58
61
  end
@@ -1,3 +1,5 @@
1
- module StackOverflow
2
- VERSION = "0.0.8"
1
+ module API
2
+ module StackOverflow
3
+ VERSION = "0.0.9"
4
+ end
3
5
  end
@@ -0,0 +1,11 @@
1
+ require 'spec_helper'
2
+
3
+ describe "get users answers" do
4
+ context "363881" do
5
+ before(:each) do
6
+ @answers = API::StackOverflow.get_user_answers(363881)
7
+ end
8
+ it { @answers.should_not be_nil }
9
+ it { @answers.count.should > 0 }
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ require 'spec_helper'
2
+
3
+ describe "get users questions" do
4
+ context "363881" do
5
+ before(:each) do
6
+ @questions = API::StackOverflow.get_user_questions(363881)
7
+ end
8
+ it { @questions.should_not be_nil }
9
+ it { @questions.count.should > 0 }
10
+ end
11
+ end
@@ -1,28 +1,28 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe StackOverflow do
3
+ describe API::StackOverflow do
4
4
  before(:each) do
5
- StackOverflow.API_KEY = ENV["SO_API_KEY"]
5
+ API::StackOverflow.API_KEY = ENV["SO_API_KEY"]
6
6
  end
7
7
 
8
8
  describe "get all users" do
9
9
  context "all users" do
10
10
  before(:each) do
11
- @result = StackOverflow.get_all_users
11
+ @result = API::StackOverflow.get_all_users
12
12
  end
13
13
  it { @result.should_not be_nil }
14
14
  end
15
15
 
16
16
  context "second page" do
17
17
  before(:each) do
18
- @result = StackOverflow.get_all_users(:page => 2)
18
+ @result = API::StackOverflow.get_all_users(:page => 2)
19
19
  end
20
20
  it { @result.should_not be_nil }
21
21
  end
22
22
 
23
23
  context "50 per page" do
24
24
  before(:each) do
25
- @result = StackOverflow.get_all_users(:pagesize => 50)
25
+ @result = API::StackOverflow.get_all_users(:pagesize => 50)
26
26
  end
27
27
  it { @result["users"].count.should == 50 }
28
28
  end
@@ -31,7 +31,7 @@ describe StackOverflow do
31
31
  describe "get user" do
32
32
  context "60336" do
33
33
  before(:each) do
34
- @user = StackOverflow.get_user(60336)
34
+ @user = API::StackOverflow.get_user(60336)
35
35
  end
36
36
  it { @user.should_not be_nil }
37
37
  it { @user["display_name"].should == "JB."}
@@ -39,7 +39,7 @@ describe StackOverflow do
39
39
 
40
40
  context "Jared314" do
41
41
  before(:each) do
42
- @user = StackOverflow.get_user("Jared314")
42
+ @user = API::StackOverflow.get_user("Jared314")
43
43
  end
44
44
  it { @user.should be_nil }
45
45
  end
@@ -47,7 +47,7 @@ describe StackOverflow do
47
47
 
48
48
  describe "get users" do
49
49
  before(:each) do
50
- @users = StackOverflow.get_users([60336, 3381])
50
+ @users = API::StackOverflow.get_users([60336, 3381])
51
51
  end
52
52
  it { @users.should_not be_nil }
53
53
  it { @users.select{|u| u["display_name"] == "JB"}.should_not be_nil }
@@ -56,7 +56,7 @@ describe StackOverflow do
56
56
 
57
57
  describe "get user tags" do
58
58
  before(:each) do
59
- @tags = StackOverflow.get_user_tags(60336)
59
+ @tags = API::StackOverflow.get_user_tags(60336)
60
60
  end
61
61
  it { @tags.should_not be_nil }
62
62
  it { @tags["tags"].count.should > 0 }
@@ -64,7 +64,7 @@ describe StackOverflow do
64
64
 
65
65
  describe "get tags" do
66
66
  before(:each) do
67
- @tags = StackOverflow.get_tags
67
+ @tags = API::StackOverflow.get_tags
68
68
  end
69
69
  it { @tags.should_not be_nil }
70
70
  it { @tags["tags"].count.should > 0 }
@@ -72,26 +72,12 @@ describe StackOverflow do
72
72
 
73
73
  describe "get tags synonyms" do
74
74
  before(:each) do
75
- @tags_synonyms = StackOverflow.get_tags_synonyms
75
+ @tags_synonyms = API::StackOverflow.get_tags_synonyms
76
76
  end
77
77
  it { @tags_synonyms.should_not be_nil }
78
78
  it { @tags_synonyms["tag_synonyms"].count.should > 0 }
79
79
  end
80
80
 
81
- describe "get users answers" do
82
- before(:each) do
83
- @answers = StackOverflow.get_user_answers(363881)
84
- end
85
- it { @answers.should_not be_nil }
86
- it { @answers.count.should > 0 }
87
- end
88
81
 
89
- describe "get users questions" do
90
- before(:each) do
91
- @questions = StackOverflow.get_user_questions(363881)
92
- end
93
- it { @questions.should_not be_nil }
94
- it { @questions.count.should > 0 }
95
- end
96
82
 
97
83
  end
@@ -4,7 +4,7 @@ require "stack_overflow/version"
4
4
 
5
5
  Gem::Specification.new do |s|
6
6
  s.name = "stack_overflow"
7
- s.version = StackOverflow::VERSION
7
+ s.version = API::StackOverflow::VERSION
8
8
  s.platform = Gem::Platform::RUBY
9
9
  s.authors = ["Jonathan Birkholz"]
10
10
  s.email = ["rookieone@gmail.com"]
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: stack_overflow
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.8
5
+ version: 0.0.9
6
6
  platform: ruby
7
7
  authors:
8
8
  - Jonathan Birkholz
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-10-31 00:00:00 Z
13
+ date: 2012-01-15 00:00:00 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rspec
@@ -60,9 +60,12 @@ files:
60
60
  - Gemfile.lock
61
61
  - README.rdoc
62
62
  - Rakefile
63
- - lib/.stack_overflow.rb.swp
63
+ - lib/answer.rb
64
+ - lib/question.rb
64
65
  - lib/stack_overflow.rb
65
66
  - lib/stack_overflow/version.rb
67
+ - spec/get_answers_spec.rb
68
+ - spec/get_questions_spec.rb
66
69
  - spec/spec_helper.rb
67
70
  - spec/stack_overflow_spec.rb
68
71
  - stack_overflow.gemspec
@@ -94,5 +97,7 @@ signing_key:
94
97
  specification_version: 3
95
98
  summary: HTTParty over the StackOverflow API
96
99
  test_files:
100
+ - spec/get_answers_spec.rb
101
+ - spec/get_questions_spec.rb
97
102
  - spec/spec_helper.rb
98
103
  - spec/stack_overflow_spec.rb