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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a7196a229f9665af5e45c3c039aff8aed41a4ae495a1ec90ef882f7f2f025858
4
- data.tar.gz: bcbc8eac9a03a650b7ac39da3aaab4715a78b0d895cd583565bc703ee8262c57
3
+ metadata.gz: fe492bf84e88d0fac86ee681671ab724a7247d37403301fcc6b2d24c5db23fb0
4
+ data.tar.gz: 67460bd0593a9e4b7503e6e048b42d0927631c62e784951056d629edc1e99666
5
5
  SHA512:
6
- metadata.gz: 92e2cc734dfd82bbf196b8dff81873dc516706b2fb4e9889f3a7c8d5360153c21226c5f1f4dbcfd6d1616b7a7a5518886d3894f74ff574bc7ad78dca17db9e13
7
- data.tar.gz: 3895dfe940935bd163ebb0e60b57209f074ebbb1c6bcd898aad98f1f7a38df32e7acfdd61c0233c4741e55b62fb653728ac196e0af6e30b7adcf356507564217
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
- - Initialise repository.
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
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ruby-magicwrite (0.1.3)
4
+ ruby-magicwrite (0.1.5)
5
5
  faraday (>= 1)
6
6
  faraday-multipart (>= 1)
7
7
 
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
- $ gem install ruby-magicwrite
23
+ ```bash
24
+ $ gem install ruby-openai
25
+ ```
22
26
 
23
27
  and require with:
24
28
 
@@ -1,39 +1,43 @@
1
1
  module MagicWrite
2
2
  class Agents
3
- def initialize(access_token: nil)
4
- MagicWrite.configuration.access_token = access_token if access_token
3
+ def initialize(client:)
4
+ @client = client
5
5
  end
6
6
 
7
7
  def list(parameters: {})
8
- MagicWrite::Client.get(path: '/agents', parameters: parameters)
8
+ client.get(path: '/agents', parameters: parameters)
9
9
  end
10
10
 
11
11
  def create(parameters: {})
12
- MagicWrite::Client.json_post(path: '/agents', parameters: parameters)
12
+ client.json_post(path: '/agents', parameters: parameters)
13
13
  end
14
14
 
15
15
  def retrieve(id:)
16
- MagicWrite::Client.get(path: "/agents/#{id}")
16
+ client.get(path: "/agents/#{id}")
17
17
  end
18
18
 
19
19
  def update(id:, parameters: {})
20
- MagicWrite::Client.json_put(path: "/agents/#{id}", parameters: parameters)
20
+ client.json_put(path: "/agents/#{id}", parameters: parameters)
21
21
  end
22
22
 
23
23
  def delete(id:)
24
- MagicWrite::Client.delete(path: "/agents/#{id}")
24
+ client.delete(path: "/agents/#{id}")
25
25
  end
26
26
 
27
27
  def public_list(company_id:, parameters: {})
28
- MagicWrite::Client.get(path: "/agents/#{company_id}", parameters: parameters)
28
+ client.get(path: "/agents/#{company_id}", parameters: parameters)
29
29
  end
30
30
 
31
31
  def public_retrieve(company_id:, agent_id:)
32
- MagicWrite::Client.get(path: "/agents/#{company_id}/#{agent_id}")
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
- MagicWrite::Client.json_post(path: "/agents/#{company_id}/#{agent_id}", parameters: parameters)
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
@@ -1,31 +1,43 @@
1
1
  module MagicWrite
2
2
  class Client
3
- extend MagicWrite::HTTP
3
+ include MagicWrite::HTTP
4
4
 
5
- def initialize(access_token: nil, uri_base: nil, request_timeout: nil)
6
- MagicWrite.configuration.access_token = access_token if access_token
7
- MagicWrite.configuration.uri_base = uri_base if uri_base
8
- MagicWrite.configuration.request_timeout = request_timeout if request_timeout
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
- MagicWrite::Client.get(path: '/session')
40
+ get(path: '/session')
29
41
  end
30
42
  end
31
43
  end
@@ -1,19 +1,23 @@
1
1
  module MagicWrite
2
2
  class Companies
3
- def initialize(access_token: nil)
4
- MagicWrite.configuration.access_token = access_token if access_token
3
+ def initialize(client:)
4
+ @client = client
5
5
  end
6
6
 
7
7
  def create(parameters: {})
8
- MagicWrite::Client.json_post(path: '/companies', parameters: parameters)
8
+ client.json_post(path: '/companies', parameters: parameters)
9
9
  end
