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.
Files changed (156) hide show
  1. checksums.yaml +4 -4
  2. data/.github/ISSUE_TEMPLATE/bug_report.md +38 -0
  3. data/.github/ISSUE_TEMPLATE/feature_request.md +20 -0
  4. data/.github/workflows/test_and_publish.yml +2 -0
  5. data/.github/workflows/test_only.yml +2 -0
  6. data/.gitignore +3 -0
  7. data/.overcommit.yml +9 -0
  8. data/.rubocop.yml +2 -0
  9. data/CHANGELOG.md +27 -1
  10. data/CODE_OF_CONDUCT.md +128 -0
  11. data/Gemfile +18 -0
  12. data/Guardfile +2 -2
  13. data/bin/generate_and_add_documentation +1 -0
  14. data/bin/generate_sorbet_coverage +3 -0
  15. data/bin/prettirun +1 -1
  16. data/bin/sorbet_check +1 -0
  17. data/bin/tapioca +29 -0
  18. data/docs/ShotgridApiRuby/Auth/Validator.html +319 -0
  19. data/docs/ShotgridApiRuby/Auth.html +1079 -0
  20. data/docs/ShotgridApiRuby/Client.html +933 -0
  21. data/docs/ShotgridApiRuby/Entities/Params/TooComplexFiltersError.html +124 -0
  22. data/docs/ShotgridApiRuby/Entities/Params.html +1377 -0
  23. data/docs/ShotgridApiRuby/Entities/Schema.html +646 -0
  24. data/docs/ShotgridApiRuby/Entities/Summarize/Summary.html +401 -0
  25. data/docs/ShotgridApiRuby/Entities/Summarize.html +775 -0
  26. data/docs/ShotgridApiRuby/Entities.html +2461 -0
  27. data/docs/ShotgridApiRuby/Entity.html +935 -0
  28. data/docs/ShotgridApiRuby/Preferences.html +417 -0
  29. data/docs/ShotgridApiRuby/ServerInfo.html +415 -0
  30. data/docs/ShotgridApiRuby/ShotgridCallError.html +328 -0
  31. data/docs/ShotgridApiRuby/Types.html +136 -0
  32. data/docs/ShotgridApiRuby.html +307 -0
  33. data/docs/_index.html +253 -0
  34. data/docs/class_list.html +51 -0
  35. data/docs/css/common.css +1 -0
  36. data/docs/css/full_list.css +58 -0
  37. data/docs/css/style.css +497 -0
  38. data/docs/file.README.html +578 -0
  39. data/docs/file_list.html +56 -0
  40. data/docs/frames.html +17 -0
  41. data/docs/index.html +578 -0
  42. data/docs/js/app.js +314 -0
  43. data/docs/js/full_list.js +216 -0
  44. data/docs/js/jquery.js +4 -0
  45. data/docs/method_list.html +643 -0
  46. data/docs/top-level-namespace.html +110 -0
  47. data/lib/shotgrid_api_ruby/auth.rb +89 -33
  48. data/lib/shotgrid_api_ruby/client.rb +50 -7
  49. data/lib/shotgrid_api_ruby/entities/params.rb +304 -65
  50. data/lib/shotgrid_api_ruby/entities/schema.rb +18 -3
  51. data/lib/shotgrid_api_ruby/entities/summarize.rb +39 -7
  52. data/lib/shotgrid_api_ruby/entities.rb +118 -29
  53. data/lib/shotgrid_api_ruby/entity.rb +29 -12
  54. data/lib/shotgrid_api_ruby/preferences.rb +7 -1
  55. data/lib/shotgrid_api_ruby/server_info.rb +7 -1
  56. data/lib/shotgrid_api_ruby/shotgrid_call_error.rb +5 -1
  57. data/lib/shotgrid_api_ruby/types/auth_type.rb +23 -0
  58. data/lib/shotgrid_api_ruby/version.rb +2 -1
  59. data/lib/shotgrid_api_ruby.rb +20 -2
  60. data/shotgrid_api_ruby.gemspec +3 -11
  61. data/sorbet/config +6 -0
  62. data/sorbet/rbi/faraday.rbi +20 -0
  63. data/sorbet/rbi/gems/activesupport@6.1.4.1.rbi +3770 -0
  64. data/sorbet/rbi/gems/ast@2.4.2.rbi +54 -0
  65. data/sorbet/rbi/gems/backport@1.2.0.rbi +8 -0
  66. data/sorbet/rbi/gems/benchmark@0.1.1.rbi +65 -0
  67. data/sorbet/rbi/gems/bundler-audit@0.8.0.rbi +8 -0
  68. data/sorbet/rbi/gems/byebug@11.1.3.rbi +1569 -0
  69. data/sorbet/rbi/gems/childprocess@4.1.0.rbi +8 -0
  70. data/sorbet/rbi/gems/coderay@1.1.3.rbi +1005 -0
  71. data/sorbet/rbi/gems/colorize@0.8.1.rbi +39 -0
  72. data/sorbet/rbi/gems/commander@4.6.0.rbi +8 -0
  73. data/sorbet/rbi/gems/concurrent-ruby@1.1.9.rbi +2403 -0
  74. data/sorbet/rbi/gems/diff-lcs@1.4.4.rbi +8 -0
  75. data/sorbet/rbi/gems/docile@1.4.0.rbi +54 -0
  76. data/sorbet/rbi/gems/dotenv@2.7.6.rbi +88 -0
  77. data/sorbet/rbi/gems/e2mmap@0.1.0.rbi +8 -0
  78. data/sorbet/rbi/gems/faker@2.19.0.rbi +2513 -0
  79. data/sorbet/rbi/gems/faraday-em_http@1.0.0.rbi +101 -0
  80. data/sorbet/rbi/gems/faraday-em_synchrony@1.0.0.rbi +78 -0
  81. data/sorbet/rbi/gems/faraday-excon@1.1.0.rbi +77 -0
  82. data/sorbet/rbi/gems/faraday-httpclient@1.0.1.rbi +73 -0
  83. data/sorbet/rbi/gems/faraday-net_http@1.0.1.rbi +82 -0
  84. data/sorbet/rbi/gems/faraday-net_http_persistent@1.2.0.rbi +72 -0
  85. data/sorbet/rbi/gems/faraday-patron@1.0.0.rbi +74 -0
  86. data/sorbet/rbi/gems/faraday-rack@1.0.0.rbi +73 -0
  87. data/sorbet/rbi/gems/faraday@1.7.0.rbi +783 -0
  88. data/sorbet/rbi/gems/ffi@1.15.3.rbi +8 -0
  89. data/sorbet/rbi/gems/formatador@0.3.0.rbi +8 -0
  90. data/sorbet/rbi/gems/guard-compat@1.2.1.rbi +8 -0
  91. data/sorbet/rbi/gems/guard-rspec@4.7.3.rbi +8 -0
  92. data/sorbet/rbi/gems/guard@2.18.0.rbi +8 -0
  93. data/sorbet/rbi/gems/haml@5.2.2.rbi +8 -0
  94. data/sorbet/rbi/gems/highline@2.0.3.rbi +8 -0
  95. data/sorbet/rbi/gems/i18n@1.8.10.rbi +584 -0
  96. data/sorbet/rbi/gems/iniparse@1.5.0.rbi +8 -0
  97. data/sorbet/rbi/gems/jaro_winkler@1.5.4.rbi +8 -0
  98. data/sorbet/rbi/gems/kramdown-parser-gfm@1.1.0.rbi +8 -0
  99. data/sorbet/rbi/gems/kramdown@2.3.1.rbi +8 -0
  100. data/sorbet/rbi/gems/listen@3.7.0.rbi +476 -0
  101. data/sorbet/rbi/gems/lumberjack@1.2.8.rbi +8 -0
  102. data/sorbet/rbi/gems/method_source@1.0.0.rbi +72 -0
  103. data/sorbet/rbi/gems/minitest@5.14.4.rbi +344 -0
  104. data/sorbet/rbi/gems/multipart-post@2.1.1.rbi +69 -0
  105. data/sorbet/rbi/gems/nenv@0.3.0.rbi +8 -0
  106. data/sorbet/rbi/gems/nokogiri@1.12.3.rbi +8 -0
  107. data/sorbet/rbi/gems/notiffany@0.1.3.rbi +8 -0
  108. data/sorbet/rbi/gems/overcommit@0.58.0.rbi +8 -0
  109. data/sorbet/rbi/gems/parallel@1.20.1.rbi +8 -0
  110. data/sorbet/rbi/gems/parlour@6.0.1.rbi +1610 -0
  111. data/sorbet/rbi/gems/parser@3.0.2.0.rbi +1731 -0
  112. data/sorbet/rbi/gems/prettier@1.6.1.rbi +8 -0
  113. data/sorbet/rbi/gems/pry-byebug@3.9.0.rbi +461 -0
  114. data/sorbet/rbi/gems/pry@0.13.1.rbi +2553 -0
  115. data/sorbet/rbi/gems/racc@1.5.2.rbi +47 -0
  116. data/sorbet/rbi/gems/rainbow@3.0.0.rbi +153 -0
  117. data/sorbet/rbi/gems/rake@13.0.6.rbi +807 -0
  118. data/sorbet/rbi/gems/rb-fsevent@0.11.0.rbi +8 -0
  119. data/sorbet/rbi/gems/rb-inotify@0.10.1.rbi +8 -0
  120. data/sorbet/rbi/gems/regexp_parser@2.1.1.rbi +8 -0
  121. data/sorbet/rbi/gems/reverse_markdown@2.0.0.rbi +8 -0
  122. data/sorbet/rbi/gems/rexml@3.2.5.rbi +672 -0
  123. data/sorbet/rbi/gems/rspec-core@3.10.1.rbi +2500 -0
  124. data/sorbet/rbi/gems/rspec-expectations@3.10.1.rbi +1574 -0
  125. data/sorbet/rbi/gems/rspec-mocks@3.10.2.rbi +1462 -0
  126. data/sorbet/rbi/gems/rspec-support@3.10.2.rbi +510 -0
  127. data/sorbet/rbi/gems/rspec@3.10.0.rbi +39 -0
  128. data/sorbet/rbi/gems/rspec_in_context@1.1.0.3.rbi +196 -0
  129. data/sorbet/rbi/gems/rubocop-ast@1.11.0.rbi +8 -0
  130. data/sorbet/rbi/gems/rubocop-faker@1.1.0.rbi +8 -0
  131. data/sorbet/rbi/gems/rubocop-performance@1.11.5.rbi +8 -0
  132. data/sorbet/rbi/gems/rubocop-sorbet@0.6.2.rbi +8 -0
  133. data/sorbet/rbi/gems/rubocop@1.20.0.rbi +8 -0
  134. data/sorbet/rbi/gems/ruby-progressbar@1.11.0.rbi +8 -0
  135. data/sorbet/rbi/gems/ruby2_keywords@0.0.5.rbi +8 -0
  136. data/sorbet/rbi/gems/shellany@0.0.1.rbi +8 -0
  137. data/sorbet/rbi/gems/simplecov-html@0.12.3.rbi +89 -0
  138. data/sorbet/rbi/gems/simplecov@0.21.2.rbi +577 -0
  139. data/sorbet/rbi/gems/simplecov_json_formatter@0.1.3.rbi +8 -0
  140. data/sorbet/rbi/gems/solargraph@0.43.0.rbi +8 -0
  141. data/sorbet/rbi/gems/spoom@1.1.2.rbi +1204 -0
  142. data/sorbet/rbi/gems/tapioca@0.4.25.rbi +1239 -0
  143. data/sorbet/rbi/gems/temple@0.8.2.rbi +8 -0
  144. data/sorbet/rbi/gems/thor@1.1.0.rbi +838 -0
  145. data/sorbet/rbi/gems/tilt@2.0.10.rbi +8 -0
  146. data/sorbet/rbi/gems/timecop@0.9.4.rbi +82 -0
  147. data/sorbet/rbi/gems/tzinfo@2.0.4.rbi +857 -0
  148. data/sorbet/rbi/gems/unicode-display_width@2.0.0.rbi +8 -0
  149. data/sorbet/rbi/gems/unparser@0.6.0.rbi +8 -0
  150. data/sorbet/rbi/gems/vcr@6.0.0.rbi +782 -0
  151. data/sorbet/rbi/gems/yard-sorbet@0.5.3.rbi +8 -0
  152. data/sorbet/rbi/gems/yard@0.9.26.rbi +8 -0
  153. data/sorbet/rbi/gems/zeitwerk@2.4.2.rbi +173 -0
  154. data/sorbet/tapioca/config +0 -0
  155. data/sorbet/tapioca/require.rb +5 -0
  156. 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
- attr_reader :connection, :type
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
- Struct.new(:type, :attributes, :relationships, :id, :links) do
7
- def method_missing(name, *args, &block)
8
- if attributes.respond_to?(name)
9
- define_singleton_method(name) { attributes.public_send(name) }
10
- public_send(name)
11
- else
12
- super
13
- end
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
- def respond_to_missing?(name, _private_methods = false)
17
- attributes.respond_to?(name) || super
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
@@ -1,5 +1,6 @@
1
+ # typed: strict
1
2
  # frozen_string_literal: true
2
3
 
3
4
  module ShotgridApiRuby
4
- VERSION = '0.1.3'
5
+ VERSION = '0.2.0.1'
5
6
  end
@@ -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
- def self.new(**args)
15
- Client.new(**args)
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
 
@@ -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.5.0')
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 'guard-rspec', '> 4.7'
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,6 @@
1
+ --dir
2
+ .
3
+ --ignore=node_modules
4
+ --ignore=sorbet/rbi/gems/tapioca@0.4.25.rbi
5
+ --ignore=tmp
6
+ --ignore=vendor
@@ -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