shotgrid_api_ruby 0.1.3 → 0.2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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