streamelements 0.2.0 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f59098ef3eac1b544e2ddb657c0c3c5abd92df95ca5a7b0c6b1a6263055b0688
4
- data.tar.gz: 45073cf8652ed336f7c872dcbc80e153d6d3e64416b19307cb8643c328b961bb
3
+ metadata.gz: 83d2ea9888a42229e5016f02f1dc44bc4bbb6dcd8e2518f18f205665af4085d5
4
+ data.tar.gz: 693b8d5938293d15a82eada641f6f1f4de021eaad7a68457d9bc2e179d7bd3db
5
5
  SHA512:
6
- metadata.gz: 753fd8a5d596772a72b9e80283b1ff79088db9f6f08d84423e9e3ca524d0d2c8077a0d781e3744fe9d54f40ec35616a5314428c2cae685f66a37bdf71afbef2b
7
- data.tar.gz: 8d3dc3c12760aed80003adcc619ff1a207ecfeab5e01529ca697cbcb2ca78782028f4d25341475515ce4d484cf07cb5cc5130f74e93904c13ef9af23ba4d2b8d
6
+ metadata.gz: f76b12a8c58996a31cfdc3849e237c6d4b1c4ded028cfe7bcba7a60379aa2e864d5dfd7191cb8677fbf06594c0a3284cfa0a5039a903579e717378d328ef04dc
7
+ data.tar.gz: b71d769c436f467bf3405df589f2ac8d8eb2fa44e06b1e3a040b69a2ab7e2582d3203e7f21730bae46b2deac81d43f863e05316851765a37339eb99d21f7ab83
data/README.md CHANGED
@@ -12,27 +12,50 @@ gem "streamelements"
12
12
 
13
13
  ## Usage
14
14
 
15
- ### Authentication
15
+ ### Set Client Details
16
16
 
17
- Firstly you'll need to set a JWT Token and Channel ID.
17
+ Firstly you'll need to the access token, which can be an oAuth Token or JWT.
18
18
 
19
19
  ```ruby
20
- StreamElements.configure do |config|
21
- config.token = ENV["STREAMELEMENTS_JWT_TOKEN"]
22
- config.channel = ENV["STREAMELEMENTS_CHANNEL_ID"]
23
- end
20
+ @client = StreamElements::Client.new(access_token: "abc123")
24
21
  ```
25
22
 
23
+ ### Resources
24
+
25
+ The gem maps as closely as we can to the StreamElements API so you can easily convert API examples to gem code.
26
+
27
+ Responses are created as objects like `StreamElements::Channel`. Having types like `StreamElements::User` is handy for understanding what
28
+ type of object you're working with. They're built using OpenStruct so you can easily access data in a Ruby-ish way.
29
+
30
+ ### Channels
31
+
32
+ ```ruby
33
+ # Get the current channel
34
+ @client.channels.me
35
+ ```
36
+
37
+
38
+ ### Users
39
+
40
+ ```ruby
41
+ # Get the current user
42
+ @client.users.current
43
+
44
+ # Get the users Channels
45
+ @client.users.channels
46
+ ```
47
+
48
+
26
49
  ### Activities
27
50
 
28
51
  ```ruby
29
52
  # Retrieve a list of Activities
30
53
  # https://dev.streamelements.com/docs/api-docs/861a5d5450bbb-channel
31
- StreamElements::Activity.list
54
+ @client.activities.list(channel: "channel-id", after:, before:, limit:, types:)
32
55
 
33
56
  # Retrieve the Top Activities
34
57
  # https://dev.streamelements.com/docs/api-docs/2ce44d058b16b-channel-top
35
- StreamElements::Activity.top
58
+ @client.activities.top(channel: "channel-id", period:, offset:, limit:, type:)
36
59
  ```
37
60
 
38
61
  ### Tips
