shotgun_api_ruby 0.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.
- checksums.yaml +7 -0
- data/.gitignore +11 -0
- data/.overcommit.yml +12 -0
- data/.rspec +3 -0
- data/.rubocop-http---relaxed-ruby-style-rubocop-yml +174 -0
- data/.rubocop.yml +64 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/.travis.yml +7 -0
- data/Gemfile +6 -0
- data/Gemfile.lock +91 -0
- data/LICENSE.txt +21 -0
- data/README.md +233 -0
- data/Rakefile +8 -0
- data/bin/console +15 -0
- data/bin/setup +7 -0
- data/lib/shotgun_api_ruby/auth.rb +103 -0
- data/lib/shotgun_api_ruby/client.rb +55 -0
- data/lib/shotgun_api_ruby/entities.rb +107 -0
- data/lib/shotgun_api_ruby/entity.rb +21 -0
- data/lib/shotgun_api_ruby/version.rb +5 -0
- data/lib/shotgun_api_ruby.rb +17 -0
- data/shotgun_api_ruby.gemspec +43 -0
- metadata +221 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: e2163b85f62993d2674a47792d3370ebcbf1a6c283e915c781bc27801868a172
|
|
4
|
+
data.tar.gz: e26ff2d7d7beae08aaa041f893bbb0f46eb44bd305313d576c2407a99a5e4123
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 5956601d851995c92204f03541b5c5e7e07a428df8170884d976b01388b1acfe4022d5781cea92510d6ef83e99ef25c5caa983b02a7d602267970afa3caf889f
|
|
7
|
+
data.tar.gz: 33c191b51f8ea193eedb15f5655b51d453173c41e86c0da1f8540e5d08c396e04522aa89fd8f66ea286ccf3d6df6bf3a28df4ddff6e5f77264cb1038bc6f1278
|
data/.gitignore
ADDED
data/.overcommit.yml
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
PreCommit:
|
|
2
|
+
RuboCop:
|
|
3
|
+
enabled: true
|
|
4
|
+
command: ['bundle', 'exec', 'rubocop'] # Invoke within Bundler context
|
|
5
|
+
BundleOutdated:
|
|
6
|
+
enabled: true
|
|
7
|
+
BundleAudit:
|
|
8
|
+
enabled: true
|
|
9
|
+
PrePush:
|
|
10
|
+
RSpec:
|
|
11
|
+
enabled: true
|
|
12
|
+
command: ['bundle', 'exec', 'rspec', '-f', 'p'] # Invoke within Bundler context
|
data/.rspec
ADDED
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
# Relaxed.Ruby.Style
|
|
2
|
+
## Version 2.4
|
|
3
|
+
|
|
4
|
+
Style/Alias:
|
|
5
|
+
Enabled: false
|
|
6
|
+
StyleGuide: https://relaxed.ruby.style/#stylealias
|
|
7
|
+
|
|
8
|
+
Style/AsciiComments:
|
|
9
|
+
Enabled: false
|
|
10
|
+
StyleGuide: https://relaxed.ruby.style/#styleasciicomments
|
|
11
|
+
|
|
12
|
+
Style/BeginBlock:
|
|
13
|
+
Enabled: false
|
|
14
|
+
StyleGuide: https://relaxed.ruby.style/#stylebeginblock
|
|
15
|
+
|
|
16
|
+
Style/BlockDelimiters:
|
|
17
|
+
Enabled: false
|
|
18
|
+
StyleGuide: https://relaxed.ruby.style/#styleblockdelimiters
|
|
19
|
+
|
|
20
|
+
Style/CommentAnnotation:
|
|
21
|
+
Enabled: false
|
|
22
|
+
StyleGuide: https://relaxed.ruby.style/#stylecommentannotation
|
|
23
|
+
|
|
24
|
+
Style/Documentation:
|
|
25
|
+
Enabled: false
|
|
26
|
+
StyleGuide: https://relaxed.ruby.style/#styledocumentation
|
|
27
|
+
|
|
28
|
+
Layout/DotPosition:
|
|
29
|
+
Enabled: false
|
|
30
|
+
StyleGuide: https://relaxed.ruby.style/#layoutdotposition
|
|
31
|
+
|
|
32
|
+
Style/DoubleNegation:
|
|
33
|
+
Enabled: false
|
|
34
|
+
StyleGuide: https://relaxed.ruby.style/#styledoublenegation
|
|
35
|
+
|
|
36
|
+
Style/EndBlock:
|
|
37
|
+
Enabled: false
|
|
38
|
+
StyleGuide: https://relaxed.ruby.style/#styleendblock
|
|
39
|
+
|
|
40
|
+
Style/FormatString:
|
|
41
|
+
Enabled: false
|
|
42
|
+
StyleGuide: https://relaxed.ruby.style/#styleformatstring
|
|
43
|
+
|
|
44
|
+
Style/IfUnlessModifier:
|
|
45
|
+
Enabled: false
|
|
46
|
+
StyleGuide: https://relaxed.ruby.style/#styleifunlessmodifier
|
|
47
|
+
|
|
48
|
+
Style/Lambda:
|
|
49
|
+
Enabled: false
|
|
50
|
+
StyleGuide: https://relaxed.ruby.style/#stylelambda
|
|
51
|
+
|
|
52
|
+
Style/ModuleFunction:
|
|
53
|
+
Enabled: false
|
|
54
|
+
StyleGuide: https://relaxed.ruby.style/#stylemodulefunction
|
|
55
|
+
|
|
56
|
+
Style/MultilineBlockChain:
|
|
57
|
+
Enabled: false
|
|
58
|
+
StyleGuide: https://relaxed.ruby.style/#stylemultilineblockchain
|
|
59
|
+
|
|
60
|
+
Style/NegatedIf:
|
|
61
|
+
Enabled: false
|
|
62
|
+
StyleGuide: https://relaxed.ruby.style/#stylenegatedif
|
|
63
|
+
|
|
64
|
+
Style/NegatedWhile:
|
|
65
|
+
Enabled: false
|
|
66
|
+
StyleGuide: https://relaxed.ruby.style/#stylenegatedwhile
|
|
67
|
+
|
|
68
|
+
Style/NumericPredicate:
|
|
69
|
+
Enabled: false
|
|
70
|
+
StyleGuide: https://relaxed.ruby.style/#stylenumericpredicate
|
|
71
|
+
|
|
72
|
+
Style/ParallelAssignment:
|
|
73
|
+
Enabled: false
|
|
74
|
+
StyleGuide: https://relaxed.ruby.style/#styleparallelassignment
|
|
75
|
+
|
|
76
|
+
Style/PercentLiteralDelimiters:
|
|
77
|
+
Enabled: false
|
|
78
|
+
StyleGuide: https://relaxed.ruby.style/#stylepercentliteraldelimiters
|
|
79
|
+
|
|
80
|
+
Style/PerlBackrefs:
|
|
81
|
+
Enabled: false
|
|
82
|
+
StyleGuide: https://relaxed.ruby.style/#styleperlbackrefs
|
|
83
|
+
|
|
84
|
+
Style/Semicolon:
|
|
85
|
+
Enabled: false
|
|
86
|
+
StyleGuide: https://relaxed.ruby.style/#stylesemicolon
|
|
87
|
+
|
|
88
|
+
Style/SignalException:
|
|
89
|
+
Enabled: false
|
|
90
|
+
StyleGuide: https://relaxed.ruby.style/#stylesignalexception
|
|
91
|
+
|
|
92
|
+
Style/SingleLineBlockParams:
|
|
93
|
+
Enabled: false
|
|
94
|
+
StyleGuide: https://relaxed.ruby.style/#stylesinglelineblockparams
|
|
95
|
+
|
|
96
|
+
Style/SingleLineMethods:
|
|
97
|
+
Enabled: false
|
|
98
|
+
StyleGuide: https://relaxed.ruby.style/#stylesinglelinemethods
|
|
99
|
+
|
|
100
|
+
Layout/SpaceBeforeBlockBraces:
|
|
101
|
+
Enabled: false
|
|
102
|
+
StyleGuide: https://relaxed.ruby.style/#layoutspacebeforeblockbraces
|
|
103
|
+
|
|
104
|
+
Layout/SpaceInsideParens:
|
|
105
|
+
Enabled: false
|
|
106
|
+
StyleGuide: https://relaxed.ruby.style/#layoutspaceinsideparens
|
|
107
|
+
|
|
108
|
+
Style/SpecialGlobalVars:
|
|
109
|
+
Enabled: false
|
|
110
|
+
StyleGuide: https://relaxed.ruby.style/#stylespecialglobalvars
|
|
111
|
+
|
|
112
|
+
Style/StringLiterals:
|
|
113
|
+
Enabled: false
|
|
114
|
+
StyleGuide: https://relaxed.ruby.style/#stylestringliterals
|
|
115
|
+
|
|
116
|
+
Style/TrailingCommaInArguments:
|
|
117
|
+
Enabled: false
|
|
118
|
+
StyleGuide: https://relaxed.ruby.style/#styletrailingcommainarguments
|
|
119
|
+
|
|
120
|
+
Style/TrailingCommaInArrayLiteral:
|
|
121
|
+
Enabled: false
|
|
122
|
+
StyleGuide: https://relaxed.ruby.style/#styletrailingcommainarrayliteral
|
|
123
|
+
|
|
124
|
+
Style/TrailingCommaInHashLiteral:
|
|
125
|
+
Enabled: false
|
|
126
|
+
StyleGuide: https://relaxed.ruby.style/#styletrailingcommainhashliteral
|
|
127
|
+
|
|
128
|
+
Style/SymbolArray:
|
|
129
|
+
Enabled: false
|
|
130
|
+
StyleGuide: http://relaxed.ruby.style/#stylesymbolarray
|
|
131
|
+
|
|
132
|
+
Style/WhileUntilModifier:
|
|
133
|
+
Enabled: false
|
|
134
|
+
StyleGuide: https://relaxed.ruby.style/#stylewhileuntilmodifier
|
|
135
|
+
|
|
136
|
+
Style/WordArray:
|
|
137
|
+
Enabled: false
|
|
138
|
+
StyleGuide: https://relaxed.ruby.style/#stylewordarray
|
|
139
|
+
|
|
140
|
+
Lint/AmbiguousRegexpLiteral:
|
|
141
|
+
Enabled: false
|
|
142
|
+
StyleGuide: https://relaxed.ruby.style/#lintambiguousregexpliteral
|
|
143
|
+
|
|
144
|
+
Lint/AssignmentInCondition:
|
|
145
|
+
Enabled: false
|
|
146
|
+
StyleGuide: https://relaxed.ruby.style/#lintassignmentincondition
|
|
147
|
+
|
|
148
|
+
Metrics/AbcSize:
|
|
149
|
+
Enabled: false
|
|
150
|
+
|
|
151
|
+
Metrics/BlockNesting:
|
|
152
|
+
Enabled: false
|
|
153
|
+
|
|
154
|
+
Metrics/ClassLength:
|
|
155
|
+
Enabled: false
|
|
156
|
+
|
|
157
|
+
Metrics/ModuleLength:
|
|
158
|
+
Enabled: false
|
|
159
|
+
|
|
160
|
+
Metrics/CyclomaticComplexity:
|
|
161
|
+
Enabled: false
|
|
162
|
+
|
|
163
|
+
Metrics/LineLength:
|
|
164
|
+
Enabled: false
|
|
165
|
+
|
|
166
|
+
Metrics/MethodLength:
|
|
167
|
+
Enabled: false
|
|
168
|
+
|
|
169
|
+
Metrics/ParameterLists:
|
|
170
|
+
Enabled: false
|
|
171
|
+
|
|
172
|
+
Metrics/PerceivedComplexity:
|
|
173
|
+
Enabled: false
|
|
174
|
+
|
data/.rubocop.yml
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
inherit_from:
|
|
2
|
+
- http://relaxed.ruby.style/rubocop.yml
|
|
3
|
+
|
|
4
|
+
require:
|
|
5
|
+
- rubocop-performance
|
|
6
|
+
|
|
7
|
+
AllCops:
|
|
8
|
+
DisplayStyleGuide: true
|
|
9
|
+
DisplayCopNames: true
|
|
10
|
+
Exclude:
|
|
11
|
+
- 'db/schema.rb'
|
|
12
|
+
|
|
13
|
+
Style/GlobalVars:
|
|
14
|
+
Enabled: false
|
|
15
|
+
|
|
16
|
+
Layout/DotPosition:
|
|
17
|
+
Enabled: true
|
|
18
|
+
EnforcedStyle: trailing
|
|
19
|
+
|
|
20
|
+
Style/TrailingCommaInArrayLiteral:
|
|
21
|
+
Enabled: true
|
|
22
|
+
EnforcedStyleForMultiline: comma
|
|
23
|
+
|
|
24
|
+
Style/TrailingCommaInHashLiteral:
|
|
25
|
+
Enabled: true
|
|
26
|
+
EnforcedStyleForMultiline: comma
|
|
27
|
+
|
|
28
|
+
Layout/MultilineArrayLineBreaks:
|
|
29
|
+
Enabled: true
|
|
30
|
+
|
|
31
|
+
Layout/MultilineHashKeyLineBreaks:
|
|
32
|
+
Enabled: true
|
|
33
|
+
|
|
34
|
+
Layout/MultilineMethodArgumentLineBreaks:
|
|
35
|
+
Enabled: true
|
|
36
|
+
|
|
37
|
+
Layout/FirstArrayElementLineBreak:
|
|
38
|
+
Enabled: true
|
|
39
|
+
|
|
40
|
+
Layout/FirstHashElementLineBreak:
|
|
41
|
+
Enabled: true
|
|
42
|
+
|
|
43
|
+
Layout/FirstMethodArgumentLineBreak:
|
|
44
|
+
Enabled: true
|
|
45
|
+
|
|
46
|
+
Layout/MultilineAssignmentLayout:
|
|
47
|
+
Enabled: true
|
|
48
|
+
|
|
49
|
+
Metrics/LineLength:
|
|
50
|
+
Enabled: true
|
|
51
|
+
Max: 120
|
|
52
|
+
AutoCorrect: true
|
|
53
|
+
Exclude:
|
|
54
|
+
- Gemfile
|
|
55
|
+
- Guardfile
|
|
56
|
+
- spec/interactors/send_gdpr_response_spec.rb
|
|
57
|
+
|
|
58
|
+
Metrics/BlockLength:
|
|
59
|
+
Exclude:
|
|
60
|
+
- 'spec/**/*.rb'
|
|
61
|
+
- 'Guardfile'
|
|
62
|
+
- 'config/environments/*.rb'
|
|
63
|
+
- 'lib/tasks/*.rake'
|
|
64
|
+
- 'shotgun_api_ruby.gemspec'
|
data/.ruby-gemset
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
shotgun-ruby
|
data/.ruby-version
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
2.6.5
|
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
PATH
|
|
2
|
+
remote: .
|
|
3
|
+
specs:
|
|
4
|
+
shotgun_api_ruby (0.0.1)
|
|
5
|
+
activesupport
|
|
6
|
+
faraday (~> 0.17)
|
|
7
|
+
zeitwerk (~> 2.2)
|
|
8
|
+
|
|
9
|
+
GEM
|
|
10
|
+
remote: https://rubygems.org/
|
|
11
|
+
specs:
|
|
12
|
+
activesupport (6.0.0)
|
|
13
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
|
14
|
+
i18n (>= 0.7, < 2)
|
|
15
|
+
minitest (~> 5.1)
|
|
16
|
+
tzinfo (~> 1.1)
|
|
17
|
+
zeitwerk (~> 2.1, >= 2.1.8)
|
|
18
|
+
ast (2.4.0)
|
|
19
|
+
bundler-audit (0.6.1)
|
|
20
|
+
bundler (>= 1.2.0, < 3)
|
|
21
|
+
thor (~> 0.18)
|
|
22
|
+
childprocess (3.0.0)
|
|
23
|
+
coderay (1.1.2)
|
|
24
|
+
concurrent-ruby (1.1.5)
|
|
25
|
+
diff-lcs (1.3)
|
|
26
|
+
faraday (0.17.0)
|
|
27
|
+
multipart-post (>= 1.2, < 3)
|
|
28
|
+
i18n (1.7.0)
|
|
29
|
+
concurrent-ruby (~> 1.0)
|
|
30
|
+
iniparse (1.4.4)
|
|
31
|
+
jaro_winkler (1.5.3)
|
|
32
|
+
method_source (0.9.2)
|
|
33
|
+
minitest (5.12.2)
|
|
34
|
+
multipart-post (2.1.1)
|
|
35
|
+
overcommit (0.51.0)
|
|
36
|
+
childprocess (>= 0.6.3, < 4)
|
|
37
|
+
iniparse (~> 1.4)
|
|
38
|
+
parallel (1.18.0)
|
|
39
|
+
parser (2.6.5.0)
|
|
40
|
+
ast (~> 2.4.0)
|
|
41
|
+
pry (0.12.2)
|
|
42
|
+
coderay (~> 1.1.0)
|
|
43
|
+
method_source (~> 0.9.0)
|
|
44
|
+
rainbow (3.0.0)
|
|
45
|
+
rake (10.5.0)
|
|
46
|
+
rspec (3.9.0)
|
|
47
|
+
rspec-core (~> 3.9.0)
|
|
48
|
+
rspec-expectations (~> 3.9.0)
|
|
49
|
+
rspec-mocks (~> 3.9.0)
|
|
50
|
+
rspec-core (3.9.0)
|
|
51
|
+
rspec-support (~> 3.9.0)
|
|
52
|
+
rspec-expectations (3.9.0)
|
|
53
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
|
54
|
+
rspec-support (~> 3.9.0)
|
|
55
|
+
rspec-mocks (3.9.0)
|
|
56
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
|
57
|
+
rspec-support (~> 3.9.0)
|
|
58
|
+
rspec-support (3.9.0)
|
|
59
|
+
rubocop (0.75.1)
|
|
60
|
+
jaro_winkler (~> 1.5.1)
|
|
61
|
+
parallel (~> 1.10)
|
|
62
|
+
parser (>= 2.6)
|
|
63
|
+
rainbow (>= 2.2.2, < 4.0)
|
|
64
|
+
ruby-progressbar (~> 1.7)
|
|
65
|
+
unicode-display_width (>= 1.4.0, < 1.7)
|
|
66
|
+
rubocop-performance (1.5.0)
|
|
67
|
+
rubocop (>= 0.71.0)
|
|
68
|
+
ruby-progressbar (1.10.1)
|
|
69
|
+
thor (0.20.3)
|
|
70
|
+
thread_safe (0.3.6)
|
|
71
|
+
tzinfo (1.2.5)
|
|
72
|
+
thread_safe (~> 0.1)
|
|
73
|
+
unicode-display_width (1.6.0)
|
|
74
|
+
zeitwerk (2.2.0)
|
|
75
|
+
|
|
76
|
+
PLATFORMS
|
|
77
|
+
ruby
|
|
78
|
+
|
|
79
|
+
DEPENDENCIES
|
|
80
|
+
bundler (~> 2.0)
|
|
81
|
+
bundler-audit
|
|
82
|
+
overcommit
|
|
83
|
+
pry
|
|
84
|
+
rake (~> 10.0)
|
|
85
|
+
rspec (~> 3.0)
|
|
86
|
+
rubocop (~> 0.75)
|
|
87
|
+
rubocop-performance (~> 1.5)
|
|
88
|
+
shotgun_api_ruby!
|
|
89
|
+
|
|
90
|
+
BUNDLED WITH
|
|
91
|
+
2.0.2
|
data/LICENSE.txt
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
The MIT License (MIT)
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2019 Denis <Zaratan> Pasin
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
|
13
|
+
all copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
21
|
+
THE SOFTWARE.
|
data/README.md
ADDED
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
# ShotgunApiRuby
|
|
2
|
+
|
|
3
|
+
A gem to integrate with shotgun REST API easily.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
Add this line to your application's Gemfile:
|
|
8
|
+
|
|
9
|
+
```ruby
|
|
10
|
+
gem 'shotgun_api_ruby'
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
And then execute:
|
|
14
|
+
|
|
15
|
+
$ bundle
|
|
16
|
+
|
|
17
|
+
Or install it yourself as:
|
|
18
|
+
|
|
19
|
+
$ gem install shotgun_api_ruby
|
|
20
|
+
|
|
21
|
+
## Usage
|
|
22
|
+
|
|
23
|
+
### Client instantiation
|
|
24
|
+
|
|
25
|
+
For creating a new client you need to provide two values.
|
|
26
|
+
|
|
27
|
+
- One to identify the shotgun site:
|
|
28
|
+
- Can be `shotgun_site`: which is the `xxx` part in `https://xxx.shotgunstudio.com`
|
|
29
|
+
- Can be `site_url`: which is the full url to your site
|
|
30
|
+
- One to `auth` you see _Authentication_ lower in this guide.
|
|
31
|
+
|
|
32
|
+
Example:
|
|
33
|
+
|
|
34
|
+
```ruby
|
|
35
|
+
client = ShotgunApiRuby.new(shotgun_site: 'i-love-shotgun', auth: {client_id: 'my_nice_script', client_secret: 'CantTouchThis'})
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### Authentication
|
|
39
|
+
|
|
40
|
+
Any kind of authentication specified [here](https://developer.shotgunsoftware.com/rest-api/#authentication) is implemented
|
|
41
|
+
|
|
42
|
+
#### Client Credentials
|
|
43
|
+
|
|
44
|
+
```ruby
|
|
45
|
+
client = ShotgunApiRuby.new(shotgun_site: 'xxx', auth: {client_id: 'script_name', client_secret: 'script_secret'})
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
#### Password Credentials
|
|
49
|
+
|
|
50
|
+
```ruby
|
|
51
|
+
client = ShotgunApiRuby.new(shotgun_site: 'xxx', auth: {username: 'login', password: 'password'})
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
#### Session Token
|
|
55
|
+
|
|
56
|
+
**We highly advise not using this for a long term script as this won't be a stable value over time**
|
|
57
|
+
|
|
58
|
+
```ruby
|
|
59
|
+
client = ShotgunApiRuby.new(shotgun_site: 'xxx', auth: {session_token: 'session_token'})
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
#### Refresh Token
|
|
63
|
+
|
|
64
|
+
**We highly advise not using this for a long term script as this won't be a stable value over time**
|
|
65
|
+
|
|
66
|
+
```ruby
|
|
67
|
+
client = ShotgunApiRuby.new(shotgun_site: 'xxx', auth: {refresh_token: 'refresh_token'})
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### Entities
|
|
71
|
+
|
|
72
|
+
Querying entities is done by accessing the named method
|
|
73
|
+
|
|
74
|
+
```ruby
|
|
75
|
+
client.assets # => ShotgunApiRuby::Entities …
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
As entities can be user defined the client will try to answer to any unknown type with an entity call so any of those calls will returns the same thing:
|
|
79
|
+
|
|
80
|
+
```ruby
|
|
81
|
+
client.assets
|
|
82
|
+
client.asset
|
|
83
|
+
client.entities("Asset")
|
|
84
|
+
client.entities(:Assets)
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
Any not yet implemented call can be accessed through the connection: `client.assets.connection`
|
|
88
|
+
|
|
89
|
+
#### Entity
|
|
90
|
+
|
|
91
|
+
Returned entity will try to behave as nicely as possible.
|
|
92
|
+
|
|
93
|
+
An entity will always answer to:
|
|
94
|
+
|
|
95
|
+
- .type : the type of the entity
|
|
96
|
+
- .id : the id of the entity
|
|
97
|
+
- .relationships : a hash of relationships
|
|
98
|
+
- .links : a hash of links to other entities
|
|
99
|
+
- .attributes : An object answering to any available attributes
|
|
100
|
+
|
|
101
|
+
It will also answer to any method that is present in the attributes:
|
|
102
|
+
|
|
103
|
+
```ruby
|
|
104
|
+
assets = client.assets.all(fields: 'code')
|
|
105
|
+
assets.first.type # => "Asset"
|
|
106
|
+
assets.first.id # => 726
|
|
107
|
+
assets.first.attributes.code # => "Buck"
|
|
108
|
+
assets.first.code # => "Buck"
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
#### Get
|
|
112
|
+
|
|
113
|
+
##### all
|
|
114
|
+
|
|
115
|
+
The all call will return all possible entities.
|
|
116
|
+
|
|
117
|
+
```ruby
|
|
118
|
+
client.assets.all
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
##### fields
|
|
122
|
+
|
|
123
|
+
This attribute describe the wanted fields in the returned entity
|
|
124
|
+
|
|
125
|
+
Can be a string describing wanted fields: `'code'` or `'code,description'`
|
|
126
|
+
Or an array for better readability: `[:code, 'description']`
|
|
127
|
+
|
|
128
|
+
Example:
|
|
129
|
+
|
|
130
|
+
```ruby
|
|
131
|
+
client.assets.all(fields: [:code, :description])
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
##### sort
|
|
135
|
+
|
|
136
|
+
Describe how you want your entities to be sorted.
|
|
137
|
+
|
|
138
|
+
Can be either:
|
|
139
|
+
|
|
140
|
+
- A string: `'code'` or `'code,-description'` (the `-` asking for a descending order)
|
|
141
|
+
- An array for better readability: `[:code, '-description']`
|
|
142
|
+
- A hash for ease of use: `{code: 'asc', description: :desc}`
|
|
143
|
+
|
|
144
|
+
Example:
|
|
145
|
+
|
|
146
|
+
```ruby
|
|
147
|
+
client.assets.all(fields: [:code, :description], sort: {code: :asc, description: :desc})
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
##### filter
|
|
151
|
+
|
|
152
|
+
**Complex filters are not implemented yet**
|
|
153
|
+
|
|
154
|
+
For simple filters, the filter field is waiting for a hash.
|
|
155
|
+
|
|
156
|
+
Each value is:
|
|
157
|
+
|
|
158
|
+
- A string: then a `is` filter will be used
|
|
159
|
+
- An array: then a `in` filter will be used
|
|
160
|
+
|
|
161
|
+
Example:
|
|
162
|
+
|
|
163
|
+
```ruby
|
|
164
|
+
client.assets.all(fields: [:code, :description], filter: {code: ['Buck', :Darcy], description: 'I LOVE SG'})
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
##### page
|
|
168
|
+
|
|
169
|
+
You can ask for any page size or page number.
|
|
170
|
+
|
|
171
|
+
- `page`: set the page number.
|
|
172
|
+
- `page_size`: set the size of each page.
|
|
173
|
+
|
|
174
|
+
Any of the two can be omited. Their type should be a number but it'll work with a string
|
|
175
|
+
|
|
176
|
+
Example:
|
|
177
|
+
|
|
178
|
+
```ruby
|
|
179
|
+
client.assets.all(fields: [:code], page: 3, page_size: 10)
|
|
180
|
+
client.assets.all(fields: [:code], page: '3')
|
|
181
|
+
client.assets.all(fields: [:code], page_size: 10)
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
##### options
|
|
185
|
+
|
|
186
|
+
Special options can be added:
|
|
187
|
+
|
|
188
|
+
- retired: a flag telling if the returned entities should be retired or not
|
|
189
|
+
- include_archived_projects: a flag telling if the archived projets should be included int the search
|
|
190
|
+
|
|
191
|
+
Example:
|
|
192
|
+
|
|
193
|
+
```ruby
|
|
194
|
+
client.assets.all(fields: [:code], retired: true)
|
|
195
|
+
client.assets.all(fields: [:code], include_archived_projects: true)
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
#### Create
|
|
199
|
+
|
|
200
|
+
Not implemented yet
|
|
201
|
+
|
|
202
|
+
#### Update
|
|
203
|
+
|
|
204
|
+
Not implemented yet
|
|
205
|
+
|
|
206
|
+
#### Delete
|
|
207
|
+
|
|
208
|
+
Not implemented yet
|
|
209
|
+
|
|
210
|
+
### Non implemented calls
|
|
211
|
+
|
|
212
|
+
All calls which are not yet implemented can be done through the `connection` method. This method will still take care of the authentication for you.
|
|
213
|
+
|
|
214
|
+
```ruby
|
|
215
|
+
client = ShotgunApiRuby.new(…)
|
|
216
|
+
client.connection.get('/entity/assets') # => #<Faraday::Response:xxx @on_complete_callbacks=[], @env=#<Faraday::Env @method=:get @body="{\"data\":[{\"type\":\"Asset\",\"attributes\":{},\"relationships\":{},\"id\":726 …
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
## Development
|
|
220
|
+
|
|
221
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
|
222
|
+
|
|
223
|
+
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
|
224
|
+
|
|
225
|
+
Every commit/push is checked by overcommit.
|
|
226
|
+
|
|
227
|
+
## Contributing
|
|
228
|
+
|
|
229
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/shotgunsoftware/shotgun_api_ruby.
|
|
230
|
+
|
|
231
|
+
## License
|
|
232
|
+
|
|
233
|
+
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
data/Rakefile
ADDED
data/bin/console
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
require "bundler/setup"
|
|
5
|
+
require "shotgun_api_ruby"
|
|
6
|
+
|
|
7
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
|
8
|
+
# with your gem easier. You can also use a different console, if you like.
|
|
9
|
+
|
|
10
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
|
11
|
+
# require "pry"
|
|
12
|
+
# Pry.start
|
|
13
|
+
|
|
14
|
+
require "pry"
|
|
15
|
+
Pry.start(__FILE__)
|
data/bin/setup
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module ShotgunApiRuby
|
|
4
|
+
class Auth < Faraday::Middleware
|
|
5
|
+
module Validator
|
|
6
|
+
def self.valid?(auth)
|
|
7
|
+
(auth[:client_id] && auth[:client_secret]) ||
|
|
8
|
+
(auth[:password] && auth[:username]) ||
|
|
9
|
+
auth[:session_token] ||
|
|
10
|
+
auth[:refresh_token]
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def initialize(app = nil, options = {})
|
|
15
|
+
raise "missing auth" unless options[:auth]
|
|
16
|
+
raise "missing site_url" unless options[:site_url]
|
|
17
|
+
raise "Auth not valid" unless Validator.valid?(options[:auth])
|
|
18
|
+
|
|
19
|
+
super(app)
|
|
20
|
+
|
|
21
|
+
@site_url = options[:site_url]
|
|
22
|
+
@client_id = options[:auth][:client_id]
|
|
23
|
+
@client_secret = options[:auth][:client_secret]
|
|
24
|
+
@username = options[:auth][:username]
|
|
25
|
+
@password = options[:auth][:password]
|
|
26
|
+
@session_token = options[:auth][:session_token]
|
|
27
|
+
@refresh_token = options[:auth][:refresh_token]
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
attr_reader :client_id, :client_secret, :site_url, :username, :password, :session_token, :refresh_token
|
|
31
|
+
|
|
32
|
+
def auth_type
|
|
33
|
+
@auth_type ||=
|
|
34
|
+
begin
|
|
35
|
+
if client_id
|
|
36
|
+
'client_credentials'
|
|
37
|
+
elsif username
|
|
38
|
+
'password'
|
|
39
|
+
elsif session_token
|
|
40
|
+
'session_token'
|
|
41
|
+
elsif refresh_token
|
|
42
|
+
'refresh_token'
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def call(request_env)
|
|
48
|
+
request_env[:request_headers].merge!(std_headers)
|
|
49
|
+
|
|
50
|
+
@app.call(request_env)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
private
|
|
54
|
+
|
|
55
|
+
def auth_params
|
|
56
|
+
@auth_params ||=
|
|
57
|
+
begin
|
|
58
|
+
case auth_type
|
|
59
|
+
when 'client_credentials'
|
|
60
|
+
"client_id=#{client_id}&client_secret=#{client_secret}&grant_type=client_credentials"
|
|
61
|
+
when 'password'
|
|
62
|
+
"username=#{username}&password=#{password}&grant_type=password"
|
|
63
|
+
when 'session_token'
|
|
64
|
+
"session_token=#{session_token}&grant_type=session_token"
|
|
65
|
+
when 'refresh_token'
|
|
66
|
+
"refresh_token=#{refresh_token}&grant_type=refresh_token"
|
|
67
|
+
else
|
|
68
|
+
raise "Not a valid/implemented auth type"
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def auth_url
|
|
74
|
+
@auth_url ||= "#{site_url}/auth/access_token?#{auth_params}"
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def access_token
|
|
78
|
+
((@access_token && Time.now < @token_expiry) || sign_in) && @access_token
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def sign_in
|
|
82
|
+
resp =
|
|
83
|
+
Faraday.post(auth_url) do |req|
|
|
84
|
+
req.headers["Content-Type"] = 'application/x-www-form-urlencoded'
|
|
85
|
+
req.headers["Accept"] = "application/json"
|
|
86
|
+
end
|
|
87
|
+
resp_body = JSON.parse(resp.body)
|
|
88
|
+
|
|
89
|
+
raise "Can't login: #{resp_body['errors']}" if resp.status >= 300
|
|
90
|
+
|
|
91
|
+
@access_token = resp_body['access_token']
|
|
92
|
+
@token_expiry = Time.now + resp_body['expires_in']
|
|
93
|
+
@refresh_token = resp_body['refresh_token']
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def std_headers
|
|
97
|
+
{
|
|
98
|
+
"Accept" => "application/json",
|
|
99
|
+
"Authorization" => "Bearer #{access_token}",
|
|
100
|
+
}
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
end
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module ShotgunApiRuby
|
|
4
|
+
class Client
|
|
5
|
+
attr_reader :connection
|
|
6
|
+
|
|
7
|
+
def initialize(auth:, site_url: nil, shotgun_site: nil)
|
|
8
|
+
raise "No site given" unless site_url || shotgun_site
|
|
9
|
+
raise "auth param not valid" unless auth && Auth::Validator.valid?(auth)
|
|
10
|
+
|
|
11
|
+
site_url ||= "https://#{shotgun_site}.shotgunstudio.com/api/v1"
|
|
12
|
+
@connection =
|
|
13
|
+
Faraday.new(url: site_url) do |faraday|
|
|
14
|
+
faraday.use(ShotgunApiRuby::Auth, auth: auth, site_url: site_url)
|
|
15
|
+
faraday.adapter Faraday.default_adapter
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def entities(type)
|
|
20
|
+
public_send(type)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def respond_to_missing?(_name, _include_private = false)
|
|
24
|
+
true
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def method_missing(name, *args, &block)
|
|
28
|
+
if args.empty?
|
|
29
|
+
name = formated_name(name)
|
|
30
|
+
define_singleton_method(name) do
|
|
31
|
+
if entities_client = instance_variable_get("@#{name}")
|
|
32
|
+
entities_client
|
|
33
|
+
else
|
|
34
|
+
entities_client = entities_aux(name)
|
|
35
|
+
instance_variable_set("@#{name}", entities_client)
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
send(name)
|
|
39
|
+
else
|
|
40
|
+
super
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
private
|
|
45
|
+
|
|
46
|
+
def formated_name(name)
|
|
47
|
+
name.to_s.camelize.singularize
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def entities_aux(type)
|
|
51
|
+
type = formated_name(type)
|
|
52
|
+
@entity_caller = Entities.new(connection, type)
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module ShotgunApiRuby
|
|
4
|
+
class Entities
|
|
5
|
+
def initialize(connection, type)
|
|
6
|
+
@connection = connection.dup
|
|
7
|
+
@type = type
|
|
8
|
+
@connection.url_prefix = "#{@connection.url_prefix}/entity/#{type}"
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
attr_reader :connection, :type
|
|
12
|
+
|
|
13
|
+
def all(
|
|
14
|
+
fields: nil,
|
|
15
|
+
sort: nil,
|
|
16
|
+
filter: nil,
|
|
17
|
+
page: nil,
|
|
18
|
+
page_size: nil,
|
|
19
|
+
retired: nil,
|
|
20
|
+
include_archived_projects: nil
|
|
21
|
+
)
|
|
22
|
+
raise "Complex filters aren't supported yet" if filter && !filters_are_simple?(filter)
|
|
23
|
+
|
|
24
|
+
params = Params.new
|
|
25
|
+
|
|
26
|
+
params.add_fields(fields)
|
|
27
|
+
params.add_sort(sort)
|
|
28
|
+
params.add_filter(filter)
|
|
29
|
+
params.add_page(page, page_size)
|
|
30
|
+
params.add_options(retired, include_archived_projects)
|
|
31
|
+
|
|
32
|
+
resp = @connection.get('', params)
|
|
33
|
+
resp_body = JSON.parse(resp.body)
|
|
34
|
+
|
|
35
|
+
if resp.status >= 300
|
|
36
|
+
raise "Error while getting #{type}: #{resp_body['errors']}"
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
resp_body["data"].map do |entity|
|
|
40
|
+
Entity.new(
|
|
41
|
+
entity['type'],
|
|
42
|
+
OpenStruct.new(entity['attributes']),
|
|
43
|
+
entity['relationships'],
|
|
44
|
+
entity['id'],
|
|
45
|
+
entity['links']
|
|
46
|
+
)
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
private
|
|
51
|
+
|
|
52
|
+
def filters_are_simple?(filters)
|
|
53
|
+
filters.values.all? do |filter_val|
|
|
54
|
+
(filter_val.is_a?(String) || filter_val.is_a?(Symbol)) ||
|
|
55
|
+
(filter_val.is_a?(Array) && filter_val.all?{ |val| val.is_a?(String) || val.is_a?(Symbol) })
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
class Params < Hash
|
|
60
|
+
def add_sort(sort)
|
|
61
|
+
return unless sort
|
|
62
|
+
|
|
63
|
+
self[:sort] =
|
|
64
|
+
if sort.is_a?(Hash)
|
|
65
|
+
sort.map{ |field, direction| "#{direction.to_s.start_with?('desc') ? '-' : ''}#{field}" }.join(',')
|
|
66
|
+
else
|
|
67
|
+
[sort].flatten.join(',')
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def add_page(page, page_size)
|
|
72
|
+
return unless page || page_size
|
|
73
|
+
|
|
74
|
+
page = page.to_i if page
|
|
75
|
+
page_size = page_size.to_i if page_size
|
|
76
|
+
|
|
77
|
+
page = 1 if page && page < 1
|
|
78
|
+
self[:page] = { size: page_size || 20, number: page || 1 }
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def add_fields(fields)
|
|
82
|
+
self[:fields] = [fields].flatten.join(',') if fields
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def add_options(return_only, include_archived_projects)
|
|
86
|
+
return if return_only.nil? && include_archived_projects.nil?
|
|
87
|
+
|
|
88
|
+
self[:options] = {
|
|
89
|
+
return_only: return_only ? 'retired' : 'active',
|
|
90
|
+
include_archived_projects: !!include_archived_projects,
|
|
91
|
+
}
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def add_filter(filters)
|
|
95
|
+
return unless filters
|
|
96
|
+
|
|
97
|
+
# filter
|
|
98
|
+
self['filter'] = filters.map do |field, value|
|
|
99
|
+
[
|
|
100
|
+
field.to_s,
|
|
101
|
+
value.is_a?(Array) ? value.map(&:to_s).join(',') : value.to_s,
|
|
102
|
+
]
|
|
103
|
+
end.to_h
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module ShotgunApiRuby
|
|
4
|
+
Entity =
|
|
5
|
+
Struct.new(:type, :attributes, :relationships, :id, :links) do
|
|
6
|
+
def method_missing(name, *args, &block)
|
|
7
|
+
if attributes.respond_to?(name)
|
|
8
|
+
define_singleton_method(name) do
|
|
9
|
+
attributes.public_send(name)
|
|
10
|
+
end
|
|
11
|
+
public_send(name)
|
|
12
|
+
else
|
|
13
|
+
super
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def respond_to_missing?(name, _private_methods = false)
|
|
18
|
+
attributes.respond_to?(name) || super
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# zeitwerk will take care of auto loading files based on their name :)
|
|
4
|
+
require "zeitwerk"
|
|
5
|
+
require 'active_support/core_ext/string/inflections'
|
|
6
|
+
require 'ostruct'
|
|
7
|
+
require "faraday"
|
|
8
|
+
require 'json'
|
|
9
|
+
|
|
10
|
+
loader = Zeitwerk::Loader.for_gem
|
|
11
|
+
loader.setup # ready!
|
|
12
|
+
|
|
13
|
+
module ShotgunApiRuby
|
|
14
|
+
def self.new(**args)
|
|
15
|
+
Client.new(**args)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
lib = File.expand_path("lib", __dir__)
|
|
4
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
5
|
+
require "shotgun_api_ruby/version"
|
|
6
|
+
|
|
7
|
+
Gem::Specification.new do |spec|
|
|
8
|
+
spec.name = "shotgun_api_ruby"
|
|
9
|
+
spec.version = ShotgunApiRuby::VERSION
|
|
10
|
+
spec.authors = ["Denis <Zaratan> Pasin"]
|
|
11
|
+
spec.email = ["denis.pasin@autodesk.com"]
|
|
12
|
+
|
|
13
|
+
spec.summary = 'Gem to interact easily with Shotgun REST api.'
|
|
14
|
+
spec.description = "Gem to facilitate the interaction with Shotgun's REST API."
|
|
15
|
+
spec.homepage = "https://github.com/shotgunsoftware/shotgun_api_ruby"
|
|
16
|
+
spec.license = "MIT"
|
|
17
|
+
|
|
18
|
+
spec.metadata["homepage_uri"] = spec.homepage
|
|
19
|
+
spec.metadata["source_code_uri"] = "https://github.com/shotgunsoftware/shotgun_api_ruby"
|
|
20
|
+
# spec.metadata["changelog_uri"] = "http://none.yet.com"
|
|
21
|
+
|
|
22
|
+
# Specify which files should be added to the gem when it is released.
|
|
23
|
+
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
|
24
|
+
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
|
25
|
+
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
|
26
|
+
end
|
|
27
|
+
spec.bindir = "exe"
|
|
28
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
|
29
|
+
spec.require_paths = ["lib"]
|
|
30
|
+
|
|
31
|
+
spec.add_dependency "activesupport"
|
|
32
|
+
spec.add_dependency "faraday", "~> 0.17"
|
|
33
|
+
spec.add_dependency "zeitwerk", "~> 2.2"
|
|
34
|
+
|
|
35
|
+
spec.add_development_dependency "bundler", "~> 2.0"
|
|
36
|
+
spec.add_development_dependency "bundler-audit"
|
|
37
|
+
spec.add_development_dependency "overcommit"
|
|
38
|
+
spec.add_development_dependency "pry"
|
|
39
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
|
40
|
+
spec.add_development_dependency "rspec", "~> 3.0"
|
|
41
|
+
spec.add_development_dependency "rubocop", "~> 0.75"
|
|
42
|
+
spec.add_development_dependency "rubocop-performance", "~> 1.5"
|
|
43
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: shotgun_api_ruby
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.0.1
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Denis <Zaratan> Pasin
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: exe
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2019-10-28 00:00:00.000000000 Z
|
|
12
|
+
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: activesupport
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - ">="
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: '0'
|
|
20
|
+
type: :runtime
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - ">="
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: '0'
|
|
27
|
+
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: faraday
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - "~>"
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: '0.17'
|
|
34
|
+
type: :runtime
|
|
35
|
+
prerelease: false
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - "~>"
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: '0.17'
|
|
41
|
+
- !ruby/object:Gem::Dependency
|
|
42
|
+
name: zeitwerk
|
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
|
44
|
+
requirements:
|
|
45
|
+
- - "~>"
|
|
46
|
+
- !ruby/object:Gem::Version
|
|
47
|
+
version: '2.2'
|
|
48
|
+
type: :runtime
|
|
49
|
+
prerelease: false
|
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
+
requirements:
|
|
52
|
+
- - "~>"
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
54
|
+
version: '2.2'
|
|
55
|
+
- !ruby/object:Gem::Dependency
|
|
56
|
+
name: bundler
|
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
|
58
|
+
requirements:
|
|
59
|
+
- - "~>"
|
|
60
|
+
- !ruby/object:Gem::Version
|
|
61
|
+
version: '2.0'
|
|
62
|
+
type: :development
|
|
63
|
+
prerelease: false
|
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
+
requirements:
|
|
66
|
+
- - "~>"
|
|
67
|
+
- !ruby/object:Gem::Version
|
|
68
|
+
version: '2.0'
|
|
69
|
+
- !ruby/object:Gem::Dependency
|
|
70
|
+
name: bundler-audit
|
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
|
72
|
+
requirements:
|
|
73
|
+
- - ">="
|
|
74
|
+
- !ruby/object:Gem::Version
|
|
75
|
+
version: '0'
|
|
76
|
+
type: :development
|
|
77
|
+
prerelease: false
|
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
79
|
+
requirements:
|
|
80
|
+
- - ">="
|
|
81
|
+
- !ruby/object:Gem::Version
|
|
82
|
+
version: '0'
|
|
83
|
+
- !ruby/object:Gem::Dependency
|
|
84
|
+
name: overcommit
|
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
|
86
|
+
requirements:
|
|
87
|
+
- - ">="
|
|
88
|
+
- !ruby/object:Gem::Version
|
|
89
|
+
version: '0'
|
|
90
|
+
type: :development
|
|
91
|
+
prerelease: false
|
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
93
|
+
requirements:
|
|
94
|
+
- - ">="
|
|
95
|
+
- !ruby/object:Gem::Version
|
|
96
|
+
version: '0'
|
|
97
|
+
- !ruby/object:Gem::Dependency
|
|
98
|
+
name: pry
|
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
|
100
|
+
requirements:
|
|
101
|
+
- - ">="
|
|
102
|
+
- !ruby/object:Gem::Version
|
|
103
|
+
version: '0'
|
|
104
|
+
type: :development
|
|
105
|
+
prerelease: false
|
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
107
|
+
requirements:
|
|
108
|
+
- - ">="
|
|
109
|
+
- !ruby/object:Gem::Version
|
|
110
|
+
version: '0'
|
|
111
|
+
- !ruby/object:Gem::Dependency
|
|
112
|
+
name: rake
|
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
|
114
|
+
requirements:
|
|
115
|
+
- - "~>"
|
|
116
|
+
- !ruby/object:Gem::Version
|
|
117
|
+
version: '10.0'
|
|
118
|
+
type: :development
|
|
119
|
+
prerelease: false
|
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
121
|
+
requirements:
|
|
122
|
+
- - "~>"
|
|
123
|
+
- !ruby/object:Gem::Version
|
|
124
|
+
version: '10.0'
|
|
125
|
+
- !ruby/object:Gem::Dependency
|
|
126
|
+
name: rspec
|
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
|
128
|
+
requirements:
|
|
129
|
+
- - "~>"
|
|
130
|
+
- !ruby/object:Gem::Version
|
|
131
|
+
version: '3.0'
|
|
132
|
+
type: :development
|
|
133
|
+
prerelease: false
|
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
135
|
+
requirements:
|
|
136
|
+
- - "~>"
|
|
137
|
+
- !ruby/object:Gem::Version
|
|
138
|
+
version: '3.0'
|
|
139
|
+
- !ruby/object:Gem::Dependency
|
|
140
|
+
name: rubocop
|
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
|
142
|
+
requirements:
|
|
143
|
+
- - "~>"
|
|
144
|
+
- !ruby/object:Gem::Version
|
|
145
|
+
version: '0.75'
|
|
146
|
+
type: :development
|
|
147
|
+
prerelease: false
|
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
149
|
+
requirements:
|
|
150
|
+
- - "~>"
|
|
151
|
+
- !ruby/object:Gem::Version
|
|
152
|
+
version: '0.75'
|
|
153
|
+
- !ruby/object:Gem::Dependency
|
|
154
|
+
name: rubocop-performance
|
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
|
156
|
+
requirements:
|
|
157
|
+
- - "~>"
|
|
158
|
+
- !ruby/object:Gem::Version
|
|
159
|
+
version: '1.5'
|
|
160
|
+
type: :development
|
|
161
|
+
prerelease: false
|
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
163
|
+
requirements:
|
|
164
|
+
- - "~>"
|
|
165
|
+
- !ruby/object:Gem::Version
|
|
166
|
+
version: '1.5'
|
|
167
|
+
description: Gem to facilitate the interaction with Shotgun's REST API.
|
|
168
|
+
email:
|
|
169
|
+
- denis.pasin@autodesk.com
|
|
170
|
+
executables: []
|
|
171
|
+
extensions: []
|
|
172
|
+
extra_rdoc_files: []
|
|
173
|
+
files:
|
|
174
|
+
- ".gitignore"
|
|
175
|
+
- ".overcommit.yml"
|
|
176
|
+
- ".rspec"
|
|
177
|
+
- ".rubocop-http---relaxed-ruby-style-rubocop-yml"
|
|
178
|
+
- ".rubocop.yml"
|
|
179
|
+
- ".ruby-gemset"
|
|
180
|
+
- ".ruby-version"
|
|
181
|
+
- ".travis.yml"
|
|
182
|
+
- Gemfile
|
|
183
|
+
- Gemfile.lock
|
|
184
|
+
- LICENSE.txt
|
|
185
|
+
- README.md
|
|
186
|
+
- Rakefile
|
|
187
|
+
- bin/console
|
|
188
|
+
- bin/setup
|
|
189
|
+
- lib/shotgun_api_ruby.rb
|
|
190
|
+
- lib/shotgun_api_ruby/auth.rb
|
|
191
|
+
- lib/shotgun_api_ruby/client.rb
|
|
192
|
+
- lib/shotgun_api_ruby/entities.rb
|
|
193
|
+
- lib/shotgun_api_ruby/entity.rb
|
|
194
|
+
- lib/shotgun_api_ruby/version.rb
|
|
195
|
+
- shotgun_api_ruby.gemspec
|
|
196
|
+
homepage: https://github.com/shotgunsoftware/shotgun_api_ruby
|
|
197
|
+
licenses:
|
|
198
|
+
- MIT
|
|
199
|
+
metadata:
|
|
200
|
+
homepage_uri: https://github.com/shotgunsoftware/shotgun_api_ruby
|
|
201
|
+
source_code_uri: https://github.com/shotgunsoftware/shotgun_api_ruby
|
|
202
|
+
post_install_message:
|
|
203
|
+
rdoc_options: []
|
|
204
|
+
require_paths:
|
|
205
|
+
- lib
|
|
206
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
207
|
+
requirements:
|
|
208
|
+
- - ">="
|
|
209
|
+
- !ruby/object:Gem::Version
|
|
210
|
+
version: '0'
|
|
211
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
212
|
+
requirements:
|
|
213
|
+
- - ">="
|
|
214
|
+
- !ruby/object:Gem::Version
|
|
215
|
+
version: '0'
|
|
216
|
+
requirements: []
|
|
217
|
+
rubygems_version: 3.0.3
|
|
218
|
+
signing_key:
|
|
219
|
+
specification_version: 4
|
|
220
|
+
summary: Gem to interact easily with Shotgun REST api.
|
|
221
|
+
test_files: []
|