ruby-magicwrite 0.1.3 → 0.1.5
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 +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
|