@@ -40,61 +63,48 @@ StreamElements::Activity.top
40
63
  ```ruby
41
64
  # Retrieve a list of Tips
42
65
  # https://dev.streamelements.com/docs/api-docs/704e5580be2d9-channel
43
- StreamElements::Tip.list
66
+ @client.tips.list(channel: "channel-id", after: "2024-01-01", sort: "createdAt", limit: 10)
44
67
 
45
68
  # Retrieve a Tip
46
- StreamElements::Tip.retrieve(id: "tip-id")
69
+ @client.tips.retrieve(channel: "channel-id", id: "tip-id")
47
70
 
48
71
  # Retrieve the Tip Tips
49
72
  # https://dev.streamelements.com/docs/api-docs/b404f906817c4-channel-top
50
- StreamElements::Tip.top
73
+ @client.tips.top(channel: "channel-id")
51
74
  ```
52
75
 
53
76
  ### Song Requests
54
77
 
55
78
  ```ruby
56
79
  # Retrieve the current playing song
57
- StreamElements::SongRequest.playing
80
+ @client.song_requests.playing(channel: "channel-id")
58
81
 
59
82
  # Retrieve a list of songs in the queue
60
- StreamElements::SongRequest.queue
61
-
62
- # Retrieve a list of previous songs
63
- StreamElements::SongRequest.queue
83
+ @client.song_requests.queue(channel: "channel-id")
64
84
 
65
85
  # Add a song to the queue
66
86
  # video is the YouTube video ID or URL
67
- StreamElements::SongRequest.add(video: "video-id")
87
+ @client.song_requests.add(channel: "channel-id", video: "video-id")
68
88
 
69
89
  # Pause the player
70
- StreamElements::SongRequest.pause
90
+ @client.song_requests.pause(channel: "channel-id")
71
91
 
72
92
  # Resume the player
73
- StreamElements::SongRequest.play
93
+ @client.song_requests.play(channel: "channel-id")
74
94
 
75
95
  # Set the volume of the player
76
96
  # volume is a number between 0 and 100
77
- StreamElements::SongRequest.volume(volume: 50)
97
+ @client.song_requests.volume(channel: "channel-id", volume: 50)
78
98
 
79
99
  # Skip the current song
80
- StreamElements::SongRequest.skip
100
+ @client.song_requests.skip(channel: "channel-id")
81
101
 
82
102
  # Get the current song request settings
83
- StreamElements::SongRequest.settings
103
+ @client.song_requests.settings(channel: "channel-id")
84
104
 
85
105
  # Set the current song request settings
86
106
  # settings is a hash of settings
87
- StreamElements::SongRequest.update_settings(settings: { max_requests: 5 })
88
- ```
89
-
90
- ### Users
91
-
92
- ```ruby
93
- # Get the current user
94
- StreamElements::User.current
95
-
96
- # Get the users Channels
97
- StreamElements::User.channels
107
+ @client.song_requests.update_settings(channel: "channel-id", settings: { max_requests: 5 })
98
108
  ```
99
109
 
100
110
  ## Contributing
@@ -1,74 +1,47 @@
1
1
  module StreamElements
2
2
  class Client
3
3
 
4
- class << self
4
+ BASE_URL = "https://api.streamelements.com/kappa/v2"
5
5
 
6
- def connection
7
- @connection ||= Faraday.new("https://api.streamelements.com/kappa/v2") do |conn|
8
- conn.request :authorization, :Bearer, StreamElements.config.token
6
+ attr_reader :access_token
9
7
 
10
- conn.headers = {
11
- "User-Agent" => "streamelements/v#{VERSION} (github.com/deanpcmad/streamelements)"
12
- }
13
-
14
- conn.request :json
8
+ def initialize(access_token:)
9
+ @access_token = access_token
10
+ end
15
11
 
16
- conn.response :json, content_type: "application/json"
17
- end
18
- end
12
+ def channels
13
+ ChannelsResource.new(self)
14
+ end
19
15
 
16
+ def users
17
+ UsersResource.new(self)
18
+ end
20
19
 
21
- def get_request(url, params: {}, headers: {})
22
- handle_response connection.get(replace_channel(url), params, headers)
23
- end
20
+ def activities
21
+ ActivitiesResource.new(self)
22
+ end
24
23
 
25
- def post_request(url, body: {}, headers: {})
26
- handle_response connection.post(replace_channel(url), body, headers)
27
- end
24
+ def tips
25
+ TipsResource.new(self)
26
+ end
28
27
 
