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
@@ -0,0 +1,110 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>
7
+ Top Level Namespace
8
+
9
+ &mdash; Documentation by YARD 0.9.26
10
+
11
+ </title>
12
+
13
+ <link rel="stylesheet" href="css/style.css" type="text/css" />
14
+
15
+ <link rel="stylesheet" href="css/common.css" type="text/css" />
16
+
17
+ <script type="text/javascript">
18
+ pathId = "";
19
+ relpath = '';
20
+ </script>
21
+
22
+
23
+ <script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
24
+
25
+ <script type="text/javascript" charset="utf-8" src="js/app.js"></script>
26
+
27
+
28
+ </head>
29
+ <body>
30
+ <div class="nav_wrap">
31
+ <iframe id="nav" src="class_list.html?1"></iframe>
32
+ <div id="resizer"></div>
33
+ </div>
34
+
35
+ <div id="main" tabindex="-1">
36
+ <div id="header">
37
+ <div id="menu">
38
+
39
+ <a href="_index.html">Index</a> &raquo;
40
+
41
+
42
+ <span class="title">Top Level Namespace</span>
43
+
44
+ </div>
45
+
46
+ <div id="search">
47
+
48
+ <a class="full_list_link" id="class_list_link"
49
+ href="class_list.html">
50
+
51
+ <svg width="24" height="24">
52
+ <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
53
+ <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
54
+ <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
55
+ </svg>
56
+ </a>
57
+
58
+ </div>
59
+ <div class="clear"></div>
60
+ </div>
61
+
62
+ <div id="content"><h1>Top Level Namespace
63
+
64
+
65
+
66
+ </h1>
67
+ <div class="box_info">
68
+
69
+
70
+
71
+
72
+
73
+
74
+
75
+
76
+
77
+
78
+
79
+ </div>
80
+
81
+ <h2>Defined Under Namespace</h2>
82
+ <p class="children">
83
+
84
+
85
+ <strong class="modules">Modules:</strong> <span class='object_link'><a href="ShotgridApiRuby.html" title="ShotgridApiRuby (module)">ShotgridApiRuby</a></span>
86
+
87
+
88
+
89
+
90
+ </p>
91
+
92
+
93
+
94
+
95
+
96
+
97
+
98
+
99
+
100
+ </div>
101
+
102
+ <div id="footer">
103
+ Generated on Tue Oct 12 21:57:54 2021 by
104
+ <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
105
+ 0.9.26 (ruby-3.0.2).
106
+ </div>
107
+
108
+ </div>
109
+ </body>
110
+ </html>
@@ -1,14 +1,28 @@
1
+ # typed: strict
1
2
  # frozen_string_literal: true
2
3
 
3
4
  module ShotgridApiRuby
4
5
  # Faraday middleware responsible for authentication with
5
6
  # the shotgrid site
6
7
  class Auth < Faraday::Middleware
8
+ extend T::Sig
9
+
7
10
  # Validate auth parameters format
8
11
  module Validator
12
+ extend T::Sig
13
+
9
14
  # Validate auth parameters format
10
- #
11
- # @param []
15
+ sig do
16
+ params(
17
+ client_id: T.nilable(String),
18
+ client_secret: T.nilable(String),
19
+ username: T.nilable(String),
20
+ password: T.nilable(String),
21
+ session_token: T.nilable(String),
22
+ refresh_token: T.nilable(String),
23
+ )
24
+ .returns(T::Boolean)
25
+ end
12
26
  def self.valid?(
13
27
  client_id: nil,
14
28
  client_secret: nil,
@@ -17,60 +31,97 @@ module ShotgridApiRuby
17
31
  session_token: nil,
18
32
  refresh_token: nil
19
33
  )
20
- (client_id && client_secret) || (password && username) ||
21
- session_token || refresh_token
34
+ !!(
35
+ (client_id && client_secret) || (password && username) ||
36
+ session_token || refresh_token
37
+ )
22
38
  end
23
39
  end
24
40
 
25
- def initialize(app = nil, options = {})
41
+ sig do
42
+ params(
43
+ app: T.untyped,
44
+ options: {
45
+ site_url: T.nilable(String),
46
+ auth: T.nilable(Types::AuthType),
47
+ },
48
+ ).void
49
+ end
50
+ def initialize(app = nil, options = { auth: nil, site_url: nil })
26
51
  raise 'missing auth' unless options[:auth]
27
52
  raise 'missing site_url' unless options[:site_url]
