shotgun_api_ruby 0.0.7 → 0.1.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.
@@ -3,12 +3,17 @@
3
3
  module ShotgunApiRuby
4
4
  class Entities
5
5
  class Params < Hash
6
+ class TooComplexFiltersError < StandardError
7
+ end
8
+
6
9
  def add_sort(sort)
7
10
  return unless sort
8
11
 
9
12
  self[:sort] =
10
13
  if sort.is_a?(Hash)
11
- sort.map{ |field, direction| "#{direction.to_s.start_with?('desc') ? '-' : ''}#{field}" }.join(',')
14
+ sort.map do |field, direction|
15
+ "#{direction.to_s.start_with?('desc') ? '-' : ''}#{field}"
16
+ end.join(',')
12
17
  else
13
18
  [sort].flatten.join(',')
14
19
  end
@@ -26,11 +31,7 @@ module ShotgunApiRuby
26
31
 
27
32
  def add_fields(fields)
28
33
  self[:fields] =
29
- if fields
30
- [fields].flatten.join(',')
31
- else
32
- "*"
33
- end
34
+ fields && !fields.empty? ? [fields].flatten.join(',') : '*'
34
35
  end
35
36
 
36
37
  def add_options(return_only, include_archived_projects)
@@ -42,16 +43,50 @@ module ShotgunApiRuby
42
43
  }
43
44
  end
44
45
 
45
- def add_filter(filters)
46
+ def add_filter(filters, logical_operator = 'and')
46
47
  return unless filters
47
48
 
48
- # filter
49
- self['filter'] = translate_simple_filter_to_sg(filters)
49
+ self[:filter] =
50
+ if (self.class.filters_are_simple?(filters))
51
+ translate_simple_filters_to_sg(filters)
52
+ elsif filters.is_a? Hash
53
+ {
54
+ conditions:
55
+ filters[:conditions] || filters['conditions'] ||
56
+ translate_complex_filters_to_sg(filters),
57
+ logical_operator:
58
+ filters[:logical_operator] || filters['logical_operator'] ||
59
+ logical_operator,
60
+ }
61
+ else
62
+ { conditions: filters, logical_operator: logical_operator }
63
+ end
64
+ end
65
+
66
+ def self.filters_are_simple?(filters)
67
+ return false if filters.is_a? Array
68
+
69
+ if filters.is_a?(Hash) &&
70
+ (filters[:conditions] || filters['conditions'])
71
+ return false
72
+ end
73
+
74
+ filters.values.all? do |filter_val|
75
+ (
76
+ filter_val.is_a?(Integer) || filter_val.is_a?(String) ||
77
+ filter_val.is_a?(Symbol)
78
+ ) ||
79
+ (
80
+ filter_val.is_a?(Array) && filter_val.all? do |val|
81
+ val.is_a?(String) || val.is_a?(Symbol) || val.is_a?(Integer)
82
+ end
83
+ )
84
+ end
50
85
  end
51
86
 
52
87
  private
53
88
 
54
- def translate_simple_filter_to_sg(filters)
89
+ def translate_simple_filters_to_sg(filters)
55
90
  filters.map do |field, value|
56
91
  [
57
92
  field.to_s,
@@ -59,6 +94,44 @@ module ShotgunApiRuby
59
94
  ]
60
95
  end.to_h
61
96
  end
97
+
98
+ def translate_complex_filters_to_sg(filters)
99
+ # We don't know how to translate anything but hashes
100
+ return filters if !filters.is_a?(Hash)
101
+
102
+ filters
103
+ .each
104
+ .with_object([]) do |item, result|
105
+ field, value = item
106
+ case value
107
+ when String, Symbol, Integer, Float
108
+ result << [field.to_s, 'is', value]
109
+ when Hash
110
+ value.each do |subfield, subvalue|
111
+ sanitized_subfield =
112
+ if !subfield.to_s.include?('.')
113
+ "#{field.capitalize}.#{subfield}"
114
+ else
115
+ subfield
116
+ end
117
+ case subvalue
118
+ when String, Symbol, Integer, Float
119
+ result << ["#{field}.#{sanitized_subfield}", 'is', subvalue]
120
+ when Array
121
+ result << ["#{field}.#{sanitized_subfield}", 'in', subvalue]
122
+ else
123
+ raise TooComplexFiltersError,
124
+ 'This case is too complex to auto-translate. Please use shotgun query syntax.'
125
+ end
126
+ end
127
+ when Array
128
+ result << [field.to_s, 'in', value]
129
+ else
130
+ raise TooComplexFiltersError,
131
+ 'This case is too complex to auto-translate. Please use shotgun query syntax.'
132
+ end
133
+ end
134
+ end
62
135
  end
63
136
  end