29
- def put_request(url, body: {}, headers: {})
30
- handle_response connection.put(replace_channel(url), body, headers)
31
- end
28
+ def song_requests
29
+ SongRequestsResource.new(self)
30
+ end
32
31
 
33
- def patch_request(url, body:, headers: {})
34
- handle_response connection.patch(replace_channel(url), body, headers)
35
- end
36
32
 
37
- def delete_request(url, headers: {})
38
- handle_response connection.delete(replace_channel(url), headers)
39
- end
33
+ def connection
34
+ @connection ||= Faraday.new(BASE_URL) do |conn|
35
+ conn.request :authorization, :Bearer, access_token
40
36
 
41
- def replace_channel(url)
42
- url.gsub(":channel", StreamElements.config.channel)
43
- end
37
+ conn.headers = {
38
+ "User-Agent" => "streamelements/v#{VERSION} (github.com/deanpcmad/streamelements)"
39
+ }
44
40
 
45
- def handle_response(response)
46
- case response.status
47
- when 400
48
- raise Error, "Error 400: Your request was malformed. '#{response.body["error"]}'"
49
- when 401
50
- raise Error, "Error 401: You did not supply valid authentication credentials. '#{response.body["error"]}'"
51
- when 403
52
- raise Error, "Error 403: You are not allowed to perform that action. '#{response.body["error"]}'"
53
- when 404
54
- raise Error, "Error 404: No results were found for your request. '#{response.body["error"]}'"
55
- when 409
56
- raise Error, "Error 409: Your request was a conflict. '#{response.body["error"]}'"
57
- when 429
58
- raise Error, "Error 429: Your request exceeded the API rate limit. '#{response.body["error"]}'"
59
- when 500
60
- raise Error, "Error 500: We were unable to perform the request due to server-side problems. '#{response.body["error"]}'"
61
- when 503
62
- raise Error, "Error 503: You have been rate limited for sending more than 20 requests per second. '#{response.body["error"]}'"
63
- when 501
64
- raise Error, "Error 501: This resource has not been implemented. '#{response.body["error"]}'"
65
- when 204
66
- return true
67
- end
41
+ conn.request :json
68
42
 
69
- response
43
+ conn.response :json, content_type: "application/json"
70
44
  end
71
-
72
45
  end
73
46
 
74
47
  end
@@ -19,5 +19,17 @@ module StreamElements
19
19
  @data = data
20
20
  @total = total
21
21
  end
22
+
23
+ def each(&block)
24
+ data.each(&block)
25
+ end
26
+
27
+ def first
28
+ data.first
29
+ end
30
+
31
+ def last
32
+ data.last
33
+ end
22
34
  end
23
35
  end