28
53
  unless Validator.valid?(**options[:auth]&.transform_keys(&:to_sym))
29
54
  raise 'Auth not valid'
30
55
  end
31
56
 
32
- super(app)
57
+ @site_url = T.let(options[:site_url], String)
58
+ @client_id = T.let(options[:auth][:client_id], T.nilable(String))
59
+ @client_secret = T.let(options[:auth][:client_secret], T.nilable(String))
60
+ @username = T.let(options[:auth][:username], T.nilable(String))
61
+ @password = T.let(options[:auth][:password], T.nilable(String))
62
+ @session_token = T.let(options[:auth][:session_token], T.nilable(String))
63
+ @refresh_token = T.let(options[:auth][:refresh_token], T.nilable(String))
64
+ @app =
65
+ T.let(
66
+ nil,
67
+ T.nilable(T.any(Faraday::Middleware, VCR::Middleware::Faraday)),
68
+ )
69
+ @auth_type = T.let(nil, T.nilable(String))
70
+ @auth_params = T.let(nil, T.nilable(String))
71
+ @auth_url = T.let(nil, T.nilable(String))
72
+ @access_token = T.let(nil, T.nilable(String))
73
+ @token_expiry = T.let(nil, T.nilable(Time))
33
74
 
34
- @site_url = options[:site_url]
35
- @client_id = options[:auth][:client_id]
36
- @client_secret = options[:auth][:client_secret]
37
- @username = options[:auth][:username]
38
- @password = options[:auth][:password]
39
- @session_token = options[:auth][:session_token]
40
- @refresh_token = options[:auth][:refresh_token]
75
+ super(app)
41
76
  end
42
77
 
43
- attr_reader :client_id,
44
- :client_secret,
45
- :site_url,
46
- :username,
47
- :password,
48
- :session_token,
49
- :refresh_token
78
+ sig { returns(T.nilable(String)) }
79
+ attr_reader :client_id
80
+
81
+ sig { returns(T.nilable(String)) }
82
+ attr_reader :client_secret
83
+
84
+ sig { returns(String) }
85
+ attr_reader :site_url
50
86
 
87
+ sig { returns(T.nilable(String)) }
88
+ attr_reader :username
89
+
90
+ sig { returns(T.nilable(String)) }
91
+ attr_reader :password
92
+
93
+ sig { returns(T.nilable(String)) }
94
+ attr_reader :session_token
95
+
96
+ sig { returns(T.nilable(String)) }
97
+ attr_reader :refresh_token
98
+
99
+ sig { returns(String) }
51
100
  def auth_type
52
101
  @auth_type ||=
53
- begin
54
- if refresh_token
55
- 'refresh_token'
56
- elsif client_id
57
- 'client_credentials'
58
- elsif username
59
- 'password'
60
- elsif session_token
61
- 'session_token'
62
- end
102
+ if refresh_token
103
+ 'refresh_token'
104
+ elsif client_id
105
+ 'client_credentials'
106
+ elsif username
107
+ 'password'
108
+ elsif session_token
109
+ 'session_token'
110
+ else
111
+ ''
63
112
  end
64
113
  end
65
114
 
115
+ sig { params(request_env: Faraday::Env).returns(Faraday::Response) }
66
116
  def call(request_env)
67
117
  request_env[:request_headers].merge!(std_headers)
68
118
 
69
- @app.call(request_env)
119
+ @app&.call(request_env)
70
120
  end
71
121
 
72
122
  private
73
123
 
124
+ sig { returns(String) }
74
125
  def auth_params
75
126
  @auth_params ||=
76
127
  begin
@@ -91,14 +142,18 @@ module ShotgridApiRuby
91
142
  end
92
143
  end
93
144
 
145
+ sig { returns(String) }
94
146
  def auth_url
95
147
  @auth_url ||= "#{site_url}/auth/access_token?#{auth_params}"
96
148
  end
97
149
 
150
+ sig { returns(String) }
98
151
  def access_token
99
- ((@access_token && Time.now < @token_expiry) || sign_in) && @access_token
152
+ sign_in if (!@access_token || Time.now > (@token_expiry || Time.now))
153
+ @access_token || ''
100
154
  end
101
155
 
156
+ sig { returns(String) }
102
157
  def sign_in
103
158
  resp =
104
159
  Faraday.post(auth_url) do |req|
@@ -114,11 +169,12 @@ module ShotgridApiRuby
114
169
  )
115
170
  end
116
171
 
117
- @access_token = resp_body['access_token']
118
172
  @token_expiry = Time.now + resp_body['expires_in']
