trailer_vote-api 0.8.4 → 0.9.0
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 +5 -5
- data/.gitignore +13 -13
- data/.rubocop.yml +29 -29
- data/CHANGELOG.md +56 -56
- data/Gemfile +6 -6
- data/Gemfile.lock +10 -11
- data/README.md +188 -188
- data/Rakefile +12 -12
- data/bin/console +15 -15
- data/bin/setup +8 -8
- data/lib/trailer_vote/api.rb +43 -43
- data/lib/trailer_vote/api/autoload.rb +24 -22
- data/lib/trailer_vote/api/composable/common.rb +91 -91
- data/lib/trailer_vote/api/composable/get.rb +66 -66
- data/lib/trailer_vote/api/configuration.rb +71 -71
- data/lib/trailer_vote/api/errors.rb +115 -115
- data/lib/trailer_vote/api/fallback_content_types.rb +50 -50
- data/lib/trailer_vote/api/issue.rb +31 -31
- data/lib/trailer_vote/api/issue/create.rb +72 -72
- data/lib/trailer_vote/api/issue/find.rb +42 -42
- data/lib/trailer_vote/api/links.rb +54 -54
- data/lib/trailer_vote/api/place.rb +24 -24
- data/lib/trailer_vote/api/place/children.rb +33 -0
- data/lib/trailer_vote/api/place/children/urls.rb +67 -0
- data/lib/trailer_vote/api/place/create.rb +83 -83
- data/lib/trailer_vote/api/place/find.rb +60 -59
- data/lib/trailer_vote/api/product.rb +33 -33
- data/lib/trailer_vote/api/product/create.rb +63 -63
- data/lib/trailer_vote/api/product/find.rb +55 -55
- data/lib/trailer_vote/api/product/image.rb +38 -38
- data/lib/trailer_vote/api/product/image/create.rb +83 -83
- data/lib/trailer_vote/api/product/image/find.rb +54 -54
- data/lib/trailer_vote/api/product/image/urls.rb +66 -66
- data/lib/trailer_vote/api/product/lookup.rb +97 -97
- data/lib/trailer_vote/api/product/place.rb +40 -40
- data/lib/trailer_vote/api/product/place/link.rb +75 -75
- data/lib/trailer_vote/api/product/update.rb +80 -80
- data/lib/trailer_vote/api/product/video.rb +38 -38
- data/lib/trailer_vote/api/product/video/create.rb +80 -80
- data/lib/trailer_vote/api/product/video/find.rb +56 -56
- data/lib/trailer_vote/api/product/video/urls.rb +66 -66
- data/lib/trailer_vote/api/type_registry.rb +99 -99
- data/lib/trailer_vote/api/version.rb +7 -7
- data/trailer_vote-api.gemspec +45 -45
- metadata +7 -6
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'trailer_vote/api/place'
|
4
|
+
require 'trailer_vote/api/place/find'
|
5
|
+
|
6
|
+
module TrailerVote
|
7
|
+
module Api
|
8
|
+
class Product
|
9
|
+
class Find
|
10
|
+
# @return [TrailerVote::Api::Product::Children] api to deal with a place's children
|
11
|
+
def children
|
12
|
+
Children.new(configuration: configuration, place: self)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
class Children
|
17
|
+
def initialize(configuration:, place: nil)
|
18
|
+
self.configuration = configuration
|
19
|
+
self.place = place
|
20
|
+
end
|
21
|
+
|
22
|
+
# @return [TrailerVote::Api::Product::Find] api to deal with a found place
|
23
|
+
def back
|
24
|
+
place
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
attr_accessor :configuration, :place
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'trailer_vote/api/composable/get'
|
4
|
+
require 'trailer_vote/api/place'
|
5
|
+
|
6
|
+
module TrailerVote
|
7
|
+
module Api
|
8
|
+
class Place
|
9
|
+
class Children
|
10
|
+
|
11
|
+
# @return [TrailerVote::Api::Place::Children::Urls] the api to get the children urls for the current place
|
12
|
+
def urls
|
13
|
+
Urls.new(configuration: configuration, place: place)
|
14
|
+
end
|
15
|
+
|
16
|
+
class Urls
|
17
|
+
include Composable::Get
|
18
|
+
|
19
|
+
SUCCESS = MediaTypes::Place.to_constructable.version(3).view('index')
|
20
|
+
FAILURE = MediaTypes::Errors.to_constructable.version(1)
|
21
|
+
|
22
|
+
ACCEPT = [SUCCESS.to_s, FAILURE.to_s(0.1)].join(', ').freeze
|
23
|
+
|
24
|
+
def initialize(configuration:, place:, result: nil)
|
25
|
+
self.configuration = configuration
|
26
|
+
self.place = place
|
27
|
+
self.result = result
|
28
|
+
end
|
29
|
+
|
30
|
+
# @return [TrailerVote::Api::Place::Children] the api to deal with a place's children
|
31
|
+
def back
|
32
|
+
place.children
|
33
|
+
end
|
34
|
+
|
35
|
+
def call(url: resolve_url)
|
36
|
+
return self if ok? || !url
|
37
|
+
|
38
|
+
guard_network_errors do
|
39
|
+
branch(resolve_client.headers(Headers::ACCEPT => ACCEPT).get(url))
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def data
|
44
|
+
to_h[:places]
|
45
|
+
end
|
46
|
+
|
47
|
+
private
|
48
|
+
|
49
|
+
attr_accessor :place
|
50
|
+
|
51
|
+
def ok?
|
52
|
+
result&.status&.ok?
|
53
|
+
end
|
54
|
+
|
55
|
+
def resolve_url
|
56
|
+
place.links.children
|
57
|
+
end
|
58
|
+
|
59
|
+
def redirect(result)
|
60
|
+
redirect_klazz.new(configuration: configuration, place: place, result: result)
|
61
|
+
.call(url: redirected_url(result))
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -1,83 +1,83 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'trailer_vote/api/composable/common'
|
4
|
-
require 'trailer_vote/api/place'
|
5
|
-
require 'trailer_vote/api/place/find'
|
6
|
-
|
7
|
-
module TrailerVote
|
8
|
-
module Api
|
9
|
-
class Place
|
10
|
-
class Find
|
11
|
-
|
12
|
-
# @return [TrailerVote::Api::Place::Create] the api to create a child place
|
13
|
-
def create
|
14
|
-
Create.new(configuration: configuration, place: self)
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
class Create
|
19
|
-
include Composable::Common
|
20
|
-
|
21
|
-
CONTENT = MediaTypes::Place.to_constructable.version(2).view('create')
|
22
|
-
SUCCESS = MediaTypes::Place.to_constructable.version(2)
|
23
|
-
FAILURE = MediaTypes::Errors.to_constructable.version(1)
|
24
|
-
|
25
|
-
ACCEPT = [SUCCESS.to_s, FAILURE.to_s(0.1)].join(', ').freeze
|
26
|
-
|
27
|
-
# @private
|
28
|
-
def initialize(configuration:, place:)
|
29
|
-
self.configuration = configuration
|
30
|
-
self.place = place
|
31
|
-
end
|
32
|
-
|
33
|
-
# @return [TrailerVote::Api::Place::Find] the found place
|
34
|
-
def back
|
35
|
-
place
|
36
|
-
end
|
37
|
-
|
38
|
-
# Create a place
|
39
|
-
#
|
40
|
-
# @see https://www.rubydoc.info/gems/trailer_vote-media_types/TrailerVote/MediaTypes/Place TrailerVote::MediaTypes::Place
|
41
|
-
#
|
42
|
-
# @param [String, Hash] data the data conform to the Place media type
|
43
|
-
# @param [String] url (#resolve_url result) the url to post to
|
44
|
-
#
|
45
|
-
# @return [TrailerVote::Api::Place::Find]
|
46
|
-
def call(data:, url: resolve_url)
|
47
|
-
guard_network_errors do
|
48
|
-
body = encode(data)
|
49
|
-
branch(
|
50
|
-
resolve_client.headers(
|
51
|
-
Headers::ACCEPT => ACCEPT,
|
52
|
-
Headers::CONTENT_TYPE => "#{CONTENT}; charset=#{body.encoding.name}"
|
53
|
-
).post(url, body: body),
|
54
|
-
data: data
|
55
|
-
)
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
private
|
60
|
-
|
61
|
-
attr_accessor :place
|
62
|
-
|
63
|
-
def resolve_url
|
64
|
-
place.links.self
|
65
|
-
end
|
66
|
-
|
67
|
-
def encode(data)
|
68
|
-
TrailerVote::Api.encode(CONTENT, place: data)
|
69
|
-
end
|
70
|
-
|
71
|
-
def forward(result, data:)
|
72
|
-
return unless [307, 308].include?(result.status)
|
73
|
-
forward_klazz.new(configuration: configuration, place: place)
|
74
|
-
.call(data: data, url: redirected_url(result))
|
75
|
-
end
|
76
|
-
|
77
|
-
def redirect_klazz
|
78
|
-
Find
|
79
|
-
end
|
80
|
-
end
|
81
|
-
end
|
82
|
-
end
|
83
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'trailer_vote/api/composable/common'
|
4
|
+
require 'trailer_vote/api/place'
|
5
|
+
require 'trailer_vote/api/place/find'
|
6
|
+
|
7
|
+
module TrailerVote
|
8
|
+
module Api
|
9
|
+
class Place
|
10
|
+
class Find
|
11
|
+
|
12
|
+
# @return [TrailerVote::Api::Place::Create] the api to create a child place
|
13
|
+
def create
|
14
|
+
Create.new(configuration: configuration, place: self)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
class Create
|
19
|
+
include Composable::Common
|
20
|
+
|
21
|
+
CONTENT = MediaTypes::Place.to_constructable.version(2).view('create')
|
22
|
+
SUCCESS = MediaTypes::Place.to_constructable.version(2)
|
23
|
+
FAILURE = MediaTypes::Errors.to_constructable.version(1)
|
24
|
+
|
25
|
+
ACCEPT = [SUCCESS.to_s, FAILURE.to_s(0.1)].join(', ').freeze
|
26
|
+
|
27
|
+
# @private
|
28
|
+
def initialize(configuration:, place:)
|
29
|
+
self.configuration = configuration
|
30
|
+
self.place = place
|
31
|
+
end
|
32
|
+
|
33
|
+
# @return [TrailerVote::Api::Place::Find] the found place
|
34
|
+
def back
|
35
|
+
place
|
36
|
+
end
|
37
|
+
|
38
|
+
# Create a place
|
39
|
+
#
|
40
|
+
# @see https://www.rubydoc.info/gems/trailer_vote-media_types/TrailerVote/MediaTypes/Place TrailerVote::MediaTypes::Place
|
41
|
+
#
|
42
|
+
# @param [String, Hash] data the data conform to the Place media type
|
43
|
+
# @param [String] url (#resolve_url result) the url to post to
|
44
|
+
#
|
45
|
+
# @return [TrailerVote::Api::Place::Find]
|
46
|
+
def call(data:, url: resolve_url)
|
47
|
+
guard_network_errors do
|
48
|
+
body = encode(data)
|
49
|
+
branch(
|
50
|
+
resolve_client.headers(
|
51
|
+
Headers::ACCEPT => ACCEPT,
|
52
|
+
Headers::CONTENT_TYPE => "#{CONTENT}; charset=#{body.encoding.name}"
|
53
|
+
).post(url, body: body),
|
54
|
+
data: data
|
55
|
+
)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
private
|
60
|
+
|
61
|
+
attr_accessor :place
|
62
|
+
|
63
|
+
def resolve_url
|
64
|
+
place.links.self
|
65
|
+
end
|
66
|
+
|
67
|
+
def encode(data)
|
68
|
+
TrailerVote::Api.encode(CONTENT, place: data)
|
69
|
+
end
|
70
|
+
|
71
|
+
def forward(result, data:)
|
72
|
+
return unless [307, 308].include?(result.status)
|
73
|
+
forward_klazz.new(configuration: configuration, place: place)
|
74
|
+
.call(data: data, url: redirected_url(result))
|
75
|
+
end
|
76
|
+
|
77
|
+
def redirect_klazz
|
78
|
+
Find
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
@@ -1,59 +1,60 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'trailer_vote/api/composable/get'
|
4
|
-
require 'trailer_vote/api/place'
|
5
|
-
|
6
|
-
module TrailerVote
|
7
|
-
module Api
|
8
|
-
class Configuration
|
9
|
-
|
10
|
-
# @return [TrailerVote::Api::Place::Find] the root place attached to the credentials
|
11
|
-
def place
|
12
|
-
Place::Find.new(configuration: self)
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
class Place
|
17
|
-
class Find
|
18
|
-
include Composable::Get
|
19
|
-
|
20
|
-
SUCCESS = MediaTypes::Place.to_constructable.version(
|
21
|
-
FAILURE = MediaTypes::Errors.to_constructable.version(1)
|
22
|
-
|
23
|
-
ACCEPT = [SUCCESS.to_s, FAILURE.to_s(0.1)].join(', ').freeze
|
24
|
-
|
25
|
-
def initialize(configuration:, result: nil)
|
26
|
-
self.configuration = configuration
|
27
|
-
self.result = result
|
28
|
-
end
|
29
|
-
|
30
|
-
# @return [TrailerVote::Api::Configuration, TrailerVote::Api::Place::Create]
|
31
|
-
def back
|
32
|
-
backtrack = result
|
33
|
-
backtrack = result.back while backtrack&.is_a?(self.class)
|
34
|
-
backtrack || configuration
|
35
|
-
end
|
36
|
-
|
37
|
-
def call(url: resolve_url)
|
38
|
-
return self if ok? || !url
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'trailer_vote/api/composable/get'
|
4
|
+
require 'trailer_vote/api/place'
|
5
|
+
|
6
|
+
module TrailerVote
|
7
|
+
module Api
|
8
|
+
class Configuration
|
9
|
+
|
10
|
+
# @return [TrailerVote::Api::Place::Find] the root place attached to the credentials
|
11
|
+
def place
|
12
|
+
Place::Find.new(configuration: self)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
class Place
|
17
|
+
class Find
|
18
|
+
include Composable::Get
|
19
|
+
|
20
|
+
SUCCESS = MediaTypes::Place.to_constructable.version(3)
|
21
|
+
FAILURE = MediaTypes::Errors.to_constructable.version(1)
|
22
|
+
|
23
|
+
ACCEPT = [SUCCESS.to_s, FAILURE.to_s(0.1)].join(', ').freeze
|
24
|
+
|
25
|
+
def initialize(configuration:, result: nil)
|
26
|
+
self.configuration = configuration
|
27
|
+
self.result = result
|
28
|
+
end
|
29
|
+
|
30
|
+
# @return [TrailerVote::Api::Configuration, TrailerVote::Api::Place::Create]
|
31
|
+
def back
|
32
|
+
backtrack = result
|
33
|
+
backtrack = result.back while backtrack&.is_a?(self.class)
|
34
|
+
backtrack || configuration
|
35
|
+
end
|
36
|
+
|
37
|
+
def call(url: resolve_url)
|
38
|
+
return self if ok? || !url
|
39
|
+
|
40
|
+
guard_network_errors do
|
41
|
+
branch(resolve_client.headers(Headers::ACCEPT => ACCEPT).get(url))
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def resolve_url
|
46
|
+
configuration.links.place
|
47
|
+
end
|
48
|
+
|
49
|
+
def data
|
50
|
+
to_h[:place]
|
51
|
+
end
|
52
|
+
|
53
|
+
def parent
|
54
|
+
Find.new(configuration: configuration)
|
55
|
+
.call(url: links.parent)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -1,33 +1,33 @@
|
|
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::Product] api to deal with products
|
10
|
-
def product
|
11
|
-
Product.new(configuration: self)
|
12
|
-
end
|
13
|
-
|
14
|
-
alias products product
|
15
|
-
end
|
16
|
-
|
17
|
-
class Product
|
18
|
-
def initialize(configuration:)
|
19
|
-
self.configuration = configuration
|
20
|
-
end
|
21
|
-
|
22
|
-
def back
|
23
|
-
configuration
|
24
|
-
end
|
25
|
-
|
26
|
-
private
|
27
|
-
|
28
|
-
attr_accessor :configuration
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
TrailerVote::MediaTypes::Product.register
|
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::Product] api to deal with products
|
10
|
+
def product
|
11
|
+
Product.new(configuration: self)
|
12
|
+
end
|
13
|
+
|
14
|
+
alias products product
|
15
|
+
end
|
16
|
+
|
17
|
+
class Product
|
18
|
+
def initialize(configuration:)
|
19
|
+
self.configuration = configuration
|
20
|
+
end
|
21
|
+
|
22
|
+
def back
|
23
|
+
configuration
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
attr_accessor :configuration
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
TrailerVote::MediaTypes::Product.register
|