@@ -0,0 +1,128 @@
1
+ module StreamElements
2
+ class ErrorGenerator < StandardError
3
+ attr_reader :http_status_code
4
+ attr_reader :error_code
5
+ attr_reader :error_message
6
+
7
+ def initialize(response_body, http_status_code)
8
+ @response_body = response_body
9
+ @http_status_code = http_status_code
10
+ set_error_values
11
+ super(build_message)
12
+ end
13
+
14
+ private
15
+
16
+ def set_error_values
17
+ @error_code = @response_body.dig("error")
18
+ @error_message = @response_body.dig("message")
19
+ end
20
+
21
+ def error_message
22
+ @error_message || @response_body.dig("error")
23
+ rescue NoMethodError
24
+ "An unknown error occurred."
25
+ end
26
+
27
+ def build_message
28
+ if error_code.nil?
29
+ return "Error #{@http_status_code}: #{error_message}"
30
+ end
31
+ "Error #{@http_status_code}: #{error_message} '#{error_message}'"
32
+ end
33
+ end
34
+
35
+ module Errors
36
+ class BadRequestError < ErrorGenerator
37
+ private
38
+
39
+ def error_message
40
+ "Your request was malformed."
41
+ end
42
+ end
43
+
44
+ class AuthenticationMissingError < ErrorGenerator
45
+ private
46
+
47
+ def error_message
48
+ "You did not supply valid authentication credentials."
49
+ end
50
+ end
51
+
52
+ class ForbiddenError < ErrorGenerator
53
+ private
54
+
55
+ def error_message
56
+ "You are not allowed to perform that action."
57
+ end
58
+ end
59
+
60
+ class EntityNotFoundError < ErrorGenerator
61
+ private
62
+
63
+ def error_message
64
+ "No results were found for your request."
65
+ end
66
+ end
67
+
68
+ class ConflictError < ErrorGenerator
69
+ private
70
+
71
+ def error_message
72
+ "Your request was a conflict."
73
+ end
74
+ end
75
+
76
+ class TooManyRequestsError < ErrorGenerator
77
+ private
78
+
79
+ def error_message
80
+ "Your request exceeded the API rate limit."
81
+ end
82
+ end
83
+
84
+ class InternalError < ErrorGenerator
85
+ private
86
+
87
+ def error_message
88
+ "We were unable to perform the request due to server-side problems."
89
+ end
90
+ end
91
+
92
+ class ServiceUnavailableError < ErrorGenerator
93
+ private
94
+
95
+ def error_message
96
+ "You have been rate limited for sending more than 20 requests per second."
97
+ end
98
+ end
99
+
100
+ class NotImplementedError < ErrorGenerator
101
+ private
102
+
103
+ def error_message
104
+ "This resource has not been implemented."
105
+ end
106
+ end
107
+ end
108
+
109
+ class ErrorFactory
110
+ HTTP_ERROR_MAP = {
111
+ 400 => Errors::BadRequestError,
112
+ 401 => Errors::AuthenticationMissingError,
113
+ 403 => Errors::ForbiddenError,
114
+ 404 => Errors::EntityNotFoundError,
115
+ 409 => Errors::ConflictError,
116
+ 429 => Errors::TooManyRequestsError,
117
+ 500 => Errors::InternalError,
118
+ 503 => Errors::ServiceUnavailableError,
119
+ 501 => Errors::NotImplementedError
120
+ }.freeze
121
+
122
+ def self.create(response_body, http_status_code)
123
+ status = http_status_code
124
+ error_class = HTTP_ERROR_MAP[status] || ErrorGenerator
125
+ error_class.new(response_body, http_status_code) if error_class
126
+ end
127
+ end
128
+ end
@@ -0,0 +1,4 @@
1
+ module StreamElements
2
+ class Activity < Object
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module StreamElements
2
+ class SongRequest < Object
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module StreamElements
2
+ class Tip < Object
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module StreamElements
2
+ class TopTip < Object
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module StreamElements
2
+ class User < Object
3
+ end
4
+ end
@@ -0,0 +1,47 @@
1
+ module StreamElements
2
+ class Resource
3
+ attr_reader :client
4
+
5
+ def initialize(client)
6
+ @client = client
7
+ end
8
+
9
+ private
10
+
11
+ def get_request(url, params: {}, headers: {})
12
+ handle_response client.connection.get(url, params, headers)
13
+ end
14
+
15
+ def post_request(url, body: {}, headers: {})
16
+ handle_response client.connection.post(url, body, headers)
17
+ end
18
+
19
+ def put_request(url, body: {}, headers: {})
20
+ handle_response client.connection.put(url, body, headers)
21
+ end
22
+
23
+ def patch_request(url, body:, headers: {})
24
+ handle_response client.connection.patch(url, body, headers)
25
+ end
26
+
27
+ def delete_request(url, headers: {})
28
+ handle_response client.connection.delete(url, headers)
29
+ end
30
+
31
+ def handle_response(response)
32
+ return true if response.status == 204
33
+ return response unless error?(response)
34
+
35
+ raise_error(response)
36
+ end
37
+
38
+ def error?(response)
39
+ [ 400, 401, 403, 404, 409, 429, 500, 501, 503 ].include?(response.status) #|| response.body&.key?("error")
40
+ end
41
+
42
+ def raise_error(response)
43
+ error = StreamElements::ErrorFactory.create(response.body, response.status)
44
+ raise error if error
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,17 @@
1
+ module StreamElements
2
+ class ActivitiesResource < Resource
3
+
4
+ def list(channel:, after:, before:, limit:, types:, **params)
5
+ attrs = { after: after, before: before, limit: limit, types: types }.merge(params)
6
+ response = get_request("activities/#{channel}", params: attrs)
7
+ Collection.from_response(response, type: Activity)
8
+ end
9
+
10
+ def top(channel:, period:, offset:, limit:, type:)
11
+ attrs = { period: period, offset: offset, limit: limit, type: type }
12
+ response = get_request("activities/#{channel}/top", params: attrs)
13
+ # Collection.from_response(response, type: TopActivity)
14
+ end
15
+
16
+ end
17
+ end
@@ -0,0 +1,10 @@
1
+ module StreamElements
2
+ class ChannelsResource < Resource
3
+
4
+ def me
5
+ response = get_request("channels/me")
6
+ Channel.new response.body
7
+ end
8
+
9
+ end
10
+ end
@@ -0,0 +1,52 @@
1
+ module StreamElements
2
+ class SongRequestsResource < Resource
3
+
4
+ def playing(channel:)
5
+ SongRequest.new get_request("songrequest/#{channel}/playing").body
6
+ end
7
+
8
+ def queue(channel:)
9
+ response = get_request("songrequest/#{channel}/queue")
10
+ Collection.from_response(response, type: SongRequest)
11
+ end
12
+
13
+ def history(channel:, **params)
14
+ response = get_request("songrequest/#{channel}/history", params: params)
15
+ Collection.from_response(response, type: SongRequest, name: "history")
16
+ end
17
+
18
+ def settings(channel:)
19
+ get_request("songrequest/#{channel}/settings").body
20
+ end
21
+
22
+ def update_settings(channel:, settings:)
23
+ response = put_request("songrequest/#{channel}/settings", body: settings)
24
+ response.success?
25
+ end
26
+
27
+ def add(channel:, video:)
28
+ SongRequest.new post_request("songrequest/#{channel}/queue", body: { video: video }).body
29
+ end
30
+
31
+ def pause(channel:)
32
+ response = post_request("songrequest/#{channel}/player/pause", body: {})
33
+ response.success?
34
+ end
35
+
36
+ def play(channel:)
37
+ response = post_request("songrequest/#{channel}/player/play", body: {})
38
+ response.success?
39
+ end
40
+
41
+ def volume(channel:, volume:)
42
+ response = post_request("songrequest/#{channel}/player/volume", body: {volume: volume})
43
+ response.success?
44
+ end
45
+
46
+ def skip(channel:)
47
+ response = post_request("songrequest/#{channel}/skip", body: {})
48
+ response.success?
49
+ end
50
+
51
+ end
52
+ end
@@ -0,0 +1,20 @@
1
+ module StreamElements
2
+ class TipsResource < Resource
3
+
4
+ def list(channel:, after:, sort:, limit:, **params)
5
+ attrs = { after: after, sort: sort, limit: limit }.merge(params)
6
+ response = get_request("tips/#{channel}", params: attrs)
7
+ Collection.from_response(response, type: Tip, name: "docs")
8
+ end
9
+
10
+ def retrieve(channel:, id:)
11
+ Tip.new get_request("tips/#{channel}/#{id}").body
12
+ end
13
+
14
+ def top(channel:)
15
+ response = get_request("tips/#{channel}/top")
16
+ Collection.from_response(response, type: TopTip)
17
+ end
18
+
19
+ end
20
+ end
@@ -0,0 +1,15 @@
1
+ module StreamElements
2
+ class UsersResource < Resource
3
+
4
+ def current
5
+ response = get_request("users/current")
6
+ User.new response.body
7
+ end
8
+
9
+ def channels
10
+ response = get_request("users/channels")
11
+ Collection.from_response(response, type: Channel)
12
+ end
13
+
14
+ end
15
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module StreamElements
4
- VERSION = "0.2.0"
4
+ VERSION = "0.5.0"
5
5
  end