119
173
  @refresh_token = resp_body['refresh_token']
174
+ @access_token = resp_body['access_token']
120
175
  end
121
176
 
177
+ sig { returns(T::Hash[String, String]) }
122
178
  def std_headers
123
179
  {
124
180
  'Accept' => 'application/json',
@@ -1,3 +1,4 @@
1
+ # typed: strict
1
2
  # frozen_string_literal: true
2
3
 
3
4
  module ShotgridApiRuby
@@ -5,12 +6,28 @@ module ShotgridApiRuby
5
6
  #
6
7
  # This should be only instanciated once to re-use tokens
7
8
  class Client
8
- # Faraday connection
9
- attr_reader :connection
9
+ extend T::Sig
10
10
 
11
+ sig do
12
+ params(
13
+ auth: Types::AuthType,
14
+ site_url: T.nilable(String),
15
+ shotgun_site: T.nilable(String),
16
+ shotgrid_site: T.nilable(String),
17
+ ).void
18
+ end
11
19
  def initialize(auth:, site_url: nil, shotgun_site: nil, shotgrid_site: nil)
12
20
  raise 'No site given' unless site_url || shotgun_site || shotgrid_site
13
- raise 'auth param not valid' unless auth && Auth::Validator.valid?(**auth)
21
+ if !Auth::Validator.valid?(
22
+ client_id: auth[:client_id],
23
+ client_secret: auth[:client_secret],
24
+ username: auth[:username],
25
+ password: auth[:password],
26
+ session_token: auth[:session_token],
27
+ refresh_token: auth[:refresh_token],
28
+ )
29
+ raise 'auth param not valid'
30
+ end
14
31
 
15
32
  site_url ||=
16
33
  if shotgun_site
@@ -20,31 +37,55 @@ module ShotgridApiRuby
20
37
  end
21
38
 
22
39
  @connection =
23
- Faraday.new(url: site_url) do |faraday|
24
- faraday.use(ShotgridApiRuby::Auth, auth: auth, site_url: site_url)
25
- faraday.adapter Faraday.default_adapter
26
- end
40
+ T.let(
41
+ Faraday.new(url: site_url) do |faraday|
42
+ faraday.use(ShotgridApiRuby::Auth, auth: auth, site_url: site_url)
43
+ faraday.adapter Faraday.default_adapter
44
+ end,
45
+ Faraday::Connection,
46
+ )
47
+ @preferences = T.let(nil, T.nilable(Preferences))
48
+ @server_info = T.let(nil, T.nilable(ServerInfo))
49
+ @entity_caller = T.let(nil, T.nilable(Entities))
27
50
  end
28
51
 
52
+ # Faraday connection
53
+ sig { returns(Faraday::Connection) }
54
+ attr_reader :connection
55
+
29
56
  # Access preferences APIs
57
+ sig { returns(Preferences) }
30
58
  def preferences
31
59
  @preferences = Preferences.new(connection)
32
60
  end
33
61
 
34
62
  # Access server_info APIs
63
+ sig { returns(ServerInfo) }
35
64
  def server_info
36
65
  @server_info || ServerInfo.new(connection)
37
66
  end
38
67
 
39
68
  # Access entities related APIs
69
+ sig { params(type: T.any(Symbol, String)).returns(Entities) }
40
70
  def entities(type)
41
71
  public_send(type)
42
72
  end
43
73
 
74
+ sig do
75
+ params(_name: T.untyped, _include_private: T.untyped).returns(TrueClass)
76
+ end
44
77
  def respond_to_missing?(_name, _include_private = false)
45
78
  true
46
79
  end
47
80
 
81
+ sig do
82
+ params(
83
+ name: T.any(String, Symbol),
84
+ args: T::Array[T.untyped],
85
+ block: T.nilable(Proc),
86
+ )
87
+ .returns(Entities)
88
+ end
48
89
  def method_missing(name, *args, &block)
49
90
  if args.empty?
50
91
  fname = formated_name(name)
@@ -67,10 +108,12 @@ module ShotgridApiRuby
67
108
 
68
109
  private
69
110
 
111
+ sig { params(name: T.any(String, Symbol)).returns(String) }
70
112
  def formated_name(name)
71
113
  name.to_s.camelize.singularize
72
114
  end
73
115
 
116
+ sig { params(type: T.any(String, Symbol)).returns(Entities) }
74
117
  def entities_aux(type)
75
118
  type = formated_name(type)
76
119
  @entity_caller = Entities.new(connection, type)