kappa 1.0.1 → 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.
@@ -1,15 +1,15 @@
1
- require 'kappa/id_equality'
2
- require 'kappa/proxy'
3
- require 'kappa/status'
4
- require 'kappa/errors'
5
- require 'kappa/connection'
6
- require 'kappa/configuration'
7
- require 'kappa/query'
8
- require 'kappa/channel'
9
- require 'kappa/stream'
10
- require 'kappa/game'
11
- require 'kappa/video'
12
- require 'kappa/team'
13
- require 'kappa/user'
14
- require 'kappa/images'
15
- require 'kappa/version'
1
+ require 'kappa/id_equality'
2
+ require 'kappa/proxy'
3
+ require 'kappa/status'
4
+ require 'kappa/errors'
5
+ require 'kappa/connection'
6
+ require 'kappa/configuration'
7
+ require 'kappa/query'
8
+ require 'kappa/channel'
9
+ require 'kappa/stream'
10
+ require 'kappa/game'
11
+ require 'kappa/video'
12
+ require 'kappa/team'
13
+ require 'kappa/user'
14
+ require 'kappa/images'
15
+ require 'kappa/version'
@@ -1,214 +1,214 @@
1
- require 'cgi'
2
- require 'time'
3
-
4
- module Twitch::V2
5
- # Channels serve as the home location for a user's content. Channels have a stream, can run
6
- # commercials, store videos, display information and status, and have a customized page including
7
- # banners and backgrounds.
8
- # @see Channels#get Channels#get
9
- # @see Channels
10
- # @see Stream
11
- # @see User
12
- class Channel
13
- include Twitch::IdEquality
14
-
15
- # @private
16
- def initialize(hash, query)
17
- @query = query
18
- @id = hash['_id']
19
- @background_url = hash['background']
20
- @banner_url = hash['banner']
21
- @created_at = Time.parse(hash['created_at']).utc
22
- @display_name = hash['display_name']
23
- @game_name = hash['game']
24
- @logo_url = hash['logo']
25
- @mature = hash['mature'] || false
26
- @name = hash['name']
27
- @status = hash['status']
28
- @updated_at = Time.parse(hash['updated_at']).utc
29
- @url = hash['url']
30
- @video_banner_url = hash['video_banner']
31
-
32
- @teams = []
33
- teams = hash['teams']
34
- teams.each do |team_json|
35
- @teams << Team.new(team_json)
36
- end
37
- end
38
-
39
- # Does this channel have mature content? This flag is specified by the owner of the channel.
40
- # @return [Boolean] `true` if the channel has mature content, `false` otherwise.
41
- def mature?
42
- @mature
43
- end
44
-
45
- # Get the live stream associated with this channel.
46
- # @note This incurs an additional web request.
47
- # @return [Stream] Live stream object for this channel, or `nil` if the channel is not currently streaming.
48
- # @see #streaming?
49
- def stream
50
- @query.streams.get(@name)
51
- end
52
-
53
- # Does this channel currently have a live stream?
54
- # @note This makes a separate request to get the channel's stream. If you want to actually use the stream object, you should call `#stream` instead.
55
- # @return [Boolean] `true` if the channel currently has a live stream, `false` otherwise.
56
- # @see #stream
57
- def streaming?
58
- !stream.nil?
59
- end
60
-
61
- # Get the owner of this channel.
62
- # @note This incurs an additional web request.
63
- # @return [User] The user that owns this channel.
64
- def user
65
- @query.users.get(@name)
66
- end
67
-
68
- # Get the users following this channel.
69
- # @note The number of followers is potentially very large, so it's recommended that you specify a `:limit`.
70
- # @example
71
- # channel.followers(:limit => 20)
72
- # @example
73
- # channel.followers do |follower|
74
- # puts follower.display_name
75
- # end
76
- # @param options [Hash] Filter criteria.
77
- # @option options [Fixnum] :limit (nil) Limit on the number of results returned.
78
- # @option options [Fixnum] :offset (0) Offset into the result set to begin enumeration.
79
- # @yield Optional. If a block is given, each follower is yielded.
80
- # @yieldparam [User] follower Current follower.
81
- # @see User
82
- # @see https://github.com/justintv/Twitch-API/blob/master/v2_resources/channels.md#get-channelschannelfollows GET /channels/:channel/follows
83
- # @return [Array<User>] Users following this channel, if no block is given.
84
- # @return [nil] If a block is given.
85
- def followers(options = {}, &block)
86
- name = CGI.escape(@name)
87
- return @query.connection.accumulate(
88
- :path => "channels/#{name}/follows",
89
- :json => 'follows',
90
- :sub_json => 'user',
91
- :create => -> hash { User.new(hash, @query) },
92
- :limit => options[:limit],
93
- :offset => options[:offset],
94
- &block
95
- )
96
- end
97
-
98
- # Get the videos for a channel, most recently created first.
99
- # @note This incurs additional web requests.
100
- # @note You can get videos directly from a channel name via {Videos#for_channel}.
101
- # @example
102
- # v = channel.videos(:type => :broadcasts)
103
- # @example
104
- # channel.videos(:type => :highlights) do |video|
105
- # next if video.view_count < 10000
106
- # puts video.url
107
- # end
108
- # @param options [Hash] Filter criteria.
109
- # @option options [Symbol] :type (:highlights) The type of videos to return. Valid values are `:broadcasts`, `:highlights`.
110
- # @option options [Fixnum] :limit (nil) Limit on the number of results returned.
111
- # @option options [Fixnum] :offset (0) Offset into the result set to begin enumeration.
112
- # @yield Optional. If a block is given, each video is yielded.
113
- # @yieldparam [Video] video Current video.
114
- # @see Video
115
- # @see Videos#for_channel Videos#for_channel
116
- # @see https://github.com/justintv/Twitch-API/blob/master/v2_resources/videos.md#get-channelschannelvideos GET /channels/:channel/videos
117
- # @raise [ArgumentError] If `:type` is not one of `:broadcasts` or `:highlights`.
118
- # @return [Array<Video>] Videos for the channel, if no block is given.
119
- # @return [nil] If a block is given.
120
- def videos(options = {}, &block)
121
- @query.videos.for_channel(@name, options, &block)
122
- end
123
-
124
- # @example
125
- # 23460970
126
- # @return [Fixnum] Unique Twitch ID.
127
- attr_reader :id
128
-
129
- # @example
130
- # "http://static-cdn.jtvnw.net/jtv_user_pictures/lethalfrag-channel_background_image-833a4324bc698c9b.jpeg"
131
- # @return [String] URL for background image.
132
- attr_reader :background_url
133
-
134
- # @example
135
- # "http://static-cdn.jtvnw.net/jtv_user_pictures/lethalfrag-channel_header_image-463a4670c91c2b61-640x125.jpeg"
136
- # @return [String] URL for banner image.
137
- attr_reader :banner_url
138
-
139
- # @example
140
- # 2011-07-15 07:53:58 UTC
141
- # @return [Time] When the channel was created (UTC).
142
- attr_reader :created_at
143
-
144
- # @example
145
- # "Lethalfrag"
146
- # @see #name
147
- # @return [String] User-friendly display name. This name is used for the channel's page title.
148
- attr_reader :display_name
149
-
150
- # @example
151
- # "Super Meat Boy"
152
- # @return [String] Name of the primary game for this channel.
153
- attr_reader :game_name
154
-
155
- # @example
156
- # "http://static-cdn.jtvnw.net/jtv_user_pictures/lethalfrag-profile_image-050adf252718823b-300x300.png"
157
- # @return [String] URL for the logo image.
158
- attr_reader :logo_url
159
-
160
- # @example
161
- # "lethalfrag"
162
- # @see #display_name
163
- # @return [String] Unique Twitch name.
164
- attr_reader :name
165
-
166
- # @example
167
- # "(Day 563/731) | Dinner and a Game (Cooking at http://twitch.tv/lookatmychicken)"
168
- # @return [String] Current status set by the channel's owner.
169
- attr_reader :status
170
-
171
- # @example
172
- # 2013-07-21 05:27:58 UTC
173
- # @return [Time] When the channel was last updated (UTC). For example, when a stream is started or a channel's status is changed, the channel is updated.
174
- attr_reader :updated_at
175
-
176
- # @example
177
- # "http://www.twitch.tv/lethalfrag"
178
- # @return [String] The URL for the channel's main page.
179
- attr_reader :url
180
-
181
- # @example
182
- # "http://static-cdn.jtvnw.net/jtv_user_pictures/lethalfrag-channel_offline_image-3b801b2ccc11830b-640x360.jpeg"
183
- # @return [String] URL for the image shown when the stream is offline.
184
- attr_reader :video_banner_url
185
-
186
- # @see Team
187
- # @return [Array<Team>] The list of teams that this channel is associated with. Not all channels have associated teams.
188
- attr_reader :teams
189
- end
190
-
191
- # Query class for finding channels.
192
- # @see Channel
193
- class Channels
194
- # @private
195
- def initialize(query)
196
- @query = query
197
- end
198
-
199
- # Get a channel by name.
200
- # @example
201
- # c = Twitch.channels.get('day9tv')
202
- # @param channel_name [String] The name of the channel to get. This is the same as the stream or user name.
203
- # @return [Channel] A valid `Channel` object if the channel exists, `nil` otherwise.
204
- def get(channel_name)
205
- name = CGI.escape(channel_name)
206
-
207
- # HTTP 422 can happen if the channel is associated with a Justin.tv account.
208
- Twitch::Status.map(404 => nil, 422 => nil) do
209
- json = @query.connection.get("channels/#{name}")
210
- Channel.new(json, @query)
211
- end
212
- end
213
- end
214
- end
1
+ require 'cgi'
2
+ require 'time'
3
+
4
+ module Twitch::V2
5
+ # Channels serve as the home location for a user's content. Channels have a stream, can run
6
+ # commercials, store videos, display information and status, and have a customized page including
7
+ # banners and backgrounds.
8
+ # @see Channels#get Channels#get
9
+ # @see Channels
10
+ # @see Stream
11
+ # @see User
12
+ class Channel
13
+ include Twitch::IdEquality
14
+
15
+ # @private
16
+ def initialize(hash, query)
17
+ @query = query
18
+ @id = hash['_id']
19
+ @background_url = hash['background']
20
+ @banner_url = hash['banner']
21
+ @created_at = Time.parse(hash['created_at']).utc
22
+ @display_name = hash['display_name']
23
+ @game_name = hash['game']
24
+ @logo_url = hash['logo']
25
+ @mature = hash['mature'] || false
26
+ @name = hash['name']
27
+ @status = hash['status']
28
+ @updated_at = Time.parse(hash['updated_at']).utc
29
+ @url = hash['url']
30
+ @video_banner_url = hash['video_banner']
31
+
32
+ @teams = []
33
+ teams = hash['teams']
34
+ teams.each do |team_json|
35
+ @teams << Team.new(team_json)
36
+ end
37
+ end
38
+
39
+ # Does this channel have mature content? This flag is specified by the owner of the channel.
40
+ # @return [Boolean] `true` if the channel has mature content, `false` otherwise.
41
+ def mature?
42
+ @mature
43
+ end
44
+
45
+ # Get the live stream associated with this channel.
46
+ # @note This incurs an additional web request.
47
+ # @return [Stream] Live stream object for this channel, or `nil` if the channel is not currently streaming.
48
+ # @see #streaming?
49
+ def stream
50
+ @query.streams.get(@name)
51
+ end
52
+
53
+ # Does this channel currently have a live stream?
54
+ # @note This makes a separate request to get the channel's stream. If you want to actually use the stream object, you should call `#stream` instead.
55
+ # @return [Boolean] `true` if the channel currently has a live stream, `false` otherwise.
56
+ # @see #stream
57
+ def streaming?
58
+ !stream.nil?
59
+ end
60
+
61
+ # Get the owner of this channel.
62
+ # @note This incurs an additional web request.
63
+ # @return [User] The user that owns this channel.
64
+ def user
65
+ @query.users.get(@name)
66
+ end
67
+
68
+ # Get the users following this channel.
69
+ # @note The number of followers is potentially very large, so it's recommended that you specify a `:limit`.
70
+ # @example
71
+ # channel.followers(:limit => 20)
72
+ # @example
73
+ # channel.followers do |follower|
74
+ # puts follower.display_name
75
+ # end
76
+ # @param options [Hash] Filter criteria.
77
+ # @option options [Fixnum] :limit (nil) Limit on the number of results returned.
78
+ # @option options [Fixnum] :offset (0) Offset into the result set to begin enumeration.
79
+ # @yield Optional. If a block is given, each follower is yielded.
80
+ # @yieldparam [User] follower Current follower.
81
+ # @see User
82
+ # @see https://github.com/justintv/Twitch-API/blob/master/v2_resources/channels.md#get-channelschannelfollows GET /channels/:channel/follows
83
+ # @return [Array<User>] Users following this channel, if no block is given.
84
+ # @return [nil] If a block is given.
85
+ def followers(options = {}, &block)
86
+ name = CGI.escape(@name)
87
+ return @query.connection.accumulate(
88
+ :path => "channels/#{name}/follows",
89
+ :json => 'follows',
90
+ :sub_json => 'user',
91
+ :create => -> hash { User.new(hash, @query) },
92
+ :limit => options[:limit],
93
+ :offset => options[:offset],
94
+ &block
95
+ )
96
+ end
97
+
98
+ # Get the videos for a channel, most recently created first.
99
+ # @note This incurs additional web requests.
100
+ # @note You can get videos directly from a channel name via {Videos#for_channel}.
101
+ # @example
102
+ # v = channel.videos(:type => :broadcasts)
103
+ # @example
104
+ # channel.videos(:type => :highlights) do |video|
105
+ # next if video.view_count < 10000
106
+ # puts video.url
107
+ # end
108
+ # @param options [Hash] Filter criteria.
109
+ # @option options [Symbol] :type (:highlights) The type of videos to return. Valid values are `:broadcasts`, `:highlights`.
110
+ # @option options [Fixnum] :limit (nil) Limit on the number of results returned.
111
+ # @option options [Fixnum] :offset (0) Offset into the result set to begin enumeration.
112
+ # @yield Optional. If a block is given, each video is yielded.
113
+ # @yieldparam [Video] video Current video.
114
+ # @see Video
115
+ # @see Videos#for_channel Videos#for_channel
116
+ # @see https://github.com/justintv/Twitch-API/blob/master/v2_resources/videos.md#get-channelschannelvideos GET /channels/:channel/videos
117
+ # @raise [ArgumentError] If `:type` is not one of `:broadcasts` or `:highlights`.
118
+ # @return [Array<Video>] Videos for the channel, if no block is given.
119
+ # @return [nil] If a block is given.
120
+ def videos(options = {}, &block)
121
+ @query.videos.for_channel(@name, options, &block)
122
+ end
123
+
124
+ # @example
125
+ # 23460970
126
+ # @return [Fixnum] Unique Twitch ID.
127
+ attr_reader :id
128
+
129
+ # @example
130
+ # "http://static-cdn.jtvnw.net/jtv_user_pictures/lethalfrag-channel_background_image-833a4324bc698c9b.jpeg"
131
+ # @return [String] URL for background image.
132
+ attr_reader :background_url
133
+
134
+ # @example
135
+ # "http://static-cdn.jtvnw.net/jtv_user_pictures/lethalfrag-channel_header_image-463a4670c91c2b61-640x125.jpeg"
136
+ # @return [String] URL for banner image.
137
+ attr_reader :banner_url
138
+
139
+ # @example
140
+ # 2011-07-15 07:53:58 UTC
141
+ # @return [Time] When the channel was created (UTC).
142
+ attr_reader :created_at
143
+
144
+ # @example
145
+ # "Lethalfrag"
146
+ # @see #name
147
+ # @return [String] User-friendly display name. This name is used for the channel's page title.
148
+ attr_reader :display_name
149
+
150
+ # @example
151
+ # "Super Meat Boy"
152
+ # @return [String] Name of the primary game for this channel.
153
+ attr_reader :game_name
154
+
155
+ # @example
156
+ # "http://static-cdn.jtvnw.net/jtv_user_pictures/lethalfrag-profile_image-050adf252718823b-300x300.png"
157
+ # @return [String] URL for the logo image.
158
+ attr_reader :logo_url
159
+
160
+ # @example
161
+ # "lethalfrag"
162
+ # @see #display_name
163
+ # @return [String] Unique Twitch name.
164
+ attr_reader :name
165
+
166
+ # @example
167
+ # "(Day 563/731) | Dinner and a Game (Cooking at http://twitch.tv/lookatmychicken)"
168
+ # @return [String] Current status set by the channel's owner.
169
+ attr_reader :status
170
+
171
+ # @example
172
+ # 2013-07-21 05:27:58 UTC
173
+ # @return [Time] When the channel was last updated (UTC). For example, when a stream is started or a channel's status is changed, the channel is updated.
174
+ attr_reader :updated_at
175
+
176
+ # @example
177
+ # "http://www.twitch.tv/lethalfrag"
178
+ # @return [String] The URL for the channel's main page.
179
+ attr_reader :url
180
+
181
+ # @example
182
+ # "http://static-cdn.jtvnw.net/jtv_user_pictures/lethalfrag-channel_offline_image-3b801b2ccc11830b-640x360.jpeg"
183
+ # @return [String] URL for the image shown when the stream is offline.
184
+ attr_reader :video_banner_url
185
+
186
+ # @see Team
187
+ # @return [Array<Team>] The list of teams that this channel is associated with. Not all channels have associated teams.
188
+ attr_reader :teams
189
+ end
190
+
191
+ # Query class for finding channels.
192
+ # @see Channel
193
+ class Channels
194
+ # @private
195
+ def initialize(query)
196
+ @query = query
197
+ end
198
+
199
+ # Get a channel by name.
200
+ # @example
201
+ # c = Twitch.channels.get('day9tv')
202
+ # @param channel_name [String] The name of the channel to get. This is the same as the stream or user name.
203
+ # @return [Channel] A valid `Channel` object if the channel exists, `nil` otherwise.
204
+ def get(channel_name)
205
+ name = CGI.escape(channel_name)
206
+
207
+ # HTTP 422 can happen if the channel is associated with a Justin.tv account.
208
+ Twitch::Status.map(404 => nil, 422 => nil) do
209
+ json = @query.connection.get("channels/#{name}")
210
+ Channel.new(json, @query)
211
+ end
212
+ end
213
+ end
214
+ end