pupil 0.1.3 → 0.1.4

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.
@@ -1,3 +1,12 @@
1
+ 0.1.4
2
+ ----------------
3
+
4
+ * Rename Search stream method, :filter to :search
5
+ * Search REST API are supported
6
+ * Pupil::Stream::Shash is outdated. Instead, use Pupil::Stream::Hash
7
+ * New class, Pupil::Stream::Array
8
+ * Pupil#public_timeline are supported
9
+
1
10
  0.1.3
2
11
  ----------------
3
12
 
data/README.md CHANGED
@@ -45,10 +45,10 @@ Examples
45
45
  pupil.home_timeline :count => 50, :exclude => :replies
46
46
 
47
47
  # Follow User
48
- pupil.follow :screen_name => :twitterapi
48
+ pupil.follow :screen_name => :twitterapi
49
49
 
50
50
  # Update URL on profile
51
- pupil.update_profile :url => "http://oameya.com"
51
+ pupil.update_profile :url => "http://oameya.com"
52
52
 
53
53
  Using Streaming API
54
54
 
@@ -71,15 +71,15 @@ Using Streaming API
71
71
 
72
72
  # Userstream
73
73
  stream.start :userstream do |status|
74
- puts status.event #=> Show type of status
74
+ puts status.event #=> Show type of event
75
75
  if status.event == :retweeted
76
- puts "#{status.user.screen_name} : #{status.text}"
76
+ puts "#{status.user.screen_name}: #{status.text}"
77
77
  end
78
78
  end
79
79
 
80
80
  # Search stream
81
- stream.start :filter, :track => "#MerryChristmas" do |status|
82
- puts "#{status['user']['screen_name']: #{status['text']}"
81
+ stream.start :search, :track => "#MerryChristmas" do |status|
82
+ puts "#{status.user.screen_name}: #{status.text}"
83
83
  end
84
84
 
85
85
  Making `pupil_key`
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.3
1
+ 0.1.4
@@ -9,4 +9,5 @@ require "pupil/users"
9
9
  require "pupil/direct_messages"
10
10
  require "pupil/lists"
11
11
  require "pupil/friendships"
12
- require "pupil/blocks"
12
+ require "pupil/blocks"
13
+ require "pupil/search"
@@ -0,0 +1,14 @@
1
+ class Pupil
2
+ # @param [String] keyword Search word
3
+ # @param [Hash] option
4
+ # @return [Array] Tweets
5
+ def search(keyword, option={})
6
+ response = self.get("http://search.twitter.com/search.json", {:q => keyword}.update(option))
7
+ statuses = Array.new
8
+ response["results"].each do |element|
9
+ status = Status.new element
10
+ statuses << status
11
+ end
12
+ return statuses
13
+ end
14
+ end
@@ -9,7 +9,7 @@ class Pupil
9
9
  # @option param [Symbol] :include #=> [:rts]
10
10
  # @option param [Symbol] :exclude #=> [:replies]
11
11
  # @option param [Symbol] :contributor_details
12
- def home_timeline param={}
12
+ def home_timeline(param={})
13
13
  response = self.get("/statuses/home_timeline.json", param)
14
14
  statuses = Array.new
15
15
  response.each do |element|
@@ -19,9 +19,9 @@ class Pupil
19
19
  return statuses
20
20
  end
21
21
 
22
- # @return [Hash] mention
22
+ # @return [Array] Mention
23
23
  # @param [Hash] param
24
- def mentions param={}
24
+ def mentions(param={})
25
25
  response = self.get("/statuses/mentions.json", param)
26
26
  statuses = Array.new
27
27
  response.each do |element|
@@ -32,7 +32,7 @@ class Pupil
32
32
  end
33
33
 
34
34
  # Returning user timeline
35
- # @return [Hash] timeline
35
+ # @return [Array] timeline
36
36
  # @param [Hash] param
37
37
  # @option param [Fixnum] :user_id The ID of user
38
38
  # @option param [String] :screen_name The Screen name of user
@@ -49,7 +49,7 @@ class Pupil
49
49
  # twitter.user_timeline(:screen_name => 'o_ame', :exclude => :replies).each do |status|
50
50
  # puts "#{status.user.screen_name}: #{status.text}"
51
51
  # end
52
- def user_timeline param={}
52
+ def user_timeline(param={})
53
53
  response = self.get("/statuses/user_timeline.json", param)
54
54
  statuses = Array.new
55
55
  response.each do |element|
@@ -58,8 +58,20 @@ class Pupil
58
58
  end
59
59
  return statuses
60
60
  end