64
137
  end
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ShotgunApiRuby
4
+ class Entities
5
+ class Schema
6
+ def initialize(connection, type, base_url_prefix)
7
+ @connection = connection.dup
8
+ @type = type
9
+ @connection.url_prefix = "#{base_url_prefix}/schema/#{type}"
10
+ end
11
+ attr_reader :type, :connection
12
+
13
+ def read
14
+ resp = @connection.get('')
15
+
16
+ if resp.status >= 300
17
+ raise "Error while read schema for #{type}: #{resp.body}"
18
+ end
19
+
20
+ resp_body = JSON.parse(resp.body)
21
+
22
+ OpenStruct.new(resp_body['data'].transform_values { |v| v['value'] })
23
+ end
24
+
25
+ def fields
26
+ resp = @connection.get('fields')
27
+ resp_body = JSON.parse(resp.body)
28
+
29
+ if resp.status >= 300
30
+ raise "Error while read schema fields for #{type}: #{resp.body}"
31
+ end
32
+
33
+ OpenStruct.new(
34
+ resp_body['data'].transform_values do |value|
35
+ OpenStruct.new(
36
+ value.transform_values { |attribute| attribute['value'] }.merge(
37
+ properties:
38
+ OpenStruct.new(
39
+ value['properties'].transform_values do |prop|
40
+ prop['value']
41
+ end,
42
+ ),
43
+ ),
44
+ )
45
+ end,
46
+ )
47
+ end
48
+ end
49
+ end
50
+ end
@@ -1,13 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ShotgunApiRuby
4
+ # Represent each entity returned by Shotgun
4
5
  Entity =
5
6
  Struct.new(:type, :attributes, :relationships, :id, :links) do
6
7
  def method_missing(name, *args, &block)
7
8
  if attributes.respond_to?(name)
8
- define_singleton_method(name) do
9
- attributes.public_send(name)
10
- end
9
+ define_singleton_method(name) { attributes.public_send(name) }
11
10
  public_send(name)
12
11
  else
13
12
  super
@@ -17,7 +17,7 @@ module ShotgunApiRuby
17
17
  raise "Error while getting server preferences: #{resp_body['errors']}"
18
18
  end
19
19
 
20
- data = resp_body["data"]
20
+ data = resp_body['data']
21
21
  OpenStruct.new(data)
22
22
  end
23
23
  end
@@ -16,7 +16,7 @@ module ShotgunApiRuby
16
16
  raise "Error while getting server infos: #{resp_body['errors']}"
17
17
  end
18
18
 
19
- data = resp_body["data"]
19
+ data = resp_body['data']
20
20
  OpenStruct.new(data)
21
21
  end
22
22
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ShotgunApiRuby
4
- VERSION = "0.0.7"
4
+ VERSION = '0.1.0.1'
5
5
  end
data/package.json ADDED
@@ -0,0 +1,12 @@
1
+ {
2
+ "name": "shotgun_api_ruby",
3
+ "version": "1.0.0",
4
+ "main": "index.js",
5
+ "repository": "git@github.com:shotgunsoftware/shotgun_api_ruby.git",
6
+ "author": "Denis <Zaratan> Pasin <zaratan@hey.com>",
7
+ "license": "MIT",
8
+ "devDependencies": {
9
+ "@prettier/plugin-ruby": "^1.3.0",
10
+ "prettier": "^2.2.1"
11
+ }
12
+ }
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
18
18
 
19
19
  spec.metadata["homepage_uri"] = spec.homepage
20
20
  spec.metadata["source_code_uri"] = "https://github.com/shotgunsoftware/shotgun_api_ruby"
21
- # spec.metadata["changelog_uri"] = "http://none.yet.com"
21
+ spec.metadata['changelog_uri'] = "https://github.com/shotgunsoftware/shotgun_api_ruby/blob/main/CHANGELOG.md"
22
22
 
23
23
  # Specify which files should be added to the gem when it is released.
24
24
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
@@ -26,8 +26,6 @@ Gem::Specification.new do |spec|
26
26
  Dir.chdir(File.expand_path(__dir__)) do
