shotgrid_api_ruby 0.1.3 → 0.2.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/ISSUE_TEMPLATE/bug_report.md +38 -0
- data/.github/ISSUE_TEMPLATE/feature_request.md +20 -0
- data/.github/workflows/test_and_publish.yml +2 -0
- data/.github/workflows/test_only.yml +2 -0
- data/.gitignore +3 -0
- data/.overcommit.yml +9 -0
- data/.rubocop.yml +2 -0
- data/CHANGELOG.md +27 -1
- data/CODE_OF_CONDUCT.md +128 -0
- data/Gemfile +18 -0
- data/Guardfile +2 -2
- data/bin/generate_and_add_documentation +1 -0
- data/bin/generate_sorbet_coverage +3 -0
- data/bin/prettirun +1 -1
- data/bin/sorbet_check +1 -0
- data/bin/tapioca +29 -0
- data/docs/ShotgridApiRuby/Auth/Validator.html +319 -0
- data/docs/ShotgridApiRuby/Auth.html +1079 -0
- data/docs/ShotgridApiRuby/Client.html +933 -0
- data/docs/ShotgridApiRuby/Entities/Params/TooComplexFiltersError.html +124 -0
- data/docs/ShotgridApiRuby/Entities/Params.html +1377 -0
- data/docs/ShotgridApiRuby/Entities/Schema.html +646 -0
- data/docs/ShotgridApiRuby/Entities/Summarize/Summary.html +401 -0
- data/docs/ShotgridApiRuby/Entities/Summarize.html +775 -0
- data/docs/ShotgridApiRuby/Entities.html +2461 -0
- data/docs/ShotgridApiRuby/Entity.html +935 -0
- data/docs/ShotgridApiRuby/Preferences.html +417 -0
- data/docs/ShotgridApiRuby/ServerInfo.html +415 -0
- data/docs/ShotgridApiRuby/ShotgridCallError.html +328 -0
- data/docs/ShotgridApiRuby/Types.html +136 -0
- data/docs/ShotgridApiRuby.html +307 -0
- data/docs/_index.html +253 -0
- data/docs/class_list.html +51 -0
- data/docs/css/common.css +1 -0
- data/docs/css/full_list.css +58 -0
- data/docs/css/style.css +497 -0
- data/docs/file.README.html +578 -0
- data/docs/file_list.html +56 -0
- data/docs/frames.html +17 -0
- data/docs/index.html +578 -0
- data/docs/js/app.js +314 -0
- data/docs/js/full_list.js +216 -0
- data/docs/js/jquery.js +4 -0
- data/docs/method_list.html +643 -0
- data/docs/top-level-namespace.html +110 -0
- data/lib/shotgrid_api_ruby/auth.rb +89 -33
- data/lib/shotgrid_api_ruby/client.rb +50 -7
- data/lib/shotgrid_api_ruby/entities/params.rb +304 -65
- data/lib/shotgrid_api_ruby/entities/schema.rb +18 -3
- data/lib/shotgrid_api_ruby/entities/summarize.rb +39 -7
- data/lib/shotgrid_api_ruby/entities.rb +118 -29
- data/lib/shotgrid_api_ruby/entity.rb +29 -12
- data/lib/shotgrid_api_ruby/preferences.rb +7 -1
- data/lib/shotgrid_api_ruby/server_info.rb +7 -1
- data/lib/shotgrid_api_ruby/shotgrid_call_error.rb +5 -1
- data/lib/shotgrid_api_ruby/types/auth_type.rb +23 -0
- data/lib/shotgrid_api_ruby/version.rb +2 -1
- data/lib/shotgrid_api_ruby.rb +20 -2
- data/shotgrid_api_ruby.gemspec +3 -11
- data/sorbet/config +6 -0
- data/sorbet/rbi/faraday.rbi +20 -0
- data/sorbet/rbi/gems/activesupport@6.1.4.1.rbi +3770 -0
- data/sorbet/rbi/gems/ast@2.4.2.rbi +54 -0
- data/sorbet/rbi/gems/backport@1.2.0.rbi +8 -0
- data/sorbet/rbi/gems/benchmark@0.1.1.rbi +65 -0
- data/sorbet/rbi/gems/bundler-audit@0.8.0.rbi +8 -0
- data/sorbet/rbi/gems/byebug@11.1.3.rbi +1569 -0
- data/sorbet/rbi/gems/childprocess@4.1.0.rbi +8 -0
- data/sorbet/rbi/gems/coderay@1.1.3.rbi +1005 -0
- data/sorbet/rbi/gems/colorize@0.8.1.rbi +39 -0
- data/sorbet/rbi/gems/commander@4.6.0.rbi +8 -0
- data/sorbet/rbi/gems/concurrent-ruby@1.1.9.rbi +2403 -0
- data/sorbet/rbi/gems/diff-lcs@1.4.4.rbi +8 -0
- data/sorbet/rbi/gems/docile@1.4.0.rbi +54 -0
- data/sorbet/rbi/gems/dotenv@2.7.6.rbi +88 -0
- data/sorbet/rbi/gems/e2mmap@0.1.0.rbi +8 -0
- data/sorbet/rbi/gems/faker@2.19.0.rbi +2513 -0
- data/sorbet/rbi/gems/faraday-em_http@1.0.0.rbi +101 -0
- data/sorbet/rbi/gems/faraday-em_synchrony@1.0.0.rbi +78 -0
- data/sorbet/rbi/gems/faraday-excon@1.1.0.rbi +77 -0
- data/sorbet/rbi/gems/faraday-httpclient@1.0.1.rbi +73 -0
- data/sorbet/rbi/gems/faraday-net_http@1.0.1.rbi +82 -0
- data/sorbet/rbi/gems/faraday-net_http_persistent@1.2.0.rbi +72 -0
- data/sorbet/rbi/gems/faraday-patron@1.0.0.rbi +74 -0
- data/sorbet/rbi/gems/faraday-rack@1.0.0.rbi +73 -0
- data/sorbet/rbi/gems/faraday@1.7.0.rbi +783 -0
- data/sorbet/rbi/gems/ffi@1.15.3.rbi +8 -0
- data/sorbet/rbi/gems/formatador@0.3.0.rbi +8 -0
- data/sorbet/rbi/gems/guard-compat@1.2.1.rbi +8 -0
- data/sorbet/rbi/gems/guard-rspec@4.7.3.rbi +8 -0
- data/sorbet/rbi/gems/guard@2.18.0.rbi +8 -0
- data/sorbet/rbi/gems/haml@5.2.2.rbi +8 -0
- data/sorbet/rbi/gems/highline@2.0.3.rbi +8 -0
- data/sorbet/rbi/gems/i18n@1.8.10.rbi +584 -0
- data/sorbet/rbi/gems/iniparse@1.5.0.rbi +8 -0
- data/sorbet/rbi/gems/jaro_winkler@1.5.4.rbi +8 -0
- data/sorbet/rbi/gems/kramdown-parser-gfm@1.1.0.rbi +8 -0
- data/sorbet/rbi/gems/kramdown@2.3.1.rbi +8 -0
- data/sorbet/rbi/gems/listen@3.7.0.rbi +476 -0
- data/sorbet/rbi/gems/lumberjack@1.2.8.rbi +8 -0
- data/sorbet/rbi/gems/method_source@1.0.0.rbi +72 -0
- data/sorbet/rbi/gems/minitest@5.14.4.rbi +344 -0
- data/sorbet/rbi/gems/multipart-post@2.1.1.rbi +69 -0
- data/sorbet/rbi/gems/nenv@0.3.0.rbi +8 -0
- data/sorbet/rbi/gems/nokogiri@1.12.3.rbi +8 -0
- data/sorbet/rbi/gems/notiffany@0.1.3.rbi +8 -0
- data/sorbet/rbi/gems/overcommit@0.58.0.rbi +8 -0
- data/sorbet/rbi/gems/parallel@1.20.1.rbi +8 -0
- data/sorbet/rbi/gems/parlour@6.0.1.rbi +1610 -0
- data/sorbet/rbi/gems/parser@3.0.2.0.rbi +1731 -0
- data/sorbet/rbi/gems/prettier@1.6.1.rbi +8 -0
- data/sorbet/rbi/gems/pry-byebug@3.9.0.rbi +461 -0
- data/sorbet/rbi/gems/pry@0.13.1.rbi +2553 -0
- data/sorbet/rbi/gems/racc@1.5.2.rbi +47 -0
- data/sorbet/rbi/gems/rainbow@3.0.0.rbi +153 -0
- data/sorbet/rbi/gems/rake@13.0.6.rbi +807 -0
- data/sorbet/rbi/gems/rb-fsevent@0.11.0.rbi +8 -0
- data/sorbet/rbi/gems/rb-inotify@0.10.1.rbi +8 -0
- data/sorbet/rbi/gems/regexp_parser@2.1.1.rbi +8 -0
- data/sorbet/rbi/gems/reverse_markdown@2.0.0.rbi +8 -0
- data/sorbet/rbi/gems/rexml@3.2.5.rbi +672 -0
- data/sorbet/rbi/gems/rspec-core@3.10.1.rbi +2500 -0
- data/sorbet/rbi/gems/rspec-expectations@3.10.1.rbi +1574 -0
- data/sorbet/rbi/gems/rspec-mocks@3.10.2.rbi +1462 -0
- data/sorbet/rbi/gems/rspec-support@3.10.2.rbi +510 -0
- data/sorbet/rbi/gems/rspec@3.10.0.rbi +39 -0
- data/sorbet/rbi/gems/rspec_in_context@1.1.0.3.rbi +196 -0
- data/sorbet/rbi/gems/rubocop-ast@1.11.0.rbi +8 -0
- data/sorbet/rbi/gems/rubocop-faker@1.1.0.rbi +8 -0
- data/sorbet/rbi/gems/rubocop-performance@1.11.5.rbi +8 -0
- data/sorbet/rbi/gems/rubocop-sorbet@0.6.2.rbi +8 -0
- data/sorbet/rbi/gems/rubocop@1.20.0.rbi +8 -0
- data/sorbet/rbi/gems/ruby-progressbar@1.11.0.rbi +8 -0
- data/sorbet/rbi/gems/ruby2_keywords@0.0.5.rbi +8 -0
- data/sorbet/rbi/gems/shellany@0.0.1.rbi +8 -0
- data/sorbet/rbi/gems/simplecov-html@0.12.3.rbi +89 -0
- data/sorbet/rbi/gems/simplecov@0.21.2.rbi +577 -0
- data/sorbet/rbi/gems/simplecov_json_formatter@0.1.3.rbi +8 -0
- data/sorbet/rbi/gems/solargraph@0.43.0.rbi +8 -0
- data/sorbet/rbi/gems/spoom@1.1.2.rbi +1204 -0
- data/sorbet/rbi/gems/tapioca@0.4.25.rbi +1239 -0
- data/sorbet/rbi/gems/temple@0.8.2.rbi +8 -0
- data/sorbet/rbi/gems/thor@1.1.0.rbi +838 -0
- data/sorbet/rbi/gems/tilt@2.0.10.rbi +8 -0
- data/sorbet/rbi/gems/timecop@0.9.4.rbi +82 -0
- data/sorbet/rbi/gems/tzinfo@2.0.4.rbi +857 -0
- data/sorbet/rbi/gems/unicode-display_width@2.0.0.rbi +8 -0
- data/sorbet/rbi/gems/unparser@0.6.0.rbi +8 -0
- data/sorbet/rbi/gems/vcr@6.0.0.rbi +782 -0
- data/sorbet/rbi/gems/yard-sorbet@0.5.3.rbi +8 -0
- data/sorbet/rbi/gems/yard@0.9.26.rbi +8 -0
- data/sorbet/rbi/gems/zeitwerk@2.4.2.rbi +173 -0
- data/sorbet/tapioca/config +0 -0
- data/sorbet/tapioca/require.rb +5 -0
- metadata +148 -128
@@ -1,16 +1,39 @@
|
|
1
|
+
# typed: strict
|
1
2
|
# frozen_string_literal: true
|
2
3
|
|
3
4
|
module ShotgridApiRuby
|
4
5
|
class Entities
|
6
|
+
extend T::Sig
|
7
|
+
|
8
|
+
sig do
|
9
|
+
params(connection: Faraday::Connection, type: T.any(String, Symbol)).void
|
10
|
+
end
|
5
11
|
def initialize(connection, type)
|
6
|
-
@connection = connection.dup
|
7
|
-
@type = type
|
8
|
-
@base_url_prefix = @connection.url_prefix
|
12
|
+
@connection = T.let(connection.dup, Faraday::Connection)
|
13
|
+
@type = T.let(type.to_s, String)
|
14
|
+
@base_url_prefix = T.let(@connection.url_prefix, URI)
|
9
15
|
@connection.url_prefix = "#{@connection.url_prefix}/entity/#{type}"
|
16
|
+
@schema_client = T.let(nil, T.nilable(Schema))
|
17
|
+
@summary_client = T.let(nil, T.nilable(Summarize))
|
10
18
|
end
|
11
19
|
|
12
|
-
|
20
|
+
sig { returns(Faraday::Connection) }
|
21
|
+
attr_reader :connection
|
22
|
+
|
23
|
+
sig { returns(String) }
|
24
|
+
attr_reader :type
|
13
25
|
|
26
|
+
sig do
|
27
|
+
params(
|
28
|
+
fields: Params::FIELDS_TYPE,
|
29
|
+
sort: Params::SORT_TYPE,
|
30
|
+
filter: Params::FILTERS_FIELD_TYPE,
|
31
|
+
retired: T.nilable(T::Boolean),
|
32
|
+
include_archived_projects: T.nilable(T::Boolean),
|
33
|
+
logical_operator: Params::LOGICAL_OPERATOR_TYPE,
|
34
|
+
)
|
35
|
+
.returns(T.nilable(Entity))
|
36
|
+
end
|
14
37
|
def first(
|
15
38
|
fields: nil,
|
16
39
|
sort: nil,
|
@@ -30,6 +53,15 @@ module ShotgridApiRuby
|
|
30
53
|
).first
|
31
54
|
end
|
32
55
|
|
56
|
+
sig do
|
57
|
+
params(
|
58
|
+
id: Integer,
|
59
|
+
fields: Params::FIELDS_TYPE,
|
60
|
+
retired: T.nilable(T::Boolean),
|
61
|
+
include_archived_projects: T.nilable(T::Boolean),
|
62
|
+
)
|
63
|
+
.returns(ShotgridApiRuby::Entity)
|
64
|
+
end
|
33
65
|
def find(id, fields: nil, retired: nil, include_archived_projects: nil)
|
34
66
|
params = Params.new
|
35
67
|
|
@@ -48,14 +80,18 @@ module ShotgridApiRuby
|
|
48
80
|
|
49
81
|
entity = resp_body['data']
|
50
82
|
Entity.new(
|
51
|
-
entity['type'],
|
52
|
-
OpenStruct.new(entity['attributes']),
|
53
|
-
entity['relationships'],
|
54
|
-
entity['id'],
|
55
|
-
entity['links'],
|
83
|
+
type: entity['type'],
|
84
|
+
attributes: OpenStruct.new(entity['attributes']),
|
85
|
+
relationships: entity['relationships'],
|
86
|
+
id: entity['id'],
|
87
|
+
links: entity['links'],
|
56
88
|
)
|
57
89
|
end
|
58
90
|
|
91
|
+
sig do
|
92
|
+
params(attributes: T::Hash[T.any(String, Symbol), T.untyped])
|
93
|
+
.returns(ShotgridApiRuby::Entity)
|
94
|
+
end
|
59
95
|
def create(attributes)
|
60
96
|
resp =
|
61
97
|
@connection.post('', attributes.to_json) do |req|
|
@@ -76,14 +112,18 @@ module ShotgridApiRuby
|
|
76
112
|
|
77
113
|
entity = resp_body['data']
|
78
114
|
Entity.new(
|
79
|
-
entity['type'],
|
80
|
-
OpenStruct.new(entity['attributes']),
|
81
|
-
entity['relationships'],
|
82
|
-
entity['id'],
|
83
|
-
entity['links'],
|
115
|
+
type: entity['type'],
|
116
|
+
attributes: OpenStruct.new(entity['attributes']),
|
117
|
+
relationships: entity['relationships'],
|
118
|
+
id: entity['id'],
|
119
|
+
links: entity['links'],
|
84
120
|
)
|
85
121
|
end
|
86
122
|
|
123
|
+
sig do
|
124
|
+
params(id: Integer, changes: T::Hash[T.any(String, Symbol), T.untyped])
|
125
|
+
.returns(ShotgridApiRuby::Entity)
|
126
|
+
end
|
87
127
|
def update(id, changes)
|
88
128
|
return find(id) if changes.empty?
|
89
129
|
|
@@ -106,14 +146,15 @@ module ShotgridApiRuby
|
|
106
146
|
|
107
147
|
entity = resp_body['data']
|
108
148
|
Entity.new(
|
109
|
-
entity['type'],
|
110
|
-
OpenStruct.new(entity['attributes']),
|
111
|
-
entity['relationships'],
|
112
|
-
entity['id'],
|
113
|
-
entity['links'],
|
149
|
+
type: entity['type'],
|
150
|
+
attributes: OpenStruct.new(entity['attributes']),
|
151
|
+
relationships: entity['relationships'],
|
152
|
+
id: entity['id'],
|
153
|
+
links: entity['links'],
|
114
154
|
)
|
115
155
|
end
|
116
156
|
|
157
|
+
sig { params(id: Integer).returns(TrueClass) }
|
117
158
|
def delete(id)
|
118
159
|
resp =
|
119
160
|
@connection.delete(id.to_s) do |req|
|
@@ -132,6 +173,7 @@ module ShotgridApiRuby
|
|
132
173
|
true
|
133
174
|
end
|
134
175
|
|
176
|
+
sig { params(id: Integer).returns(TrueClass) }
|
135
177
|
def revive(id)
|
136
178
|
resp = @connection.post("#{id}?revive=true")
|
137
179
|
|
@@ -147,6 +189,19 @@ module ShotgridApiRuby
|
|
147
189
|
true
|
148
190
|
end
|
149
191
|
|
192
|
+
sig do
|
193
|
+
params(
|
194
|
+
fields: Params::FIELDS_TYPE,
|
195
|
+
logical_operator: Params::LOGICAL_OPERATOR_TYPE,
|
196
|
+
sort: Params::SORT_TYPE,
|
197
|
+
filter: Params::FILTERS_FIELD_TYPE,
|
198
|
+
page: Params::PAGE_TYPE,
|
199
|
+
page_size: Params::PAGE_SIZE_TYPE,
|
200
|
+
retired: T.nilable(T::Boolean),
|
201
|
+
include_archived_projects: T.nilable(T::Boolean),
|
202
|
+
)
|
203
|
+
.returns(T::Array[Entity])
|
204
|
+
end
|
150
205
|
def all(
|
151
206
|
fields: nil,
|
152
207
|
logical_operator: 'and',
|
@@ -192,15 +247,28 @@ module ShotgridApiRuby
|
|
192
247
|
|
193
248
|
resp_body['data'].map do |entity|
|
194
249
|
Entity.new(
|
195
|
-
entity['type'],
|
196
|
-
OpenStruct.new(entity['attributes']),
|
197
|
-
entity['relationships'],
|
198
|
-
entity['id'],
|
199
|
-
entity['links'],
|
250
|
+
type: entity['type'],
|
251
|
+
attributes: OpenStruct.new(entity['attributes']),
|
252
|
+
relationships: entity['relationships'],
|
253
|
+
id: entity['id'],
|
254
|
+
links: entity['links'],
|
200
255
|
)
|
201
256
|
end
|
202
257
|
end
|
203
258
|
|
259
|
+
sig do
|
260
|
+
params(
|
261
|
+
fields: Params::FIELDS_TYPE,
|
262
|
+
logical_operator: Params::LOGICAL_OPERATOR_TYPE,
|
263
|
+
sort: Params::SORT_TYPE,
|
264
|
+
filter: Params::FILTERS_FIELD_TYPE,
|
265
|
+
page: Params::PAGE_TYPE,
|
266
|
+
page_size: Params::PAGE_SIZE_TYPE,
|
267
|
+
retired: T.nilable(T::Boolean),
|
268
|
+
include_archived_projects: T.nilable(T::Boolean),
|
269
|
+
)
|
270
|
+
.returns(T::Array[Entity])
|
271
|
+
end
|
204
272
|
def search(
|
205
273
|
fields: nil,
|
206
274
|
logical_operator: 'and',
|
@@ -258,35 +326,56 @@ module ShotgridApiRuby
|
|
258
326
|
|
259
327
|
resp_body['data'].map do |entity|
|
260
328
|
Entity.new(
|
261
|
-
entity['type'],
|
262
|
-
OpenStruct.new(entity['attributes']),
|
263
|
-
entity['relationships'],
|
264
|
-
entity['id'],
|
265
|
-
entity['links'],
|
329
|
+
type: entity['type'],
|
330
|
+
attributes: OpenStruct.new(entity['attributes']),
|
331
|
+
relationships: entity['relationships'],
|
332
|
+
id: entity['id'],
|
333
|
+
links: entity['links'],
|
266
334
|
)
|
267
335
|
end
|
268
336
|
end
|
269
337
|
|
338
|
+
sig { returns(Schema) }
|
270
339
|
def schema_client
|
271
340
|
@schema_client ||= Schema.new(connection, type, @base_url_prefix)
|
272
341
|
end
|
273
342
|
|
343
|
+
sig { returns(OpenStruct) }
|
274
344
|
def schema
|
275
345
|
schema_client.read
|
276
346
|
end
|
277
347
|
|
348
|
+
sig { returns(OpenStruct) }
|
278
349
|
def fields
|
279
350
|
schema_client.fields
|
280
351
|
end
|
281
352
|
|
353
|
+
sig { returns(Summarize) }
|
282
354
|
def summary_client
|
283
355
|
@summary_client ||= Summarize.new(connection, type, @base_url_prefix)
|
284
356
|
end
|
285
357
|
|
358
|
+
sig do
|
359
|
+
params(
|
360
|
+
filter: Params::FILTERS_FIELD_TYPE,
|
361
|
+
logical_operator: Params::LOGICAL_OPERATOR_TYPE,
|
362
|
+
)
|
363
|
+
.returns(T.untyped)
|
364
|
+
end
|
286
365
|
def count(filter: nil, logical_operator: 'and')
|
287
366
|
summary_client.count(filter: filter, logical_operator: logical_operator)
|
288
367
|
end
|
289
368
|
|
369
|
+
sig do
|
370
|
+
params(
|
371
|
+
filter: Params::FILTERS_FIELD_TYPE,
|
372
|
+
grouping: Params::GROUPING_FIELD_TYPE,
|
373
|
+
summary_fields: Params::SUMMARY_FILEDS_TYPE,
|
374
|
+
logical_operator: Params::LOGICAL_OPERATOR_TYPE,
|
375
|
+
include_archived_projects: T.nilable(T::Boolean),
|
376
|
+
)
|
377
|
+
.returns(Summarize::Summary)
|
378
|
+
end
|
290
379
|
def summarize(
|
291
380
|
filter: nil,
|
292
381
|
grouping: nil,
|
@@ -1,20 +1,37 @@
|
|
1
|
+
# typed: strict
|
1
2
|
# frozen_string_literal: true
|
2
3
|
|
3
4
|
module ShotgridApiRuby
|
4
5
|
# Represent each entity returned by Shotgrid
|
5
|
-
Entity
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
end
|
6
|
+
class Entity < T::Struct
|
7
|
+
extend T::Sig
|
8
|
+
|
9
|
+
# .new(:type, :attributes, :relationships, :id, :links) do
|
10
|
+
const :type, String
|
11
|
+
const :attributes, OpenStruct
|
12
|
+
const :relationships, T::Hash[T.untyped, T.untyped]
|
13
|
+
const :id, Integer
|
14
|
+
const :links, T::Hash[String, String]
|
15
15
|
|
16
|
-
|
17
|
-
|
16
|
+
sig do
|
17
|
+
params(name: T.any(String, Symbol), args: T.untyped, block: T.untyped)
|
18
|
+
.returns(T.untyped)
|
19
|
+
end
|
20
|
+
def method_missing(name, *args, &block)
|
21
|
+
if attributes.respond_to?(name)
|
22
|
+
define_singleton_method(name) { attributes.public_send(name) }
|
23
|
+
public_send(name)
|
24
|
+
else
|
25
|
+
super
|
18
26
|
end
|
19
27
|
end
|
28
|
+
|
29
|
+
sig do
|
30
|
+
params(name: T.any(String, Symbol), _private_methods: T.untyped)
|
31
|
+
.returns(T::Boolean)
|
32
|
+
end
|
33
|
+
def respond_to_missing?(name, _private_methods = false)
|
34
|
+
attributes.respond_to?(name) || super
|
35
|
+
end
|
36
|
+
end
|
20
37
|
end
|
@@ -1,14 +1,20 @@
|
|
1
|
+
# typed: strict
|
1
2
|
# frozen_string_literal: true
|
2
3
|
|
3
4
|
module ShotgridApiRuby
|
4
5
|
class Preferences
|
6
|
+
extend T::Sig
|
7
|
+
|
8
|
+
sig { params(connection: Faraday::Connection).void }
|
5
9
|
def initialize(connection)
|
6
|
-
@connection = connection.dup
|
10
|
+
@connection = T.let(connection.dup, Faraday::Connection)
|
7
11
|
@connection.url_prefix = "#{@connection.url_prefix}/preferences"
|
8
12
|
end
|
9
13
|
|
14
|
+
sig { returns(Faraday::Connection) }
|
10
15
|
attr_reader :connection
|
11
16
|
|
17
|
+
sig { returns(OpenStruct) }
|
12
18
|
def all
|
13
19
|
resp = @connection.get
|
14
20
|
resp_body = JSON.parse(resp.body)
|
@@ -1,13 +1,19 @@
|
|
1
|
+
# typed: strict
|
1
2
|
# frozen_string_literal: true
|
2
3
|
|
3
4
|
module ShotgridApiRuby
|
4
5
|
class ServerInfo
|
6
|
+
extend T::Sig
|
7
|
+
|
8
|
+
sig { params(connection: Faraday::Connection).void }
|
5
9
|
def initialize(connection)
|
6
|
-
@connection = connection
|
10
|
+
@connection = T.let(connection, Faraday::Connection)
|
7
11
|
end
|
8
12
|
|
13
|
+
sig { returns(Faraday::Connection) }
|
9
14
|
attr_reader :connection
|
10
15
|
|
16
|
+
sig { returns(OpenStruct) }
|
11
17
|
def get
|
12
18
|
resp = @connection.get
|
13
19
|
resp_body = JSON.parse(resp.body)
|
@@ -1,14 +1,18 @@
|
|
1
|
+
# typed: strict
|
1
2
|
require 'forwardable'
|
2
3
|
|
3
4
|
module ShotgridApiRuby
|
4
5
|
class ShotgridCallError < StandardError
|
6
|
+
extend T::Sig
|
5
7
|
extend Forwardable
|
6
8
|
|
9
|
+
sig { params(response: T.untyped, message: String).void }
|
7
10
|
def initialize(response:, message:)
|
8
|
-
@response = response
|
11
|
+
@response = T.let(response, T.untyped)
|
9
12
|
super(message)
|
10
13
|
end
|
11
14
|
|
15
|
+
sig { returns(T.untyped) }
|
12
16
|
attr_reader :response
|
13
17
|
def_delegators :response, :status
|
14
18
|
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# typed: strict
|
2
|
+
|
3
|
+
module ShotgridApiRuby
|
4
|
+
module Types
|
5
|
+
AuthType =
|
6
|
+
T.type_alias do
|
7
|
+
T.any(
|
8
|
+
{ client_id: String, client_secret: String },
|
9
|
+
{ 'client_id' => String, :client_secret => String },
|
10
|
+
{ :client_id => String, 'client_secret' => String },
|
11
|
+
{ 'client_id' => String, 'client_secret' => String },
|
12
|
+
{ username: String, password: String },
|
13
|
+
{ 'username' => String, :password => String },
|
14
|
+
{ :username => String, 'password' => String },
|
15
|
+
{ 'username' => String, 'password' => String },
|
16
|
+
{ refresh_token: String },
|
17
|
+
{ 'refresh_token' => String },
|
18
|
+
{ session_token: String },
|
19
|
+
{ 'session_token' => String },
|
20
|
+
)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/lib/shotgrid_api_ruby.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# typed: strict
|
1
2
|
# frozen_string_literal: true
|
2
3
|
|
3
4
|
# zeitwerk will take care of auto loading files based on their name :)
|
@@ -5,14 +6,31 @@ require 'zeitwerk'
|
|
5
6
|
require 'active_support/core_ext/string/inflections'
|
6
7
|
require 'ostruct'
|
7
8
|
require 'faraday'
|
9
|
+
require 'sorbet-runtime'
|
8
10
|
require 'json'
|
9
11
|
|
10
12
|
loader = Zeitwerk::Loader.for_gem
|
11
13
|
loader.setup # ready!
|
12
14
|
|
13
15
|
module ShotgridApiRuby
|
14
|
-
|
15
|
-
|
16
|
+
extend T::Sig
|
17
|
+
|
18
|
+
sig do
|
19
|
+
params(
|
20
|
+
auth: ShotgridApiRuby::Types::AuthType,
|
21
|
+
site_url: T.nilable(String),
|
22
|
+
shotgun_site: T.nilable(String),
|
23
|
+
shotgrid_site: T.nilable(String),
|
24
|
+
)
|
25
|
+
.returns(Client)
|
26
|
+
end
|
27
|
+
def self.new(auth:, site_url: nil, shotgun_site: nil, shotgrid_site: nil)
|
28
|
+
Client.new(
|
29
|
+
auth: auth,
|
30
|
+
site_url: site_url,
|
31
|
+
shotgun_site: shotgun_site,
|
32
|
+
shotgrid_site: shotgrid_site,
|
33
|
+
)
|
16
34
|
end
|
17
35
|
end
|
18
36
|
|
data/shotgrid_api_ruby.gemspec
CHANGED
@@ -15,7 +15,7 @@ Gem::Specification.new do |spec|
|
|
15
15
|
"Gem to facilitate the interaction with Shotgrid's REST API."
|
16
16
|
spec.homepage = 'https://github.com/shotgunsoftware/shotgrid_api_ruby'
|
17
17
|
spec.license = 'MIT'
|
18
|
-
spec.required_ruby_version = Gem::Requirement.new('>= 2.
|
18
|
+
spec.required_ruby_version = Gem::Requirement.new('>= 2.6.0')
|
19
19
|
|
20
20
|
spec.metadata['homepage_uri'] = spec.homepage
|
21
21
|
spec.metadata['source_code_uri'] =
|
@@ -35,25 +35,17 @@ Gem::Specification.new do |spec|
|
|
35
35
|
|
36
36
|
spec.add_dependency 'activesupport'
|
37
37
|
spec.add_dependency 'faraday', '~> 1'
|
38
|
+
spec.add_dependency 'sorbet-runtime'
|
38
39
|
spec.add_dependency 'zeitwerk', '~> 2.2'
|
39
40
|
|
40
41
|
spec.add_development_dependency 'bundler'
|
41
|
-
spec.add_development_dependency 'bundler-audit'
|
42
42
|
spec.add_development_dependency 'dotenv'
|
43
43
|
spec.add_development_dependency 'faker', '> 1.8'
|
44
|
-
spec.add_development_dependency '
|
45
|
-
spec.add_development_dependency 'overcommit'
|
46
|
-
spec.add_development_dependency 'prettier'
|
47
|
-
spec.add_development_dependency 'pry'
|
44
|
+
spec.add_development_dependency 'pry-byebug'
|
48
45
|
spec.add_development_dependency 'rake'
|
49
46
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
50
47
|
spec.add_development_dependency 'rspec_in_context', '> 1'
|
51
|
-
spec.add_development_dependency 'rubocop'
|
52
|
-
spec.add_development_dependency 'rubocop-faker'
|
53
|
-
spec.add_development_dependency 'rubocop-performance'
|
54
48
|
spec.add_development_dependency 'simplecov', '> 0.16'
|
55
|
-
spec.add_development_dependency 'solargraph'
|
56
49
|
spec.add_development_dependency 'timecop'
|
57
50
|
spec.add_development_dependency 'vcr'
|
58
|
-
spec.add_development_dependency 'yard'
|
59
51
|
end
|
data/sorbet/config
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
# This RBI is here for patching generated method from Faraday.
|
2
|
+
# From: https://github.com/sorbet/sorbet-typed/tree/master/lib/faraday/all
|
3
|
+
# typed: true
|
4
|
+
module Faraday
|
5
|
+
sig do
|
6
|
+
params(
|
7
|
+
url: String,
|
8
|
+
body: T.any(String, T.nilable(T::Hash[Object, Object])),
|
9
|
+
headers: T.nilable(T::Hash[Object, String]),
|
10
|
+
block: T.nilable(T.proc.params(req: Request).void),
|
11
|
+
)
|
12
|
+
.returns(Response)
|
13
|
+
end
|
14
|
+
def self.post(url, body = nil, headers = nil, &block); end
|
15
|
+
|
16
|
+
class Request
|
17
|
+
def headers; end
|
18
|
+
def headers=(hash); end
|
19
|
+
end
|
20
|
+
end
|