10
10
 
11
11
  def retrieve
12
- MagicWrite::Client.get(path: '/companies/current')
12
+ client.get(path: '/companies/current')
13
13
  end
14
14
 
15
15
  def update(parameters: {})
16
- MagicWrite::Client.json_put(path: '/companies/current', parameters: parameters)
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(access_token: nil)
4
- MagicWrite.configuration.access_token = access_token if access_token
3
+ def initialize(client:)
4
+ @client = client
5
5
  end
6
6
 
7
7
  def execute(parameters: {})
8
- MagicWrite::Client.json_post(path: '/completions', parameters: parameters)
8
+ client.json_post(path: '/completions', parameters: parameters)
9
9
  end
10
10
 
11
11
  def retrieve(id:, parameters: {})
12
- MagicWrite::Client.get(path: "/completions/#{id}", parameters: parameters)
12
+ client.get(path: "/completions/#{id}", parameters: parameters)
13
13
  end
14
14
 
15
15
  def create(id:, parameters: {})
16
- MagicWrite::Client.json_post(path: "/completions/#{id}", parameters: parameters)
16
+ client.json_post(path: "/completions/#{id}", parameters: parameters)
17
17
  end
18
18
 
19
19
  def delete(id:, completion_id:)
20
- MagicWrite::Client.delete(path: "/completions/#{id}/#{completion_id}")
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
@@ -1,55 +1,67 @@
1
1
  module MagicWrite
2
2
  module HTTP
3
3
  def get(path:, parameters: {})
4
- to_json(conn.get(uri(path: path)) do |req|
5
- req.headers = headers
6
- req.body = parameters.to_json
7
- end&.body)
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
- to_json(conn.post(uri(path: path)) do |req|
11
+ build_response(conn.post(uri(path: path)) do |request|
12
12
  if parameters[:stream].respond_to?(:call)
13
- req.options.on_data = to_json_stream(user_proc: parameters[:stream])
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
- req.headers = headers
20
- req.body = parameters.to_json
21
- end&.body)
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
- to_json(conn.put(uri(path: path)) do |req|
25
+ build_response(conn.put(uri(path: path)) do |request|
26
26
  if parameters[:stream].respond_to?(:call)
27
- req.options.on_data = to_json_stream(user_proc: parameters[:stream])
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
- req.headers = headers
34
- req.body = parameters.to_json
35
- end&.body)
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
- to_json(conn(multipart: true).post(uri(path: path)) do |req|
40
- req.headers = headers.merge({ 'Content-Type' => 'multipart/form-data' })
41
- req.body = multipart_parameters(parameters)
42
- end&.body)
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
- to_json(conn.delete(uri(path: path)) do |req|
47
- req.headers = headers
48
- end&.body)
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 |f|
73
- f.options[:timeout] = MagicWrite.configuration.request_timeout
74
- f.request(:multipart) if multipart
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(MagicWrite.configuration.uri_base, path)
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 #{MagicWrite.configuration.access_token}"
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(access_token: nil)
4
- MagicWrite.configuration.access_token = access_token if access_token
3
+ def initialize(client:)
4
+ @client = client
5
5
  end
6
6
 
7
7
  def list(parameters: {})
8
- MagicWrite::Client.get(path: '/ingestions', parameters: parameters)
8
+ client.get(path: '/ingestions', parameters: parameters)
9
9
  end
10
10
 
11
11
  def create(parameters: {})
12
- MagicWrite::Client.json_post(path: '/ingestions', parameters: parameters)
12
+ client.json_post(path: '/ingestions', parameters: parameters)
13
13
  end
14
14
 
15
15
  def retrieve(id:)
16
- MagicWrite::Client.get(path: "/ingestions/#{id}")
16
+ client.get(path: "/ingestions/#{id}")
17
17
  end
18
18
 
19
19
  def delete(id:)
20
- MagicWrite::Client.delete(path: "/ingestions/#{id}")
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
@@ -1,3 +1,3 @@
1
1
  module MagicWrite
2
- VERSION = '0.1.3'.freeze
2
+ VERSION = '0.1.5'.freeze
3
3
  end
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
- def self.configuration
42
- @configuration ||= MagicWrite::Configuration.new
43
- end
43
+ def configuration
44
+ @configuration ||= MagicWrite::Configuration.new
45
+ end
44
46
 
45
- def self.configure
46
- yield(configuration)
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.3
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-21 00:00:00.000000000 Z
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