@@ -6,28 +6,27 @@ require "stream_elements/version"
6
6
 
7
7
  module StreamElements
8
8
 
9
- autoload :Configuration, "stream_elements/configuration"
9
+ autoload :Error, "stream_elements/error"
10
+ autoload :Errors, "stream_elements/error_generator"
11
+ autoload :ErrorGenerator, "stream_elements/error_generator"
12
+ autoload :ErrorFactory, "stream_elements/error_generator"
13
+
10
14
  autoload :Client, "stream_elements/client"
11
15
  autoload :Collection, "stream_elements/collection"
12
- autoload :Error, "stream_elements/error"
16
+ autoload :Resource, "stream_elements/resource"
13
17
  autoload :Object, "stream_elements/object"
14
18
 
15
- class << self
16
- attr_writer :config
17
- end
18
-
19
- def self.configure
20
- yield(config) if block_given?
21
- end
22
-
23
- def self.config
24
- @config ||= StreamElements::Configuration.new
25
- end
26
-
27
- autoload :Activity, "stream_elements/models/activity"
28
- autoload :Tip, "stream_elements/models/tip"
29
- autoload :SongRequest, "stream_elements/models/song_request"
30
- autoload :User, "stream_elements/models/user"
31
- autoload :Channel, "stream_elements/models/channel"
19
+ autoload :ActivitiesResource, "stream_elements/resources/activitys"
20
+ autoload :TipsResource, "stream_elements/resources/tips"
21
+ autoload :SongRequestsResource, "stream_elements/resources/song_requests"
22
+ autoload :UsersResource, "stream_elements/resources/users"
23
+ autoload :ChannelsResource, "stream_elements/resources/channels"
24
+
25
+ autoload :Activity, "stream_elements/objects/activity"
26
+ autoload :Tip, "stream_elements/objects/tip"
27
+ autoload :SongRequest, "stream_elements/objects/song_request"
28
+ autoload :User, "stream_elements/objects/user"
29
+ autoload :Channel, "stream_elements/objects/channel"
30
+ autoload :TopTip, "stream_elements/objects/top_tip"
32
31
 
