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.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +57 -30
  3. data/exe/workato +12 -1
  4. data/lib/workato/cli/edit_command.rb +1 -3
  5. data/lib/workato/cli/exec_command.rb +21 -5
  6. data/lib/workato/cli/generate_command.rb +1 -2
  7. data/lib/workato/cli/generators/connector_generator.rb +4 -1
  8. data/lib/workato/cli/main.rb +50 -3
  9. data/lib/workato/cli/oauth2_command.rb +180 -0
  10. data/lib/workato/cli/push_command.rb +36 -24
  11. data/lib/workato/connector/sdk/action.rb +52 -4
  12. data/lib/workato/connector/sdk/connection.rb +144 -0
  13. data/lib/workato/connector/sdk/connector.rb +24 -9
  14. data/lib/workato/connector/sdk/dsl/time.rb +8 -1
  15. data/lib/workato/connector/sdk/dsl/workato_code_lib.rb +4 -4
  16. data/lib/workato/connector/sdk/errors.rb +13 -0
  17. data/lib/workato/connector/sdk/object_definitions.rb +10 -10
  18. data/lib/workato/connector/sdk/operation.rb +37 -39
  19. data/lib/workato/connector/sdk/request.rb +11 -7
  20. data/lib/workato/connector/sdk/schema/field/array.rb +25 -0
  21. data/lib/workato/connector/sdk/schema/field/convertors.rb +189 -0
  22. data/lib/workato/connector/sdk/schema/field/date.rb +28 -0
  23. data/lib/workato/connector/sdk/schema/field/date_time.rb +28 -0
  24. data/lib/workato/connector/sdk/schema/field/integer.rb +27 -0
  25. data/lib/workato/connector/sdk/schema/field/number.rb +27 -0
  26. data/lib/workato/connector/sdk/schema/field/object.rb +25 -0
  27. data/lib/workato/connector/sdk/schema/field/string.rb +26 -0
  28. data/lib/workato/connector/sdk/schema/type/time.rb +53 -0
  29. data/lib/workato/connector/sdk/schema/type/unicode_string.rb +22 -0
  30. data/lib/workato/connector/sdk/schema.rb +230 -0
  31. data/lib/workato/connector/sdk/settings.rb +6 -3
  32. data/lib/workato/connector/sdk/trigger.rb +25 -0
  33. data/lib/workato/connector/sdk/version.rb +1 -1
  34. data/lib/workato/connector/sdk.rb +1 -0
  35. data/lib/workato/extension/string.rb +16 -10
  36. data/lib/workato/web/app.rb +23 -0
  37. data/templates/Gemfile.erb +1 -0
  38. data/templates/spec/action_spec.rb.erb +7 -1
  39. data/templates/spec/trigger_spec.rb.erb +6 -0
  40. 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] = new_settings
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
@@ -3,7 +3,7 @@
3
3
  module Workato
4
4
  module Connector
5
5
  module Sdk
6
- VERSION = '0.1.0'
6
+ VERSION = '0.3.0'
7
7
  end
8
8
  end
9
9
  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
@@ -5,6 +5,7 @@ source 'https://rubygems.org'
5
5
  gem 'byebug'
6
6
  gem 'rspec'
7
7
  gem 'timecop'
8
+ gem 'tzinfo-data', platforms: %i[mingw mswin x64_mingw jruby]
8
9
  gem 'vcr'
9
10
  gem 'webmock'
10
11
  gem 'workato-connector-sdk'
@@ -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.1.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-09-15 00:00:00.000000000 Z
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.9.1
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.9.1
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://docs.workato.com/developing-connectors/sdk.html
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.0.8
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