trailer_vote-api 0.8.2 → 0.8.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c36cbd2a3291e9d71f60f52856c3b2ccfbd39953
4
- data.tar.gz: 454952b01ccb6acc926b4955da0069190462e836
3
+ metadata.gz: dd4ad9b6f52cdb85e1ccfda2c56f47483326b7af
4
+ data.tar.gz: 9647720f9c87abf3e54cc0e8c1682f1fec0b3eff
5
5
  SHA512:
6
- metadata.gz: 317ba976bffc5a1ff85254ea1babf3ec72517f83893ad76b23d32dc452bbb07cd373a40ae54937f41807113339fef487fb9cae9314f695649c662a8845924a19
7
- data.tar.gz: a44bce3cf05ecf0492c547503b0ad732559940040efc35ff783fc27da31ebccf7379810b1b2a6a270f395c7d56e2f0eb59a6f9fc651acb5682e0c8643dba8a6f
6
+ metadata.gz: ca335c29541ad3333016bdf76abfaee34a73819599e5ff825c55ef04cbeac59b66add6e3efed6300fa2c768fdbc6a8f9be81f88262375cf38b7320d26e625d30
7
+ data.tar.gz: 9e3fa02068a7d4e94c3d40e11d64f6d9b05052fc26bdacd9d362292ba30c2388133805baea0ac89db4a7a68d93a87518ea37adf524d5192e4d21a1ee1261a174
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ # 0.8.3
2
+
3
+ - Add `Issue` media create API
4
+
1
5
  # 0.8.2
2
6
 
3
7
  - Add a fallback if the `errors` is decoded correctly, but not the correct format.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- trailer_vote-api (0.8.2)
4
+ trailer_vote-api (0.8.3)
5
5
  http (>= 3.3.0, < 4.x)
6
6
  oj (>= 3.6, < 4.x)
7
7
  trailer_vote-media_types (>= 0.6.1, < 1)
@@ -39,7 +39,7 @@ GEM
39
39
  builder
40
40
  minitest (>= 5.0)
41
41
  ruby-progressbar
42
- oj (3.6.11)
42
+ oj (3.6.12)
43
43
  public_suffix (3.0.3)
44
44
  rake (10.5.0)
45
45
  ruby-progressbar (1.10.0)
@@ -49,10 +49,11 @@ GEM
49
49
  json (>= 1.8, < 3)
50
50
  simplecov-html (~> 0.10.0)
51
51
  simplecov-html (0.10.2)
52
- trailer_vote-media_types (0.6.3)
52
+ trailer_vote-media_types (0.8.0)
53
53
  media_types (>= 0.6.0, < 1)
54
54
  unf (0.1.4)
55
55
  unf_ext
56
+ unf_ext (0.0.7.5)
56
57
  unf_ext (0.0.7.5-x64-mingw32)
57
58
  webmock (3.4.2)
58
59
  addressable (>= 2.3.6)
@@ -60,6 +61,7 @@ GEM
60
61
  hashdiff
61
62
 
62
63
  PLATFORMS
64
+ ruby
63
65
  x64-mingw32
64
66
 
65
67
  DEPENDENCIES