33
32
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: streamelements
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dean Perry
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-12-21 00:00:00.000000000 Z
11
+ date: 2024-09-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -24,7 +24,7 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '2'
27
- description:
27
+ description:
28
28
  email:
29
29
  - deanperry@fastmail.com
30
30
  executables: []
@@ -38,14 +38,21 @@ files:
38
38
  - lib/stream_elements.rb
39
39
  - lib/stream_elements/client.rb
40
40
  - lib/stream_elements/collection.rb
41
- - lib/stream_elements/configuration.rb
42
41
  - lib/stream_elements/error.rb
43
- - lib/stream_elements/models/activity.rb
44
- - lib/stream_elements/models/channel.rb
45
- - lib/stream_elements/models/song_request.rb
46
- - lib/stream_elements/models/tip.rb
47
- - lib/stream_elements/models/user.rb
42
+ - lib/stream_elements/error_generator.rb
48
43
  - lib/stream_elements/object.rb
44
+ - lib/stream_elements/objects/activity.rb
45
+ - lib/stream_elements/objects/channel.rb
46
+ - lib/stream_elements/objects/song_request.rb
47
+ - lib/stream_elements/objects/tip.rb
48
+ - lib/stream_elements/objects/top_tip.rb
49
+ - lib/stream_elements/objects/user.rb
50
+ - lib/stream_elements/resource.rb
51
+ - lib/stream_elements/resources/activities.rb
52
+ - lib/stream_elements/resources/channels.rb
53
+ - lib/stream_elements/resources/song_requests.rb
54
+ - lib/stream_elements/resources/tips.rb
55
+ - lib/stream_elements/resources/users.rb
49
56
  - lib/stream_elements/version.rb
50
57
  - lib/streamelements.rb
51
58
  - sig/streamelements.rbs
@@ -53,7 +60,7 @@ homepage: https://github.com/deanpcmad/streamelements
53
60
  licenses:
54
61
  - MIT
55
62
  metadata: {}
