uscreen_api 0.1.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.
- checksums.yaml +7 -0
- data/LICENSE.txt +21 -0
- data/README.md +32 -0
- data/lib/uscreen_api/base.rb +19 -0
- data/lib/uscreen_api/client.rb +32 -0
- data/lib/uscreen_api/customers.rb +171 -0
- data/lib/uscreen_api/errors.rb +9 -0
- data/lib/uscreen_api/version.rb +5 -0
- data/lib/uscreen_api.rb +10 -0
- data/sig/uscreen_api.rbs +4 -0
- metadata +94 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 7eb14d38f28ebdd8aedd1deedabf0977b33dbb52cedb22c2921c753152bb17d5
|
4
|
+
data.tar.gz: a4c4c4882e9a4b832d03497dac3e0c52c8b8d1a83d84663c9c85a97246b900ae
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 0ac100e9869c6963735ad891b770019e858c23aeb8bba1b934f8a5c34e730ea203fae024797e0447d6dac30728783aa5b259e96dbaff62e38b255df7db62d987
|
7
|
+
data.tar.gz: 3f2f2cfc17284449ad7af18d90c56d9955cdb701ad70333d0d2c308fd8e774defff0131bc77b3938fc41d1880b9fdd33f8f628e2478c2416809152a4a5edf501
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2024 Andrei Bondarev
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
13
|
+
all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
# UscreenAPI
|
2
|
+
|
3
|
+
Client library for the [Uscreen.tv](https://www.uscreen.tv/) APIs.
|
4
|
+
|
5
|
+

|
6
|
+
[](https://badge.fury.io/rb/uscreen_api)
|
7
|
+
[](http://rubydoc.info/gems/uscreen_api)
|
8
|
+
[](https://github.com/andreibondarev/uscreen_api/blob/main/LICENSE.txt)
|
9
|
+
|
10
|
+
## Installation
|
11
|
+
|
12
|
+
```bash
|
13
|
+
gem install uscreen_api
|
14
|
+
```
|
15
|
+
|
16
|
+
## Usage
|
17
|
+
|
18
|
+
TODO: Write usage instructions here
|
19
|
+
|
20
|
+
## Development
|
21
|
+
|
22
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
23
|
+
|
24
|
+
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
25
|
+
|
26
|
+
## Contributing
|
27
|
+
|
28
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/andreibondarev/uscreen_api.
|
29
|
+
|
30
|
+
## License
|
31
|
+
|
32
|
+
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module UscreenAPI
|
2
|
+
class Base
|
3
|
+
attr_reader :client
|
4
|
+
|
5
|
+
def initialize(client:)
|
6
|
+
@client = client
|
7
|
+
end
|
8
|
+
|
9
|
+
private
|
10
|
+
|
11
|
+
def handle_errors(status, body)
|
12
|
+
case status
|
13
|
+
when 401 then raise UscreenAPI::Errors::Unauthorized.new(body)
|
14
|
+
when 404 then raise UscreenAPI::Errors::UserNotFound.new(body)
|
15
|
+
when 422 then raise UscreenAPI::Errors::UserNotCreated.new(body)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "faraday"
|
4
|
+
|
5
|
+
module UscreenAPI
|
6
|
+
class Client
|
7
|
+
attr_reader :api_key
|
8
|
+
|
9
|
+
BASE_URL = "https://www.uscreen.io/publisher_api/v1/"
|
10
|
+
|
11
|
+
def initialize(api_key:)
|
12
|
+
@api_key = api_key
|
13
|
+
end
|
14
|
+
|
15
|
+
def customers
|
16
|
+
@customers ||= UscreenAPI::Customers.new(client: self)
|
17
|
+
end
|
18
|
+
|
19
|
+
def connection
|
20
|
+
@connection = Faraday.new(
|
21
|
+
url: BASE_URL,
|
22
|
+
headers: {
|
23
|
+
"Content-Type": "application/json",
|
24
|
+
Authorization: api_key
|
25
|
+
}
|
26
|
+
) do |f|
|
27
|
+
f.request(:json)
|
28
|
+
f.response(:json)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,171 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module UscreenAPI
|
4
|
+
class Customers < Base
|
5
|
+
PATH = "customers"
|
6
|
+
|
7
|
+
# Get paginated list of customers
|
8
|
+
# @param page [Integer] Page number
|
9
|
+
# @param from [String] Starting date and time for the filter range, formatted in RFC 3339. Example: 2023-01-01T00:00:00Z
|
10
|
+
# @param to [String] Ending date and time for the filter range, formatted in RFC 3339. Example: 2023-01-01T00:00:00Z
|
11
|
+
# @param date_field [String] Date field to filter by. Available fields: created_at, updated_at. Default: created_at. If not set, created_at is used.
|
12
|
+
def list(
|
13
|
+
page: nil,
|
14
|
+
from: nil,
|
15
|
+
to: nil,
|
16
|
+
date_field: nil
|
17
|
+
)
|
18
|
+
response = client.connection.get(PATH) do |req|
|
19
|
+
req.params = {}
|
20
|
+
|
21
|
+
req.params["page"] = page if page
|
22
|
+
req.params["from"] = from if from
|
23
|
+
req.params["to"] = to if to
|
24
|
+
req.params["date_field"] = date_field if date_field
|
25
|
+
end
|
26
|
+
|
27
|
+
handle_errors(response.status, response.body)
|
28
|
+
|
29
|
+
response.body
|
30
|
+
end
|
31
|
+
|
32
|
+
# Invite a new customer
|
33
|
+
# @param email [String] Customer email
|
34
|
+
# @param name [String] Customer name
|
35
|
+
# @param password [String] Customer password
|
36
|
+
# @param payment_user_id [String] Payment user ID
|
37
|
+
# @param skip_invite [Boolean] Skip invite email
|
38
|
+
# @param opted_in_for_news_and_updates [Boolean] Opted in for news and updates
|
39
|
+
# @param custom_fields [Hash] Custom fields
|
40
|
+
def create(
|
41
|
+
email:,
|
42
|
+
name:,
|
43
|
+
password:,
|
44
|
+
payment_user_id: nil,
|
45
|
+
skip_invite: nil,
|
46
|
+
opted_in_for_news_and_updates: nil,
|
47
|
+
custom_fields: {}
|
48
|
+
)
|
49
|
+
response = client.connection.post(PATH) do |req|
|
50
|
+
req.body = {}
|
51
|
+
|
52
|
+
req.body["email"] = email if email
|
53
|
+
req.body["name"] = name if name
|
54
|
+
req.body["password"] = password if password
|
55
|
+
req.body["payment_user_id"] = payment_user_id if payment_user_id
|
56
|
+
req.body["skip_invite"] = skip_invite if skip_invite
|
57
|
+
req.body["opted_in_for_news_and_updates"] = opted_in_for_news_and_updates if opted_in_for_news_and_updates
|
58
|
+
|
59
|
+
custom_fields.each { |key, value| req.body[key] = value } if custom_fields.any?
|
60
|
+
end
|
61
|
+
|
62
|
+
handle_errors(response.status, response.body)
|
63
|
+
|
64
|
+
response.body
|
65
|
+
end
|
66
|
+
|
67
|
+
# Get a customer information
|
68
|
+
# @param id [Integer] Customer ID or Email
|
69
|
+
def get(id:)
|
70
|
+
response = client.connection.get("#{PATH}/#{id}")
|
71
|
+
|
72
|
+
handle_errors(response.status, response.body)
|
73
|
+
|
74
|
+
response.body
|
75
|
+
end
|
76
|
+
|
77
|
+
# Update a customer information
|
78
|
+
# @param id [Integer] Customer ID or Email
|
79
|
+
# @param email [String] New customer email
|
80
|
+
# @param name [String] New customer name
|
81
|
+
# @param password [String] New customer password
|
82
|
+
# @param custom_fields [Hash] Custom fields
|
83
|
+
def update(
|
84
|
+
id:,
|
85
|
+
email: nil,
|
86
|
+
name: nil,
|
87
|
+
password: nil,
|
88
|
+
custom_fields: {}
|
89
|
+
)
|
90
|
+
response = client.connection.put("#{PATH}/#{id}") do |req|
|
91
|
+
req.body = {}
|
92
|
+
|
93
|
+
req.body["email"] = email if email
|
94
|
+
req.body["name"] = name if name
|
95
|
+
req.body["password"] = password if password
|
96
|
+
|
97
|
+
custom_fields.each { |key, value| req.body[key] = value } if custom_fields.any?
|
98
|
+
end
|
99
|
+
|
100
|
+
handle_errors(response.status, response.body)
|
101
|
+
|
102
|
+
response.body
|
103
|
+
end
|
104
|
+
|
105
|
+
# Generates a Single Sign-On link for a customer
|
106
|
+
# @param id [Integer] Customer ID or Email
|
107
|
+
def tokenized_url(id:)
|
108
|
+
response = client.connection.post("#{PATH}/#{id}/tokenized_url")
|
109
|
+
handle_errors(response.status, response.body)
|
110
|
+
|
111
|
+
response.body
|
112
|
+
end
|
113
|
+
|
114
|
+
# Get paginated list of accesses for a customer
|
115
|
+
# @param id [Integer] Customer ID or Email
|
116
|
+
# @param page [Integer] Page number
|
117
|
+
# @param from [String] Starting date and time for the filter range, formatted in RFC 3339. Example: 2023-01-01T00:00:00Z
|
118
|
+
# @param to [String] Ending date and time for the filter range, formatted in RFC 3339. Example: 2023-01-01T00:00:00Z
|
119
|
+
def accesses(
|
120
|
+
id:,
|
121
|
+
page: nil,
|
122
|
+
from: nil,
|
123
|
+
to: nil
|
124
|
+
)
|
125
|
+
response = client.connection.get("#{PATH}/#{id}/accesses")
|
126
|
+
handle_errors(response.status, response.body)
|
127
|
+
|
128
|
+
response.body
|
129
|
+
end
|
130
|
+
|
131
|
+
# Grant access to a customer
|
132
|
+
# @param id [Integer] Customer ID or Email
|
133
|
+
# @param product_id [Integer] Product ID
|
134
|
+
# @param product_type [String] Uscreen system product type. Can be a program|recurring|rent|freebie|fixed_price
|
135
|
+
# @param perform_action_at [String] Seconds since the Epoch. Next perform action needed in case of rent or recurring product types. System will add next due automatically in case of a blank field. example: 2024-07-05T13:47:52Z
|
136
|
+
# @param with_manual_billing [Boolean] Allows you to process billing outside the Uscreen platform. Default false.
|
137
|
+
def grant_access(
|
138
|
+
id:,
|
139
|
+
product_id:,
|
140
|
+
product_type:,
|
141
|
+
perform_action_at: nil,
|
142
|
+
with_manual_billing: false
|
143
|
+
)
|
144
|
+
response = client.connection.post("#{PATH}/#{id}/accesses") do |req|
|
145
|
+
req.body = {
|
146
|
+
product_id: product_id,
|
147
|
+
product_type: product_type,
|
148
|
+
with_manual_billing: with_manual_billing
|
149
|
+
}
|
150
|
+
req.body["perform_action_at"] = perform_action_at if perform_action_at
|
151
|
+
end
|
152
|
+
|
153
|
+
handle_errors(response.status, response.body)
|
154
|
+
|
155
|
+
response.body
|
156
|
+
end
|
157
|
+
|
158
|
+
# Revoke access by ID
|
159
|
+
# @param id [Integer] Customer ID or Email
|
160
|
+
# @param access_id [Integer] Access ID
|
161
|
+
def revoke_access(
|
162
|
+
id:,
|
163
|
+
access_id:
|
164
|
+
)
|
165
|
+
response = client.connection.delete("#{PATH}/#{id}/accesses/#{access_id}")
|
166
|
+
handle_errors(response.status, response.body)
|
167
|
+
|
168
|
+
response.body
|
169
|
+
end
|
170
|
+
end
|
171
|
+
end
|
data/lib/uscreen_api.rb
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "uscreen_api/version"
|
4
|
+
|
5
|
+
module UscreenAPI
|
6
|
+
autoload :Base, "uscreen_api/base"
|
7
|
+
autoload :Client, "uscreen_api/client"
|
8
|
+
autoload :Customers, "uscreen_api/customers"
|
9
|
+
autoload :Errors, "uscreen_api/errors"
|
10
|
+
end
|
data/sig/uscreen_api.rbs
ADDED
metadata
ADDED
@@ -0,0 +1,94 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: uscreen_api
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Andrei Bondarev
|
8
|
+
bindir: exe
|
9
|
+
cert_chain: []
|
10
|
+
date: 2025-01-07 00:00:00.000000000 Z
|
11
|
+
dependencies:
|
12
|
+
- !ruby/object:Gem::Dependency
|
13
|
+
name: faraday
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
15
|
+
requirements:
|
16
|
+
- - ">="
|
17
|
+
- !ruby/object:Gem::Version
|
18
|
+
version: '0'
|
19
|
+
type: :runtime
|
20
|
+
prerelease: false
|
21
|
+
version_requirements: !ruby/object:Gem::Requirement
|
22
|
+
requirements:
|
23
|
+
- - ">="
|
24
|
+
- !ruby/object:Gem::Version
|
25
|
+
version: '0'
|
26
|
+
- !ruby/object:Gem::Dependency
|
27
|
+
name: pry-byebug
|
28
|
+
requirement: !ruby/object:Gem::Requirement
|
29
|
+
requirements:
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
type: :development
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '0'
|
40
|
+
- !ruby/object:Gem::Dependency
|
41
|
+
name: yard
|
42
|
+
requirement: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '0'
|
47
|
+
type: :development
|
48
|
+
prerelease: false
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
description: Uscreen.tv Publisher API client
|
55
|
+
email:
|
56
|
+
- andrei.bondarev13@gmail.com
|
57
|
+
executables: []
|
58
|
+
extensions: []
|
59
|
+
extra_rdoc_files: []
|
60
|
+
files:
|
61
|
+
- LICENSE.txt
|
62
|
+
- README.md
|
63
|
+
- lib/uscreen_api.rb
|
64
|
+
- lib/uscreen_api/base.rb
|
65
|
+
- lib/uscreen_api/client.rb
|
66
|
+
- lib/uscreen_api/customers.rb
|
67
|
+
- lib/uscreen_api/errors.rb
|
68
|
+
- lib/uscreen_api/version.rb
|
69
|
+
- sig/uscreen_api.rbs
|
70
|
+
homepage: https://github.com/andreibondarev/uscreen_api
|
71
|
+
licenses:
|
72
|
+
- MIT
|
73
|
+
metadata:
|
74
|
+
homepage_uri: https://github.com/andreibondarev/uscreen_api
|
75
|
+
source_code_uri: https://github.com/andreibondarev/uscreen_api
|
76
|
+
changelog_uri: https://github.com/andreibondarev/uscreen_api/CHANGELOG.md
|
77
|
+
rdoc_options: []
|
78
|
+
require_paths:
|
79
|
+
- lib
|
80
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
81
|
+
requirements:
|
82
|
+
- - ">="
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
version: 3.0.0
|
85
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
requirements: []
|
91
|
+
rubygems_version: 3.6.2
|
92
|
+
specification_version: 4
|
93
|
+
summary: Uscreen.tv Publisher API client
|
94
|
+
test_files: []
|