data/README.md CHANGED
@@ -2,9 +2,10 @@
2
2
  [![Build Status](https://travis-ci.com/TrailerVote/trailervote-api-clients.svg?branch=master)](https://travis-ci.com/TrailerVote/trailervote-api-clients)
3
3
  [![Gem Version](https://badge.fury.io/rb/trailer_vote-api.svg)](https://badge.fury.io/rb/trailer_vote-api)
4
4
  [![Maintainability](https://api.codeclimate.com/v1/badges/da722ca43c5811db5926/maintainability)](https://codeclimate.com/github/TrailerVote/trailervote-api-clients/maintainability)
5
+ [![Depfu](https://badges.depfu.com/badges/abcb16e9c6a98f7ce7ce9f8379f8b2c7/overview.svg)](https://depfu.com/github/TrailerVote/trailervote-api-clients?project_id=5890)
5
6
 
6
7
  The TrailerVote Api gem is the official interface to communicate with the TrailerVote product service. It allows you to
7
- keep your code simple and not deal with the HTTP suite.
8
+ keep your code simple and not deal with the HTTP suite.
8
9
 
9
10
  ## Installation
10
11
 
@@ -36,7 +37,7 @@ configuration = TrailerVote::Api.configure(url: url, key: key, secret: secret)
36
37
  # => TrailerVote::Api::Configuration
37
38
  ```
38
39
 
39
- The TrailerVote API Client for Ruby uses a lazy chainable API and does **NOT** make any requests until it's absolutely necessary.
40
+ The TrailerVote API Client for Ruby uses a lazy chainable API and does **NOT** make any requests until it's absolutely necessary.
40
41
  It is recommended that you re-use the configuration instance, as well as other results, in order to reduce network requests.
41
42
 
42
43
  The common interface is:
@@ -52,7 +53,7 @@ Unless data is being posted, `#call` is not necessary:
52
53
  ```Ruby
53
54
  configuration = TrailerVote::Api.configure(url: url, key: key, secret: secret)
54
55
  configuration.links
55
- # => TrailerVote::Api::Links # Makes the HTTP call if necessary
56
+ # => TrailerVote::Api::Links # Makes the HTTP call if necessary
56
57
  ```
57
58
 
58
59
  In case of an error, a `TrailerVote::Api::Error` is raised, with subclasses defining what went wrong. If the API gives back an error (HTTP status `(400..599)`), the error is parsed and turned into a `ErrorsResponse < Error` error.
@@ -81,9 +82,9 @@ require 'trailer_vote/api/product/lookup'
81
82
 
82
83
  lookup = configuration.product.lookup
83
84
  # => TrailerVote::Api::Product::Lookup
84
-
85
+
85
86
  lookup.call(data: [{ authority: 'imdb', identifier: 'tt01010101' }, { authority: 'tmdb', identifier: '12345678' }])
86
- # => TrailerVote::Api::Product::Find
87
+ # => TrailerVote::Api::Product::Find
87
88
  ```
88
89
 
89
90
  ### `configuration.product.update`
@@ -98,7 +99,7 @@ require 'trailer_vote/api/product/update'
98
99
  lookup = configuration.product.lookup
99
100
  product = lookup.call(data: [{ authority: 'imdb', identifier: 'tt01010101' }])
100
101
  # => TrailerVote::Api::Product::Find
101
-
102
+
102
103
  current_product_data = product.data
103
104
  next_product_data = make_changes_to_product_data(current_product_data)
104
105
  product.update.call(data: next_product_data)
@@ -109,7 +110,7 @@ If the update call fails with a `409 Conflict` or `412 Precondition Failed`, it
109
110
 
110
111
  ### `configuration.product.create`
111
112
  Creating a product is similar to looking up a product. If successful, returns an actual `Product::Find`.
112
-
113
+
113
114
  The `data` argument is wrapped in `{ product: data }` and then needs to match `application/vnd.trailervote.product.v2.create+json`
114
115
 
115
116
  ```Ruby
@@ -123,7 +124,7 @@ configuration.product.create(data: { title: 'My product', ... })
123
124
  To attach an video to a product, you first need to find the product. This can be done by:
124
125
  - `configuration.product.create`: creating a new product
125
126
  - `configuration.product.lookup`: looking up an existing product
126
-
127
+
127
128
  Once you have it, the video operations are available on the result.
128
129
 
129
130
  The `data` argument is wrapped in `{ product_video: data }` and then needs to match `application/vnd.trailervote.product.video.v1.create+json`
@@ -134,7 +135,7 @@ require 'trailer_vote/api/product/video/create'
134
135
 
135
136
  product = configuration.product.lookup.call(data: [{ authority: 'imdb', identifier: 'tt01010101' }])
136
137
  # => TrailerVote::Api::Product::Find
137
-
138
+
138
139
  product.video.create(data: { source_url: '', ... })
139
140
  # => TrailerVote::Api::Product::Video::Find
140
141
  ```
@@ -148,7 +149,7 @@ Gets all the image urls for a product
148
149
  To attach an video to a product, you first need to find the product. This can be done by:
149
150
  - `configuration.product.create`: creating a new product
150
151
  - `configuration.product.lookup`: looking up an existing product
151
-
152
+
152
153
  Once you have it, the video operations are available on the result.
153
154
 
154
155
  The `data` argument is wrapped in `{ product_video: data }` and then needs to match `application/vnd.trailervote.product.video.v1.create+json`
@@ -159,7 +160,7 @@ require 'trailer_vote/api/product/video/create'
159
160
 
160
161
  product = configuration.product.lookup.call(data: [{ authority: 'imdb', identifier: 'tt01010101' }])
161
162
  # => TrailerVote::Api::Product::Find
162
-
163
+
163
164
  product.video.create(data: { source_url: '', ... })
164
165
  # => TrailerVote::Api::Product::Video::Find
165
166
  ```
@@ -179,7 +180,7 @@ also run `bin/console` for an interactive prompt that will allow you to experime
179
180
 
180
181
  To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the
181
182
  version number in `version.rb`, and then run `bundle update trailer_vote-api` in any repository that depends on
182
- this gem. If you have push rights, you may call `bundle exec rake release` to create a new git tag, push
183
+ this gem. If you have push rights, you may call `bundle exec rake release` to create a new git tag, push
183
184
  git commits and tags, and push the `.gem` file to the rubygems gem server.
184
185
 
185
186
  ## Contributing
@@ -2,6 +2,9 @@
2
2
 
3
3
  require 'trailer_vote/api'
4
4
 
5
+ require 'trailer_vote/api/issue'
6
+ require 'trailer_vote/api/issue/create'
7
+ require 'trailer_vote/api/issue/find'
5
8
  require 'trailer_vote/api/place'
6
9
  require 'trailer_vote/api/place/create'
7
10
  require 'trailer_vote/api/place/find'
@@ -0,0 +1,72 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'trailer_vote/api/composable/common'
4
+ require 'trailer_vote/api/issue'
5
+ require 'trailer_vote/api/issue/find'
6
+
7
+ module TrailerVote
8
+ module Api
9
+ class Issue
10
+
11
+ def create
12
+ Create.new(configuration: configuration)
13
+ end
14
+
15
+ class Create
16
+ include Composable::Common
17
+
18
+ CONTENT = MediaTypes::Issue.to_constructable.version(1).view('create')
19
+ SUCCESS = MediaTypes::Issue.to_constructable.version(1)
20
+ FAILURE = MediaTypes::Errors.to_constructable.version(1)
21
+
22
+ ACCEPT = [SUCCESS.to_s, FAILURE.to_s(0.1)].join(', ').freeze
23
+
24
+ # @private
25
+ def initialize(configuration:)
26
+ self.configuration = configuration
27
+ end
28
+
29
+ def back
30
+ configuration.issue
31
+ end
32
+
33
+ # Create an issue
34
+ #
35
+ # @see https://www.rubydoc.info/gems/trailer_vote-media_types/TrailerVote/MediaTypes/Issue TrailerVote::MediaTypes::Issue
36
+ #
37
+ # @param [String, Hash] data the data conform to the Issue media type
38
+ # @param [String] url (#resolve_url result) the url to post to
39
+ #
40
+ # @return [TrailerVote::Api::Issue]
41
+ def call(data:, url: resolve_url)
42
+ guard_network_errors do
43
+ body = encode(data)
44
+ branch(
45
+ resolve_client.headers(
46
+ Headers::ACCEPT => ACCEPT,
47
+ Headers::CONTENT_TYPE => "#{CONTENT}; charset=#{body.encoding.name}"
48
+ ).post(url, body: body),
49
+ data: data
50
+ )
51
+ end
52
+ end
53
+
54
+ private
55
+
56
+ attr_accessor :configuration
57
+
58
+ def resolve_url
59
+ configuration.links.issues
60
+ end
61
+
62
+ def encode(data)
63
+ TrailerVote::Api.encode(CONTENT, issue: data)
64
+ end
65
+
66
+ def redirect_klazz
67
+ Find
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'trailer_vote/api/composable/get'
4
+ require 'trailer_vote/api/issue'
5
+
6
+ module TrailerVote
7
+ module Api
8
+ class Issue
9
+ class Find
10
+ include Composable::Get
11
+
12
+ SUCCESS = MediaTypes::Issue.to_constructable.version(1)
13
+ FAILURE = MediaTypes::Errors.to_constructable.version(1)
14
+
15
+ ACCEPT = [SUCCESS.to_s, FAILURE.to_s(0.1)].join(', ').freeze
16
+
17
+ def initialize(configuration:, result: nil)
18
+ self.configuration = configuration
19
+ self.result = result
20
+ end
21
+
22
+ # @return [TrailerVote::Api::Configuration, TrailerVote::Api::Issue::Create]
23
+ def back
24
+ backtrack = result
25
+ backtrack = result.back while backtrack&.is_a?(self.class)
26
+ backtrack || configuration
27
+ end
28
+
29
+ def call(url: nil)
30
+ return self if ok? || !url
31
+ guard_network_errors do
32
+ branch(resolve_client.headers(Headers::ACCEPT => ACCEPT).get(url))
33
+ end
34
+ end
35
+
36
+ def data
37
+ to_h[:issue]
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'trailer_vote/media_types'
4
+ require 'trailer_vote/api/configuration'
5
+
6
+ module TrailerVote
7
+ module Api
8
+ class Configuration
9
+ # @return [TrailerVote::Api::Issue::Find] issues attached to the credentials
10
+ def issue
11
+ Issue.new(configuration: self)
12
+ end
13
+ end
14
+
15
+ class Issue
16
+ def initialize(configuration:)
17
+ self.configuration = configuration
18
+ end
19
+
20
+ def back
21
+ configuration
22
+ end
23
+
24
+ private
25
+
26
+ attr_accessor :configuration
27
+ end
28
+ end
29
+ end
30
+
31
+ TrailerVote::MediaTypes::Issue.register
@@ -2,6 +2,6 @@
2
2
 
3
3
  module TrailerVote
4
4
  module Api
5
- VERSION = '0.8.2'
5
+ VERSION = '0.8.3'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: trailer_vote-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.2
4
+ version: 0.8.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Derk-Jan Karrenbeld
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-10-08 00:00:00.000000000 Z
11
+ date: 2018-10-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: http
@@ -205,6 +205,9 @@ files:
205
205
  - lib/trailer_vote/api/configuration.rb
206
206
  - lib/trailer_vote/api/errors.rb
207
207
  - lib/trailer_vote/api/fallback_content_types.rb
208
+ - lib/trailer_vote/api/issue.rb
209
+ - lib/trailer_vote/api/issue/create.rb
210
+ - lib/trailer_vote/api/issue/find.rb
208
211
  - lib/trailer_vote/api/links.rb
209
212
  - lib/trailer_vote/api/place.rb
210
213
  - lib/trailer_vote/api/place/create.rb