27
27
  `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
28
28
  end
29
- spec.bindir = "exe"
30
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
31
29
  spec.require_paths = ["lib"]
32
30
 
33
31
  spec.add_dependency "activesupport"
@@ -37,11 +35,20 @@ Gem::Specification.new do |spec|
37
35
  spec.add_development_dependency "bundler"
38
36
  spec.add_development_dependency "bundler-audit"
39
37
  spec.add_development_dependency "dotenv"
38
+ spec.add_development_dependency 'faker', '> 1.8'
39
+ spec.add_development_dependency 'guard-rspec', '> 4.7'
40
40
  spec.add_development_dependency "overcommit"
41
+ spec.add_development_dependency "prettier"
41
42
  spec.add_development_dependency "pry"
42
43
  spec.add_development_dependency "rake"
43
44
  spec.add_development_dependency "rspec", "~> 3.0"
45
+ spec.add_development_dependency 'rspec_in_context', '> 1'
44
46
  spec.add_development_dependency "rubocop"
47
+ spec.add_development_dependency 'rubocop-faker'
45
48
  spec.add_development_dependency "rubocop-performance"
49
+ spec.add_development_dependency 'simplecov', '> 0.16'
46
50
  spec.add_development_dependency "solargraph"
51
+ spec.add_development_dependency 'timecop'
52
+ spec.add_development_dependency 'vcr'
53
+ spec.add_development_dependency 'yard'
47
54
  end
data/yarn.lock ADDED
@@ -0,0 +1,15 @@
1
+ # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2
+ # yarn lockfile v1
3
+
4
+
5
+ "@prettier/plugin-ruby@^1.3.0":
6
+ version "1.5.5"
7
+ resolved "https://registry.yarnpkg.com/@prettier/plugin-ruby/-/plugin-ruby-1.5.5.tgz#9e206fc856a182a292fcfab9043f53c7a3d0af97"
8
+ integrity sha512-b387GdXU+LrnY+oaKWRUI5EnsUvrQ0G1jUSVPkvUTGzp/w+BB9/n4SICVPY3V9/wYsvWpAZq4LkE4FdBufXUtA==
9
+ dependencies:
10
+ prettier ">=1.10"
11
+
12
+ prettier@>=1.10, prettier@^2.2.1:
13
+ version "2.3.1"
14
+ resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.3.1.tgz#76903c3f8c4449bc9ac597acefa24dc5ad4cbea6"
15
+ integrity sha512-p+vNbgpLjif/+D+DwAZAbndtRrR0md0MwfmOVN9N+2RgyACMT+7tfaRnT+WDPkqnuVwleyuBIG2XBxKDme3hPA==
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shotgun_api_ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Denis <Zaratan> Pasin
8
8
  autorequire:
9
- bindir: exe
9
+ bindir: bin
10
10
  cert_chain: []
11
- date: 2020-12-16 00:00:00.000000000 Z
11
+ date: 2021-06-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -94,6 +94,34 @@ dependencies:
94
94
  - - ">="
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: faker
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">"
102
+ - !ruby/object:Gem::Version
103
+ version: '1.8'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">"
109
+ - !ruby/object:Gem::Version
110
+ version: '1.8'
111
+ - !ruby/object:Gem::Dependency
112
+ name: guard-rspec
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">"
116
+ - !ruby/object:Gem::Version
117
+ version: '4.7'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">"
123
+ - !ruby/object:Gem::Version
124
+ version: '4.7'
97
125
  - !ruby/object:Gem::Dependency
98
126
  name: overcommit
99
127
  requirement: !ruby/object:Gem::Requirement
@@ -108,6 +136,20 @@ dependencies:
108
136
  - - ">="
109
137
  - !ruby/object:Gem::Version
110
138
  version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: prettier
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
111
153
  - !ruby/object:Gem::Dependency
112
154
  name: pry
113
155
  requirement: !ruby/object:Gem::Requirement
@@ -150,6 +192,20 @@ dependencies:
150
192
  - - "~>"
151
193
  - !ruby/object:Gem::Version
152
194
  version: '3.0'
195
+ - !ruby/object:Gem::Dependency
196
+ name: rspec_in_context
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - ">"
200
+ - !ruby/object:Gem::Version
201
+ version: '1'
202
+ type: :development
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - ">"
207
+ - !ruby/object:Gem::Version
208
+ version: '1'
153
209
  - !ruby/object:Gem::Dependency
154
210
  name: rubocop
155
211
  requirement: !ruby/object:Gem::Requirement
@@ -164,6 +220,20 @@ dependencies:
164
220
  - - ">="
165
221
  - !ruby/object:Gem::Version
166
222
  version: '0'
223
+ - !ruby/object:Gem::Dependency
224
+ name: rubocop-faker
225
+ requirement: !ruby/object:Gem::Requirement
226
+ requirements:
227
+ - - ">="
228
+ - !ruby/object:Gem::Version
229
+ version: '0'
230
+ type: :development
231
+ prerelease: false
232
+ version_requirements: !ruby/object:Gem::Requirement
233
+ requirements:
234
+ - - ">="
235
+ - !ruby/object:Gem::Version
236
+ version: '0'
167
237
  - !ruby/object:Gem::Dependency
168
238
  name: rubocop-performance
169
239
  requirement: !ruby/object:Gem::Requirement
@@ -178,6 +248,20 @@ dependencies:
178
248
  - - ">="
179
249
  - !ruby/object:Gem::Version
180
250
  version: '0'
251
+ - !ruby/object:Gem::Dependency
252
+ name: simplecov
253
+ requirement: !ruby/object:Gem::Requirement
254
+ requirements:
255
+ - - ">"
256
+ - !ruby/object:Gem::Version
257
+ version: '0.16'
258
+ type: :development
259
+ prerelease: false
260
+ version_requirements: !ruby/object:Gem::Requirement
261
+ requirements:
262
+ - - ">"
263
+ - !ruby/object:Gem::Version
264
+ version: '0.16'
181
265
  - !ruby/object:Gem::Dependency
182
266
  name: solargraph
183
267
  requirement: !ruby/object:Gem::Requirement
@@ -192,6 +276,48 @@ dependencies:
192
276
  - - ">="
193
277
  - !ruby/object:Gem::Version
194
278
  version: '0'
279
+ - !ruby/object:Gem::Dependency
280
+ name: timecop
281
+ requirement: !ruby/object:Gem::Requirement
282
+ requirements:
283
+ - - ">="
284
+ - !ruby/object:Gem::Version
285
+ version: '0'
286
+ type: :development
287
+ prerelease: false
288
+ version_requirements: !ruby/object:Gem::Requirement
289
+ requirements:
290
+ - - ">="
291
+ - !ruby/object:Gem::Version
292
+ version: '0'
293
+ - !ruby/object:Gem::Dependency
294
+ name: vcr
295
+ requirement: !ruby/object:Gem::Requirement
296
+ requirements:
297
+ - - ">="
298
+ - !ruby/object:Gem::Version
299
+ version: '0'
300
+ type: :development
301
+ prerelease: false
302
+ version_requirements: !ruby/object:Gem::Requirement
303
+ requirements:
304
+ - - ">="
305
+ - !ruby/object:Gem::Version
306
+ version: '0'
307
+ - !ruby/object:Gem::Dependency
308
+ name: yard
309
+ requirement: !ruby/object:Gem::Requirement
310
+ requirements:
311
+ - - ">="
312
+ - !ruby/object:Gem::Version
313
+ version: '0'
314
+ type: :development
315
+ prerelease: false
316
+ version_requirements: !ruby/object:Gem::Requirement
317
+ requirements:
318
+ - - ">="
319
+ - !ruby/object:Gem::Version
320
+ version: '0'
195
321
  description: Gem to facilitate the interaction with Shotgun's REST API.
196
322
  email:
197
323
  - denis.pasin@autodesk.com
@@ -204,35 +330,43 @@ files:
204
330
  - ".github/workflows/verify_version_change.yml"
205
331
  - ".gitignore"
206
332
  - ".overcommit.yml"
333
+ - ".prettierrc.js"
207
334
  - ".rspec"
208
335
  - ".rubocop-http---relaxed-ruby-style-rubocop-yml"
209
336
  - ".rubocop.yml"
210
337
  - ".ruby-gemset"
211
338
  - ".ruby-version"
212
339
  - ".travis.yml"
340
+ - CHANGELOG.md
213
341
  - Gemfile
214
- - Gemfile.lock
342
+ - Guardfile
215
343
  - LICENSE.txt
216
344
  - README.md
217
345
  - Rakefile
218
346
  - bin/console
347
+ - bin/prettirun
348
+ - bin/ruborun
219
349
  - bin/setup
220
350
  - lib/shotgun_api_ruby.rb
221
351
  - lib/shotgun_api_ruby/auth.rb
222
352
  - lib/shotgun_api_ruby/client.rb
223
353
  - lib/shotgun_api_ruby/entities.rb
224
354
  - lib/shotgun_api_ruby/entities/params.rb
355
+ - lib/shotgun_api_ruby/entities/schema.rb
225
356
  - lib/shotgun_api_ruby/entity.rb
226
357
  - lib/shotgun_api_ruby/preferences.rb
227
358
  - lib/shotgun_api_ruby/server_info.rb
228
359
  - lib/shotgun_api_ruby/version.rb
360
+ - package.json
229
361
  - shotgun_api_ruby.gemspec
362
+ - yarn.lock
230
363
  homepage: https://github.com/shotgunsoftware/shotgun_api_ruby
231
364
  licenses:
232
365
  - MIT
233
366
  metadata:
234
367
  homepage_uri: https://github.com/shotgunsoftware/shotgun_api_ruby
235
368
  source_code_uri: https://github.com/shotgunsoftware/shotgun_api_ruby
369
+ changelog_uri: https://github.com/shotgunsoftware/shotgun_api_ruby/blob/main/CHANGELOG.md
236
370
  post_install_message:
237
371
  rdoc_options: []
238
372
  require_paths:
@@ -248,7 +382,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
248
382
  - !ruby/object:Gem::Version
249
383
  version: '0'
250
384
  requirements: []
251
- rubygems_version: 3.1.4
385
+ rubygems_version: 3.2.15
252
386
  signing_key:
253
387
  specification_version: 4
254
388
  summary: Gem to interact easily with Shotgun REST api.