61
+ # Returning public timeline
62
+ # @return [Array] Timeline
63
+ # @param [Hash] param
64
+ def public_timeline(param={})
65
+ response = self.get("/statuses/public_timeline.json", param)
66
+ statuses = Array.new
67
+ response.each do |element|
68
+ status = Status.new element
69
+ statuses << status
70
+ end
71
+ return statuses
72
+ end
61
73
 
62
- def show_status status_id
74
+ def show_status(status_id)
63
75
  response = @access_token.get("/statuses/show/#{status_id}.json").body
64
76
  return response
65
77
  status = Status.new response
@@ -4,7 +4,7 @@ class Pupil
4
4
  class StreamError < StandardError ; end
5
5
  STREAM_APIS = {
6
6
  :userstream => "https://userstream.twitter.com/2/user.json",
7
- :filter => "https://stream.twitter.com/1/statuses/filter.json%s"
7
+ :search => "https://stream.twitter.com/1/statuses/filter.json%s"
8
8
  }
9
9
 
10
10
  def initialize key
@@ -21,14 +21,14 @@ class Pupil
21
21
  key[:access_token_secret]
22
22
  )
23
23
  end
24
-
24
+
25
25
  # @return [Pupil::Stream::Shash, Pupil::Stream::Status] event variable supported :status, :retweeted, :favorite, :friends and :delete
26
26
  def start(type, param=nil, &block)
27
27
  raise ArgumentError unless block_given?
28
-
28
+
29
29
  run_get_stream type, param, &block
30
30
  end
31
-
31
+
32
32
  def run_get_stream(type, param=nil, &block)
33
33
  uri = URI.parse(STREAM_APIS[type] % Pupil.param_serializer(param))
34
34
  https = Net::HTTP.new(uri.host, uri.port)
@@ -54,7 +54,7 @@ class Pupil
54
54
  rescue
55
55
  break
56
56
  end
57
-
57
+
58
58
  event = self.guess_event status
59
59
  block.call event
60
60
  end
@@ -66,53 +66,55 @@ class Pupil
66
66
  end
67
67
  end
68
68
  end
69
-
69
+
70
70
  def guess_event status
71
71
  if status["delete"]
72
- return Shash.new(:delete, status["delete"]["status"])
72
+ return Pupil::Stream::Hash.new(status["delete"]["status"], :delete)
73
73
  elsif status["friends"]
74
- return Shash.new(:friends, status["friends"])
74
+ return Pupil::Stream::Array.new(status["friends"], :friends)
75
75
  elsif status["event"] == "favorite"
76
- return Shash.new(:favorite, status)
76
+ return Pupil::Stream::Hash.new(status, :favorite)
77
77
  elsif status["retweeted_status"]
78
- return Status.new(status, :retweeted)
78
+ return Pupil::Stream::Status.new(status, :retweeted)
79
79
  elsif status["text"]
80
- return Status.new(status)
80
+ return Pupil::Stream::Status.new(status)
81
81
  else
82
- return Shash.new(:unknown, status)
82
+ return Pupil::Stream::Hash.new(status, :unknown)
83
83
  end
84
84
  end
85
-
85
+
86
86
  # Stream Status
87
87
  class Status < Pupil::Status
88
88
  attr_reader :event
89
89
  attr_reader :retweeted_status
90
-
91
- def initialize status, event=nil
90
+
91
+ def initialize(status, event=nil)
92
92
  super(status)
93
93
  @event = (event)? event : :status
94
94
  @retweeted_status = status["retweeted_status"]
95
95
  end
96
96
  end
97
-
97
+
98
98
  # Stream Hash
99
- class Shash
99
+ class Hash < Hash
100
100
  attr_reader :event
101
-
102
- def initialize event, status
103
- @hash = status
101
+
102
+ def initialize(status, event)
103
+ super()
104
+ self.update(status)
104
105
  @event = event
105
106
  end
106
-
107
- def [] param
108
- @hash[param]
109
- end
110
-
111
- def size
112
- @hash.size
107
+ end
108
+
109
+ # Stream Array
110
+ class Array < Array
111
+ attr_reader :event
112
+
113
+ def initialize(status, event)
114
+ super(status)
115
+ #self.update(status)
116
+ @event = event
113
117
  end
114
-
115
- alias_method :length, :size
116
118
  end
117
119
  end
118
120
  end
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "pupil"
8
- s.version = "0.1.3"
8
+ s.version = "0.1.4"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Oame"]
12
- s.date = "2011-12-17"
12
+ s.date = "2011-12-29"
13
13
  s.description = "The \"Lazy\" Twitter API Library for Ruby 1.9.x. Easy to use."
14
14
  s.email = "oame@oameya.com"
