@seamapi/nextlove-sdk-generator 1.5.6 → 1.6.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.
- package/lib/generate-csharp-sdk/codegen.d.ts +1 -0
- package/lib/generate-csharp-sdk/codegen.js +1 -0
- package/lib/generate-csharp-sdk/codegen.js.map +1 -1
- package/lib/generate-csharp-sdk/generate-csharp-sdk.js +10 -3
- package/lib/generate-csharp-sdk/generate-csharp-sdk.js.map +1 -1
- package/lib/generate-csharp-sdk/templates/dataclass.d.ts +1 -0
- package/lib/generate-csharp-sdk/templates/dataclass.js +46 -27
- package/lib/generate-csharp-sdk/templates/dataclass.js.map +1 -1
- package/lib/generate-php-sdk/generate-php-sdk.js +4 -4
- package/lib/generate-php-sdk/generate-php-sdk.js.map +1 -1
- package/lib/generate-python-sdk/class-file.js +4 -4
- package/lib/generate-python-sdk/class-file.js.map +1 -1
- package/lib/generate-python-sdk/generate-python-sdk.js +3 -4
- package/lib/generate-python-sdk/generate-python-sdk.js.map +1 -1
- package/lib/generate-ruby-sdk/generate-ruby-sdk.js +33 -14
- package/lib/generate-ruby-sdk/generate-ruby-sdk.js.map +1 -1
- package/lib/generate-ruby-sdk/ruby-client.d.ts +8 -2
- package/lib/generate-ruby-sdk/ruby-client.js +25 -6
- package/lib/generate-ruby-sdk/ruby-client.js.map +1 -1
- package/lib/generate-ruby-sdk/templates/.rspec.template.d.ts +2 -0
- package/lib/generate-ruby-sdk/templates/.rspec.template.js +4 -0
- package/lib/generate-ruby-sdk/templates/.rspec.template.js.map +1 -0
- package/lib/generate-ruby-sdk/templates/.ruby-version.template.d.ts +2 -0
- package/lib/generate-ruby-sdk/templates/.ruby-version.template.js +2 -0
- package/lib/generate-ruby-sdk/templates/.ruby-version.template.js.map +1 -0
- package/lib/generate-ruby-sdk/templates/base_resource.rb.template.js +2 -2
- package/lib/generate-ruby-sdk/templates/client.rb.template.d.ts +1 -1
- package/lib/generate-ruby-sdk/templates/client.rb.template.js +60 -73
- package/lib/generate-ruby-sdk/templates/client.rb.template.js.map +1 -1
- package/lib/generate-ruby-sdk/templates/request.rb.template.js +1 -1
- package/lib/generate-ruby-sdk/templates/resource_error.rb.template.js +2 -0
- package/lib/generate-ruby-sdk/templates/resource_error.rb.template.js.map +1 -1
- package/lib/generate-ruby-sdk/templates/resource_warning.rb.template.js +2 -0
- package/lib/generate-ruby-sdk/templates/resource_warning.rb.template.js.map +1 -1
- package/lib/generate-ruby-sdk/templates/seamapi.gemspec.template.js +2 -2
- package/lib/generate-ruby-sdk/templates/snippets/action-attempt-helpers-template.d.ts +2 -0
- package/lib/generate-ruby-sdk/templates/snippets/action-attempt-helpers-template.js +28 -0
- package/lib/generate-ruby-sdk/templates/snippets/action-attempt-helpers-template.js.map +1 -0
- package/lib/generate-ruby-sdk/templates/snippets/resource.rb.template.js +26 -7
- package/lib/generate-ruby-sdk/templates/snippets/resource.rb.template.js.map +1 -1
- package/lib/generate-ruby-sdk/templates/spec_helper.rb.template.d.ts +2 -0
- package/lib/generate-ruby-sdk/templates/spec_helper.rb.template.js +29 -0
- package/lib/generate-ruby-sdk/templates/spec_helper.rb.template.js.map +1 -0
- package/lib/generate-ruby-sdk/templates/support-helpers.rb.template.d.ts +2 -0
- package/lib/generate-ruby-sdk/templates/support-helpers.rb.template.js +12 -0
- package/lib/generate-ruby-sdk/templates/support-helpers.rb.template.js.map +1 -0
- package/lib/generate-ruby-sdk/templates/version.rb.template.js +1 -1
- package/lib/openapi/get-parameter-and-response-schema.d.ts +7 -0
- package/lib/openapi/get-parameter-and-response-schema.js +2 -0
- package/lib/openapi/get-parameter-and-response-schema.js.map +1 -1
- package/lib/openapi/map-parent-to-children-resource.d.ts +2 -2
- package/lib/openapi/map-parent-to-children-resource.js +2 -2
- package/lib/openapi/map-parent-to-children-resource.js.map +1 -1
- package/package.json +1 -1
- package/src/lib/generate-csharp-sdk/codegen.ts +1 -0
- package/src/lib/generate-csharp-sdk/generate-csharp-sdk.ts +24 -4
- package/src/lib/generate-csharp-sdk/templates/dataclass.ts +68 -46
- package/src/lib/generate-php-sdk/generate-php-sdk.ts +4 -4
- package/src/lib/generate-python-sdk/class-file.ts +4 -4
- package/src/lib/generate-python-sdk/generate-python-sdk.ts +3 -4
- package/src/lib/generate-ruby-sdk/generate-ruby-sdk.ts +47 -14
- package/src/lib/generate-ruby-sdk/ruby-client.ts +42 -7
- package/src/lib/generate-ruby-sdk/templates/.rspec.template.ts +3 -0
- package/src/lib/generate-ruby-sdk/templates/.ruby-version.template.ts +1 -0
- package/src/lib/generate-ruby-sdk/templates/base_resource.rb.template.ts +2 -2
- package/src/lib/generate-ruby-sdk/templates/client.rb.template.ts +62 -73
- package/src/lib/generate-ruby-sdk/templates/request.rb.template.ts +1 -1
- package/src/lib/generate-ruby-sdk/templates/resource_error.rb.template.ts +2 -0
- package/src/lib/generate-ruby-sdk/templates/resource_warning.rb.template.ts +2 -0
- package/src/lib/generate-ruby-sdk/templates/seamapi.gemspec.template.ts +2 -2
- package/src/lib/generate-ruby-sdk/templates/snippets/action-attempt-helpers-template.ts +27 -0
- package/src/lib/generate-ruby-sdk/templates/snippets/resource.rb.template.ts +34 -9
- package/src/lib/generate-ruby-sdk/templates/spec_helper.rb.template.ts +28 -0
- package/src/lib/generate-ruby-sdk/templates/support-helpers.rb.template.ts +11 -0
- package/src/lib/generate-ruby-sdk/templates/version.rb.template.ts +1 -1
- package/src/lib/openapi/get-parameter-and-response-schema.ts +2 -0
- package/src/lib/openapi/map-parent-to-children-resource.ts +2 -4
|
@@ -29,12 +29,12 @@ module Seam
|
|
|
29
29
|
end
|
|
30
30
|
|
|
31
31
|
def inspect
|
|
32
|
-
"<#{self.class.name}:#{"0x00%x" % (object_id << 1)}
|
|
32
|
+
"<#{self.class.name}:#{"0x00%x" % (object_id << 1)}\\n" + # rubocop:disable Style/StringConcatenation, Style/FormatString
|
|
33
33
|
instance_variables
|
|
34
34
|
.map { |k| k.to_s.sub("@", "") }
|
|
35
35
|
.filter { |k| k != "data" and k != "client" and respond_to? k }
|
|
36
36
|
.map { |k| " #{k}=#{send(k).inspect}" }
|
|
37
|
-
.join("
|
|
37
|
+
.join("\\n") + ">"
|
|
38
38
|
end
|
|
39
39
|
|
|
40
40
|
def self.date_accessor(*attrs)
|
|
@@ -1,73 +1,62 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
@
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
def request_seam(method, path, config = {})
|
|
64
|
-
Seam::Request.new(
|
|
65
|
-
api_key: api_key,
|
|
66
|
-
base_uri: base_uri,
|
|
67
|
-
debug: debug
|
|
68
|
-
).perform(
|
|
69
|
-
method, path, config
|
|
70
|
-
)
|
|
71
|
-
end
|
|
72
|
-
end
|
|
73
|
-
end`
|
|
1
|
+
import { pascalCase } from "change-case"
|
|
2
|
+
|
|
3
|
+
export default (resource_client_names: string[]) => {
|
|
4
|
+
const resource_client_defs = resource_client_names
|
|
5
|
+
.map((client_name) => {
|
|
6
|
+
return `
|
|
7
|
+
def ${client_name}
|
|
8
|
+
@${client_name} ||= Seam::Clients::${pascalCase(client_name)}.new(self)
|
|
9
|
+
end
|
|
10
|
+
`
|
|
11
|
+
})
|
|
12
|
+
.join("")
|
|
13
|
+
|
|
14
|
+
return `# frozen_string_literal: true
|
|
15
|
+
|
|
16
|
+
module Seam
|
|
17
|
+
class Client
|
|
18
|
+
attr_accessor :api_key, :base_uri, :debug
|
|
19
|
+
|
|
20
|
+
def initialize(api_key: nil, base_uri: "https://connect.getseam.com", debug: false)
|
|
21
|
+
@api_key = api_key || ENV.fetch("SEAM_API_KEY", nil)
|
|
22
|
+
@base_uri = base_uri
|
|
23
|
+
@debug = debug
|
|
24
|
+
|
|
25
|
+
raise ArgumentError, "SEAM_API_KEY not found in environment, and api_key not provided" unless @api_key
|
|
26
|
+
end
|
|
27
|
+
${resource_client_defs}
|
|
28
|
+
|
|
29
|
+
# @deprecated Please use {#devices.unmanaged} instead.
|
|
30
|
+
def unmanaged_devices
|
|
31
|
+
warn "[DEPRECATION] 'unmanaged_devices' is deprecated. Please use 'devices.unmanaged' instead."
|
|
32
|
+
|
|
33
|
+
@unmanaged_devices ||= Seam::Clients::DevicesUnmanaged.new(self)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# @deprecated Please use {#access_codes.unmanaged} instead.
|
|
37
|
+
def unmanaged_access_codes
|
|
38
|
+
warn "[DEPRECATION] 'unmanaged_access_codes' is deprecated. Please use 'access_codes.unmanaged' instead."
|
|
39
|
+
|
|
40
|
+
@unmanaged_access_codes ||= Seam::Clients::AccessCodesUnmanaged.new(self)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def request_seam_object(method, path, klass, inner_object, config = {})
|
|
44
|
+
response = request_seam(method, path, config)
|
|
45
|
+
|
|
46
|
+
data = response[inner_object]
|
|
47
|
+
|
|
48
|
+
klass.load_from_response(data, self)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def request_seam(method, path, config = {})
|
|
52
|
+
Seam::Request.new(
|
|
53
|
+
api_key: api_key,
|
|
54
|
+
base_uri: base_uri,
|
|
55
|
+
debug: debug
|
|
56
|
+
).perform(
|
|
57
|
+
method, path, config
|
|
58
|
+
)
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end`
|
|
62
|
+
}
|
|
@@ -45,7 +45,7 @@ module Seam
|
|
|
45
45
|
code = response.status.code
|
|
46
46
|
|
|
47
47
|
if code >= 400 && code < 500 && (err = response.parse["error"])
|
|
48
|
-
msg = "Api Error #{err["type"]}
|
|
48
|
+
msg = "Api Error #{err["type"]}\\nrequest_id: #{err["request_id"]}\\n#{err["message"]}"
|
|
49
49
|
end
|
|
50
50
|
|
|
51
51
|
raise Error.new(msg, code, response)
|
|
@@ -6,7 +6,7 @@ Gem::Specification.new do |spec|
|
|
|
6
6
|
spec.name = "seamapi"
|
|
7
7
|
spec.version = Seam::VERSION
|
|
8
8
|
spec.author = "Seam Labs, Inc."
|
|
9
|
-
spec.email = "
|
|
9
|
+
spec.email = "devops@getseam.com"
|
|
10
10
|
|
|
11
11
|
spec.summary = "Seam API Ruby SDK"
|
|
12
12
|
spec.description = "Official interface to the Seam Connect API."
|
|
@@ -26,7 +26,7 @@ Gem::Specification.new do |spec|
|
|
|
26
26
|
spec.files = Dir["lib/**/*.rb"]
|
|
27
27
|
spec.files += Dir["[A-Z]*"]
|
|
28
28
|
|
|
29
|
-
spec.add_dependency "http", "~> 5.0
|
|
29
|
+
spec.add_dependency "http", "~> 5.0"
|
|
30
30
|
|
|
31
31
|
spec.add_development_dependency "bundler", "~> 2.0"
|
|
32
32
|
spec.add_development_dependency "gem-release", "~> 2.2"
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export default () => `SLEEP_TIME = 0.2
|
|
2
|
+
MAX_ATTEMPTS = 10
|
|
3
|
+
|
|
4
|
+
def wait_until_finished
|
|
5
|
+
attempts = 0
|
|
6
|
+
while @status == "pending"
|
|
7
|
+
update!
|
|
8
|
+
sleep(SLEEP_TIME)
|
|
9
|
+
attempts += 1
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
raise "Timed out waiting for action attempt to finish" if attempts >= MAX_ATTEMPTS
|
|
13
|
+
|
|
14
|
+
self
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def update!
|
|
18
|
+
response = @client.request_seam(
|
|
19
|
+
:post,
|
|
20
|
+
"/action_attempts/get",
|
|
21
|
+
body: {
|
|
22
|
+
action_attempt_id: action_attempt_id
|
|
23
|
+
}
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
update_from_response(response["action_attempt"])
|
|
27
|
+
end`
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import actionAttemptHelpersTemplate from "./action-attempt-helpers-template.js"
|
|
2
|
+
|
|
1
3
|
export default ({
|
|
2
4
|
pascal_name,
|
|
3
5
|
attrs,
|
|
@@ -6,19 +8,42 @@ export default ({
|
|
|
6
8
|
pascal_name: string
|
|
7
9
|
attrs: string[]
|
|
8
10
|
date_attrs: string[]
|
|
9
|
-
}) =>
|
|
11
|
+
}) => {
|
|
12
|
+
const no_error_warning_attrs = attrs.filter(
|
|
13
|
+
(attr) => attr !== "errors" && attr !== "warnings"
|
|
14
|
+
)
|
|
15
|
+
const has_warnings_attr = attrs.includes("warnings")
|
|
16
|
+
const has_errors_attr = attrs.includes("errors")
|
|
17
|
+
|
|
18
|
+
const attr_accessors = no_error_warning_attrs
|
|
19
|
+
.map((attr) => `:${attr}`)
|
|
20
|
+
.join(", ")
|
|
21
|
+
const date_accessors =
|
|
22
|
+
date_attrs.length > 0
|
|
23
|
+
? `date_accessor ${date_attrs.map((attr) => `:${attr}`).join(", ")}`
|
|
24
|
+
: ""
|
|
25
|
+
|
|
26
|
+
const resource_errors_support = has_errors_attr
|
|
27
|
+
? "include Seam::ResourceErrorsSupport"
|
|
28
|
+
: ""
|
|
29
|
+
const resource_warnings_support = has_warnings_attr
|
|
30
|
+
? "include Seam::ResourceWarningsSupport"
|
|
31
|
+
: ""
|
|
32
|
+
|
|
33
|
+
const is_action_attempt_resource = pascal_name === "ActionAttempt"
|
|
34
|
+
|
|
35
|
+
return `# frozen_string_literal: true
|
|
10
36
|
|
|
11
37
|
module Seam
|
|
12
38
|
class ${pascal_name} < BaseResource
|
|
13
|
-
|
|
39
|
+
attr_accessor ${attr_accessors}
|
|
40
|
+
|
|
41
|
+
${date_accessors}
|
|
14
42
|
|
|
15
|
-
${
|
|
16
|
-
|
|
17
|
-
? `date_accessor ${date_attrs.map((attr) => `:${attr}`).join(", ")}`
|
|
18
|
-
: ""
|
|
19
|
-
}
|
|
43
|
+
${resource_errors_support}
|
|
44
|
+
${resource_warnings_support}
|
|
20
45
|
|
|
21
|
-
|
|
22
|
-
include Seam::ResourceWarningsSupport
|
|
46
|
+
${is_action_attempt_resource ? actionAttemptHelpersTemplate() : ""}
|
|
23
47
|
end
|
|
24
48
|
end`
|
|
49
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export default () => `# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "simplecov"
|
|
4
|
+
require "simplecov-console"
|
|
5
|
+
|
|
6
|
+
SimpleCov.start
|
|
7
|
+
|
|
8
|
+
require "seamapi"
|
|
9
|
+
require "webmock/rspec"
|
|
10
|
+
|
|
11
|
+
require_relative "support/helpers"
|
|
12
|
+
|
|
13
|
+
SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter.new([
|
|
14
|
+
SimpleCov::Formatter::HTMLFormatter,
|
|
15
|
+
SimpleCov::Formatter::Console
|
|
16
|
+
])
|
|
17
|
+
|
|
18
|
+
RSpec.configure do |config|
|
|
19
|
+
config.example_status_persistence_file_path = ".rspec_status"
|
|
20
|
+
|
|
21
|
+
config.disable_monkey_patching!
|
|
22
|
+
|
|
23
|
+
config.expect_with :rspec do |c|
|
|
24
|
+
c.syntax = :expect
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
config.include Helpers
|
|
28
|
+
end`
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export default () => `# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Helpers
|
|
4
|
+
def stub_seam_request(method, path, response, status: 200, headers: {})
|
|
5
|
+
stub_request(
|
|
6
|
+
method,
|
|
7
|
+
"https://connect.getseam.com#{path}"
|
|
8
|
+
).to_return(status: status, body: response.to_json,
|
|
9
|
+
headers: {"Content-Type" => "application/json"}.merge(headers))
|
|
10
|
+
end
|
|
11
|
+
end`
|
|
@@ -43,6 +43,7 @@ export const getParameterAndResponseSchema = (route: Route) => {
|
|
|
43
43
|
response_arr_type: undefined,
|
|
44
44
|
parameter_schema,
|
|
45
45
|
nullable,
|
|
46
|
+
response_schema,
|
|
46
47
|
}
|
|
47
48
|
} else {
|
|
48
49
|
return {
|
|
@@ -51,6 +52,7 @@ export const getParameterAndResponseSchema = (route: Route) => {
|
|
|
51
52
|
parameter_schema,
|
|
52
53
|
res_return_schema: res_return_schema as ObjSchema | undefined,
|
|
53
54
|
nullable,
|
|
55
|
+
response_schema,
|
|
54
56
|
}
|
|
55
57
|
}
|
|
56
58
|
}
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import type { Route } from "lib/types.js"
|
|
2
2
|
|
|
3
|
-
const
|
|
4
|
-
routes: Route[]
|
|
5
|
-
): Record<string, string[]> =>
|
|
3
|
+
const mapParentToChildResources = (routes: Route[]): Record<string, string[]> =>
|
|
6
4
|
routes.reduce((acc: Record<string, string[]>, route) => {
|
|
7
5
|
if (!route.post?.["x-fern-sdk-group-name"]) return acc
|
|
8
6
|
|
|
@@ -25,4 +23,4 @@ const mapParentToChildrenResources = (
|
|
|
25
23
|
return acc
|
|
26
24
|
}, {})
|
|
27
25
|
|
|
28
|
-
export default
|
|
26
|
+
export default mapParentToChildResources
|