56
- post_install_message:
63
+ post_install_message:
57
64
  rdoc_options: []
58
65
  require_paths:
59
66
  - lib
@@ -68,8 +75,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
68
75
  - !ruby/object:Gem::Version
69
76
  version: '0'
70
77
  requirements: []
71
- rubygems_version: 3.5.1
72
- signing_key:
78
+ rubygems_version: 3.5.11
79
+ signing_key:
73
80
  specification_version: 4
74
81
  summary: Ruby library for the StreamElements API
75
82
  test_files: []
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module StreamElements
4
- class Configuration
5
-
6
- attr_accessor :token
7
- attr_accessor :channel
8
-
9
- def initialize
10
- end
11
-
12
- end
13
- end
@@ -1,21 +0,0 @@
1
- module StreamElements
2
- class Activity < Object
3
-
4
- class << self
5
-
6
- def list(after:, before:, limit:, types:, **params)
7
- attrs = { after: after, before: before, limit: limit, types: types }.merge(params)
8
- response = Client.get_request("activities/:channel", params: attrs)
9
- Collection.from_response(response, type: Activity)
10
- end
11
-
12
- def top(period:, offset:, limit:, type:)
13
- attrs = { period: period, offset: offset, limit: limit, type: type }
14
- response = Client.get_request("activities/:channel/top", params: attrs)
15
- # Collection.from_response(response, type: TopActivity)
16
- end
17
-
18
- end
19
-
20
- end
21
- end
@@ -1,56 +0,0 @@
1
- module StreamElements
2
- class SongRequest < Object
3
-
4
- class << self
5
-
6
- def playing
7
- SongRequest.new Client.get_request("songrequest/:channel/playing").body
8
- end
9
-
10
- def queue
11
- response = Client.get_request("songrequest/:channel/queue")
12
- Collection.from_response(response, type: SongRequest)
13
- end
14
-
15
- def history(**params)
16
- response = Client.get_request("songrequest/:channel/history", params: params)
17
- Collection.from_response(response, type: SongRequest, name: "history")
18
- end
19
-
20
- def settings
21
- Client.get_request("songrequest/:channel/settings").body
22
- end
23
-
24
- def update_settings(settings:)
25
- response = Client.put_request("songrequest/:channel/settings", body: settings)
26
- response.success?
27
- end
28
-
29
- def add(video:)
30
- SongRequest.new Client.post_request("songrequest/:channel/queue", body: { video: video }).body
31
- end
32
-
33
- def pause
34
- response = Client.post_request("songrequest/:channel/player/pause", body: {})
35
- response.success?
36
- end
37
-
38
- def play
39
- response = Client.post_request("songrequest/:channel/player/play", body: {})
40
- response.success?
41
- end
42
-
43
- def volume(volume:)
44
- response = Client.post_request("songrequest/:channel/player/volume", body: {volume: volume})
45
- response.success?
46
- end
47
-
48
- def skip
49
- response = Client.post_request("songrequest/:channel/skip", body: {})
50
- response.success?
51
- end
52
-
53
- end
54
-
55
- end
56
- end
@@ -1,23 +0,0 @@
1
- module StreamElements
2
- class Tip < Object
3
-
4
- class << self
5
-
6
- def list(**params)
7
- response = Client.get_request("tips/:channel", params: params)
8
- Collection.from_response(response, type: Tip, name: "docs")
9
- end
10
-
11
- def retrieve(id:)
12
- Tip.new Client.get_request("tips/:channel/#{id}").body
13
- end
14
-
15
- def top
16
- response = Client.get_request("tips/:channel/top")
17
- # Collection.from_response(response, type: TopTip)
18
- end
19
-
20
- end
21
-
22
- end
23
- end
@@ -1,19 +0,0 @@
1
- module StreamElements
2
- class User < Object
3
-
4
- class << self
5
-
6
- def current
7
- response = Client.get_request("users/current")
8
- User.new response.body
9
- end
10
-
11
- def channels
12
- response = Client.get_request("users/channels")
13
- Collection.from_response(response, type: Channel)
14
- end
15
-
16
- end
17
-
18
- end
19
- end
File without changes