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 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