shotgrid_api_ruby 0.1.3.1 → 0.2.0.4

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