workato-connector-sdk 0.1.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +57 -30
- data/exe/workato +12 -1
- data/lib/workato/cli/edit_command.rb +1 -3
- data/lib/workato/cli/exec_command.rb +21 -5
- data/lib/workato/cli/generate_command.rb +1 -2
- data/lib/workato/cli/generators/connector_generator.rb +4 -1
- data/lib/workato/cli/main.rb +50 -3
- data/lib/workato/cli/oauth2_command.rb +180 -0
- data/lib/workato/cli/push_command.rb +36 -24
- data/lib/workato/connector/sdk/action.rb +52 -4
- data/lib/workato/connector/sdk/connection.rb +144 -0
- data/lib/workato/connector/sdk/connector.rb +24 -9
- data/lib/workato/connector/sdk/dsl/time.rb +8 -1
- data/lib/workato/connector/sdk/dsl/workato_code_lib.rb +4 -4
- data/lib/workato/connector/sdk/errors.rb +13 -0
- data/lib/workato/connector/sdk/object_definitions.rb +10 -10
- data/lib/workato/connector/sdk/operation.rb +37 -39
- data/lib/workato/connector/sdk/request.rb +11 -7
- data/lib/workato/connector/sdk/schema/field/array.rb +25 -0
- data/lib/workato/connector/sdk/schema/field/convertors.rb +189 -0
- data/lib/workato/connector/sdk/schema/field/date.rb +28 -0
- data/lib/workato/connector/sdk/schema/field/date_time.rb +28 -0
- data/lib/workato/connector/sdk/schema/field/integer.rb +27 -0
- data/lib/workato/connector/sdk/schema/field/number.rb +27 -0
- data/lib/workato/connector/sdk/schema/field/object.rb +25 -0
- data/lib/workato/connector/sdk/schema/field/string.rb +26 -0
- data/lib/workato/connector/sdk/schema/type/time.rb +53 -0
- data/lib/workato/connector/sdk/schema/type/unicode_string.rb +22 -0
- data/lib/workato/connector/sdk/schema.rb +230 -0
- data/lib/workato/connector/sdk/settings.rb +6 -3
- data/lib/workato/connector/sdk/trigger.rb +25 -0
- data/lib/workato/connector/sdk/version.rb +1 -1
- data/lib/workato/connector/sdk.rb +1 -0
- data/lib/workato/extension/string.rb +16 -10
- data/lib/workato/web/app.rb +23 -0
- data/templates/Gemfile.erb +1 -0
- data/templates/spec/action_spec.rb.erb +7 -1
- data/templates/spec/trigger_spec.rb.erb +6 -0
- metadata +95 -7
@@ -0,0 +1,230 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Workato
|
4
|
+
module Connector
|
5
|
+
module Sdk
|
6
|
+
class Schema < SimpleDelegator
|
7
|
+
def initialize(schema: [])
|
8
|
+
super(Fields.new(::Array.wrap(schema).map(&:with_indifferent_access)))
|
9
|
+
end
|
10
|
+
|
11
|
+
def trim(input)
|
12
|
+
input.with_indifferent_access.keep_if { |property_name| includes_property?(property_name) }
|
13
|
+
end
|
14
|
+
|
15
|
+
def apply(input, enforce_required:, &block)
|
16
|
+
input.with_indifferent_access.tap do |input_with_indifferent_access|
|
17
|
+
apply_to_hash(self, input_with_indifferent_access, enforce_required: enforce_required, &block)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def +(other)
|
22
|
+
if other.is_a?(Schema)
|
23
|
+
Schema.new.tap do |schema|
|
24
|
+
schema.__setobj__(__getobj__ + other.__getobj__)
|
25
|
+
end
|
26
|
+
else
|
27
|
+
Schema.new(schema: __getobj__ + other)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def includes_property?(name)
|
34
|
+
find_property_by_name(name).present?
|
35
|
+
end
|
36
|
+
|
37
|
+
def find_property_by_name(name)
|
38
|
+
find do |property|
|
39
|
+
(property[:name].to_s == name.to_s) || (property.dig(:toggle_field, :name).to_s == name.to_s)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def apply_to_hash(properties, object, enforce_required: false, &block)
|
44
|
+
return if properties.blank? || object.nil?
|
45
|
+
|
46
|
+
properties.each do |property|
|
47
|
+
apply_to_value(property, object, property[:name], object[property[:name]], &block)
|
48
|
+
if (toggle_property = property[:toggle_field])
|
49
|
+
apply_to_value(toggle_property, object, toggle_property[:name], object[toggle_property[:name]], &block)
|
50
|
+
end
|
51
|
+
|
52
|
+
next unless enforce_required
|
53
|
+
next if optional_or_present?(property, object) || optional_or_present?(property[:toggle_field], object)
|
54
|
+
|
55
|
+
raise MissingRequiredInput.new(property[:label], property.dig(:toggle_field, :label))
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def optional_or_present?(property, object)
|
60
|
+
property.present? && (
|
61
|
+
property[:optional] ||
|
62
|
+
property[:runtime_optional] ||
|
63
|
+
(value = object[property[:name]]).present? ||
|
64
|
+
value.is_a?(FalseClass) ||
|
65
|
+
(value.is_a?(::String) && !value.empty?)
|
66
|
+
)
|
67
|
+
end
|
68
|
+
|
69
|
+
def apply_to_array(property, array, &block)
|
70
|
+
array.each_with_index do |item, index|
|
71
|
+
apply_to_value(property, array, index, item, &block)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
def apply_to_value(property, container, index, value, &block)
|
76
|
+
return unless property.present? && value.present?
|
77
|
+
|
78
|
+
if value.respond_to?(:each_key)
|
79
|
+
apply_to_hash(property[:properties], value, &block)
|
80
|
+
elsif value.respond_to?(:each_with_index)
|
81
|
+
apply_to_array(property, value, &block)
|
82
|
+
end
|
83
|
+
|
84
|
+
container[index] = if !value.nil? && block
|
85
|
+
normalize_value(yield(value, property))
|
86
|
+
else
|
87
|
+
normalize_value(value)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
def normalize_value(value)
|
92
|
+
return value if value.blank?
|
93
|
+
|
94
|
+
case value
|
95
|
+
when ::Time
|
96
|
+
return Type::Time.from_time(value)
|
97
|
+
when ::DateTime
|
98
|
+
return Type::Time.from_date_time(value)
|
99
|
+
when ::Date
|
100
|
+
return value.to_date
|
101
|
+
when ::Numeric, ::TrueClass, ::FalseClass, Workato::Extension::Binary, Type::UnicodeString,
|
102
|
+
::Array, ::Hash
|
103
|
+
return value
|
104
|
+
when Extension::Array::ArrayWhere
|
105
|
+
return value.to_a
|
106
|
+
when ::String
|
107
|
+
if value.encoding == Encoding::ASCII_8BIT
|
108
|
+
return Workato::Extension::Binary.new(value)
|
109
|
+
end
|
110
|
+
|
111
|
+
return Type::UnicodeString.new(value)
|
112
|
+
else
|
113
|
+
if value.respond_to?(:to_time)
|
114
|
+
return Type::Time.from_time(value.to_time)
|
115
|
+
end
|
116
|
+
|
117
|
+
if value.respond_to?(:read) && value.respond_to?(:rewind)
|
118
|
+
value.rewind
|
119
|
+
return Workato::Extension::Binary.new(value.read.force_encoding(Encoding::ASCII_8BIT))
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
raise ArgumentError, "Unsupported data type: #{value.class}"
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
class Fields < ::Array
|
128
|
+
def initialize(fields)
|
129
|
+
::Array.wrap(fields).each do |field|
|
130
|
+
field = prepare_attributes(field)
|
131
|
+
self << field_with_defaults(field)
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
private
|
136
|
+
|
137
|
+
def prepare_attributes(field)
|
138
|
+
if (render_input = field.delete(:convert_input) || field[:render_input])
|
139
|
+
field[:render_input] = render_input.is_a?(Proc) ? nil : render_input
|
140
|
+
end
|
141
|
+
if (parse_output = field.delete(:convert_output) || field[:parse_output])
|
142
|
+
field[:parse_output] = parse_output.is_a?(Proc) ? nil : parse_output
|
143
|
+
end
|
144
|
+
field[:optional] = true unless field.key?(:optional)
|
145
|
+
field[:label] ||= field[:name].labelize
|
146
|
+
|
147
|
+
clean_values(field)
|
148
|
+
|
149
|
+
if (toggle_field = field[:toggle_field]).present?
|
150
|
+
raise InvalidSchemaError, 'toggle_hint not present' if field[:toggle_hint].blank?
|
151
|
+
|
152
|
+
unless toggle_field[:name].present? && toggle_field[:type].present?
|
153
|
+
raise InvalidSchemaError, 'toggle_field not complete'
|
154
|
+
end
|
155
|
+
|
156
|
+
if toggle_field[:optional].present? && (toggle_field[:optional] != field[:optional])
|
157
|
+
raise InvalidSchemaError, 'toggle field cannot change optional attribute'
|
158
|
+
end
|
159
|
+
|
160
|
+
field[:toggle_field] = field_with_defaults(field[:toggle_field]).tap do |tg_field|
|
161
|
+
tg_field.except!(:render_input, :parse_output, :control_type)
|
162
|
+
tg_field[:control_type] = toggle_field[:control_type]
|
163
|
+
clean_values(tg_field)
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
if field[:control_type].try(:start_with?, 'small-')
|
168
|
+
field[:control_type].remove!(/^small-/)
|
169
|
+
elsif field[:control_type].try(:start_with?, 'medium-')
|
170
|
+
field[:control_type].remove!(/^medium-/)
|
171
|
+
end
|
172
|
+
|
173
|
+
field
|
174
|
+
end
|
175
|
+
|
176
|
+
def clean_values(field)
|
177
|
+
field.transform_values! do |value|
|
178
|
+
value.presence && (value.is_a?(::Symbol) && value.to_s || value)
|
179
|
+
end
|
180
|
+
field.compact!
|
181
|
+
field
|
182
|
+
end
|
183
|
+
|
184
|
+
def field_with_defaults(field)
|
185
|
+
type = field.delete(:type).to_s
|
186
|
+
|
187
|
+
case type
|
188
|
+
when 'integer'
|
189
|
+
Schema::Field::Integer.new(field)
|
190
|
+
when 'number', 'boolean'
|
191
|
+
Schema::Field::Number.new(field)
|
192
|
+
when 'date_time', 'timestamp'
|
193
|
+
Schema::Field::DateTime.new(field)
|
194
|
+
when 'date'
|
195
|
+
Schema::Field::Date.new(field)
|
196
|
+
when 'object'
|
197
|
+
field[:properties] = Fields.new(field[:properties])
|
198
|
+
field.delete(:control_type)
|
199
|
+
Schema::Field::Object.new(field)
|
200
|
+
when 'array'
|
201
|
+
of = field[:of] = (field[:of] || 'object').to_s
|
202
|
+
if of == 'object'
|
203
|
+
field[:properties] = Fields.new(field[:properties])
|
204
|
+
else
|
205
|
+
field.merge(
|
206
|
+
field_with_defaults(field.merge(type: of)).except(:render_input, :parse_output)
|
207
|
+
)
|
208
|
+
end
|
209
|
+
Schema::Field::Array.new(field)
|
210
|
+
else
|
211
|
+
Schema::Field::String.new(field)
|
212
|
+
end
|
213
|
+
end
|
214
|
+
end
|
215
|
+
|
216
|
+
private_constant :Fields
|
217
|
+
end
|
218
|
+
end
|
219
|
+
end
|
220
|
+
|
221
|
+
require_relative './schema/field/array'
|
222
|
+
require_relative './schema/field/date'
|
223
|
+
require_relative './schema/field/date_time'
|
224
|
+
require_relative './schema/field/integer'
|
225
|
+
require_relative './schema/field/number'
|
226
|
+
require_relative './schema/field/object'
|
227
|
+
require_relative './schema/field/string'
|
228
|
+
|
229
|
+
require_relative './schema/type/time'
|
230
|
+
require_relative './schema/type/unicode_string'
|
@@ -45,6 +45,8 @@ module Workato
|
|
45
45
|
begin
|
46
46
|
@encrypted = false
|
47
47
|
read_plain_file
|
48
|
+
rescue KeyError
|
49
|
+
raise
|
48
50
|
rescue StandardError
|
49
51
|
@encrypted = true
|
50
52
|
read_encrypted_file
|
@@ -76,7 +78,7 @@ module Workato
|
|
76
78
|
YAML.safe_load(f.read, [::Symbol]).to_hash.with_indifferent_access
|
77
79
|
end
|
78
80
|
|
79
|
-
name ? all_settings.fetch(name) : all_settings
|
81
|
+
(name ? all_settings.fetch(name) : all_settings) || {}
|
80
82
|
end
|
81
83
|
|
82
84
|
def update_plain_file(new_settings)
|
@@ -93,7 +95,7 @@ module Workato
|
|
93
95
|
def read_encrypted_file
|
94
96
|
all_settings = encrypted_configuration.config.with_indifferent_access
|
95
97
|
|
96
|
-
name ? all_settings.fetch(name) : all_settings
|
98
|
+
(name ? all_settings.fetch(name) : all_settings) || {}
|
97
99
|
end
|
98
100
|
|
99
101
|
def update_encrypted_file(new_settings)
|
@@ -106,7 +108,8 @@ module Workato
|
|
106
108
|
|
107
109
|
def merge_settings(all_settings, new_settings)
|
108
110
|
if name
|
109
|
-
all_settings[name]
|
111
|
+
all_settings[name] ||= {}
|
112
|
+
all_settings[name].merge!(new_settings)
|
110
113
|
else
|
111
114
|
all_settings.merge!(new_settings)
|
112
115
|
end
|
@@ -89,7 +89,32 @@ module Workato
|
|
89
89
|
end
|
90
90
|
end
|
91
91
|
|
92
|
+
def invoke(input = {}, payload = {}, headers = {}, params = {})
|
93
|
+
extended_schema = extended_schema(nil, input)
|
94
|
+
config_schema = Schema.new(schema: config_fields_schema)
|
95
|
+
input_schema = Schema.new(schema: extended_schema[:input])
|
96
|
+
output_schema = Schema.new(schema: extended_schema[:output])
|
97
|
+
|
98
|
+
input = apply_input_schema(input, config_schema + input_schema)
|
99
|
+
output = if webhook_notification?
|
100
|
+
webhook_notification(input, payload, input_schema, output_schema, headers, params)
|
101
|
+
else
|
102
|
+
poll(nil, input, nil, input_schema, output_schema)
|
103
|
+
end
|
104
|
+
output[:events].each do |event|
|
105
|
+
apply_output_schema(event, output_schema)
|
106
|
+
end
|
107
|
+
|
108
|
+
output
|
109
|
+
end
|
110
|
+
|
111
|
+
private
|
112
|
+
|
92
113
|
alias trigger operation
|
114
|
+
|
115
|
+
def webhook_notification?
|
116
|
+
trigger[:webhook_notification].present?
|
117
|
+
end
|
93
118
|
end
|
94
119
|
end
|
95
120
|
end
|
@@ -43,6 +43,7 @@ require_relative '../extension/time'
|
|
43
43
|
|
44
44
|
require_relative './sdk/account_properties'
|
45
45
|
require_relative './sdk/action'
|
46
|
+
require_relative './sdk/connection'
|
46
47
|
require_relative './sdk/connector'
|
47
48
|
require_relative './sdk/dsl'
|
48
49
|
require_relative './sdk/errors'
|
@@ -98,7 +98,7 @@ module Workato
|
|
98
98
|
alias encode_hex to_hex
|
99
99
|
|
100
100
|
def decode_hex
|
101
|
-
Binary.new([self].pack('H*'))
|
101
|
+
Extension::Binary.new([self].pack('H*'))
|
102
102
|
end
|
103
103
|
|
104
104
|
def encode_base64
|
@@ -106,7 +106,7 @@ module Workato
|
|
106
106
|
end
|
107
107
|
|
108
108
|
def decode_base64
|
109
|
-
Binary.new(Base64.decode64(self))
|
109
|
+
Extension::Binary.new(Base64.decode64(self))
|
110
110
|
end
|
111
111
|
|
112
112
|
def encode_urlsafe_base64
|
@@ -118,21 +118,27 @@ module Workato
|
|
118
118
|
end
|
119
119
|
|
120
120
|
def decode_urlsafe_base64
|
121
|
-
Binary.new(Base64.urlsafe_decode64(self))
|
121
|
+
Extension::Binary.new(Base64.urlsafe_decode64(self))
|
122
122
|
end
|
123
123
|
|
124
124
|
def encode_sha256
|
125
|
-
Binary.new(::Digest::SHA256.digest(self))
|
125
|
+
Extension::Binary.new(::Digest::SHA256.digest(self))
|
126
126
|
end
|
127
127
|
|
128
128
|
def hmac_sha256(key)
|
129
129
|
digest = ::OpenSSL::Digest.new('sha256')
|
130
|
-
Binary.new(::OpenSSL::HMAC.digest(digest, key, self))
|
130
|
+
Extension::Binary.new(::OpenSSL::HMAC.digest(digest, key, self))
|
131
131
|
end
|
132
132
|
|
133
133
|
def hmac_sha512(key)
|
134
134
|
digest = ::OpenSSL::Digest.new('sha512')
|
135
|
-
Binary.new(::OpenSSL::HMAC.digest(digest, key, self))
|
135
|
+
Extension::Binary.new(::OpenSSL::HMAC.digest(digest, key, self))
|
136
|
+
end
|
137
|
+
|
138
|
+
def rsa_sha256(key)
|
139
|
+
digest = ::OpenSSL::Digest.new('sha256')
|
140
|
+
private_key = ::OpenSSL::PKey::RSA.new(key)
|
141
|
+
Workato::Extension::Binary.new(private_key.sign(digest, self))
|
136
142
|
end
|
137
143
|
|
138
144
|
def md5_hexdigest
|
@@ -140,17 +146,17 @@ module Workato
|
|
140
146
|
end
|
141
147
|
|
142
148
|
def sha1
|
143
|
-
Binary.new(::Digest::SHA1.digest(self))
|
149
|
+
Extension::Binary.new(::Digest::SHA1.digest(self))
|
144
150
|
end
|
145
151
|
|
146
152
|
def hmac_sha1(key)
|
147
153
|
digest = ::OpenSSL::Digest.new('sha1')
|
148
|
-
Binary.new(::OpenSSL::HMAC.digest(digest, key, self))
|
154
|
+
Extension::Binary.new(::OpenSSL::HMAC.digest(digest, key, self))
|
149
155
|
end
|
150
156
|
|
151
157
|
def hmac_md5(key)
|
152
158
|
digest = ::OpenSSL::Digest.new('md5')
|
153
|
-
Binary.new(::OpenSSL::HMAC.digest(digest, key, self))
|
159
|
+
Extension::Binary.new(::OpenSSL::HMAC.digest(digest, key, self))
|
154
160
|
end
|
155
161
|
|
156
162
|
def from_xml
|
@@ -228,7 +234,7 @@ module Workato
|
|
228
234
|
end
|
229
235
|
|
230
236
|
def as_string(encoding)
|
231
|
-
String.new(self, encoding: encoding).encode(encoding, invalid: :replace, undef: :replace)
|
237
|
+
::String.new(self, encoding: encoding).encode(encoding, invalid: :replace, undef: :replace)
|
232
238
|
end
|
233
239
|
|
234
240
|
def as_utf8
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Workato
|
4
|
+
module Web
|
5
|
+
class App
|
6
|
+
CODE_PATH = '/code'
|
7
|
+
CALLBACK_PATH = '/oauth/callback'
|
8
|
+
|
9
|
+
def call(env)
|
10
|
+
req = Rack::Request.new(env)
|
11
|
+
case req.path_info
|
12
|
+
when /#{CODE_PATH}/
|
13
|
+
[200, { 'Content-Type' => 'text/plain' }, [@code.to_s]]
|
14
|
+
when /#{CALLBACK_PATH}/
|
15
|
+
@code = req.params['code']
|
16
|
+
[200, { 'Content-Type' => 'text/plain' }, ['We stored response code. Now you can close the browser window']]
|
17
|
+
else
|
18
|
+
[404, { 'Content-Type' => 'text/plain' }, ['404: Not Found']]
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/templates/Gemfile.erb
CHANGED
@@ -5,13 +5,19 @@ RSpec.describe 'actions/<%= name %>', :vcr do
|
|
5
5
|
# Spec describes the most commons blocks of an action. Remove describes that you don't need.
|
6
6
|
# Learn more: https://docs.workato.com/developing-connectors/sdk/cli/reference/rspec-commands.html
|
7
7
|
|
8
|
+
subject(:output) { connector.actions.<%= name %>(input) }
|
9
|
+
|
8
10
|
let(:connector) { Workato::Connector::Sdk::Connector.from_file('connector.rb', settings) }
|
9
11
|
let(:settings) { Workato::Connector::Sdk::Settings.from_default_file }
|
12
|
+
let(:input) { {} }
|
13
|
+
|
14
|
+
pending 'add some examples for action output'
|
10
15
|
|
16
|
+
# Or add more fine grained tests for each action definition block
|
11
17
|
let(:action) { connector.actions.<%= name %> }
|
12
18
|
|
13
19
|
describe 'execute' do
|
14
|
-
subject(:output) { action.execute(settings, input, extended_input_schema, extended_output_schema) }
|
20
|
+
subject(:output) { action.execute(settings, input, extended_input_schema, extended_output_schema, continue) }
|
15
21
|
|
16
22
|
pending 'add some examples'
|
17
23
|
end
|
@@ -6,9 +6,15 @@ RSpec.describe 'triggers/<%= name %>', :vcr do
|
|
6
6
|
# Depending on the type of your trigger remove describes that you don't need.
|
7
7
|
# Learn more: https://docs.workato.com/developing-connectors/sdk/cli/reference/rspec-commands.html
|
8
8
|
|
9
|
+
subject(:output) { connector.triggers.<%= name %>(input) }
|
10
|
+
|
9
11
|
let(:connector) { Workato::Connector::Sdk::Connector.from_file('connector.rb', settings) }
|
10
12
|
let(:settings) { Workato::Connector::Sdk::Settings.from_default_file }
|
13
|
+
let(:input) { {} }
|
14
|
+
|
15
|
+
pending 'add some examples for trigger output'
|
11
16
|
|
17
|
+
# Or add more fine grained tests for each trigger definition block
|
12
18
|
let(:trigger) { connector.triggers.<%= name %> }
|
13
19
|
|
14
20
|
describe 'webhook_subscribe' do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: workato-connector-sdk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pavel Abolmasov
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-12-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - '='
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: 0.4.2
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: em-http-request
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1.0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '1.0'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: gyoku
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -80,20 +94,34 @@ dependencies:
|
|
80
94
|
- - '='
|
81
95
|
- !ruby/object:Gem::Version
|
82
96
|
version: 1.5.6
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: launchy
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '2.0'
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '2.0'
|
83
111
|
- !ruby/object:Gem::Dependency
|
84
112
|
name: loofah
|
85
113
|
requirement: !ruby/object:Gem::Requirement
|
86
114
|
requirements:
|
87
115
|
- - '='
|
88
116
|
- !ruby/object:Gem::Version
|
89
|
-
version: 2.
|
117
|
+
version: 2.12.0
|
90
118
|
type: :runtime
|
91
119
|
prerelease: false
|
92
120
|
version_requirements: !ruby/object:Gem::Requirement
|
93
121
|
requirements:
|
94
122
|
- - '='
|
95
123
|
- !ruby/object:Gem::Version
|
96
|
-
version: 2.
|
124
|
+
version: 2.12.0
|
97
125
|
- !ruby/object:Gem::Dependency
|
98
126
|
name: net-http-digest_auth
|
99
127
|
requirement: !ruby/object:Gem::Requirement
|
@@ -122,6 +150,34 @@ dependencies:
|
|
122
150
|
- - '='
|
123
151
|
- !ruby/object:Gem::Version
|
124
152
|
version: 1.10.10
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: oauth2
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - "~>"
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '1.0'
|
160
|
+
type: :runtime
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - "~>"
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '1.0'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: rack
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - "~>"
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '2.0'
|
174
|
+
type: :runtime
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - "~>"
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '2.0'
|
125
181
|
- !ruby/object:Gem::Dependency
|
126
182
|
name: rest-client
|
127
183
|
requirement: !ruby/object:Gem::Requirement
|
@@ -178,6 +234,20 @@ dependencies:
|
|
178
234
|
- - "~>"
|
179
235
|
- !ruby/object:Gem::Version
|
180
236
|
version: '1.0'
|
237
|
+
- !ruby/object:Gem::Dependency
|
238
|
+
name: webrick
|
239
|
+
requirement: !ruby/object:Gem::Requirement
|
240
|
+
requirements:
|
241
|
+
- - "~>"
|
242
|
+
- !ruby/object:Gem::Version
|
243
|
+
version: '1.0'
|
244
|
+
type: :runtime
|
245
|
+
prerelease: false
|
246
|
+
version_requirements: !ruby/object:Gem::Requirement
|
247
|
+
requirements:
|
248
|
+
- - "~>"
|
249
|
+
- !ruby/object:Gem::Version
|
250
|
+
version: '1.0'
|
181
251
|
- !ruby/object:Gem::Dependency
|
182
252
|
name: bundler
|
183
253
|
requirement: !ruby/object:Gem::Requirement
|
@@ -294,11 +364,13 @@ files:
|
|
294
364
|
- lib/workato/cli/generators/connector_generator.rb
|
295
365
|
- lib/workato/cli/generators/master_key_generator.rb
|
296
366
|
- lib/workato/cli/main.rb
|
367
|
+
- lib/workato/cli/oauth2_command.rb
|
297
368
|
- lib/workato/cli/push_command.rb
|
298
369
|
- lib/workato/connector/sdk.rb
|
299
370
|
- lib/workato/connector/sdk/account_properties.rb
|
300
371
|
- lib/workato/connector/sdk/action.rb
|
301
372
|
- lib/workato/connector/sdk/block_invocation_refinements.rb
|
373
|
+
- lib/workato/connector/sdk/connection.rb
|
302
374
|
- lib/workato/connector/sdk/connector.rb
|
303
375
|
- lib/workato/connector/sdk/dsl.rb
|
304
376
|
- lib/workato/connector/sdk/dsl/account_property.rb
|
@@ -314,6 +386,17 @@ files:
|
|
314
386
|
- lib/workato/connector/sdk/object_definitions.rb
|
315
387
|
- lib/workato/connector/sdk/operation.rb
|
316
388
|
- lib/workato/connector/sdk/request.rb
|
389
|
+
- lib/workato/connector/sdk/schema.rb
|
390
|
+
- lib/workato/connector/sdk/schema/field/array.rb
|
391
|
+
- lib/workato/connector/sdk/schema/field/convertors.rb
|
392
|
+
- lib/workato/connector/sdk/schema/field/date.rb
|
393
|
+
- lib/workato/connector/sdk/schema/field/date_time.rb
|
394
|
+
- lib/workato/connector/sdk/schema/field/integer.rb
|
395
|
+
- lib/workato/connector/sdk/schema/field/number.rb
|
396
|
+
- lib/workato/connector/sdk/schema/field/object.rb
|
397
|
+
- lib/workato/connector/sdk/schema/field/string.rb
|
398
|
+
- lib/workato/connector/sdk/schema/type/time.rb
|
399
|
+
- lib/workato/connector/sdk/schema/type/unicode_string.rb
|
317
400
|
- lib/workato/connector/sdk/settings.rb
|
318
401
|
- lib/workato/connector/sdk/summarize.rb
|
319
402
|
- lib/workato/connector/sdk/trigger.rb
|
@@ -336,6 +419,7 @@ files:
|
|
336
419
|
- lib/workato/extension/time.rb
|
337
420
|
- lib/workato/testing/vcr_encrypted_cassette_serializer.rb
|
338
421
|
- lib/workato/testing/vcr_multipart_body_matcher.rb
|
422
|
+
- lib/workato/web/app.rb
|
339
423
|
- templates/.rspec.erb
|
340
424
|
- templates/Gemfile.erb
|
341
425
|
- templates/connector.rb.erb
|
@@ -346,10 +430,14 @@ files:
|
|
346
430
|
- templates/spec/pick_list_spec.rb.erb
|
347
431
|
- templates/spec/spec_helper.rb.erb
|
348
432
|
- templates/spec/trigger_spec.rb.erb
|
349
|
-
homepage: https://
|
433
|
+
homepage: https://www.workato.com/
|
350
434
|
licenses:
|
351
435
|
- MIT
|
352
|
-
metadata:
|
436
|
+
metadata:
|
437
|
+
bug_tracker_uri: https://support.workato.com/
|
438
|
+
documentation_uri: https://docs.workato.com/developing-connectors/sdk/cli.html
|
439
|
+
homepage_uri: https://www.workato.com/
|
440
|
+
source_code_uri: https://github.com/workato/workato-connector-sdk
|
353
441
|
post_install_message:
|
354
442
|
rdoc_options: []
|
355
443
|
require_paths:
|
@@ -365,7 +453,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
365
453
|
- !ruby/object:Gem::Version
|
366
454
|
version: '0'
|
367
455
|
requirements: []
|
368
|
-
rubygems_version: 3.
|
456
|
+
rubygems_version: 3.2.3
|
369
457
|
signing_key:
|
370
458
|
specification_version: 4
|
371
459
|
summary: Gem for running adapter's code outside Workato infrastructure
|