kappa 0.1.5.pre → 0.2.0
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.md +99 -35
- data/lib/kappa.rb +0 -78
- data/lib/kappa/channel.rb +60 -42
- data/lib/kappa/connection.rb +17 -28
- data/lib/kappa/game.rb +85 -28
- data/lib/kappa/images.rb +17 -0
- data/lib/kappa/stream.rb +100 -37
- data/lib/kappa/team.rb +51 -27
- data/lib/kappa/user.rb +69 -38
- data/lib/kappa/version.rb +1 -1
- data/lib/kappa/video.rb +64 -17
- metadata +51 -17
data/lib/kappa/user.rb
CHANGED
@@ -1,27 +1,17 @@
|
|
1
|
-
|
2
|
-
# @private
|
3
|
-
class UserBase
|
4
|
-
include IdEquality
|
5
|
-
|
6
|
-
#
|
7
|
-
# GET /users/:user
|
8
|
-
# https://github.com/justintv/Twitch-API/blob/master/v2_resources/users.md#get-usersuser
|
9
|
-
#
|
10
|
-
def self.get(user_name)
|
11
|
-
json = connection.get("users/#{user_name}")
|
12
|
-
if json['status'] == 404
|
13
|
-
nil
|
14
|
-
else
|
15
|
-
new(json)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
1
|
+
require 'cgi'
|
20
2
|
|
21
3
|
module Kappa::V2
|
22
|
-
|
4
|
+
# These are members of the Twitch community who have a Twitch account. If broadcasting,
|
5
|
+
# they can own a stream that they can broadcast on their channel. If mainly viewing,
|
6
|
+
# they might follow or subscribe to channels.
|
7
|
+
# @see .get User.get
|
8
|
+
# @see Channel
|
9
|
+
# @see Stream
|
10
|
+
class User
|
23
11
|
include Connection
|
12
|
+
include Kappa::IdEquality
|
24
13
|
|
14
|
+
# @private
|
25
15
|
def initialize(hash)
|
26
16
|
@id = hash['_id']
|
27
17
|
@created_at = DateTime.parse(hash['created_at'])
|
@@ -32,10 +22,29 @@ module Kappa::V2
|
|
32
22
|
@updated_at = DateTime.parse(hash['updated_at'])
|
33
23
|
end
|
34
24
|
|
25
|
+
# Get a user by name.
|
26
|
+
# @param user_name [String] The name of the user to get. This is the same as the channel or stream name.
|
27
|
+
# @see https://github.com/justintv/Twitch-API/blob/master/v2_resources/users.md#get-usersuser GET /users/:user
|
28
|
+
# @return [User] A valid `User` object if the user exists, `nil` otherwise.
|
29
|
+
def self.get(user_name)
|
30
|
+
encoded_name = CGI.escape(user_name)
|
31
|
+
json = connection.get("users/#{encoded_name}")
|
32
|
+
if !json || json['status'] == 404
|
33
|
+
nil
|
34
|
+
else
|
35
|
+
new(json)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
# Get the `Channel` associated with this user.
|
40
|
+
# @note This incurs an additional web request.
|
41
|
+
# @return [Channel] The `Channel` associated with this user, or `nil` if this is a Justin.tv account.
|
42
|
+
# @see Channel.get
|
35
43
|
def channel
|
36
|
-
|
44
|
+
Channel.get(@name)
|
37
45
|
end
|
38
46
|
|
47
|
+
# @return [Boolean] `true` if the user is a member of the Twitch.tv staff, `false` otherwise.
|
39
48
|
def staff?
|
40
49
|
@staff
|
41
50
|
end
|
@@ -44,22 +53,22 @@ module Kappa::V2
|
|
44
53
|
# GET /channels/:channel/subscriptions/:user
|
45
54
|
# https://github.com/justintv/Twitch-API/blob/master/v2_resources/subscriptions.md#get-channelschannelsubscriptionsuser
|
46
55
|
#
|
47
|
-
|
56
|
+
|
57
|
+
# TODO: Requires authentication. Private until implemented.
|
58
|
+
# @private
|
48
59
|
def subscribed_to?(channel_name)
|
49
60
|
end
|
50
61
|
|
51
|
-
#
|
52
|
-
#
|
53
|
-
#
|
54
|
-
#
|
55
|
-
#
|
56
|
-
|
57
|
-
|
58
|
-
#
|
59
|
-
def following(params = {})
|
62
|
+
# @param options [Hash] Filter criteria.
|
63
|
+
# @option options [Fixnum] :limit (none) Limit on the number of results returned.
|
64
|
+
# @see #following?
|
65
|
+
# @see https://github.com/justintv/Twitch-API/blob/master/v2_resources/follows.md#get-usersuserfollowschannels GET /users/:user/follows/channels
|
66
|
+
# @return [Array<Channel>] List of channels the user is currently following.
|
67
|
+
def following(options = {})
|
68
|
+
# TODO: If offset supported?
|
60
69
|
params = {}
|
61
70
|
|
62
|
-
limit =
|
71
|
+
limit = options[:limit]
|
63
72
|
if limit && (limit < 100)
|
64
73
|
params[:limit] = limit
|
65
74
|
else
|
@@ -77,22 +86,44 @@ module Kappa::V2
|
|
77
86
|
)
|
78
87
|
end
|
79
88
|
|
80
|
-
#
|
81
|
-
#
|
82
|
-
#
|
83
|
-
#
|
84
|
-
def following?(
|
89
|
+
# @param channel [String, Channel] The name of the channel (or `Channel` object) to check.
|
90
|
+
# @return [Boolean] `true` if the user is following the channel, `false` otherwise.
|
91
|
+
# @see #following
|
92
|
+
# @see https://github.com/justintv/Twitch-API/blob/master/v2_resources/follows.md#get-usersuserfollowschannelstarget GET /users/:user/follows/:channels/:target
|
93
|
+
def following?(channel)
|
94
|
+
# TODO: Support User for channel parameter? Stream?
|
95
|
+
|
96
|
+
channel_name = case channel
|
97
|
+
when String
|
98
|
+
channel
|
99
|
+
when Channel
|
100
|
+
channel.name
|
101
|
+
end
|
102
|
+
|
103
|
+
channel_name = CGI.escape(channel_name)
|
104
|
+
|
85
105
|
json = connection.get("users/#{@name}/follows/channels/#{channel_name}")
|
86
106
|
status = json['status']
|
87
107
|
return !status || (status != 404)
|
88
108
|
end
|
89
109
|
|
110
|
+
# @return [Fixnum] Unique Twitch ID.
|
90
111
|
attr_reader :id
|
112
|
+
|
113
|
+
# @return [DateTime] When the user account was created.
|
91
114
|
attr_reader :created_at
|
115
|
+
|
116
|
+
# @return [DateTime] When the user account was last updated.
|
117
|
+
attr_reader :updated_at
|
118
|
+
|
119
|
+
# @return [String] User-friendly display name.
|
92
120
|
attr_reader :display_name
|
121
|
+
|
122
|
+
# @return [String] URL for the logo image.
|
93
123
|
attr_reader :logo_url
|
124
|
+
|
125
|
+
# @return [String] Unique Twitch name.
|
94
126
|
attr_reader :name
|
95
|
-
attr_reader :updated_at
|
96
127
|
|
97
128
|
# TODO: Authenticated user attributes.
|
98
129
|
# attr_reader :email
|
data/lib/kappa/version.rb
CHANGED
@@ -1 +1 @@
|
|
1
|
-
$version = '0.
|
1
|
+
$version = '0.2.0'
|
data/lib/kappa/video.rb
CHANGED
@@ -1,21 +1,19 @@
|
|
1
|
-
|
2
|
-
# @private
|
3
|
-
class VideoBase
|
4
|
-
include IdEquality
|
5
|
-
|
6
|
-
def self.get(id)
|
7
|
-
json = connection.get("videos/#{id}")
|
8
|
-
new(json)
|
9
|
-
end
|
10
|
-
end
|
11
|
-
end
|
1
|
+
require 'cgi'
|
12
2
|
|
13
3
|
module Kappa::V2
|
14
|
-
|
4
|
+
# Videos are broadcasts or highlights owned by a channel. Broadcasts are unedited
|
5
|
+
# videos that are saved after a streaming session. Highlights are videos edited from
|
6
|
+
# broadcasts by the channel's owner.
|
7
|
+
# @see .get Video.get
|
8
|
+
# @see Videos
|
9
|
+
# @see Channel
|
10
|
+
class Video
|
15
11
|
include Connection
|
12
|
+
include Kappa::IdEquality
|
16
13
|
|
14
|
+
# @private
|
17
15
|
def initialize(hash)
|
18
|
-
@id = hash['
|
16
|
+
@id = hash['_id']
|
19
17
|
@title = hash['title']
|
20
18
|
@recorded_at = DateTime.parse(hash['recorded_at'])
|
21
19
|
@url = hash['url']
|
@@ -28,26 +26,75 @@ module Kappa::V2
|
|
28
26
|
# @channel_display_name = json['channel']['display_name']
|
29
27
|
end
|
30
28
|
|
29
|
+
# Get a video by ID.
|
30
|
+
# @example
|
31
|
+
# v = Video.get('a396294648')
|
32
|
+
# v.title # => "DreamHack Open Stockholm 26-27 April"
|
33
|
+
# @param id [String] The ID of the video to get.
|
34
|
+
# @raise [ArgumentError] If `id` is `nil` or blank.
|
35
|
+
# @return [Video] A valid `Video` object if the video exists, `nil` otherwise.
|
36
|
+
def self.get(id)
|
37
|
+
raise ArgumentError if !id || id.strip.empty?
|
38
|
+
|
39
|
+
encoded_id = CGI.escape(id)
|
40
|
+
json = connection.get("videos/#{encoded_id}")
|
41
|
+
if !json || json['status'] == 404
|
42
|
+
nil
|
43
|
+
else
|
44
|
+
new(json)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
# @note This incurs an additional web request.
|
49
|
+
# @return [Channel] The channel on which this video was originally streamed.
|
31
50
|
def channel
|
32
51
|
Channel.new(connection.get("channels/#{@channel_name}"))
|
33
52
|
end
|
34
53
|
|
54
|
+
# @note This is a `String`, not a `Fixnum` like most other object IDs.
|
55
|
+
# @example
|
56
|
+
# v = Video.get('a396294648')
|
57
|
+
# v.id # => "a396294648"
|
58
|
+
# @return [String] Unique Twitch ID for this video.
|
35
59
|
attr_reader :id
|
60
|
+
|
61
|
+
# @return [String] Title of this video. This is seen on the video's page.
|
36
62
|
attr_reader :title
|
63
|
+
|
64
|
+
# @return [DateTime] When this video was recorded.
|
37
65
|
attr_reader :recorded_at
|
66
|
+
|
67
|
+
# @return [String] URL of this video on Twitch.
|
38
68
|
attr_reader :url
|
69
|
+
|
70
|
+
# @return [Fixnum] The number of views this video has received all-time.
|
39
71
|
attr_reader :view_count
|
72
|
+
|
73
|
+
# @return [String] Description of this video.
|
40
74
|
attr_reader :description
|
41
|
-
|
42
|
-
|
75
|
+
|
76
|
+
# @return [Fixnum] The length of this video in seconds.
|
77
|
+
attr_reader :length_sec # TODO: Is this actually in seconds? Doesn't seem to match up with video length.
|
78
|
+
|
79
|
+
# @return [String] The name of the game played in this video.
|
43
80
|
attr_reader :game_name
|
81
|
+
|
82
|
+
# @return [String] URL of a preview screenshot taken from the video stream.
|
44
83
|
attr_reader :preview_url
|
45
|
-
|
46
|
-
|
84
|
+
|
85
|
+
# @return [String] The name of the channel on which this video was originally streamed.
|
86
|
+
attr_reader :channel_name # TODO: Move this under "v.channel.name" and force the query if other attributes are requested.
|
87
|
+
|
88
|
+
# TODO: embed (HTML embed code)
|
47
89
|
end
|
48
90
|
|
91
|
+
# Query class used for finding top videos.
|
92
|
+
# @see Video
|
49
93
|
class Videos
|
94
|
+
# @private
|
95
|
+
# Private until implemented.
|
50
96
|
def self.top(params = {})
|
97
|
+
# TODO
|
51
98
|
end
|
52
99
|
end
|
53
100
|
end
|
metadata
CHANGED
@@ -1,19 +1,19 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kappa
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.2.0
|
5
|
+
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Chris Schmich
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-06-03 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: httparty
|
16
|
-
requirement: &
|
16
|
+
requirement: &24580620 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 0.9.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *24580620
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: addressable
|
27
|
-
requirement: &
|
27
|
+
requirement: &24580296 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 2.3.3
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *24580296
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rake
|
38
|
-
requirement: &
|
38
|
+
requirement: &24579948 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0.9'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *24579948
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: webmock
|
49
|
-
requirement: &
|
49
|
+
requirement: &24579624 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 1.11.0
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *24579624
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: rspec
|
60
|
-
requirement: &
|
60
|
+
requirement: &24579288 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,43 @@ dependencies:
|
|
65
65
|
version: 2.13.0
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *24579288
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: launchy
|
71
|
+
requirement: &24578952 !ruby/object:Gem::Requirement
|
72
|
+
none: false
|
73
|
+
requirements:
|
74
|
+
- - ! '>='
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: 2.3.0
|
77
|
+
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: *24578952
|
80
|
+
- !ruby/object:Gem::Dependency
|
81
|
+
name: yard
|
82
|
+
requirement: &24578604 !ruby/object:Gem::Requirement
|
83
|
+
none: false
|
84
|
+
requirements:
|
85
|
+
- - ! '>='
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: 0.8.6
|
88
|
+
type: :development
|
89
|
+
prerelease: false
|
90
|
+
version_requirements: *24578604
|
91
|
+
- !ruby/object:Gem::Dependency
|
92
|
+
name: simplecov
|
93
|
+
requirement: &24578280 !ruby/object:Gem::Requirement
|
94
|
+
none: false
|
95
|
+
requirements:
|
96
|
+
- - ! '>='
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: 0.7.1
|
99
|
+
type: :development
|
100
|
+
prerelease: false
|
101
|
+
version_requirements: *24578280
|
69
102
|
- !ruby/object:Gem::Dependency
|
70
103
|
name: coveralls
|
71
|
-
requirement: &
|
104
|
+
requirement: &24578004 !ruby/object:Gem::Requirement
|
72
105
|
none: false
|
73
106
|
requirements:
|
74
107
|
- - ! '>='
|
@@ -76,7 +109,7 @@ dependencies:
|
|
76
109
|
version: '0'
|
77
110
|
type: :development
|
78
111
|
prerelease: false
|
79
|
-
version_requirements: *
|
112
|
+
version_requirements: *24578004
|
80
113
|
description: ! " A Ruby library for interfacing with the Twitch.tv API\n including
|
81
114
|
users, channels, streams, and followers.\n"
|
82
115
|
email: schmch@gmail.com
|
@@ -112,9 +145,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
112
145
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
113
146
|
none: false
|
114
147
|
requirements:
|
115
|
-
- - ! '
|
148
|
+
- - ! '>='
|
116
149
|
- !ruby/object:Gem::Version
|
117
|
-
version:
|
150
|
+
version: '0'
|
118
151
|
requirements: []
|
119
152
|
rubyforge_project:
|
120
153
|
rubygems_version: 1.8.15
|
@@ -122,3 +155,4 @@ signing_key:
|
|
122
155
|
specification_version: 3
|
123
156
|
summary: Ruby library for interfacing with the Twitch.tv API.
|
124
157
|
test_files: []
|
158
|
+
has_rdoc:
|