ruby-magicwrite 0.1.3 → 0.1.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +34 -1
- data/Gemfile.lock +1 -1
- data/README.md +5 -1
- data/lib/magicwrite/agents.rb +14 -10
- data/lib/magicwrite/client.rb +22 -10
- data/lib/magicwrite/companies.rb +9 -5
- data/lib/magicwrite/completions.rb +10 -6
- data/lib/magicwrite/error.rb +20 -0
- data/lib/magicwrite/error_handler.rb +38 -0
- data/lib/magicwrite/http.rb +39 -27
- data/lib/magicwrite/ingestions.rb +10 -6
- data/lib/magicwrite/memberships.rb +19 -0
- data/lib/magicwrite/version.rb +1 -1
- data/lib/magicwrite.rb +11 -8
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fe492bf84e88d0fac86ee681671ab724a7247d37403301fcc6b2d24c5db23fb0
|
4
|
+
data.tar.gz: 67460bd0593a9e4b7503e6e048b42d0927631c62e784951056d629edc1e99666
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d6a1b30d5c33d06fcd20eb1ce55e76326fc3889852824b331cc4da7ba8f2a65f1186cdbf44aff6180ba66afc6c2695a329d45ae2dc8edd85f1d141e3ec5f14a1
|
7
|
+
data.tar.gz: 564f7069e45f14f0370c634c65296d915032e9ac1a6c393724ef1aaa97187c85b222680ff6ab4a1909a0a7fd0753fe571114c0e0c4fb8f378f5c2d310d350b21
|
data/CHANGELOG.md
CHANGED
@@ -5,6 +5,34 @@ All notable changes to this project will be documented in this file.
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
7
7
|
|
8
|
+
## [0.1.5] - 2023-08-22
|
9
|
+
|
10
|
+
### Added
|
11
|
+
|
12
|
+
- More specs to cover more implementations
|
13
|
+
- Refactor client and methods to use client in initalization
|
14
|
+
- include HTTP instead of extend for Client class
|
15
|
+
|
16
|
+
## [0.1.4] - 2023-08-22
|
17
|
+
|
18
|
+
### Added
|
19
|
+
|
20
|
+
- Memberships endpoints to MagicWrite client
|
21
|
+
|
22
|
+
|
23
|
+
## [0.1.3] - 2023-08-21
|
24
|
+
|
25
|
+
### Added
|
26
|
+
|
27
|
+
- General error classes by HTTP responses
|
28
|
+
- Error handler to parse the result
|
29
|
+
|
30
|
+
|
31
|
+
### Changed
|
32
|
+
|
33
|
+
- README
|
34
|
+
|
35
|
+
|
8
36
|
## [0.1.2] - 2023-06-21
|
9
37
|
|
10
38
|
### Added
|
@@ -24,6 +52,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
24
52
|
|
25
53
|
### Added
|
26
54
|
|
27
|
-
-
|
55
|
+
- Initialize repository.
|
28
56
|
- Add MagicWrite::Client to connect to MagicWrite API using user tokens.
|
57
|
+
* Completions
|
58
|
+
* Agents
|
59
|
+
* Companies
|
60
|
+
* Ingestions
|
61
|
+
* Session
|
29
62
|
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -12,13 +12,17 @@ gem "ruby-magicwrite"
|
|
12
12
|
|
13
13
|
And then execute:
|
14
14
|
|
15
|
+
```bash
|
15
16
|
$ bundle install
|
17
|
+
```
|
16
18
|
|
17
19
|
### Gem install
|
18
20
|
|
19
21
|
Or install with:
|
20
22
|
|
21
|
-
|
23
|
+
```bash
|
24
|
+
$ gem install ruby-openai
|
25
|
+
```
|
22
26
|
|
23
27
|
and require with:
|
24
28
|
|
data/lib/magicwrite/agents.rb
CHANGED
@@ -1,39 +1,43 @@
|
|
1
1
|
module MagicWrite
|
2
2
|
class Agents
|
3
|
-
def initialize(
|
4
|
-
|
3
|
+
def initialize(client:)
|
4
|
+
@client = client
|
5
5
|
end
|
6
6
|
|
7
7
|
def list(parameters: {})
|
8
|
-
|
8
|
+
client.get(path: '/agents', parameters: parameters)
|
9
9
|
end
|
10
10
|
|
11
11
|
def create(parameters: {})
|
12
|
-
|
12
|
+
client.json_post(path: '/agents', parameters: parameters)
|
13
13
|
end
|
14
14
|
|
15
15
|
def retrieve(id:)
|
16
|
-
|
16
|
+
client.get(path: "/agents/#{id}")
|
17
17
|
end
|
18
18
|
|
19
19
|
def update(id:, parameters: {})
|
20
|
-
|
20
|
+
client.json_put(path: "/agents/#{id}", parameters: parameters)
|
21
21
|
end
|
22
22
|
|
23
23
|
def delete(id:)
|
24
|
-
|
24
|
+
client.delete(path: "/agents/#{id}")
|
25
25
|
end
|
26
26
|
|
27
27
|
def public_list(company_id:, parameters: {})
|
28
|
-
|
28
|
+
client.get(path: "/agents/#{company_id}", parameters: parameters)
|
29
29
|
end
|
30
30
|
|
31
31
|
def public_retrieve(company_id:, agent_id:)
|
32
|
-
|
32
|
+
client.get(path: "/agents/#{company_id}/#{agent_id}")
|
33
33
|
end
|
34
34
|
|
35
35
|
def public_create(company_id:, agent_id:, parameters: {})
|
36
|
-
|
36
|
+
client.json_post(path: "/agents/#{company_id}/#{agent_id}", parameters: parameters)
|
37
37
|
end
|
38
|
+
|
39
|
+
private
|
40
|
+
|
41
|
+
attr_reader :client
|
38
42
|
end
|
39
43
|
end
|
data/lib/magicwrite/client.rb
CHANGED
@@ -1,31 +1,43 @@
|
|
1
1
|
module MagicWrite
|
2
2
|
class Client
|
3
|
-
|
3
|
+
include MagicWrite::HTTP
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
5
|
+
CONFIG_KEYS = %i[
|
6
|
+
access_token
|
7
|
+
uri_base
|
8
|
+
request_timeout
|
9
|
+
extra_headers
|
10
|
+
].freeze
|
11
|
+
attr_reader(*CONFIG_KEYS)
|
12
|
+
|
13
|
+
def initialize(config = {})
|
14
|
+
CONFIG_KEYS.each do |key|
|
15
|
+
instance_variable_set("@#{key}", config[key] || MagicWrite.configuration.send(key))
|
16
|
+
end
|
9
17
|
end
|
10
18
|
|
11
19
|
def agents
|
12
|
-
@agents ||= MagicWrite::Agents.new
|
20
|
+
@agents ||= MagicWrite::Agents.new(client: self)
|
13
21
|
end
|
14
22
|
|
15
23
|
def companies
|
16
|
-
@companies ||= MagicWrite::Companies.new
|
24
|
+
@companies ||= MagicWrite::Companies.new(client: self)
|
17
25
|
end
|
18
26
|
|
19
27
|
def completions
|
20
|
-
@completions ||= MagicWrite::Completions.new
|
28
|
+
@completions ||= MagicWrite::Completions.new(client: self)
|
21
29
|
end
|
22
30
|
|
23
31
|
def ingestions
|
24
|
-
@ingestions ||= MagicWrite::Ingestions.new
|
32
|
+
@ingestions ||= MagicWrite::Ingestions.new(client: self)
|
33
|
+
end
|
34
|
+
|
35
|
+
def memberships
|
36
|
+
@memberships ||= MagicWrite::Memberships.new(client: self)
|
25
37
|
end
|
26
38
|
|
27
39
|
def session
|
28
|
-
|
40
|
+
get(path: '/session')
|
29
41
|
end
|
30
42
|
end
|
31
43
|
end
|
data/lib/magicwrite/companies.rb
CHANGED
@@ -1,19 +1,23 @@
|
|
1
1
|
module MagicWrite
|
2
2
|
class Companies
|
3
|
-
def initialize(
|
4
|
-
|
3
|
+
def initialize(client:)
|
4
|
+
@client = client
|
5
5
|
end
|
6
6
|
|
7
7
|
def create(parameters: {})
|
8
|
-
|
8
|
+
client.json_post(path: '/companies', parameters: parameters)
|
9
9
|
end
|
10
10
|
|
11
11
|
def retrieve
|
12
|
-
|
12
|
+
client.get(path: '/companies/current')
|
13
13
|
end
|
14
14
|
|
15
15
|
def update(parameters: {})
|
16
|
-
|
16
|
+
client.json_put(path: '/companies/current', parameters: parameters)
|
17
17
|
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
attr_reader :client
|
18
22
|
end
|
19
23
|
end
|
@@ -1,23 +1,27 @@
|
|
1
1
|
module MagicWrite
|
2
2
|
class Completions
|
3
|
-
def initialize(
|
4
|
-
|
3
|
+
def initialize(client:)
|
4
|
+
@client = client
|
5
5
|
end
|
6
6
|
|
7
7
|
def execute(parameters: {})
|
8
|
-
|
8
|
+
client.json_post(path: '/completions', parameters: parameters)
|
9
9
|
end
|
10
10
|
|
11
11
|
def retrieve(id:, parameters: {})
|
12
|
-
|
12
|
+
client.get(path: "/completions/#{id}", parameters: parameters)
|
13
13
|
end
|
14
14
|
|
15
15
|
def create(id:, parameters: {})
|
16
|
-
|
16
|
+
client.json_post(path: "/completions/#{id}", parameters: parameters)
|
17
17
|
end
|
18
18
|
|
19
19
|
def delete(id:, completion_id:)
|
20
|
-
|
20
|
+
client.delete(path: "/completions/#{id}/#{completion_id}")
|
21
21
|
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
attr_reader :client
|
22
26
|
end
|
23
27
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module MagicWrite
|
2
|
+
class Error < StandardError
|
3
|
+
class BadRequest < Error; end
|
4
|
+
class Unauthorized < Error; end
|
5
|
+
class PaymentRequired < Error; end
|
6
|
+
class Forbidden < Error; end
|
7
|
+
class NotFound < Error; end
|
8
|
+
class MethodNotAllowed < Error; end
|
9
|
+
class RequestTimeout < Error; end
|
10
|
+
class Conflict < Error; end
|
11
|
+
class UnprocessableEntity < Error; end
|
12
|
+
class TooManyRequests < Error; end
|
13
|
+
class InternalServerError < Error; end
|
14
|
+
class NotImplemented < Error; end
|
15
|
+
class BadGateway < Error; end
|
16
|
+
class ServiceUnavailable < Error; end
|
17
|
+
class GatewayTimeout < Error; end
|
18
|
+
class UnknownError < Error; end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module MagicWrite
|
2
|
+
class ErrorHandler
|
3
|
+
HTTP_CODE = {
|
4
|
+
400 => MagicWrite::Error::BadRequest,
|
5
|
+
401 => MagicWrite::Error::Unauthorized,
|
6
|
+
402 => MagicWrite::Error::PaymentRequired,
|
7
|
+
403 => MagicWrite::Error::Forbidden,
|
8
|
+
404 => MagicWrite::Error::NotFound,
|
9
|
+
405 => MagicWrite::Error::MethodNotAllowed,
|
10
|
+
408 => MagicWrite::Error::RequestTimeout,
|
11
|
+
409 => MagicWrite::Error::Conflict,
|
12
|
+
422 => MagicWrite::Error::UnprocessableEntity,
|
13
|
+
429 => MagicWrite::Error::TooManyRequests,
|
14
|
+
500 => MagicWrite::Error::InternalServerError,
|
15
|
+
501 => MagicWrite::Error::NotImplemented,
|
16
|
+
502 => MagicWrite::Error::BadGateway,
|
17
|
+
503 => MagicWrite::Error::ServiceUnavailable,
|
18
|
+
504 => MagicWrite::Error::GatewayTimeout
|
19
|
+
}.freeze
|
20
|
+
|
21
|
+
def initialize(response)
|
22
|
+
@response = response
|
23
|
+
@status = response.status
|
24
|
+
end
|
25
|
+
|
26
|
+
def raise_error
|
27
|
+
raise error_class, response.reason_phrase
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
attr_reader :response, :status
|
33
|
+
|
34
|
+
def error_class
|
35
|
+
HTTP_CODE[status] || MagicWrite::Error::UnknownError
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
data/lib/magicwrite/http.rb
CHANGED
@@ -1,55 +1,67 @@
|
|
1
1
|
module MagicWrite
|
2
2
|
module HTTP
|
3
3
|
def get(path:, parameters: {})
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
end
|
4
|
+
build_response(conn.get(uri(path: path)) do |request|
|
5
|
+
request.headers = headers
|
6
|
+
request.body = parameters.to_json
|
7
|
+
end)
|
8
8
|
end
|
9
9
|
|
10
10
|
def json_post(path:, parameters:)
|
11
|
-
|
11
|
+
build_response(conn.post(uri(path: path)) do |request|
|
12
12
|
if parameters[:stream].respond_to?(:call)
|
13
|
-
|
13
|
+
request.options.on_data = to_json_stream(user_proc: parameters[:stream])
|
14
14
|
parameters[:stream] = true
|
15
15
|
elsif parameters[:stream]
|
16
16
|
raise ArgumentError, 'The stream parameter must be a Proc or have a #call method'
|
17
17
|
end
|
18
18
|
|
19
|
-
|
20
|
-
|
21
|
-
end
|
19
|
+
request.headers = headers
|
20
|
+
request.body = parameters.to_json
|
21
|
+
end)
|
22
22
|
end
|
23
23
|
|
24
24
|
def json_put(path:, parameters:)
|
25
|
-
|
25
|
+
build_response(conn.put(uri(path: path)) do |request|
|
26
26
|
if parameters[:stream].respond_to?(:call)
|
27
|
-
|
27
|
+
request.options.on_data = to_json_stream(user_proc: parameters[:stream])
|
28
28
|
parameters[:stream] = true
|
29
29
|
elsif parameters[:stream]
|
30
30
|
raise ArgumentError, 'The stream parameter must be a Proc or have a #call method'
|
31
31
|
end
|
32
32
|
|
33
|
-
|
34
|
-
|
35
|
-
end
|
33
|
+
request.headers = headers
|
34
|
+
request.body = parameters.to_json
|
35
|
+
end)
|
36
36
|
end
|
37
37
|
|
38
38
|
def multipart_post(path:, parameters: nil)
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
end
|
39
|
+
build_response(conn(multipart: true).post(uri(path: path)) do |request|
|
40
|
+
request.headers = headers.merge({ 'Content-Type' => 'multipart/form-data' })
|
41
|
+
request.body = multipart_parameters(parameters)
|
42
|
+
end)
|
43
43
|
end
|
44
44
|
|
45
45
|
def delete(path:)
|
46
|
-
|
47
|
-
|
48
|
-
end
|
46
|
+
build_response(conn.delete(uri(path: path)) do |request|
|
47
|
+
request.headers = headers
|
48
|
+
end)
|
49
49
|
end
|
50
50
|
|
51
51
|
private
|
52
52
|
|
53
|
+
def build_response(response)
|
54
|
+
return parsed_response(response) if response.status.between?(200, 299)
|
55
|
+
|
56
|
+
MagicWrite::ErrorHandler.new(response).raise_error
|
57
|
+
end
|
58
|
+
|
59
|
+
def parsed_response(response)
|
60
|
+
return unless response
|
61
|
+
|
62
|
+
to_json(response.body)
|
63
|
+
end
|
64
|
+
|
53
65
|
def to_json(string)
|
54
66
|
return unless string
|
55
67
|
|
@@ -69,21 +81,21 @@ module MagicWrite
|
|
69
81
|
end
|
70
82
|
|
71
83
|
def conn(multipart: false)
|
72
|
-
Faraday.new do |
|
73
|
-
|
74
|
-
|
84
|
+
Faraday.new do |faraday|
|
85
|
+
faraday.options[:timeout] = @request_timeout
|
86
|
+
faraday.request(:multipart) if multipart
|
75
87
|
end
|
76
88
|
end
|
77
89
|
|
78
90
|
def uri(path:)
|
79
|
-
File.join(
|
91
|
+
File.join(@uri_base, path)
|
80
92
|
end
|
81
93
|
|
82
94
|
def headers
|
83
95
|
{
|
84
96
|
'Content-Type' => 'application/json',
|
85
|
-
'Authorization' => "Bearer #{
|
86
|
-
}
|
97
|
+
'Authorization' => "Bearer #{@access_token}"
|
98
|
+
}.merge(@extra_headers || {})
|
87
99
|
end
|
88
100
|
|
89
101
|
def multipart_parameters(parameters)
|
@@ -1,23 +1,27 @@
|
|
1
1
|
module MagicWrite
|
2
2
|
class Ingestions
|
3
|
-
def initialize(
|
4
|
-
|
3
|
+
def initialize(client:)
|
4
|
+
@client = client
|
5
5
|
end
|
6
6
|
|
7
7
|
def list(parameters: {})
|
8
|
-
|
8
|
+
client.get(path: '/ingestions', parameters: parameters)
|
9
9
|
end
|
10
10
|
|
11
11
|
def create(parameters: {})
|
12
|
-
|
12
|
+
client.json_post(path: '/ingestions', parameters: parameters)
|
13
13
|
end
|
14
14
|
|
15
15
|
def retrieve(id:)
|
16
|
-
|
16
|
+
client.get(path: "/ingestions/#{id}")
|
17
17
|
end
|
18
18
|
|
19
19
|
def delete(id:)
|
20
|
-
|
20
|
+
client.delete(path: "/ingestions/#{id}")
|
21
21
|
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
attr_reader :client
|
22
26
|
end
|
23
27
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module MagicWrite
|
2
|
+
class Memberships
|
3
|
+
def initialize(client:)
|
4
|
+
@client = client
|
5
|
+
end
|
6
|
+
|
7
|
+
def user
|
8
|
+
client.get(path: '/memberships/user')
|
9
|
+
end
|
10
|
+
|
11
|
+
def company
|
12
|
+
client.get(path: '/memberships/company')
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
attr_reader :client
|
18
|
+
end
|
19
|
+
end
|
data/lib/magicwrite/version.rb
CHANGED
data/lib/magicwrite.rb
CHANGED
@@ -6,16 +6,18 @@ require_relative 'magicwrite/client'
|
|
6
6
|
require_relative 'magicwrite/agents'
|
7
7
|
require_relative 'magicwrite/companies'
|
8
8
|
require_relative 'magicwrite/completions'
|
9
|
+
require_relative 'magicwrite/error'
|
10
|
+
require_relative 'magicwrite/error_handler'
|
9
11
|
require_relative 'magicwrite/ingestions'
|
12
|
+
require_relative 'magicwrite/memberships'
|
10
13
|
require_relative 'magicwrite/version'
|
11
14
|
|
12
15
|
module MagicWrite
|
13
|
-
class Error < StandardError; end
|
14
16
|
class ConfigurationError < Error; end
|
15
17
|
|
16
18
|
class Configuration
|
17
19
|
attr_writer :access_token
|
18
|
-
attr_accessor :uri_base, :request_timeout
|
20
|
+
attr_accessor :uri_base, :request_timeout, :extra_headers
|
19
21
|
|
20
22
|
DEFAULT_URI_BASE = 'https://api.magicwrite.ai/rest/'.freeze
|
21
23
|
DEFAULT_REQUEST_TIMEOUT = 120
|
@@ -24,6 +26,7 @@ module MagicWrite
|
|
24
26
|
@access_token = nil
|
25
27
|
@uri_base = DEFAULT_URI_BASE
|
26
28
|
@request_timeout = DEFAULT_REQUEST_TIMEOUT
|
29
|
+
@extra_headers = nil
|
27
30
|
end
|
28
31
|
|
29
32
|
def access_token
|
@@ -36,13 +39,13 @@ module MagicWrite
|
|
36
39
|
|
37
40
|
class << self
|
38
41
|
attr_writer :configuration
|
39
|
-
end
|
40
42
|
|
41
|
-
|
42
|
-
|
43
|
-
|
43
|
+
def configuration
|
44
|
+
@configuration ||= MagicWrite::Configuration.new
|
45
|
+
end
|
44
46
|
|
45
|
-
|
46
|
-
|
47
|
+
def configure
|
48
|
+
yield(configuration)
|
49
|
+
end
|
47
50
|
end
|
48
51
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-magicwrite
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rodrigo Campos
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date: 2023-08-
|
12
|
+
date: 2023-08-22 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: faraday
|
@@ -68,8 +68,11 @@ files:
|
|
68
68
|
- lib/magicwrite/companies.rb
|
69
69
|
- lib/magicwrite/compatibility.rb
|
70
70
|
- lib/magicwrite/completions.rb
|
71
|
+
- lib/magicwrite/error.rb
|
72
|
+
- lib/magicwrite/error_handler.rb
|
71
73
|
- lib/magicwrite/http.rb
|
72
74
|
- lib/magicwrite/ingestions.rb
|
75
|
+
- lib/magicwrite/memberships.rb
|
73
76
|
- lib/magicwrite/version.rb
|
74
77
|
- lib/ruby/magicwrite.rb
|
75
78
|
- pull_request_template.md
|