15
15
  s.extra_rdoc_files = [
@@ -65,6 +65,7 @@ Gem::Specification.new do |s|
65
65
  "lib/pupil/keygen/base.rb",
66
66
  "lib/pupil/lists.rb",
67
67
  "lib/pupil/schemes.rb",
68
+ "lib/pupil/search.rb",
68
69
  "lib/pupil/statuses.rb",
69
70
  "lib/pupil/stream.rb",
70
71
  "lib/pupil/stream/base.rb",
@@ -6,6 +6,17 @@
6
6
 
7
7
  require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
8
8
 
9
+ describe Pupil, "が #verify_credentials を呼ぶ時は" do
10
+ before do
11
+ pupil = Pupil.new PUPIL_TESTKEY
12
+ @vc = pupil.verify_credentials
13
+ end
14
+
15
+ it "Pupil::User型を返すこと" do
16
+ @vc.class.should == Pupil::User
17
+ end
18
+ end
19
+
9
20
  describe Pupil, "が #home_timeline を呼ぶ時は" do
10
21
  before do
11
22
  pupil = Pupil.new PUPIL_TESTKEY
@@ -36,17 +47,6 @@ describe Pupil, "が #mentions を呼ぶ時は" do
36
47
  end
37
48
  end
38
49
 
39
- describe Pupil, "が #verify_credentials を呼ぶ時は" do
40
- before do
41
- pupil = Pupil.new PUPIL_TESTKEY
42
- @vc = pupil.verify_credentials
43
- end
44
-
45
- it "Pupil::User型を返すこと" do
46
- @vc.class.should == Pupil::User
47
- end
48
- end
49
-
50
50
  describe Pupil, "が #user_timeline を呼ぶ時は" do
51
51
  before do
52
52
  pupil = Pupil.new PUPIL_TESTKEY
@@ -147,4 +147,19 @@ describe Pupil, "が #blocking を呼ぶ時は" do
147
147
  it "Array型を返すこと" do
148
148
  @blocking.class.should == Array
149
149
  end
150
+ end
151
+
152
+ describe Pupil, "が、 #search を呼ぶ時は" do
153
+ before do
154
+ pupil = Pupil.new PUPIL_TESTKEY
155
+ @search = pupil.search("Twitter", :rpp => 10)
156
+ end
157
+
158
+ it "Array型を返すこと" do
159
+ @search.class.should == Array
160
+ end
161
+
162
+ it "sizeが10であること" do
163
+ @search.size.should == 10
164
+ end
150
165
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pupil
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-12-17 00:00:00.000000000Z
12
+ date: 2011-12-29 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: oauth
16
- requirement: &70175508522040 !ruby/object:Gem::Requirement
16
+ requirement: &70151989267360 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70175508522040
24
+ version_requirements: *70151989267360
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: json
27
- requirement: &70175508519700 !ruby/object:Gem::Requirement
27
+ requirement: &70151989266380 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70175508519700
35
+ version_requirements: *70151989266380
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rspec
38
- requirement: &70175508512420 !ruby/object:Gem::Requirement
38
+ requirement: &70151989265220 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 2.3.0
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70175508512420
46
+ version_requirements: *70151989265220
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: yard
49
- requirement: &70175508505560 !ruby/object:Gem::Requirement
49
+ requirement: &70151989263920 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: 0.6.0
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70175508505560
57
+ version_requirements: *70151989263920
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: bundler
60
- requirement: &70175508490580 !ruby/object:Gem::Requirement
60
+ requirement: &70151989262100 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ~>
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: 1.0.0
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *70175508490580
68
+ version_requirements: *70151989262100
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: jeweler
71
- requirement: &70175508473000 !ruby/object:Gem::Requirement
71
+ requirement: &70151989246200 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ~>
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: 1.6.4
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *70175508473000
79
+ version_requirements: *70151989246200
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: rcov
82
- requirement: &70175508470300 !ruby/object:Gem::Requirement
82
+ requirement: &70151989243220 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ! '>='
@@ -87,7 +87,7 @@ dependencies:
87
87
  version: '0'
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *70175508470300
90
+ version_requirements: *70151989243220
91
91
  description: The "Lazy" Twitter API Library for Ruby 1.9.x. Easy to use.
92
92
  email: oame@oameya.com
93
93
  executables: []
@@ -144,6 +144,7 @@ files:
144
144
  - lib/pupil/keygen/base.rb
145
145
  - lib/pupil/lists.rb
146
146
  - lib/pupil/schemes.rb
147
+ - lib/pupil/search.rb
147
148
  - lib/pupil/statuses.rb
148
149
  - lib/pupil/stream.rb
149
150
  - lib/pupil/stream/base.rb